# File created: 2009-03-12 00:58:58

bin/dobelx64: obj/dobelx64 bin obj/linux obj/offsets
	tmp=`mktemp`; \
		cp obj/linux $$tmp; \
		sz=`wc -c obj/dobelx64 | cut -f1 -d' '`; \
			for o in `cat obj/offsets`; do \
				printf "0: %016x" $$sz | xxd -r | od -vAn -tdL | xargs printf "0: %016x" | xxd -r | \
					dd of=$$tmp bs=1 count=8 seek=$$(($$o)) conv=notrunc 2>/dev/null; \
			done; \
		cat $$tmp $< > $@; \
		rm -f $$tmp
	chmod +x $@

	@echo
	@echo -n 'Linux ELF executable: status '
	@wc -c $@ | cut -f1 -d' '

obj/linux obj/offsets: src/sys/bin/linux.fasm obj
	fasm $< obj/linux | sed -n s_^dobelx64-offset=__p > obj/offsets

obj/dobelx64: src/dobelx64.fasm src/conio.fasm src/strings.fasm \
              src/fileio.fasm src/sys/linux.fasm src/syscalls.fasm \
              src/dobela.fasm src/debug.fasm src/parser.fasm \
              src/constants.fasm \
              obj/linux \
              obj
	sz=`wc -c obj/linux | cut -f1 -d' '`; \
		sed "s/ORIGIN/$$sz/" $< > $(addsuffix .obj,$<)
	fasm $(addsuffix .obj,$<) $@
	rm -f $(addsuffix .obj,$<)

bin:
	mkdir -p bin
obj:
	mkdir -p obj

clean:
	rm -rf src/gen
	rm -rf obj
	rm -rf bin

CPPDIR := src/headers
CPPINCDIR := src/gen/headers
wanted_headers := $(shell find $(CPPDIR) -name '*.h' | sed s:^$(CPPDIR)/::)
wanted_headers_incs := $(addprefix $(CPPINCDIR)/, $(addsuffix .inc, $(wanted_headers)))

src/dobelx64.fasm: $(wanted_headers_incs)

$(wanted_headers_incs): $(CPPINCDIR)/%.inc: $(CPPDIR)/%
	build-tools/get-cpp-constants.sh $(CPPDIR) $< $@
