forked from pyrite-dev/pmake
126 lines
2.2 KiB
Makefile
126 lines
2.2 KiB
Makefile
TARGET =
|
|
|
|
ifeq ($(TARGET),)
|
|
TARGET = $(shell uname -s)
|
|
endif
|
|
|
|
### Platforms
|
|
ifeq ($(TARGET),Linux)
|
|
IS_UNIX = 1
|
|
endif
|
|
|
|
ifeq ($(TARGET),NetBSD)
|
|
IS_UNIX = 1
|
|
endif
|
|
|
|
ifeq ($(TARGET),Windows)
|
|
IS_MINGW = 1
|
|
IS_UNIX = 1
|
|
endif
|
|
|
|
ifeq ($(TARGET),Watcom)
|
|
IS_WATCOM = 1
|
|
IS_WINDOWS = 1
|
|
endif
|
|
|
|
### Stuff
|
|
ifeq ($(IS_UNIX),1)
|
|
CC = gcc
|
|
CFLAGS = -c
|
|
LDFLAGS =
|
|
LIBS = -lm
|
|
|
|
EXE =
|
|
endif
|
|
|
|
ifeq ($(IS_WINDOWS),1)
|
|
EXE = .exe
|
|
endif
|
|
|
|
ifeq ($(IS_WATCOM),1)
|
|
CC = owcc
|
|
CFLAGS = -c
|
|
LDFLAGS =
|
|
LIBS =
|
|
|
|
ifeq ($(IS_WINDOWS),1)
|
|
CC += -bnt
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(IS_MINGW),1)
|
|
CC = gcc
|
|
CFLAGS = -c
|
|
LDFLAGS =
|
|
LIBS =
|
|
endif
|
|
|
|
ifeq ($(IS_MUSL_CROSS),1)
|
|
CC = musl-gcc
|
|
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/compiler src/system src/js -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 `find pmake.js external src "(" -name "*.c" -or -name "*.h" -or -name "*.js" ")" -and -not -name "duk*" -and -not -name "stb_*.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 system; 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 " SYSTEMS" >> $@
|
|
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/system/*.c src/js/*.c
|