From: Roland McGrath Date: Fri, 27 Dec 2002 23:05:53 +0000 (+0000) Subject: 2002-12-27 Roland McGrath X-Git-Tag: upstream/2.20~13423 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=aad08dbad983a352492542a61478074e5869dec6;p=platform%2Fupstream%2Flinaro-glibc.git 2002-12-27 Roland McGrath * scripts/gen-as-const.awk: New file. * Makefile (distribute): Add it. * Makerules ($(common-objpfx)%.h %.h.d: %.sym): New pattern rule. (before-compile): Add $(gen-as-const-headers:%.sym=$(common-objpfx)%.h) to the list. (+depfiles): Add $(addprefix $(common-objpfx),$(gen-as-const-headers)). --- diff --git a/Makefile b/Makefile index 3a92ccb..b48738c 100644 --- a/Makefile +++ b/Makefile @@ -280,7 +280,7 @@ distribute := README README.libm INSTALL FAQ FAQ.in NOTES NEWS BUGS \ test-installation.pl gen-FAQ.pl versions.awk\ gen-sorted.awk abi-versions.awk abilist.awk \ firstversions.awk documented.sh cpp \ - output-format.sed) + output-format.sed gen-as-const.awk) distribute := $(strip $(distribute)) generated := $(generated) stubs.h diff --git a/Makerules b/Makerules index df56d7a..7e31ef7 100644 --- a/Makerules +++ b/Makerules @@ -663,7 +663,8 @@ ifeq ($(build-programs),yes) endif +depfiles := $(addprefix $(objpfx),\ $(filter-out $(addsuffix .d,$(omit-deps)),\ - $(+depfiles))) + $(+depfiles))) \ + $(addprefix $(common-objpfx),$(gen-as-const-headers:.sym=.h.d)) ifdef +depfiles ifneq ($(no_deps),t) @@ -1177,6 +1178,23 @@ common-generated += libc.symlist endif endif + +# Generating headers for assembly constants. +$(common-objpfx)%.h $(common-objpfx)%.h.d: $(..)scripts/gen-as-const.awk %.sym + $(AWK) -f $^ \ + | $(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-]*\).*@@@end@@@.*$$/#define \1 \2/p' > $(@:.h.d=.h)T + sed $(sed-remove-objpfx) \ + -e 's@ *\([^ \/][^ \]*\)@ $$(..)\1@g' \ + -e 's@ *\.\.\/\([^ \]*\)@ $$(..)\1@g' \ + $(@:.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) + +before-compile += $(gen-as-const-headers:%.sym=$(common-objpfx)%.h) .PHONY: TAGS TAGS: $(objpfx)distinfo $(..)MakeTAGS diff --git a/scripts/gen-as-const.awk b/scripts/gen-as-const.awk new file mode 100644 index 0000000..b29656e --- /dev/null +++ b/scripts/gen-as-const.awk @@ -0,0 +1,29 @@ +# Script used in producing headers of assembly constants from C expressions. +# The input to this script looks like: +# #cpp-directive ... +# NAME1 +# NAME2 expression ... +# The output of this script is C code to be run through gcc -S and then +# massaged to extract the integer constant values of the given C expressions. +# A line giving just a name implies an expression consisting of just that name. + +BEGIN { started = 0 } + +# cpp directives go straight through. +/^#/ { print; next } + +NF >= 1 && !started { + print "void dummy(void) {"; + started = 1; +} + +NF == 1 { sub(/^.*$/, "& &"); } + +NF > 1 { + name = $1; + sub(/^[^ ]+[ ]+/, ""); + printf "asm (\"@@@name@@@%s@@@value@@@%%0@@@end@@@\" : : \"i\" (%s));\n", + name, $0; +} + +END { if (started) print "}" }