| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- # Makefile for building MuJS libraries, shell, and pretty-printer.
- #
- # Useful targets are: release, install, uninstall.
- default: build/debug/mujs build/debug/mujs-pp
- CFLAGS = -std=c99 -pedantic -Wall -Wextra -Wno-unused-parameter
- OPTIM = -O3
- prefix = /usr/local
- bindir = $(prefix)/bin
- incdir = $(prefix)/include
- libdir = $(prefix)/lib
- ifeq ($(wildcard .git),.git)
- VERSION = $(shell git describe --tags --always)
- else
- VERSION = $(patsubst mujs-%,%,$(notdir $(CURDIR)))
- endif
- ifeq ($(shell uname),Darwin)
- SO = dylib
- else
- SO = so
- endif
- ifeq ($(shell uname),FreeBSD)
- CFLAGS += -I/usr/local/include -L/usr/local/lib
- endif
- HDRS = mujs.h jsi.h regexp.h utf.h astnames.h opnames.h
- ifneq ($(HAVE_READLINE),no)
- READLINE_CFLAGS = -DHAVE_READLINE
- READLINE_LIBS = -lreadline
- endif
- SRCS = \
- jsarray.c \
- jsboolean.c \
- jsbuiltin.c \
- jscompile.c \
- jsdate.c \
- jsdtoa.c \
- jserror.c \
- jsfunction.c \
- jsgc.c \
- jsintern.c \
- jslex.c \
- jsmath.c \
- jsnumber.c \
- jsobject.c \
- json.c \
- jsparse.c \
- jsproperty.c \
- jsregexp.c \
- jsrepr.c \
- jsrun.c \
- jsstate.c \
- jsstring.c \
- jsvalue.c \
- regexp.c \
- utf.c
- one.c:
- for F in $(SRCS); do echo "#include \"$$F\""; done > $@
- astnames.h: jsi.h
- grep -E '\<(AST|EXP|STM)_' jsi.h | sed 's/^[^A-Z]*\(AST_\)*/"/;s/,.*/",/' | tr A-Z a-z > $@
- opnames.h: jsi.h
- grep -E '\<OP_' jsi.h | sed 's/^[^A-Z]*OP_/"/;s/,.*/",/' | tr A-Z a-z > $@
- UnicodeData.txt:
- curl -s -o $@ https://www.unicode.org/Public/UCD/latest/ucd/UnicodeData.txt
- utfdata.h: genucd.py UnicodeData.txt
- python3 genucd.py UnicodeData.txt >$@
- build/sanitize/mujs: main.c one.c $(SRCS) $(HDRS)
- @mkdir -p $(@D)
- $(CC) $(CFLAGS) -g -fsanitize=address -fno-omit-frame-pointer -o $@ main.c one.c -lm $(READLINE_CFLAGS) $(READLINE_LIBS)
- build/debug/libmujs.$(SO): one.c $(SRCS) $(HDRS)
- @mkdir -p $(@D)
- $(CC) $(CFLAGS) -g -fPIC -shared -o $@ one.c -lm
- build/debug/libmujs.o: one.c $(SRCS) $(HDRS)
- @mkdir -p $(@D)
- $(CC) $(CFLAGS) -g -c -o $@ one.c
- build/debug/libmujs.a: build/debug/libmujs.o
- $(AR) cr $@ $^
- build/debug/mujs: main.c build/debug/libmujs.o
- $(CC) $(CFLAGS) -g -o $@ $^ -lm $(READLINE_CFLAGS) $(READLINE_LIBS)
- build/debug/mujs-pp: pp.c build/debug/libmujs.o
- $(CC) $(CFLAGS) -g -o $@ $^ -lm
- build/release/libmujs.$(SO): one.c $(SRCS) $(HDRS)
- @mkdir -p $(@D)
- $(CC) $(CFLAGS) $(OPTIM) -fPIC -shared -o $@ one.c -lm
- build/release/libmujs.o: one.c $(SRCS) $(HDRS)
- @mkdir -p $(@D)
- $(CC) $(CFLAGS) $(OPTIM) -c -o $@ one.c
- build/release/libmujs.a: build/release/libmujs.o
- $(AR) cr $@ $^
- build/release/mujs: main.c build/release/libmujs.o
- $(CC) $(CFLAGS) $(OPTIM) -o $@ $^ -lm $(READLINE_CFLAGS) $(READLINE_LIBS)
- build/release/mujs-pp: pp.c build/release/libmujs.o
- $(CC) $(CFLAGS) $(OPTIM) -o $@ $^ -lm
- build/release/mujs.pc:
- @mkdir -p $(@D)
- echo > $@ Name: mujs
- echo >> $@ Description: MuJS embeddable Javascript interpreter
- echo >> $@ Version: $(VERSION)
- echo >> $@ Cflags: -I$(incdir)
- echo >> $@ Libs: -L$(libdir) -lmujs
- echo >> $@ Libs.private: -lm
- install-common: build/release/mujs build/release/mujs-pp build/release/mujs.pc
- install -d $(DESTDIR)$(incdir)
- install -d $(DESTDIR)$(libdir)
- install -d $(DESTDIR)$(libdir)/pkgconfig
- install -d $(DESTDIR)$(bindir)
- install -m 644 mujs.h $(DESTDIR)$(incdir)
- install -m 644 build/release/mujs.pc $(DESTDIR)$(libdir)/pkgconfig
- install -m 755 build/release/mujs $(DESTDIR)$(bindir)
- install -m 755 build/release/mujs-pp $(DESTDIR)$(bindir)
- install-static: install-common build/release/libmujs.a
- install -m 644 build/release/libmujs.a $(DESTDIR)$(libdir)
- install-shared: install-common build/release/libmujs.$(SO)
- install -m 755 build/release/libmujs.$(SO) $(DESTDIR)$(libdir)
- install: install-static
- uninstall:
- rm -f $(DESTDIR)$(bindir)/mujs
- rm -f $(DESTDIR)$(bindir)/mujs-pp
- rm -f $(DESTDIR)$(incdir)/mujs.h
- rm -f $(DESTDIR)$(libdir)/pkgconfig/mujs.pc
- rm -f $(DESTDIR)$(libdir)/libmujs.a
- rm -f $(DESTDIR)$(libdir)/libmujs.$(SO)
- tarball:
- git archive --format=zip --prefix=mujs-$(VERSION)/ HEAD > mujs-$(VERSION).zip
- git archive --format=tar --prefix=mujs-$(VERSION)/ HEAD | gzip > mujs-$(VERSION).tar.gz
- tags: $(SRCS) $(HDRS) main.c pp.c
- ctags $^
- clean:
- rm -rf build
- nuke: clean
- rm -f one.c astnames.h opnames.h
- sanitize: build/sanitize/mujs
- debug: build/debug/libmujs.a
- debug: build/debug/libmujs.$(SO)
- debug: build/debug/mujs
- debug: build/debug/mujs-pp
- release: build/release/mujs.pc
- release: build/release/libmujs.a
- release: build/release/libmujs.$(SO)
- release: build/release/mujs
- release: build/release/mujs-pp
|