pmake/GNUmakefile

106 lines
2 KiB
Text
Raw Normal View History

2026-05-08 02:59:11 +09:00
TARGET =
ifeq ($(TARGET),)
TARGET = $(shell uname -s)
endif
### Platforms
ifeq ($(TARGET),Linux)
UNIX = 1
endif
ifeq ($(TARGET),NetBSD)
UNIX = 1
endif
2026-05-09 03:16:12 +09:00
ifeq ($(TARGET),Windows)
MINGW = 1
WINDOWS = 1
endif
2026-05-08 02:59:11 +09:00
### Stuff
ifeq ($(UNIX),1)
CC = gcc
CFLAGS = -c
LDFLAGS =
LIBS = -lm
EXE =
endif
2026-05-09 03:16:12 +09:00
ifeq ($(WINDOWS),1)
EXE = .exe
endif
ifeq ($(MINGW),1)
CC = gcc
CFLAGS = -c
LDFLAGS =
LIBS =
endif
2026-05-08 02:59:11 +09:00
### Common flags
CFLAGS += -Iexternal/duktape -Iexternal/stb
### Rules
2026-05-09 03:16:12 +09:00
OBJS = src/main.o src/js.o src/js_console.o src/js_process.o src/js_fs.o
2026-05-08 02:59:11 +09:00
OBJS += external/duktape/duktape.o external/stb/stb_ds.o
2026-05-08 05:25:34 +09:00
NAME = rev | cut -d/ -f1 | rev | cut -d. -f1
2026-05-08 05:35:07 +09:00
.PHONY: all clean mk format maint
2026-05-08 02:59:11 +09:00
.SUFFIXES: .c .o
all: pmake$(EXE)
2026-05-08 05:25:34 +09:00
include mk/js.mk
2026-05-08 02:59:11 +09:00
2026-05-08 05:25:34 +09:00
mk/js.mk:
2026-05-09 17:40:43 +09:00
find src/compiler src/system src/js -name "*.js" | while read js; do \
2026-05-08 05:25:34 +09:00
name="`echo $$js | cut -d/ -f2`_`echo $$js | $(NAME)`" ; \
2026-05-08 02:59:11 +09:00
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 > $@
2026-05-08 05:25:34 +09:00
mk: mk/js.mk
2026-05-08 02:59:11 +09:00
2026-05-08 05:35:07 +09:00
format:
2026-05-10 00:22:00 +09:00
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"`
2026-05-08 05:35:07 +09:00
2026-05-08 02:59:11 +09:00
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 "" >> $@
2026-05-09 17:40:43 +09:00
for i in compiler system; do \
2026-05-08 05:35:07 +09:00
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
2026-05-08 05:25:34 +09:00
echo "#define JS \\" >> $@
echo " COMPILERS \\" >> $@
2026-05-09 17:40:43 +09:00
echo " SYSTEMS" >> $@
2026-05-08 05:25:34 +09:00
echo "" >> $@
2026-05-08 02:59:11 +09:00
echo "#endif" >> $@
pmake$(EXE): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
.c.o:
$(CC) $(CFLAGS) -o $@ $<
clean:
2026-05-09 03:16:12 +09:00
rm -f pmake pmake.exe
2026-05-08 02:59:11 +09:00
find . -name "*.o" >/dev/null && rm -f $(shell find . -name "*.o")
2026-05-09 17:40:43 +09:00
rm -f src/compiler/*.c src/system/*.c src/js/*.c