| ### |
| # @file Makefile.template |
| # @breif This is the file user has to setup locally for different host environment |
| # |
| # @param VOBJ object files applicable for compilation |
| # @param LOBJ object files included in lib$(NAME).a |
| # @param COBJ object files applicable to standard-make-targets |
| # |
| # @author Howard Chen |
| ## |
| GCC ?= $(CROSS)gcc |
| CC ?= $(GCC) |
| CXX ?= $(CROSS)g++ |
| OBJDUMP = $(CROSS)objdump |
| OBJCOPY = $(CROSS)objcopy |
| AR = $(CROSS)ar |
| |
| SUBLPATH?= $(SUBVPATH) |
| INCLUDE ?= $(DEF_INCLUDE) |
| CFLAGS ?= $(DEF_CFLAGS) |
| ASFLAGS ?= $(DEF_ASFLAGS) |
| LDFLAGS ?= $(DEF_LDFLAGS) |
| DOC_GEN ?= $(PREFIX)/APITemp.txt |
| |
| VPATH ?= src $(SUBVPATH) |
| VOBJ ?= $(patsubst %.S,%.o, \ |
| $(patsubst %.s,%.o, \ |
| $(patsubst %.c,%.o, \ |
| $(patsubst %.cpp, %.o, \ |
| $(notdir $(foreach DIR,$(VPATH),\ |
| $(wildcard $(DIR)/*.S) \ |
| $(wildcard $(DIR)/*.s) \ |
| $(wildcard $(DIR)/*.c) \ |
| $(wildcard $(DIR)/*.cpp))))))) |
| |
| LPATH ?= src $(SUBLPATH) |
| LOBJ ?= $(patsubst %.S,%.o, \ |
| $(patsubst %.s,%.o, \ |
| $(patsubst %.c,%.o, \ |
| $(patsubst %.cpp, %.o, \ |
| $(notdir $(foreach DIR,$(LPATH),\ |
| $(wildcard $(DIR)/*.S) \ |
| $(wildcard $(DIR)/*.s) \ |
| $(wildcard $(DIR)/*.c) \ |
| $(wildcard $(DIR)/*.cpp))))))) |
| COBJ ?= $(patsubst %.c,%.o, \ |
| $(patsubst %.cpp, %.o, \ |
| $(notdir $(foreach DIR,$(VPATH),\ |
| $(wildcard $(DIR)/*.c) \ |
| $(wildcard $(DIR)/*.cpp))))) |
| DEP = $(COBJ:%.o=%.d) |
| TEST = $(COBJ:%.o=%.x) |
| RUNS = $(COBJ:%.o=%.x.run) |
| |
| MIN ?=1 |
| |
| default: all |
| |
| %.d: %.cpp |
| @wimac_conf.pl $(NAME) "$(CONFIG)" |
| ifeq ($(strip $(STRICT)),1) |
| @wimac_rul.sh $< |
| endif |
| @$(GCC) -M $(INCLUDE) -D _UNIT_ -D _EXE_ $(CONFIG) $< > $@ |
| |
| %.d: %.c |
| @wimac_conf.pl $(NAME) "$(CONFIG)" |
| ifeq ($(strip $(STRICT)),1) |
| @wimac_rul.sh $< |
| endif |
| #ifeq ($(strip $(MAKE_INDEX)),1) |
| # @wimac_parse_idx.sh $< |
| #endif |
| @$(GCC) -M $(INCLUDE) $(CFLAGS) -D _UNIT_ -D _EXE_ $(CONFIG) $< > $@ |
| |
| %.e : %.cpp %.d |
| $(CXX) $(INCLUDE) $(CONFIG) -E $< > $(notdir $(<:%.cpp=%.e.cpp)) |
| |
| %.e : %.c %.d |
| $(CC) $(CFLAGS) $(INCLUDE) $(CONFIG) -E $< > $(notdir $(<:%.c=%.e.c)) |
| |
| %.o : %.cpp %.d |
| $(CXX) $(CXXFLAGS) $(INCLUDE) $(CONFIG) -c $< |
| |
| %.o : %.c %.d |
| $(CC) $(CFLAGS) $(INCLUDE) $(CONFIG) -c $< |
| |
| %.o: %.S |
| $(GCC) $(ASFLAGS) $(INCLUDE) $(CONFIG) -c $< |
| |
| %.o: %.s |
| $(GCC) $(ASFLAGS) $(INCLUDE) $(CONFIG) -c -x assembler-with-cpp $< |
| |
| %.o.text: %.o |
| $(CROSS)objdump -DS $^ > $@ |
| |
| %.exe: %.elf |
| @cp $^ $@ |
| |
| %.elf: %.c $(LIB) |
| $(CC) $(CFLAGS) $(INCLUDE) $(CONFIG) -D _EXE_ -o $(notdir $(<:%.c=%.e.o)) -c $< |
| $(GCC) -o $@ $(notdir $(<:%.c=%.e.o)) $(LDFLAGS) |
| |
| %.elf: %.cpp $(LIB) |
| $(CC) $(CXXFLAGS) $(INCLUDE) $(CONFIG) -D _EXE_ -o $(notdir $(<:%.cpp=%.e.o)) -c $< |
| $(GCC) -o $@ $(notdir $(<:%.cpp=%.e.o)) $(LDFLAGS) |
| |
| %.elf.run: |
| @echo "" |
| @printf "%s%-8s%s\n" "-----[ " "$(@:%.elf.run=%)" " ]------------------------------------------------------" |
| @echo "" |
| $(RUN)$(@:%.x.run=%.x) |
| |
| %.elf.debug: %.elf |
| ddd --debugger $(CROSS)gdb $^ |
| |
| %.elf.text: %.elf |
| $(CROSS)objdump -DS $^ > $@ |
| |
| %.elf.srec: %.elf |
| $(CROSS)objcopy -Osrec $^ $@ |
| |
| %.elf.hex8: %.elf.srec |
| srec2hex.exe $^ -p $(HEXPAD) > $@ |
| |
| %.elf.hex16: %.elf.srec |
| srec2hex.exe $^ -p $(HEXPAD) -2 > $@ |
| |
| %.elf.hex32: %.elf.srec |
| srec2hex.exe $^ -p $(HEXPAD) -4 > $@ |
| |
| %.elf.img: %.elf |
| $(OBJCOPY) --strip-debug $^ $@ |
| |
| %.elf.bin: %.elf.img |
| $(OBJCOPY) -O binary $^ $@ |
| |
| %.elf.bin.gz: %.elf.bin |
| gzip -c $^ > $@ |
| |
| %.elf.verilog: |
| @rm -f $(@:%.elf.verilog=%.elf) |
| @make $(@:%.elf.verilog=%.elf.text) LD_SCRIPT=-Tverilog.ld |
| @make $(@:%.elf.verilog=%.elf.hex8) LD_SCRIPT=-Tverilog.ld |
| @make $(@:%.elf.verilog=%.elf.hex16) LD_SCRIPT=-Tverilog.ld |
| @make $(@:%.elf.verilog=%.elf.hex32) LD_SCRIPT=-Tverilog.ld |
| |
| %.elf.sim %.elf.sim.dual %.elf.sim.app: |
| @rm -f $*.elf; \ |
| if [ $(NAME) == "base" ]; then \ |
| startup=startupsim$(subst .,_,$(subst .sim,,$(suffix $@))).o; \ |
| else \ |
| startup=$(ROOT)/${base_libdir}/startupsim$(subst .,_,$(subst .sim,,$(suffix $@))).o; \ |
| fi; \ |
| make $*.elf.text DEP_LIBS="$(SIM_LIBS)" STARTUP=$$startup LD_SCRIPT=-Tsim$(filter app,$(subst .,,$(suffix $@))).ld; \ |
| wimac_gen_sim.sh $*.elf |
| |
| %.x: %.c $(LIB) |
| $(CC) $(CFLAGS) $(INCLUDE) $(CONFIG) -D _UNIT_ -o $(notdir $(<:%.c=%.x.o)) -c $< |
| ifeq ($(strip $(STRICT)),1) |
| $(CROSS)nm $(notdir $(<:%.c=%.x.o)) | grep main |
| endif |
| $(GCC) -o $@ $(notdir $(<:%.c=%.x.o)) $(LDFLAGS) |
| |
| %.x: %.cpp $(LIB) |
| $(CC) $(CXXFLAGS) $(INCLUDE) $(CONFIG) -D _UNIT_ -o $(notdir $(<:%.cpp=%.x.o)) -c $< |
| $(CXX) -o $@ $(notdir $(<:%.cpp=%.x.o)) $(LDFLAGS) |
| |
| %.x.run: |
| @echo "" |
| @printf "%s%-8s%s\n" "-----[ " "$(@:%.x.run=%)" " ]------------------------------------------------------" |
| @echo "" |
| $(RUN)$(@:%.x.run=%.x) |
| |
| %.x.debug: %.x |
| ddd --debugger $(CROSS)gdb $^ |
| |
| %.x.text: %.x |
| $(CROSS)objdump -DS $^ > $@ |
| |
| %.x.srec: %.x |
| $(CROSS)objcopy -Osrec $^ $@ |
| |
| %.x.hex8: %.x.srec |
| srec2hex.exe $^ -p $(HEXPAD) > $@ |
| |
| %.x.hex16: %.x.srec |
| srec2hex.exe $^ -p $(HEXPAD) -2 > $@ |
| |
| %.x.hex32: %.x.srec |
| srec2hex.exe $^ -p $(HEXPAD) -4 > $@ |
| |
| %.x.img: %.x |
| $(OBJCOPY) --strip-debug $< $@ |
| |
| %.x.bin: %.x.img |
| $(OBJCOPY) -O binary $< $@ |
| |
| %.x.bin.gz: %.x.bin |
| gzip -c $^ > $@ |
| |
| %.x.verilog: |
| @rm -f $(@:%.x.verilog=%.x) |
| @make $(@:%.x.verilog=%.x.text) LD_SCRIPT=-Tverilog.ld |
| @make $(@:%.x.verilog=%.x.hex8) LD_SCRIPT=-Tverilog.ld |
| @make $(@:%.x.verilog=%.x.hex16) LD_SCRIPT=-Tverilog.ld |
| @make $(@:%.x.verilog=%.x.hex32) LD_SCRIPT=-Tverilog.ld |
| |
| %.x.sim %.x.sim.dual %.x.sim.app: |
| @rm -f $*.x; \ |
| if [ $(NAME) == "base" ]; then \ |
| startup=startupsim$(subst .,_,$(subst .sim,,$(suffix $@))).o; \ |
| else \ |
| startup=$(ROOT)/${base_libdir}/startupsim$(subst .,_,$(subst .sim,,$(suffix $@))).o; \ |
| fi; \ |
| make $*.x.text DEP_LIBS="$(SIM_LIBS)" STARTUP=$$startup LD_SCRIPT=-Tsim$(filter app,$(subst .,,$(suffix $@))).ld; \ |
| wimac_gen_sim.sh $*.x |
| |
| sinclude $(DEP) |
| |
| lib$(NAME).a:$(LOBJ) |
| $(AR) r $@ $? |
| |
| lib$(NAME).so:$(LOBJ) |
| @rm -f $@ |
| $(GCC) -shared -o _$@ $^ $(LDFLAGS) |
| @mv _$@ $@ |
| |
| $(NAME).dll:$(LOBJ) |
| $(CROSS)dlltool $(LOBJ) --export-all-symbols --output-def $(NAME).def |
| $(CROSS)dllwrap $(LOBJ) -def $(NAME).def -o $@ $(LDFLAGS) |
| |
| $(NAME).lib:$(NAME).dll |
| $(CROSS)dlltool --def $(NAME).def --output-lib $(NAME).lib |
| |
| signature.text: |
| @bash -c 'if [ "$(CROSS)" == "" ] ; then \ |
| echo "native" > signature.text; \ |
| else \ |
| echo $(CROSS) > signature.text; \ |
| fi' |
| |
| .PHONY:_dep_check _signature info.text |
| _dep_check: |
| @echo "" |
| @echo "dependency checking" |
| @bash -c 'for d in $(DEP_LIBS); do\ |
| if [ "$$(echo $(LIB) | grep lib$$d.a)" != "" ] || \ |
| [ "$$(echo $(LIB) | grep $$d.dll)" != "" ] || \ |
| [ "$$(echo $(LIB) | grep lib$$d.so)" != "" ]; then\ |
| continue; \ |
| elif [ ! -f $(ROOT)/${base_libdir}/lib$$d.a ] && \ |
| [ ! -f $(ROOT)/${base_libdir}/$$d.dll ] && \ |
| [ ! -f $(ROOT)/${base_libdir}/lib$$d.so ] && \ |
| [ ! -f $(ROOT)/${libdir}/lib$$d.a ] && \ |
| [ ! -f $(ROOT)/${libdir}/$$d.dll ] && \ |
| [ ! -f $(ROOT)/${libdir}/lib$$d.so ] ; then\ |
| echo "[NO INSTALL]: $$d"; \ |
| echo " "; \ |
| exit 1;\ |
| else \ |
| echo "[INSTALLED]: $$d "; \ |
| fi; \ |
| done' |
| @bash -c 'for d in $(DEP_MODS); do\ |
| if [ -e $(ROOT)/usr/include/asm/arch/$(DEP_MODS) ]; then\ |
| echo "[INSTALLED]: mod-$$d"; \ |
| else \ |
| echo "[NO INSTALL]: mod-$$d"; \ |
| exit 1;\ |
| fi;\ |
| done' |
| |
| _signature: signature.text |
| @bash -c 'if [ "$(CROSS)" == "" ] ; then \ |
| export cross=native; \ |
| else \ |
| export cross=$(CROSS) ;\ |
| fi ; \ |
| if [ "`cat signature.text | grep $$cross `" == "" ]; then\ |
| echo "target conflict!!"; \ |
| echo -n "original: "; \ |
| cat signature.text; \ |
| echo "current: $$cross"; \ |
| exit 1;\ |
| fi' |
| |
| info.text: |
| ifeq ($(strip $(DEP_LIBS_AUTO)),1) |
| @echo DEP_LIBS=$(shell wimac_dep.sh $(NAME) "$(DEP_LIBS)" "$(DEP_LIBS_EX)") > $@ |
| else |
| @echo DEP_LIBS=$(DEP_LIBS) > $@ |
| endif |
| |
| _config: |
| @wimac_conf.pl $(NAME) "$(CONFIG)" |
| |
| all: _dep_check signature.text _signature _config $(ALL) lib |
| |
| gen_dir: |
| mkdir -p $(ROOT)/bin |
| mkdir -p $(ROOT)/${base_libdir} |
| mkdir -p $(ROOT)/include/$(NAME) |
| ifeq ($(strip $(MIN)),1) |
| mkdir -p $(ROOT)/doc |
| else |
| mkdir -p $(ROOT)/doc/$(NAME) |
| endif |
| |
| mkdir -p $(ROOT)/test/$(NAME) |
| ifeq ($(strip $(MAKE_INDEX)),1) |
| mkdir -p $(ROOT)/doc/index/$(NAME) |
| endif |
| |
| ifeq ($(strip $(MLOG_MODULE)),1) |
| ifneq ($(shell echo $(CROSS) | grep -e "arm-none-linux-"),) |
| .PHONY:mlog_cksrc |
| mlog_cksrc: |
| @$(PREFIX)/bin/mlog.pl -C |
| .PHONY:mlog_parse |
| mlog_parse: |
| @$(PREFIX)/bin/mlog.pl -P |
| endif |
| endif |
| |
| #install: all doc gen_dir $(INSTALL) |
| install: doc gen_dir $(INSTALL) |
| rm -f $(ROOT)/${base_libdir}/lib$(NAME).* $(ROOT)/${base_libdir}/$(NAME).dll |
| ifneq ($(strip $(LIB)), dummy) |
| install -p $(LIB) $(ROOT)/${base_libdir}/ |
| endif |
| bash -c 'if ls *.x > /dev/null 2>&1 ; then install *.x $(ROOT)/test/$(NAME); fi' |
| bash -c 'if [ -e include ]; then rm -rf $(ROOT)/include/$(NAME)/*; cp -r include/* $(ROOT)/include/$(NAME)/; fi' |
| ifeq ($(strip $(MIN)),1) |
| else |
| install -p doc/html/* $(ROOT)/doc/$(NAME)/ |
| endif |
| cp module.files $(ROOT)/doc/$(NAME).files |
| cp info.text $(ROOT)/doc/$(NAME).info |
| ifeq ($(strip $(MAKE_INDEX)),1) |
| wimac_gen_idx.sh $(ROOT) $(NAME) |
| endif |
| ifeq ($(strip $(MLOG_MODULE)),1) |
| ifneq ($(shell echo $(CROSS) | grep -e "arm-none-linux-"),) |
| @$(PREFIX)/bin/mlog.pl -P |
| endif |
| endif |
| |
| lib: $(LIB) |
| @echo "[lib ] done" |
| |
| test.list.text: |
| @wimac_tst.sh |
| |
| test: $(TEST) test.list.text |
| @echo "[test] done" |
| |
| testrun: $(COBJ:%.o=%.x.run) |
| @echo "[testrun] done" |
| |
| run: $(RUNS) |
| @echo "[run] done" |
| |
| clean: $(CLEAN) |
| rm -f include/conf_$(NAME).h *.o *.so *.files *.a *.x *.lib *.def *.dll *.elf *.d *.text *.img *.srec *.bin *.hex *.short *.hex8 |
| rm -rf doc index |
| |
| ifeq ($(strip $(MIN)),1) |
| doc: info.text module.files |
| @touch module.files |
| # @mkdir -p doc/html && touch doc/html/index.html |
| else |
| doc: info.text module.files $(wildcard include/*.h) $(DOC_GEN) $(DOC) |
| mkdir -p doc include |
| cat $(DOC_GEN) | sed -e 's/PNAME/lib$(NAME)/' > API.text |
| doxygen API.text |
| mkdir -p $(ROOT)/doc |
| wimac_doc.sh $(ROOT) > $(ROOT)/doc/index.html |
| endif |
| |
| indent: |
| indent -kr -i8 `find -name "*.[h,c]"` |
| |
| module.files: |
| -find `pwd`/src `pwd`/include -name "*.h" -or -name "*.hxx" -or -name "*.[cCsS]" \ |
| -or -name "*.cxx" -or -name "*.cpp" -or -name "*.inl" > module.files |
| |
| index:module.files |
| @bash -c 'rm -f cscope.files ; \ |
| LIST=$$(ls $(ROOT)/doc/*.files 2>/dev/null) ; \ |
| for T in $$LIST; do \ |
| if [ $$T != $(ROOT)/doc/$(NAME).files ]; then \ |
| cat $$T >> cscope.files; \ |
| fi ; \ |
| done' |
| cat module.files >> cscope.files |
| cscope -b -c -icscope.files |
| |
| alltargets: |
| @bash -c 'for T in $(CROSS_SUP) ; \ |
| do \ |
| T=$${T#native}; \ |
| echo "building CROSS=$$T" ;\ |
| make clean || exit 1 ;\ |
| make install CROSS=$$T || exit 1 ;\ |
| done; \ |
| make clean || exit 1' |
| |
| target: |
| @bash -c 'select T in $(CROSS_SUP); do \ |
| if [ $$T ] ; then \ |
| break; \ |
| else \ |
| echo "invalid target"; \ |
| fi ; \ |
| done; \ |
| if [ "$$T" = "native" ] ; then\ |
| T=; \ |
| fi; \ |
| echo "building CROSS=$$T"; \ |
| make clean || exit 1;\ |
| make CROSS=$$T || exit 1;\ |
| make install CROSS=$$T || exit 1;\ |
| make clean || exit 1' |
| |
| auto_dep: |
| @wimac_auto.sh $(ROOT) "$(DEP_LIBS)" "$(LIB)" $(NAME) $(CROSS) |
| |
| auto: auto_dep all |
| |
| info: |
| @echo -n "current : " |
| @echo DEP_LIBS=$(DEP_LIBS) |
| @echo -n "calculated : DEP_LIBS=" |
| @wimac_dep.sh $(NAME) "$(DEP_LIBS)" "$(DEP_LIBS_EX)" |
| |
| var: |
| @echo '$(VAR)' |
| |
| nfs_export: |
| wimac_nfsexport.sh |