92 lines
2.6 KiB
Makefile
92 lines
2.6 KiB
Makefile
.PHONY: default
|
|
.SUFFIXES:
|
|
MAKEFLAGS+=--no-builtin-rules
|
|
|
|
NODEPS=clean
|
|
|
|
OBJECT_DIR=obj
|
|
SOURCE_DIR=src
|
|
|
|
EMPTY:=
|
|
SPACE:=$(EMPTY) $(EMPTY)
|
|
COMMA:=,
|
|
|
|
default: all
|
|
all: docs arctic
|
|
|
|
DOCUMENTS=$(shell find doc/ -name '*.md')
|
|
|
|
HTMLDOCS=$(patsubst doc/%.md,%.html,$(DOCUMENTS))
|
|
PDFDOCS=$(patsubst doc/%.md,%.pdf,$(DOCUMENTS)) cheatsheet.pdf
|
|
|
|
docs: $(HTMLDOCS) $(PDFDOCS)
|
|
|
|
%.html: doc/%.md
|
|
multimarkdown -t html $^ -o $@
|
|
|
|
%.tex: %.md
|
|
multimarkdown -t latex $^ | sed 's/^\[/{[}/g' > $@
|
|
|
|
%.pdf: doc/%.tex doc/arctic-leader.tex doc/arctic-begin.tex doc/arctic-footer.tex
|
|
# cd doc && latexmk -pdf -xelatex -use-make $*.tex && mv $*.pdf ../
|
|
cd $$(dirname $<) && xelatex -interaction=batchmode $*.tex && mv $*.pdf ../
|
|
|
|
GENERATED_M4=$(shell find $(SOURCE_DIR)/ -name '*.m4')
|
|
GENERATED_FS=$(patsubst %.m4,%,$(GENERATED_M4))
|
|
|
|
%: %.m4 misc/utils.m4
|
|
m4 $< > $@
|
|
|
|
# TODO: fix the structure so this is easier. the JIT libs should become ASM
|
|
# libs, while the actual JIT sources only get included on whatever the native
|
|
# arch is (tunable with ARCH=... in make)
|
|
MAIN_SOURCES=$(shell find $(SOURCE_DIR)/ -name '*.c' -not -path '$(SOURCE_DIR)/jit/*')
|
|
MAIN_OBJECTS=$(patsubst $(SOURCE_DIR)/%.c,$(OBJECT_DIR)/%.o,$(MAIN_SOURCES))
|
|
MAIN_DEPENDS=$(patsubst $(SOURCE_DIR)/%.c,$(OBJECT_DIR)/%.d,$(MAIN_SOURCES))
|
|
|
|
ifeq (0, $(words $(findstring $(MAKECMDGOALS), $(NODEPS))))
|
|
ifeq (,$(findstring print-,$(MAKECMDGOALS)))
|
|
$(info Including depends files: $(MAIN_DEPENDS))
|
|
include $(MAIN_DEPENDS)
|
|
endif
|
|
endif
|
|
|
|
$(OBJECT_DIR):
|
|
mkdir $@
|
|
|
|
$(OBJECT_DIR)/%.d: $(SOURCE_DIR)/%.c | $(OBJECT_DIR) $(GENERATED_FS)
|
|
$(CC) $(CFLAGS) -MM -MT '$(patsubst $(SOURCE_DIR)/%.c,$(OBJECT_DIR)/%.o,$<)' $< -MF $@
|
|
|
|
$(OBJECT_DIR)/%.o: $(SOURCE_DIR)/%.c | $(OBJECT_DIR)
|
|
$(CC) $(CFLAGS) -c $< -o $@
|
|
|
|
arctic: $(MAIN_OBJECTS)
|
|
$(CC) $(LDFLAGS) $^ -o $@
|
|
|
|
X86_64_BIT_REGISTERS=RAX RBX RCX RDX RSI RDI RBP RSP R8 R9 R10 R11 R12 R13 R14 R15
|
|
src/jit/x86_64_mov_opcodes.h:
|
|
echo '#ifndef X86_64_MOV_OPCODES_H' > $@
|
|
echo '#define X86_64_MOV_OPCODES_H' >> $@
|
|
echo >> $@
|
|
for dstreg in {$(subst $(SPACE),$(COMMA),$(X86_64_BIT_REGISTERS))}; do \
|
|
for srcreg in {$(subst $(SPACE),$(COMMA),$(X86_64_BIT_REGISTERS))}; do \
|
|
echo "mov $$srcreg,$$dstreg" | ./tools/x86_64dump | \
|
|
sed 's/../ X(0x&)/g' | \
|
|
sed "s/.*/#define MOV_$${srcreg}_$${dstreg}&/" >> $@; \
|
|
done; \
|
|
done
|
|
echo >> $@
|
|
echo '#endif /* X86_64_MOV_OPCODES_H */' >> $@
|
|
|
|
|
|
clean:
|
|
-rm $(patsubst doc/%.md,doc/%.aux,$(DOCUMENTS))
|
|
-rm $(patsubst doc/%.md,doc/%.xdv,$(DOCUMENTS))
|
|
-rm $(patsubst doc/%.md,doc/%.out,$(DOCUMENTS))
|
|
-rm $(MAIN_OBJECTS)
|
|
-rm $(MAIN_DEPENDS)
|
|
-rm arctic
|
|
|
|
print-%:
|
|
@echo '$*=$($*)'
|