diff options
Diffstat (limited to 'Makerules')
-rw-r--r-- | Makerules | 132 |
1 files changed, 68 insertions, 64 deletions
diff --git a/Makerules b/Makerules index 3951bb185b..4f2eec35bc 100644 --- a/Makerules +++ b/Makerules @@ -211,6 +211,73 @@ $(objpfx)test-as-const-%.c: $(..)scripts/gen-as-const.awk $(..)Makerules \ mv -f $@T $@ endif +ifeq (yes,$(build-shared)) +# Generate the header containing the names of all shared libraries. +# We use a stamp file to avoid unnecessary recompilations. +before-compile += $(common-objpfx)gnu/lib-names.h +ifeq ($(soversions.mk-done),t) +ifndef abi-variants +lib-names-h-abi = gnu/lib-names.h +lib-names-stmp-abi = gnu/lib-names.stmp +else +lib-names-h-abi = gnu/lib-names-$(default-abi).h +lib-names-stmp-abi = gnu/lib-names-$(default-abi).stmp +before-compile += $(common-objpfx)$(lib-names-h-abi) +common-generated += gnu/lib-names.h +install-others-nosubdir: $(inst_includedir)/$(lib-names-h-abi) +$(common-objpfx)gnu/lib-names.h: + $(make-target-directory) + { \ + echo '/* This file is automatically generated.';\ + echo ' It defines macros to allow user program to find the shared'; \ + echo ' library files which come as part of GNU libc. */'; \ + echo '#ifndef __GNU_LIB_NAMES_H'; \ + echo '#define __GNU_LIB_NAMES_H 1'; \ + echo ''; \ + $(if $(abi-includes), \ + $(foreach h,$(abi-includes), echo '#include <$(h)>';) \ + echo '';) \ + $(foreach v,$(abi-variants),\ + $(if $(abi-$(v)-condition),\ + echo '#if $(abi-$(v)-condition)'; \ + echo '# include <gnu/lib-names-$(v).h>'); \ + $(if $(abi-$(v)-condition),echo '#endif';)) \ + echo ''; \ + echo '#endif /* gnu/lib-names.h */'; \ + } > $@ +endif +$(common-objpfx)$(lib-names-h-abi): $(common-objpfx)$(lib-names-stmp-abi); @: +$(common-objpfx)$(lib-names-stmp-abi): $(..)scripts/lib-names.awk \ + $(common-objpfx)soversions.i + $(make-target-directory) + { \ + $(if $(abi-variants), \ + echo '/* This file is automatically generated. */';\ + echo '#ifndef __GNU_LIB_NAMES_H'; \ + echo '# error "Never use <$(lib-names-h-abi)> directly; include <gnu/lib-names.h> instead."'; \ + echo '#endif';, \ + echo '/* This file is automatically generated.';\ + echo ' It defines macros to allow user program to find the shared'; \ + echo ' library files which come as part of GNU libc. */'; \ + echo '#ifndef __GNU_LIB_NAMES_H'; \ + echo '#define __GNU_LIB_NAMES_H 1';) \ + echo ''; \ + ($(foreach s,$(all-sonames), echo $(s);)) \ + | LC_ALL=C $(AWK) -f $(firstword $^) | LC_ALL=C sort; \ + $(if $(abi-variants),, \ + echo ''; \ + echo '#endif /* gnu/lib-names.h */';) \ + } > ${@:stmp=T} + $(move-if-change) ${@:stmp=T} ${@:stmp=h} + touch $@ +endif +common-generated += $(lib-names-h-abi) $(lib-names-stmp-abi) +endif + +############################################################################### +# NOTE! Everything adding to before-compile needs to come before this point! # +############################################################################### + # Generate an ordered list of implicit rules which find the source files in # each sysdep directory. The old method was to use vpath to search all the # sysdep directories. However, that had the problem that a .S file in a @@ -1276,7 +1343,7 @@ endif endif endif - + # These will have been set by sysdeps/posix/Makefile. L_tmpnam ?= 1 TMP_MAX ?= 0 @@ -1324,69 +1391,6 @@ ifndef no_deps -include $(stdio_lim:h=d) endif common-generated += bits/stdio_lim.h bits/stdio_lim.d bits/stdio_lim.st - -ifeq (yes,$(build-shared)) -# Generate the header containing the names of all shared libraries. -# We use a stamp file to avoid unnecessary recompilations. -before-compile += $(common-objpfx)gnu/lib-names.h -ifeq ($(soversions.mk-done),t) -ifndef abi-variants -lib-names-h-abi = gnu/lib-names.h -lib-names-stmp-abi = gnu/lib-names.stmp -else -lib-names-h-abi = gnu/lib-names-$(default-abi).h -lib-names-stmp-abi = gnu/lib-names-$(default-abi).stmp -before-compile += $(common-objpfx)$(lib-names-h-abi) -common-generated += gnu/lib-names.h -install-others-nosubdir: $(inst_includedir)/$(lib-names-h-abi) -$(common-objpfx)gnu/lib-names.h: - $(make-target-directory) - { \ - echo '/* This file is automatically generated.';\ - echo ' It defines macros to allow user program to find the shared'; \ - echo ' library files which come as part of GNU libc. */'; \ - echo '#ifndef __GNU_LIB_NAMES_H'; \ - echo '#define __GNU_LIB_NAMES_H 1'; \ - echo ''; \ - $(if $(abi-includes), \ - $(foreach h,$(abi-includes), echo '#include <$(h)>';) \ - echo '';) \ - $(foreach v,$(abi-variants),\ - $(if $(abi-$(v)-condition),\ - echo '#if $(abi-$(v)-condition)'; \ - echo '# include <gnu/lib-names-$(v).h>'); \ - $(if $(abi-$(v)-condition),echo '#endif';)) \ - echo ''; \ - echo '#endif /* gnu/lib-names.h */'; \ - } > $@ -endif -$(common-objpfx)$(lib-names-h-abi): $(common-objpfx)$(lib-names-stmp-abi); @: -$(common-objpfx)$(lib-names-stmp-abi): $(..)scripts/lib-names.awk \ - $(common-objpfx)soversions.i - $(make-target-directory) - { \ - $(if $(abi-variants), \ - echo '/* This file is automatically generated. */';\ - echo '#ifndef __GNU_LIB_NAMES_H'; \ - echo '# error "Never use <$(lib-names-h-abi)> directly; include <gnu/lib-names.h> instead."'; \ - echo '#endif';, \ - echo '/* This file is automatically generated.';\ - echo ' It defines macros to allow user program to find the shared'; \ - echo ' library files which come as part of GNU libc. */'; \ - echo '#ifndef __GNU_LIB_NAMES_H'; \ - echo '#define __GNU_LIB_NAMES_H 1';) \ - echo ''; \ - ($(foreach s,$(all-sonames), echo $(s);)) \ - | LC_ALL=C $(AWK) -f $(firstword $^) | LC_ALL=C sort; \ - $(if $(abi-variants),, \ - echo ''; \ - echo '#endif /* gnu/lib-names.h */';) \ - } > ${@:stmp=T} - $(move-if-change) ${@:stmp=T} ${@:stmp=h} - touch $@ -endif -common-generated += $(lib-names-h-abi) $(lib-names-stmp-abi) -endif FORCE: |