2024-05-09 20:27:54 -07:00
|
|
|
# Rules for generating the final binary and any auxillary files generated as a result.
|
|
|
|
|
|
2014-03-22 21:03:03 -07:00
|
|
|
# use linker garbage collection, if requested
|
2022-04-18 01:09:52 -07:00
|
|
|
WITH_LINKER_GC ?= false
|
|
|
|
|
ifeq (true,$(call TOBOOL,$(WITH_LINKER_GC)))
|
2014-03-22 21:03:03 -07:00
|
|
|
GLOBAL_COMPILEFLAGS += -ffunction-sections -fdata-sections
|
|
|
|
|
GLOBAL_LDFLAGS += --gc-sections
|
2022-04-18 01:09:52 -07:00
|
|
|
GLOBAL_DEFINES += LINKER_GC=1
|
2014-03-22 21:03:03 -07:00
|
|
|
endif
|
|
|
|
|
|
2014-04-11 19:19:18 -07:00
|
|
|
ifneq (,$(EXTRA_BUILDRULES))
|
|
|
|
|
-include $(EXTRA_BUILDRULES)
|
|
|
|
|
endif
|
|
|
|
|
|
2015-10-26 16:33:39 -07:00
|
|
|
$(EXTRA_LINKER_SCRIPTS):
|
|
|
|
|
|
2008-09-01 02:26:09 -07:00
|
|
|
$(OUTBIN): $(OUTELF)
|
2019-02-17 20:29:35 -08:00
|
|
|
$(info generating image: $@)
|
2008-09-01 02:26:09 -07:00
|
|
|
$(NOECHO)$(SIZE) $<
|
2012-11-11 14:00:34 -08:00
|
|
|
$(NOECHO)$(OBJCOPY) -O binary $< $@
|
2008-09-01 02:26:09 -07:00
|
|
|
|
2012-11-02 11:48:17 -07:00
|
|
|
$(OUTELF).hex: $(OUTELF)
|
2018-12-01 11:47:43 -08:00
|
|
|
$(info generating hex file: $@)
|
2012-11-11 14:00:34 -08:00
|
|
|
$(NOECHO)$(OBJCOPY) -O ihex $< $@
|
2012-11-02 11:48:17 -07:00
|
|
|
|
2015-10-26 16:33:39 -07:00
|
|
|
$(OUTELF): $(ALLMODULE_OBJS) $(EXTRA_OBJS) $(LINKER_SCRIPT) $(EXTRA_LINKER_SCRIPTS)
|
2018-12-01 11:47:43 -08:00
|
|
|
$(info linking $@)
|
2015-10-14 13:05:37 -07:00
|
|
|
$(NOECHO)$(SIZE) -t --common $(sort $(ALLMODULE_OBJS)) $(EXTRA_OBJS)
|
2021-12-09 11:19:20 +00:00
|
|
|
$(NOECHO)$(LD) $(GLOBAL_LDFLAGS) $(ARCH_LDFLAGS) -d -T $(LINKER_SCRIPT) \
|
2018-10-13 11:40:10 -07:00
|
|
|
$(addprefix -T,$(EXTRA_LINKER_SCRIPTS)) \
|
2016-10-31 10:38:42 +01:00
|
|
|
$(ALLMODULE_OBJS) $(EXTRA_OBJS) $(LIBGCC) -Map=$(OUTELF).map -o $@
|
2008-09-01 02:26:09 -07:00
|
|
|
|
|
|
|
|
$(OUTELF).sym: $(OUTELF)
|
2018-12-01 11:47:43 -08:00
|
|
|
$(info generating symbols: $@)
|
2008-09-01 02:26:09 -07:00
|
|
|
$(NOECHO)$(OBJDUMP) -t $< | $(CPPFILT) > $@
|
2024-04-23 23:27:37 -07:00
|
|
|
$(NOECHO)echo "# vim: ts=8 nolist nowrap" >> $@
|
2008-09-01 02:26:09 -07:00
|
|
|
|
2014-01-26 22:51:51 -08:00
|
|
|
$(OUTELF).sym.sorted: $(OUTELF)
|
2018-12-01 11:47:43 -08:00
|
|
|
$(info generating sorted symbols: $@)
|
2014-01-26 22:51:51 -08:00
|
|
|
$(NOECHO)$(OBJDUMP) -t $< | $(CPPFILT) | sort > $@
|
2024-04-23 23:27:37 -07:00
|
|
|
$(NOECHO)echo "# vim: ts=8 nolist nowrap" >> $@
|
2014-01-26 22:51:51 -08:00
|
|
|
|
2008-09-01 02:26:09 -07:00
|
|
|
$(OUTELF).lst: $(OUTELF)
|
2018-12-01 11:47:43 -08:00
|
|
|
$(info generating listing: $@)
|
2025-10-04 14:06:36 -07:00
|
|
|
$(NOECHO)$(OBJDUMP) $(ARCH_OBJDUMP_FLAGS) -d $< | $(CPPFILT) > $@
|
2024-04-23 23:27:37 -07:00
|
|
|
$(NOECHO)echo "# vim: ts=8 nolist nowrap" >> $@
|
2008-09-01 02:26:09 -07:00
|
|
|
|
|
|
|
|
$(OUTELF).debug.lst: $(OUTELF)
|
2018-12-01 11:47:43 -08:00
|
|
|
$(info generating listing: $@)
|
2025-09-29 22:28:00 -07:00
|
|
|
$(NOECHO)$(OBJDUMP) $(ARCH_OBJDUMP_FLAGS) -l -S $< | $(CPPFILT) > $@
|
2024-04-23 23:27:37 -07:00
|
|
|
$(NOECHO)echo "# vim: ts=8 nolist nowrap" >> $@
|
2008-09-01 02:26:09 -07:00
|
|
|
|
2015-10-26 16:33:39 -07:00
|
|
|
$(OUTELF).dump: $(OUTELF)
|
2018-12-01 11:47:43 -08:00
|
|
|
$(info generating objdump: $@)
|
2021-11-10 01:34:44 -08:00
|
|
|
$(NOECHO)$(OBJDUMP) -x $< | $(CPPFILT) > $@
|
2024-04-23 23:27:37 -07:00
|
|
|
$(NOECHO)echo "# vim: ts=8 nolist nowrap" >> $@
|
2015-10-26 16:33:39 -07:00
|
|
|
|
2008-09-01 02:26:09 -07:00
|
|
|
$(OUTELF).size: $(OUTELF)
|
2018-12-01 11:47:43 -08:00
|
|
|
$(info generating size map: $@)
|
2021-11-10 01:34:44 -08:00
|
|
|
$(NOECHO)$(NM) -S --size-sort $< | $(CPPFILT) > $@
|
2024-04-23 23:27:37 -07:00
|
|
|
$(NOECHO)echo "# vim: ts=8 nolist nowrap" >> $@
|
2008-09-01 02:26:09 -07:00
|
|
|
|
2024-05-09 20:27:54 -07:00
|
|
|
# generate a list of source files that potentially participate in this build.
|
|
|
|
|
# header file detection is a bit sloppy: it simply searches for every .h file inside
|
|
|
|
|
# the combined include paths. May pick up files that are not strictly speaking used.
|
|
|
|
|
# Alternate strategy that may work: union all of the .d files together and collect all
|
|
|
|
|
# of the used headers used there.
|
|
|
|
|
$(BUILDDIR)/srcfiles.txt: $(OUTELF) $(BUILDDIR)/include_paths.txt
|
|
|
|
|
@$(MKDIR)
|
2018-12-01 11:47:43 -08:00
|
|
|
$(info generating $@)
|
2015-11-20 20:51:52 -08:00
|
|
|
$(NOECHO)echo $(sort $(ALLSRCS)) | tr ' ' '\n' > $@
|
2024-05-09 20:27:54 -07:00
|
|
|
@for i in `cat $(BUILDDIR)/include_paths.txt`; do if [ -d $$i ]; then find $$i -type f -name \*.h; fi; done >> $@
|
2015-11-20 20:51:52 -08:00
|
|
|
|
2024-05-09 20:27:54 -07:00
|
|
|
# generate a list of all the include directories used in this project
|
2016-11-21 19:39:31 -08:00
|
|
|
$(BUILDDIR)/include_paths.txt: $(OUTELF)
|
2024-05-09 20:27:54 -07:00
|
|
|
@$(MKDIR)
|
2018-12-01 11:47:43 -08:00
|
|
|
$(info generating $@)
|
2015-11-20 20:51:52 -08:00
|
|
|
$(NOECHO)echo $(subst -I,,$(sort $(GLOBAL_INCLUDES))) | tr ' ' '\n' > $@
|
|
|
|
|
|
2012-08-29 14:51:23 -07:00
|
|
|
#include arch/$(ARCH)/compile.mk
|
2008-09-01 02:26:09 -07:00
|
|
|
|