102 lines
2.6 KiB
Makefile
102 lines
2.6 KiB
Makefile
BENZ_SRCS = $(wildcard extlib/benz/*.c)
|
|
BENZ_OBJS = $(BENZ_SRCS:.c=.o)
|
|
|
|
PICRIN_SRCS = \
|
|
src/main.c\
|
|
src/load_piclib.c\
|
|
src/init_contrib.c
|
|
PICRIN_OBJS = \
|
|
$(PICRIN_SRCS:.c=.o)
|
|
|
|
CONTRIB_SRCS =
|
|
CONTRIB_OBJS = $(CONTRIB_SRCS:.c=.o)
|
|
CONTRIB_LIBS =
|
|
CONTRIB_DEFS =
|
|
CONTRIB_INITS =
|
|
CONTRIB_TESTS =
|
|
CONTRIB_DOCS = $(wildcard contrib/*/docs/*.rst)
|
|
PICRIN_ISSUE_TESTS = $(wildcard t/issue/*.scm)
|
|
REPL_ISSUE_TESTS = $(wildcard t/issue/*.sh)
|
|
|
|
TEST_RUNNER = bin/picrin
|
|
|
|
CFLAGS += -I./extlib/benz/include -Wall -Wextra
|
|
LDFLAGS += -lm
|
|
|
|
prefix ?= /usr/local
|
|
|
|
all: CFLAGS += -O2 -DNDEBUG=1
|
|
all: bin/picrin
|
|
|
|
debug: CFLAGS += -O0 -g
|
|
debug: bin/picrin
|
|
|
|
include $(sort $(wildcard contrib/*/nitro.mk))
|
|
|
|
bin/picrin: CFLAGS += $(CONTRIB_DEFS)
|
|
bin/picrin: $(PICRIN_OBJS) $(CONTRIB_OBJS) $(BENZ_OBJS)
|
|
$(CC) $(CFLAGS) -o $@ $(PICRIN_OBJS) $(CONTRIB_OBJS) $(BENZ_OBJS) $(LDFLAGS)
|
|
|
|
src/load_piclib.c: $(CONTRIB_LIBS)
|
|
perl etc/mkloader.pl $(CONTRIB_LIBS) > $@
|
|
|
|
src/init_contrib.c:
|
|
perl etc/mkinit.pl $(CONTRIB_INITS) > $@
|
|
|
|
lib/libbenz.so: $(BENZ_OBJS)
|
|
$(CC) -shared $(CFLAGS) -o $@ $(BENZ_OBJS) $(LDFLAGS)
|
|
|
|
extlib/benz/boot.o: extlib/benz/boot.c
|
|
cd extlib/benz; perl boot.c
|
|
$(CC) $(CFLAGS) -c -o $@ $<
|
|
|
|
$(BENZ_OBJS) $(PICRIN_OBJS) $(CONTRIB_OBJS): extlib/benz/include/picrin.h extlib/benz/include/picrin/*.h
|
|
|
|
doc: docs/*.rst docs/contrib.rst
|
|
$(MAKE) -C docs html
|
|
mkdir -p doc
|
|
cp -uR docs/_build/* -t doc/
|
|
|
|
docs/contrib.rst: $(CONTRIB_DOCS)
|
|
echo "Contrib Libraries \\\(a.k.a nitros\\\)" > $@
|
|
echo "================================" >> $@
|
|
echo "" >> $@
|
|
cat $(CONTRIB_DOCS) >> $@
|
|
|
|
run: bin/picrin
|
|
bin/picrin
|
|
|
|
test: test-contribs test-nostdlib test-issue
|
|
|
|
test-contribs: bin/picrin $(CONTRIB_TESTS)
|
|
|
|
test-nostdlib:
|
|
$(CC) -I extlib/benz/include -D'PIC_USE_LIBC=0' -D'PIC_USE_STDIO=0' -D'PIC_USE_WRITE=0' -ffreestanding -nostdlib -Os -fPIC -shared -std=c89 -pedantic -Wall -Wextra -Werror -o lib/libbenz-tiny.so $(BENZ_SRCS) etc/libc_polyfill.c -fno-stack-protector
|
|
strip lib/libbenz-tiny.so
|
|
ls -lh lib/libbenz-tiny.so
|
|
rm -f lib/libbenz-tiny.so
|
|
|
|
test-issue: test-picrin-issue test-repl-issue
|
|
|
|
test-picrin-issue: $(TEST_RUNNER) $(PICRIN_ISSUE_TESTS)
|
|
for test in $(PICRIN_ISSUE_TESTS); do \
|
|
$(TEST_RUNNER) "$$test"; \
|
|
done
|
|
|
|
test-repl-issue: $(REPL_ISSUE_TESTS)
|
|
|
|
$(REPL_ISSUE_TESTS):
|
|
PICRIN=$(TEST_RUNNER) ./$@
|
|
|
|
install: all
|
|
install -c bin/picrin $(prefix)/bin/picrin
|
|
|
|
clean:
|
|
rm -f src/load_piclib.c src/init_contrib.c
|
|
rm -f lib/libbenz.so
|
|
rm -f $(BENZ_OBJS)
|
|
rm -f $(PICRIN_OBJS)
|
|
rm -f $(CONTRIB_OBJS)
|
|
|
|
.PHONY: all install clean run test test-r7rs test-contribs test-issue test-picrin-issue test-repl-issue doc $(CONTRIB_TESTS) $(REPL_ISSUE_TESTS)
|