diff options
Diffstat (limited to 'Make.rules')
-rw-r--r-- | Make.rules | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/Make.rules b/Make.rules index 3bdf2670e1..9fd486275c 100644 --- a/Make.rules +++ b/Make.rules @@ -70,7 +70,7 @@ INSTALL := install INSTALLDIR := $(INSTALL) -d CFLAGS ?= -g -O2 -CFLAGS_ALL := -Werror -Wall -Wstrict-prototypes -D_GNU_SOURCE -std=gnu99 +CFLAGS_ALL := -Werror -Wall -Wstrict-prototypes -D_GNU_SOURCE -std=gnu99 -fPIC CFLAGS_ALL += $(CFLAGS) LDFLAGS ?= -g @@ -197,6 +197,24 @@ $(obj)/%.o: $(src)/%.c FORCE $(call if_changed_rule,cc_o_c) ##### +# Link shared libraries +# +__shlibs := $(addprefix $(obj)/,$(sort $(shlibs-y))) +shobjs := $(addprefix $(obj)/,$(sort $(foreach m,$(shlibs-y),$($(m)-objs)))) + +# link shared library +quiet_cmd_shlib = LD -shared $@ + cmd_shlib = $(CC) $(ld_flags) -shared -o $@ \ + $(addprefix $(obj)/,$($(@F)-objs)) \ + $(LIBS) $(LIBS_$(@F)) + +$(__shlibs): override local-target-prereqs=$(addprefix $(obj)/,$($(*F)-objs)) + +$(__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 @@ -256,7 +274,7 @@ ifeq ($(toplevelrun),yes) \( -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-))) + $(Q)rm -rf $(addprefix $(obj)/,$(sort $(progs-y) $(progs-n) $(progs-) $(shlibs-y) $(shlibs-n) $(shlibs-))) ifeq ($(origin VERSION),command line) DIST_VERSION=$(VERSION) |