Skip to content

Commit

Permalink
Merge pull request #8844 from cladmi/pr/make/split_link_target
Browse files Browse the repository at this point in the history
 Makefile.include: separate `link` in subtargets
  • Loading branch information
kaspar030 authored Apr 9, 2018
2 parents 0575dbf + f64de06 commit c23eb5a
Showing 1 changed file with 31 additions and 11 deletions.
42 changes: 31 additions & 11 deletions Makefile.include
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,12 @@ BASELIBS += $(BINDIR)/$(APPLICATION_MODULE).a
BASELIBS += $(APPDEPS)

.PHONY: all link clean flash flash-only term doc debug debug-server reset objdump help info-modules
.PHONY: print-size
.PHONY: ..in-docker-container
# Target can depend on FORCE to always rebuild but still let make use file
# modification timestamp (contrary to .PHONY).
# Use it for goals that may keep outputs unchanged when executed.
.PHONY: FORCE

ELFFILE ?= $(BINDIR)/$(APPLICATION).elf
HEXFILE ?= $(ELFFILE:.elf=.hex)
Expand All @@ -321,23 +326,38 @@ LINKFLAGPREFIX ?= -Wl,

DIRS += $(EXTERNAL_MODULE_DIRS)

_LINK = $(if $(CPPMIX),$(LINKXX),$(LINK)) $(UNDEF) $(LINKFLAGPREFIX)--start-group $(BASELIBS) -lm $(LINKFLAGPREFIX)--end-group $(LINKFLAGPREFIX)-Map=$(BINDIR)/$(APPLICATION).map $(LINKFLAGS)
# Linker rule
$(ELFFILE): FORCE
ifeq ($(BUILDOSXNATIVE),1)
_LINK = $(if $(CPPMIX),$(LINKXX),$(LINK)) $(UNDEF) $$(find $(BASELIBS) -size +8c) $(LINKFLAGS) $(LINKFLAGPREFIX)-no_pie
else
_LINK = $(if $(CPPMIX),$(LINKXX),$(LINK)) $(UNDEF) $(LINKFLAGPREFIX)--start-group $(BASELIBS) -lm $(LINKFLAGPREFIX)--end-group $(LINKFLAGS) $(LINKFLAGPREFIX)-Map=$(BINDIR)/$(APPLICATION).map
endif # BUILDOSXNATIVE

ifeq ($(BUILD_IN_DOCKER),1)
link: ..in-docker-container
else
## make script for your application. Build RIOT-base here!
link: ..compiler-check ..build-message $(RIOTBUILD_CONFIG_HEADER_C) $(USEPKG:%=$(BINDIR)/%.a) $(APPDEPS)
$(Q)DIRS="$(DIRS)" "$(MAKE)" -C $(APPDIR) -f $(RIOTMAKE)/application.inc.mk
ifeq (,$(RIOTNOLINK))
ifeq ($(BUILDOSXNATIVE),1)
$(Q)$(if $(CPPMIX),$(LINKXX),$(LINK)) $(UNDEF) -o $(ELFFILE) $$(find $(BASELIBS) -size +8c) $(LINKFLAGS) $(LINKFLAGPREFIX)-no_pie
link: ..compiler-check ..build-message $(ELFFILE) $(HEXFILE) print-size
else
$(Q)$(_LINK) -o $(ELFFILE)
endif
$(Q)$(SIZE) $(ELFFILE)
$(Q)$(OBJCOPY) $(OFLAGS) $(ELFFILE) $(HEXFILE)
endif
link: ..compiler-check ..build-message $(BASELIBS)
endif # RIOTNOLINK

$(ELFFILE): $(BASELIBS)
$(Q)$(_LINK) -o $@

# All modules are built by application.inc.mk makefile
$(BINDIR)/$(APPLICATION_MODULE).a: $(RIOTBUILD_CONFIG_HEADER_C) $(USEPKG:%=$(BINDIR)/%.a) $(APPDEPS)
$(Q)DIRS="$(DIRS)" "$(MAKE)" -C $(APPDIR) -f $(RIOTMAKE)/application.inc.mk
$(BINDIR)/$(APPLICATION_MODULE).a: FORCE

# 'print-size' triggers a rebuild. Use 'info-buildsize' if you do not need to rebuild.
print-size: $(ELFFILE)
$(Q)$(SIZE) $<

$(HEXFILE): $(ELFFILE)
$(Q)$(OBJCOPY) $(OFLAGS) $< $@

endif # BUILD_IN_DOCKER

# Check given command is available in the path
Expand Down

0 comments on commit c23eb5a

Please sign in to comment.