aboutsummaryrefslogtreecommitdiff
path: root/Makerules
diff options
context:
space:
mode:
Diffstat (limited to 'Makerules')
-rw-r--r--Makerules133
1 files changed, 113 insertions, 20 deletions
diff --git a/Makerules b/Makerules
index 8dc2282..97c20fd 100644
--- a/Makerules
+++ b/Makerules
@@ -151,15 +151,19 @@ endif
# can only be figured out from headers, write a FOO.make.c input
# file that uses cpp contructs and contains @@@ LINE @@@ for each LINE
# to emit in the generated makefile, and use -include $(common-objpfx)FOO.make.
-$(common-objpfx)%.make: $(..)%.make.c $(..)Makerules
+$(common-objpfx)%.make: $(..)%.make.c $(..)Makerules $(before-compile)
rm -f $@T $@.dT
(echo '# Generated from $*.make.c by Makerules.'; \
SUNPRO_DEPENDENCIES='$@.dT $$(common-objpfx)$*.make' \
$(CC) $(CFLAGS) $(CPPFLAGS) -E $< \
| sed -n '/@@@/{s/@@@[ ]*\(.*\)@@@/\1/;s/[ ]*$$//p;}'; \
echo 'common-generated += $(@F)'; \
- sed $(sed-remove-objpfx) $@.dT; rm -f $@.dT) > $@T
+ sed $(sed-remove-objpfx) $(sed-remove-dotdot) $@.dT; \
+ rm -f $@.dT) > $@T
mv -f $@T $@
+
+sed-remove-dotdot := -e 's@ *\([^ \/$$][^ \]*\)@ $$(..)\1@g' \
+ -e 's@ *\.\.\/\([^ \]*\)@ $$(..)\1@g'
# 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
@@ -662,8 +666,13 @@ ifeq ($(build-programs),yes)
endif
+depfiles := $(addprefix $(objpfx),\
$(filter-out $(addsuffix .d,$(omit-deps)),\
- $(+depfiles))) \
- $(addprefix $(common-objpfx),$(gen-as-const-headers:.sym=.h.d))
+ $(+depfiles)))
+
+# Avoid the .h.d files for any .sym files whose .h files don't exist yet.
+# They will be generated when they're needed, and trying too early won't work.
++gen-as-const := $(gen-as-const-headers:%.sym=$(common-objpfx)%.h)
++depfiles += $(addsuffix .d,$(filter $(wildcard $(+gen-as-const)),\
+ $(+gen-as-const)))
ifdef +depfiles
ifneq ($(no_deps),t)
@@ -1137,24 +1146,48 @@ ifeq ($(versioning),yes)
$(OBJDUMP) --dynamic-syms $< > $@T
mv -f $@T $@
-vpath %.symlist $(objpfx) $(common-objpfx)
-vpath %.dynsym $(objpfx) $(common-objpfx)
-vpath %.so $(objpfx) $(common-objpfx)
check-abi-%: $(..)scripts/extract-abilist.awk $(common-objpfx)config.make \
- %.abilist %.symlist
+ $(..)abilist/%.abilist $(objpfx)%.symlist
+ $(check-abi)
+check-abi-%: $(..)scripts/extract-abilist.awk $(common-objpfx)config.make \
+ $(..)abilist/%.abilist $(common-objpfx)%.symlist
+ $(check-abi)
+define check-abi
LC_ALL=C \
- $(AWK) -f $< \
- -v 'config=$(config-machine)-$(config-vendor)-$(config-os)' \
+ $(AWK) -f $< -v 'config=$(check-abi-config)' \
$(filter %.abilist,$^) \
| diff -pu0 - $(filter %.symlist,$^)
+endef
-update-abi-%: $(..)scripts/merge-abilist.awk %.abilist %.symlist
+ifeq ($(sysd-sorted-done),t)
+include $(common-objpfx)tls.make
+config-tls-yes := tls
+config-tls-no := notls
+check-abi-config := \
+ $(config-machine)-$(config-vendor)-$(config-os)/$(config-tls-$(use-thread))
+endif
+
+update-abi-%: $(..)scripts/merge-abilist.awk $(..)abilist/%.abilist \
+ $(objpfx)%.symlist
+ $(update-abi)
+update-abi-%: $(..)scripts/merge-abilist.awk $(..)abilist/%.abilist \
+ $(common-objpfx)%.symlist
+ $(update-abi)
ifndef update-abi-config
+define update-abi
@echo 'Run $(MAKE) $@ update-abi-config=REGEXP'; exit 2
+endef
else
- LC_ALL=C $(AWK) -v config=$(update-abi-config) -f $^ > $*.abilist.new
- mv -f $*.abilist.new $*.abilist
- @echo '*** Now check $*.abilist changes for correctness ***'
+define update-abi
+LC_ALL=C $(AWK) -v config=$(update-abi-config) -f $^ \
+ > $(..)abilist/$*.abilist.new
+@if cmp -s $(..)abilist/$*.abilist.new $(..)abilist/$*.abilist 2> /dev/null; \
+ then rm -f $(..)abilist/$*.abilist.new; \
+ echo '+++ $(..)abilist/$*.abilist is unchanged'; \
+ else mv -f $(..)abilist/$*.abilist.new $(..)abilist/$*.abilist; \
+ echo '*** Now check $*.abilist changes for correctness ***'; \
+ fi
+endef
endif
.PHONY: update-abi check-abi
@@ -1168,9 +1201,8 @@ check-abi: subdir_check-abi
update-abi: subdir_update-abi
endif
-# Enable this well all the .abilist files are in place.
+# Enable this when all the .abilist files are in place.
#tests: check-abi
-generated += $(install-lib.so-versioned:.so=.symlist)
ifeq ($(subdir),elf)
check-abi: check-abi-libc
@@ -1181,21 +1213,82 @@ endif
endif
# Generating headers for assembly constants.
-$(common-objpfx)%.h $(common-objpfx)%.h.d: $(..)scripts/gen-as-const.awk %.sym
+$(common-objpfx)%.h $(common-objpfx)%.h.d: $(..)scripts/gen-as-const.awk \
+ %.sym $(before-compile)
$(AWK) -f $< $(filter %.sym,$^) \
| $(CC) -S -o - $(CFLAGS) $(CPPFLAGS) -x c - \
-MD -MF $(@:.h=.h.d)T -MT '$(@:.h=.h.d) $(@:.h.d=.h)' \
| sed -n 's/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*$$/#define \1 \2/p' > $(@:.h.d=.h)T
- sed $(sed-remove-objpfx) \
- -e 's@ *\([^ \/$$][^ \]*\)@ $$(..)\1@g' \
- -e 's@ *\.\.\/\([^ \]*\)@ $$(..)\1@g' \
+ sed $(sed-remove-objpfx) $(sed-remove-dotdot) \
$(@:.h=.h.d)T > $(@:.h=.h.d)T2
rm -f $(@:.h=.h.d)T
mv -f $(@:.h=.h.d)T2 $(@:.h=.h.d)
mv -f $(@:.h.d=.h)T $(@:.h.d=.h)
vpath %.sym $(sysdirs)
+ifeq (,$(wildcard $(gen-as-const-headers:%.sym=$(common-objpfx)%.h)))
before-compile += $(gen-as-const-headers:%.sym=$(common-objpfx)%.h)
+endif
+
+
+# There's no good place to put this - here will do.
+# The dependencies are wrong if it's run from the top level.
+ifeq ($(filter %posix, $(sysdirs)),)
+L_tmpnam = 1
+TMP_MAX = 0
+L_ctermid = 1
+L_cuserid = 1
+else
+L_tmpnam = 20
+TMP_MAX = 238328
+L_ctermid = 9
+L_cuserid = 9
+endif
+stdio_lim = $(common-objpfx)bits/stdio_lim.h
+
+$(stdio_lim:lim.h=%.h) $(stdio_lim:lim.h=%.d): $(stdio_lim:lim.h=%.st); @:
+$(stdio_lim:h=st): $(..)stdio-common/stdio_lim.h.in $(..)Rules \
+ $(common-objpfx)config.make
+ $(make-target-directory)
+ echo '#include "$(..)posix/bits/posix1_lim.h"' | \
+ SUNPRO_DEPENDENCIES='$(@:st=dT) $@' \
+ $(CC) $(+includes) -E -dM -xc - -o $(@:st=hT)
+ echo '#include "$(..)misc/sys/uio.h"' | \
+ SUNPRO_DEPENDENCIES='$(@:st=dT) $@' \
+ $(CC) -D_LIBC=1 $(+includes) -E -dM -xc - | cat - >> $(@:st=hT)
+ifdef sed-remove-objpfx
+ sed $(sed-remove-objpfx) $(@:st=dT) > $(@:st=dt)
+ cat $(@:st=dt) >> $(@:st=d)
+else
+ cat $(@:st=dT) >> $(@:st=d)
+endif
+ fopen_max=`sed -n 's/^#define OPEN_MAX //1p' $(@:st=hT)`; \
+ filename_max=`sed -n 's/^#define PATH_MAX //1p' $(@:st=hT)`; \
+ iov_max=`sed -n 's/^#define UIO_MAXIOV //p' $(@:st=hT)`; \
+ fopen_max=$${fopen_max:-16}; \
+ filename_max=$${filename_max:-1024}; \
+ if [ -z $$iov_max ]; then \
+ define_iov_max="# undef IOV_MAX"; \
+ else \
+ define_iov_max="# define IOV_MAX $$iov_max"; \
+ fi; \
+ sed -e "s/@FOPEN_MAX@/$$fopen_max/" \
+ -e "s/@FILENAME_MAX@/$$filename_max/" \
+ -e "s/@L_tmpnam@/$(L_tmpnam)/" \
+ -e "s/@TMP_MAX@/$(TMP_MAX)/" \
+ -e "s/@L_ctermid@/$(L_ctermid)/" \
+ -e "s/@L_cuserid@/$(L_cuserid)/" \
+ -e "s/@define_IOV_MAX@/$$define_iov_max/" \
+ $< > $(@:st=h.new)
+ $(move-if-change) $(@:st=h.new) $(@:st=h)
+# Remove these last so that they can be examined if something went wrong.
+ rm -f $(@:st=hT) $(@:st=dT) $(@:st=dt)
+ touch $@
+# Get dependencies.
+ifndef no_deps
+-include $(stdio_lim:h=d)
+endif
+common-generated += bits/stdio_lim.h bits/stdio_lim.d bits/stdio_lim.st
.PHONY: TAGS
TAGS: $(objpfx)distinfo $(..)MakeTAGS