pmake/GNUmakefile
2026-05-08 05:18:35 +09:00

78 lines
1.4 KiB
Makefile

TARGET =
ifeq ($(TARGET),)
TARGET = $(shell uname -s)
endif
### Platforms
ifeq ($(TARGET),Linux)
UNIX = 1
endif
ifeq ($(TARGET),NetBSD)
UNIX = 1
endif
### Stuff
ifeq ($(UNIX),1)
CC = gcc
CFLAGS = -c
LDFLAGS =
LIBS = -lm
EXE =
endif
### Common flags
CFLAGS += -Iexternal/duktape -Iexternal/stb
### Rules
OBJS = src/main.o src/js.o
OBJS += external/duktape/duktape.o external/stb/stb_ds.o
.PHONY: all clean mk maint
.SUFFIXES: .c .o
all: pmake$(EXE)
include mk/compiler.mk
mk/compiler.mk:
find src/js src/compiler -name "*.js" | while read js; do \
name="`echo $$js | cut -d/ -f2`_`echo $$js | rev | cut -d/ -f1 | rev | cut -d. -f1`" ; \
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/compiler.mk
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 "" >> $@
echo "#define COMPILERS \\" >> $@
find src/compiler -name "*.js" | while read js; do \
echo " X(`echo $$js | rev | cut -d/ -f1 | rev | cut -d. -f1`) \\" ; \
done >> $@
echo "" >> $@
echo "#endif" >> $@
pmake$(EXE): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LIBS)
.c.o:
$(CC) $(CFLAGS) -o $@ $<
clean:
find . -name "*.o" >/dev/null && rm -f $(shell find . -name "*.o")
rm -f src/compiler/*.c