diff options
author | Jan-Marek Glogowski <glogow@fbihome.de> | 2020-05-05 12:28:21 +0000 |
---|---|---|
committer | Jan-Marek Glogowski <glogow@fbihome.de> | 2020-05-05 12:28:21 +0000 |
commit | efbf8f55055730c9e5270efd6b112bb11eb1b0dc (patch) | |
tree | d2b4fd4118c929a02f857558d02cda1da4f6c49d /coreconf | |
parent | ac813c236db7dc3cf6bd6239210d7326c125655f (diff) | |
download | nss-hg-efbf8f55055730c9e5270efd6b112bb11eb1b0dc.tar.gz |
Bug 290526 Handle parallel PROGRAM and PROGRAMS r=rrelyea
I have no real clue, why PROGRAMS is actually working in the
sequence build. There is no special make code really handling it,
except for the install target.
This patches code is inspired by the $(eval ...) example in the
GNU make documentation. It generates a program specific make
target and maps the programs objects based on the defined
variables.
Differential Revision: https://phabricator.services.mozilla.com/D69016
Diffstat (limited to 'coreconf')
-rw-r--r-- | coreconf/rules.mk | 57 |
1 files changed, 32 insertions, 25 deletions
diff --git a/coreconf/rules.mk b/coreconf/rules.mk index acf4fcc62..74ca5c7f9 100644 --- a/coreconf/rules.mk +++ b/coreconf/rules.mk @@ -238,18 +238,42 @@ alltags: find . -name dist -prune -o \( -name '*.[hc]' -o -name '*.cp' -o -name '*.cpp' \) -print | xargs etags -a find . -name dist -prune -o \( -name '*.[hc]' -o -name '*.cp' -o -name '*.cpp' \) -print | xargs ctags -a -$(PROGRAM): $(OBJS) $(EXTRA_LIBS) - @$(MAKE_OBJDIR) -ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET))) - $(MKPROG) $(subst /,\\,$(OBJS)) -Fe$@ -link $(LDFLAGS) $(XLDFLAGS) $(subst /,\\,$(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS)) +define PROGRAM_template + +ifndef $(1)_OBJS +ifdef LIBRARY_NAME + $(1)_OBJS := $$(patsubst $$(PROG_PREFIX)%,%,$$(patsubst %$$(PROG_SUFFIX),%,$(1)))$$(OBJ_SUFFIX) +endif +ifdef PROGRAMS + $(1)_OBJS := $$(patsubst $$(PROG_PREFIX)%,%,$$(patsubst %$$(PROG_SUFFIX),%,$(1)))$$(OBJ_SUFFIX) +endif +ifndef $(1)_OBJS + $(1)_OBJS := $$(OBJS) +endif +endif + +$(1): $$($(1)_OBJS) $$(EXTRA_LIBS) + @$$(MAKE_OBJDIR) + rm -f $$@ +ifeq (,$$(filter-out _WIN%,$$(NS_USE_GCC)_$$(OS_TARGET))) + $$(MKPROG) $$($(1)_OBJS) -Fe$$@ -link $$(LDFLAGS) $$(XLDFLAGS) $$(EXTRA_LIBS) $$(EXTRA_SHARED_LIBS) $$(OS_LIBS) ifdef MT - if test -f $@.manifest; then \ - $(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \ - rm -f $@.manifest; \ + if test -f $$@.manifest; then \ + $$(MT) -NOLOGO -MANIFEST $$@.manifest -OUTPUTRESOURCE:$$@\;1; \ + rm -f $$@.manifest; \ fi endif # MSVC with manifest tool else - $(MKPROG) -o $@ $(CFLAGS) $(OBJS) $(LDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) + $$(MKPROG) -o $$@ $$(CFLAGS) $$($(1)_OBJS) $$(LDFLAGS) $$(EXTRA_LIBS) $$(EXTRA_SHARED_LIBS) $$(OS_LIBS) +endif +endef # PROGRAM_template + +ifdef PROGRAM +$(eval $(call PROGRAM_template,$(PROGRAM))) +else +ifdef PROGRAMS +$(foreach prog,$(PROGRAMS),$(eval $(call PROGRAM_template,$(prog)))) +endif endif get_objs: @@ -331,23 +355,6 @@ $(MAPFILE): $(MAPFILE_SOURCE) @$(MAKE_OBJDIR) $(PROCESS_MAP_FILE) - -$(OBJDIR)/$(PROG_PREFIX)%$(PROG_SUFFIX): $(OBJDIR)/$(PROG_PREFIX)%$(OBJ_SUFFIX) - @$(MAKE_OBJDIR) -ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET))) - $(MKPROG) $< -Fe$@ -link \ - $(LDFLAGS) $(XLDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) -ifdef MT - if test -f $@.manifest; then \ - $(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \ - rm -f $@.manifest; \ - fi -endif # MSVC with manifest tool -else - $(MKPROG) -o $@ $(CFLAGS) $< \ - $(LDFLAGS) $(EXTRA_LIBS) $(EXTRA_SHARED_LIBS) $(OS_LIBS) -endif - WCCFLAGS1 := $(subst /,\\,$(CFLAGS)) WCCFLAGS2 := $(subst -I,-i=,$(WCCFLAGS1)) WCCFLAGS3 := $(subst -D,-d,$(WCCFLAGS2)) |