TARGET = ifeq ($(TARGET),) TARGET = $(shell uname -s) endif ### Platforms ifeq ($(TARGET),Linux) UNIX = 1 endif ifeq ($(TARGET),NetBSD) UNIX = 1 endif ifeq ($(TARGET),Windows) MINGW = 1 WINDOWS = 1 endif ### Stuff ifeq ($(UNIX),1) CC = gcc CFLAGS = -c LDFLAGS = LIBS = -lm EXE = endif ifeq ($(WINDOWS),1) EXE = .exe endif ifeq ($(MINGW),1) CC = gcc CFLAGS = -c LDFLAGS = LIBS = endif ### Common flags CFLAGS += -Iexternal/duktape -Iexternal/stb ### Rules OBJS = src/main.o src/js.o src/js_console.o src/js_process.o src/js_fs.o OBJS += external/duktape/duktape.o external/stb/stb_ds.o NAME = rev | cut -d/ -f1 | rev | cut -d. -f1 .PHONY: all clean mk format maint .SUFFIXES: .c .o all: pmake$(EXE) include mk/js.mk mk/js.mk: find src/js src/action src/compiler -name "*.js" | while read js; do \ name="`echo $$js | cut -d/ -f2`_`echo $$js | $(NAME)`" ; \ c="`echo $$js | sed 's/\.js$$/.c/'`" ; \ o="`echo $$js | sed 's/\.js$$/.o/'`" ; \ echo "OBJS += $$o" ; \ echo "$$c: $$js" ; \ echo " xxd -n$$name -i $$js > $$c" ; \ echo "" ; \ done > $@ mk: mk/js.mk format: clang-format --verbose -i src/*/*.js `find src -name "*.c" -or -name "*.h"` maint: rm -f mk/*.mk $(MAKE) mk rm -f src/config.h $(MAKE) src/config.h src/config.h: echo "#ifndef __CONFIG_H__" > $@ echo "#define __CONFIG_H__" >> $@ echo "" >> $@ for i in compiler action; do \ echo "#define `echo $$i | tr '[:lower:]' '[:upper:]'`S \\" >> $@ ; \ find src/$$i -name "*.js" | while read js; do \ echo " X(`echo $$js | $(NAME)`, $$i) \\" ; \ done >> $@ ; \ echo "" >> $@ ; \ done echo "#define JS \\" >> $@ echo " COMPILERS \\" >> $@ echo " ACTIONS" >> $@ echo "" >> $@ echo "#endif" >> $@ pmake$(EXE): $(OBJS) $(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS) .c.o: $(CC) $(CFLAGS) -o $@ $< clean: rm -f pmake pmake.exe find . -name "*.o" >/dev/null && rm -f $(shell find . -name "*.o") rm -f src/compiler/*.c src/action/*.c src/js/*.c