diff options
Diffstat (limited to 'rules.mk')
-rw-r--r-- | rules.mk | 142 |
1 files changed, 0 insertions, 142 deletions
diff --git a/rules.mk b/rules.mk deleted file mode 100644 index 833664d..0000000 --- a/rules.mk +++ /dev/null @@ -1,142 +0,0 @@ -# generate objects from sources -# arg 1: target.SRCS -# arg 2: object suffix prefix -# returns: target.OBJS -objects = $(foreach f,$($1),$(addsuffix $2.o,$(basename $f))) - -# generate depends from .S .c .cpp sources -# arg 1: target.SRCS -# arg 2: dependency suffix prefix -# returns: target.DEPS -depends = $(foreach f,$(filter %.S %.c %.cpp,$($1)),$(addsuffix $2.d,$(basename $f))) - -# default target -all: targets - - -# TARGETBIN: binaries using the target architecture -$(foreach T,${TARGETBIN},\ - $(eval $T.OBJS += $(call objects,$T.SRCS,_${ARCH}) ) \ - $(eval $T.DEPS += $(call depends,$T.SRCS,_${ARCH}) ) \ - $(eval include $($T.DEPS) ) \ - $(eval $T.elf: ${$T.OBJS} ) \ - $(eval DEFAULT_TARGETS += $T.elf) \ -) - -# TARGETLIB: static libraries using the target architecture -$(foreach T,${TARGETLIB},\ - $(eval $T.OBJS += $(call objects,$T.SRCS,_${ARCH}) ) \ - $(eval $T.DEPS += $(call depends,$T.SRCS,_${ARCH}) ) \ - $(eval include $($T.DEPS) ) \ - $(eval $T.a: ${$T.OBJS} ) \ - $(eval DEFAULT_TARGETS += $T.a) \ -) - -# HOSTTARGETBIN: binaries using the host compiler -$(foreach T,${HOSTTARGETBIN},\ - $(eval $T.OBJS += $(call objects,$T.SRCS,) ) \ - $(eval $T.DEPS += $(call depends,$T.SRCS,) ) \ - $(eval include $($T.DEPS) ) \ - $(eval $T: ${$T.OBJS}; @echo ' LD HOST $T'; ${HOST_CC} ${HOST_LDFLAGS} -o $T ${$T.OBJS} ) \ - $(eval DEFAULT_TARGETS += $T) \ -) - -TESTS.DEPS = $(foreach F,${TESTS},$(addsuffix .d,$F)) -include ${TESTS.DEPS} - -debug: - @echo "TARGETBIN ${TARGETBIN}" - @echo "TARGETLIB ${TARGETLIB}" - @echo "HOSTTARGETBIN ${HOSTTARGETBIN}" - @echo "HOSTTARGETLIB ${HOSTTARGETLIB}" - @echo "DEFAULT_TARGETS ${DEFAULT_TARGETS}" - @echo "TESTS ${TESTS}" - @echo " DEPS ${TESTS.DEPS}" - -%.info: - @echo "Target: $(basename $@)" - @echo " SRCS: ${$(basename $@).SRCS}" - @echo " OBJS: ${$(basename $@).OBJS}" - @echo " DEPS: ${$(basename $@).DEPS}" - -targets: ${DEFAULT_TARGETS} - @echo " -> Built ${DEFAULT_TARGETS}" - -# extra flags -${ARCH}_CFLAGS += -I../lib/libk \ - -Werror=implicit-function-declaration -${ARCH}_CXXFLAGS += -I../lib/libk -Drestrict=__restrict__ - -# Target depndency rules -%_${ARCH}.d: %.S - @${${ARCH}_CC} ${${ARCH}_CFLAGS} -M -MT $(<:.S=_${ARCH}.o) $< -MF $@ - -%_${ARCH}.d: %.c - @${${ARCH}_CC} ${${ARCH}_CFLAGS} -M -MT $(<:.c=_${ARCH}.o) $< -MF $@ - -%_${ARCH}.d: %.cpp - @${${ARCH}_CXX} ${${ARCH}_CXXFLAGS} -M -MT $(<:.cpp=_${ARCH}.o) $< -MF $@ - -# Host dependency rules -%.d: %.c - @${HOST_CC} ${HOST_CFLAGS} -M -MT $(<:.c=.o) $< -MF $@ - -%.d: %.cc - @${HOST_CXX} ${HOST_CXXFLAGS} -M -MT $(<:.cc=) $< -MF $@ - -# Target suffix rules -%.a: - @echo ' AR $@' - @${${ARCH}_AR} ${${ARCH}_ARFLAGS} $@ $(filter %.o,$^) - -%_${ARCH}.o: %.s - @echo ' AS $<' - @${${ARCH}_AS} ${${ARCH}_ASFLAGS} -c -o $@ $< - -%_${ARCH}.o: %.S - @echo ' CC $<' - @${${ARCH}_CC} ${${ARCH}_CFLAGS} -c -o $@ $< - -%_${ARCH}.o: %.c - @echo ' CC $<' - @${${ARCH}_CC} ${${ARCH}_CFLAGS} -c -o $@ $< - -%_${ARCH}.o: %.cpp - @echo ' CXX $<' - @${${ARCH}_CXX} ${${ARCH}_CXXFLAGS} -c -o $@ $< - -%.elf: - @echo ' LD $@' - @${${ARCH}_LD} ${${ARCH}_LDFLAGS} -o $@ $^ - @echo -n ' B2b ' - @b2sum $@ | cut -d' ' -f1 - -# Host suffix rules -%.o: %.c - @echo ' CC HOST $<' - @${HOST_CC} ${HOST_CFLAGS} -c -o $@ $< - -# test rules -tst/%: tst/%.cc - @echo ' CXX TEST $@' - @${HOST_CXX} ${HOST_CXXFLAGS} $< -o $@ - -.PHONY: test.base valgrind.base clean.base FORCE -test.base: ${TESTS} - @echo " -> Running tests in $(shell pwd | xargs basename)" - @$(foreach f,$^,echo " -> $f"; ./$f &&) echo "Done" - -valgrind.base: ${TESTS} - @echo " -> Running valgrind on tests in $(shell pwd | xargs basename)" - @$(foreach f,$^,echo " -> $f"; valgrind --leak-check=full ./$f;) - -clean.base: FORCE - @echo " -> Cleaning $(shell pwd | xargs basename)" - @$(foreach V,$(filter %.OBJS, ${.VARIABLES}), rm -rf $($(V))) - @$(foreach V,$(filter %.DEPS, ${.VARIABLES}), rm -rf $($(V))) - @rm -rf *.a - @rm -rf ${TESTS} - -%: %.base ; - -FORCE: ; |