diff options
Diffstat (limited to 'Makerules')
-rw-r--r-- | Makerules | 44 |
1 files changed, 14 insertions, 30 deletions
@@ -232,42 +232,26 @@ ifdef gen-py-const-headers py-const-files := $(patsubst %.pysym,%.py,$(gen-py-const-headers)) py-const-dir := $(objpfx) py-const := $(addprefix $(py-const-dir),$(py-const-files)) -py-const-script := $(..)scripts/gen-py-const.awk +py-const-script := $(..)scripts/gen-as-const.py -# This is a hack we use to generate .py files with constants for Python -# pretty printers. It works the same way as gen-as-const. -# See scripts/gen-py-const.awk for details on how the awk | gcc mechanism -# works. +# This is a hack we use to generate .py files with constants for +# Python code. # -# $@.tmp and $@.tmp2 are temporary files we use to store the partial contents -# of the target file. We do this instead of just writing on $@ because, if the -# build process terminates prematurely, re-running Make wouldn't run this rule -# since Make would see that the target file already exists (despite it being -# incomplete). +# $@.tmp is a temporary file we use to store the partial contents of +# the target file. We do this instead of just writing on $@ because, +# if the build process terminates prematurely, re-running Make +# wouldn't run this rule since Make would see that the target file +# already exists (despite it being incomplete). # -# The sed line replaces "@name@SOME_NAME@value@SOME_VALUE@" strings from the -# output of 'gcc -S' with "SOME_NAME = SOME_VALUE" strings. -# The '-n' option, combined with the '/p' command, makes sed output only the -# modified lines instead of the whole input file. The output is redirected -# to a .py file; we'll import it in the pretty printers file to read -# the constants generated by gen-py-const.awk. -# The regex has two capturing groups, for SOME_NAME and SOME_VALUE -# respectively. Notice SOME_VALUE may be prepended by a special character, -# depending on the assembly syntax (e.g. immediates are prefixed by a '$' -# in AT&T x86, and by a '#' in ARM). We discard it using a complemented set -# before the second capturing group. +# The output is redirected to a .py file; we'll import it in the main +# Python code to read the constants generated by gen-as-const.py. $(py-const): $(py-const-dir)%.py: %.pysym $(py-const-script) \ $(common-before-compile) $(make-target-directory) - $(AWK) -f $(py-const-script) $< \ - | $(CC) -S -o $@.tmp $(CFLAGS) $(CPPFLAGS) -x c - - echo '# GENERATED FILE\n' > $@.tmp2 - echo '# Constant definitions for pretty printers.' >> $@.tmp2 - echo '# See gen-py-const.awk for details.\n' >> $@.tmp2 - sed -n -r 's/^.*@name@([^@]+)@value@[^[:xdigit:]Xx-]*([[:xdigit:]Xx-]+)@.*/\1 = \2/p' \ - $@.tmp >> $@.tmp2 - mv -f $@.tmp2 $@ - rm -f $@.tmp + $(PYTHON) $(py-const-script) --python \ + --cc="$(CC) $(CFLAGS) $(CPPFLAGS)" $< \ + > $@.tmp + mv -f $@.tmp $@ generated += $(py-const) endif # gen-py-const-headers |