From 86436fce2fe2364bbc9e705ddc92d7733fc8ed75 Mon Sep 17 00:00:00 2001 From: Timo Teräs Date: Thu, 5 Oct 2017 10:57:45 +0300 Subject: build and use bundled libfetch natively --- Make.rules | 50 ++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 40 insertions(+), 10 deletions(-) (limited to 'Make.rules') diff --git a/Make.rules b/Make.rules index 6457d6f..7f33e0a 100644 --- a/Make.rules +++ b/Make.rules @@ -65,6 +65,7 @@ export FULL_VERSION RCS_FIND_IGNORE CROSS_COMPILE ?= CC := $(CROSS_COMPILE)gcc +AR := $(CROSS_COMPILE)ar LD := $(CROSS_COMPILE)ld INSTALL := install INSTALLDIR := $(INSTALL) -d @@ -76,7 +77,7 @@ CFLAGS_ALL += $(CFLAGS) LDFLAGS ?= -g LDFLAGS_ALL += $(LDFLAGS) -export CC LD INSTALL INSTALLDIR CFLAGS_ALL LDFLAGS_ALL +export CC AR LD INSTALL INSTALLDIR CFLAGS_ALL LDFLAGS_ALL build := @@ -178,6 +179,10 @@ c_flags = -Wp,-MD,$(depfile) -Wp,-MT,$@ $(CPPFLAGS) \ $(CFLAGS_ALL) $(CFLAGS_EXTRA) $(CFLAGS_$(notdir $@)) ld_flags = $(LDFLAGS_ALL) $(LDFLAGS_EXTRA) $(LDFLAGS_$(notdir $@)) +##### +# Generated targets +generate: $(addprefix $(obj)/,$(sort $(generate-y))) + ##### # Compile c-files. quiet_cmd_cc_o_c = CC $@ @@ -193,41 +198,60 @@ endef $(obj)/%.o: override local-target-prereqs=% -$(obj)/%.o: $(src)/%.c FORCE +$(obj)/%.o: $(src)/%.c FORCE | generate $(call if_changed_rule,cc_o_c) +##### +# Link static libraries +# +__arlibs := $(addprefix $(obj)/,$(sort $(libs-y))) +arobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(libs-y),$($(m)-objs)))) + +# link shared library +quiet_cmd_ar = AR $@ + cmd_ar = $(AR) rcs $@ $(addprefix $(obj)/,$($(@F)-objs)) + +$(__arlibs): override local-target-prereqs=$(addprefix $(obj)/,$($(*F)-objs)) + +$(__arlibs): $(obj)/%: $(arobjs) FORCE + $(call if_changed,ar) + +targets += $(__arlibs) $(arobjs) + ##### # Link shared libraries # __shlibs := $(addprefix $(obj)/,$(sort $(shlibs-y))) -shobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(shlibs-y),$($(m)-objs)))) +shobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(shlibs-y),$($(m)-objs)))) $(sort $(foreach m,$(shlibs-y),$($(m)-libs))) # link shared library quiet_cmd_shlib = LD -shared $@ cmd_shlib = $(CC) $(ld_flags) -shared -o $@ \ - $(addprefix $(obj)/,$($(@F)-objs)) \ + $(addprefix $(obj)/,$($(@F)-objs)) \ + $($(@F)-libs) \ $(LIBS) $(LIBS_$(@F)) -$(__shlibs): override local-target-prereqs=$(addprefix $(obj)/,$($(*F)-objs)) +$(__shlibs): override local-target-prereqs=$(addprefix $(obj)/,$($(*F)-objs)) $($(*F)-libs) $(__shlibs): $(obj)/%: $(shobjs) FORCE $(call if_changed,shlib) targets += $(__shlibs) $(shobjs) + ##### # Link programs # Link an executable based on list of .o files, all plain c # host-cmulti -> executable __progs := $(addprefix $(obj)/,$(sort $(progs-y))) -cobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(progs-y),$($(m)-objs)))) +cobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(progs-y),$($(m)-objs)))) $(sort $(foreach m,$(progs-y),$($(m)-libs))) quiet_cmd_ld = LD $@ cmd_ld = $(CC) $(ld_flags) -o $@ \ - $(addprefix $(obj)/,$($(@F)-objs)) \ + $(addprefix $(obj)/,$($(@F)-objs)) $($(@F)-libs) \ $(LIBS) $(LIBS_$(@F)) -$(__progs): override local-target-prereqs=$(addprefix $(obj)/,$($(*F)-objs)) +$(__progs): override local-target-prereqs=$(addprefix $(obj)/,$($(*F)-objs)) $($(*F)-libs) $(__progs): $(obj)/%: $(cobjs) FORCE $(call if_changed,ld) @@ -263,18 +287,24 @@ endif %/: FORCE $(Q)$(MAKE) -f Make.rules build=$(build-dir) $(MAKECMDGOALS) -compile: $(targets) +compile: generate $(targets) @: install: $(targets) FORCE +generate: + clean: $(filter %/,$(targets)) ifeq ($(toplevelrun),yes) $(Q)find . $(RCS_FIND_IGNORE) \ \( -name '*.[oas]' -o -name '.*.cmd' -o -name '.*.d' \) \ -type f -print | xargs rm -f endif - $(Q)rm -rf $(addprefix $(obj)/,$(sort $(progs-y) $(progs-n) $(progs-) $(shlibs-y) $(shlibs-n) $(shlibs-))) + $(Q)rm -rf $(addprefix $(obj)/, \ + $(sort $(progs-y) $(progs-n) $(progs-) \ + $(shlibs-y) $(shlibs-n) $(shlibs-) \ + $(libs-y) $(libs-n) $(libs-) \ + $(generate-y) $(generate-n) $(generate-))) ifeq ($(origin VERSION),command line) DIST_VERSION=$(VERSION) -- cgit v1.2.3-70-g09d2