pmake/GNUmakefile
2026-05-15 01:52:20 +09:00

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