From 6aea3c3720b89f43b3fd6553a8a70fa5fc26dd4b Mon Sep 17 00:00:00 2001 From: Georg-Johann Lay Date: Mon, 22 May 2017 12:16:21 +0000 Subject: [PATCH] Simplify config/avr/genmultilib.awk. gcc/ Simplify config/avr/genmultilib.awk. * config/avr/t-avr (AWK) [t-multilib]: Remove "-v FORMAT=Makefile" command option from $(AWK) call. * config/avr/genmultilib.awk: Simplify and rewrite so that it generates MULTILIB_REQUIRED instead of MULTILIB_EXCEPTIONS. [FORMAT]: Remove handling of variable. * config/avr/t-multilib: Regenerate. From-SVN: r248332 --- gcc/ChangeLog | 9 ++ gcc/config/avr/genmultilib.awk | 169 +++++++++------------------------ gcc/config/avr/t-avr | 7 +- gcc/config/avr/t-multilib | 33 ++++--- 4 files changed, 77 insertions(+), 141 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0a3ea11a404..13845877a02 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2017-05-22 Georg-Johann Lay + + * config/avr/t-avr (AWK) [t-multilib]: Remove "-v FORMAT=Makefile" + command option from $(AWK) call. + * config/avr/genmultilib.awk: Simplify and rewrite so that it + generates MULTILIB_REQUIRED instead of MULTILIB_EXCEPTIONS. + [FORMAT]: Remove handling of variable. + * config/avr/t-multilib: Regenerate. + 2017-05-22 Jan Hubicka * ipa-inline-analysis.c (inline_summary::reset): Do not reset diff --git a/gcc/config/avr/genmultilib.awk b/gcc/config/avr/genmultilib.awk index b28ce79df95..ff93c1b7638 100644 --- a/gcc/config/avr/genmultilib.awk +++ b/gcc/config/avr/genmultilib.awk @@ -22,23 +22,28 @@ # Representation that is understood by GCC's multilib Machinery. # # The Script works as a Filter from STDIN to STDOUT. -# -# FORMAT = "Makefile": Generate Makefile Snipet that sets some -# MULTILIB_* Variables as needed. +# It generates a Makefile Snippet that sets some +# MULTILIB_* Variables as needed. # ################################################################## BEGIN { FS ="[(, \t]+" option[""] = "" - tiny_stack[""] = 1 comment = 1 - n_mcu = 0 - n_cores = 0 - mtiny[0] = "" - mtiny[1] = "tiny-stack" - option["tiny-stack"] = "msp8" + dir_tiny = "tiny-stack" + opt_tiny = "msp8" + + # awk Variable Makefile Variable + # ------------------------------------------ + # m_options <-> MULTILIB_OPTIONS + # m_dirnames <-> MULTILIB_DIRNAMES + # m_required <-> MULTILIB_REQUIRED + m_sep = "" + m_options = "\nMULTILIB_OPTIONS = " + m_dirnames = "\nMULTILIB_DIRNAMES =" + m_required = "\nMULTILIB_REQUIRED =" } ################################################################## @@ -51,14 +56,11 @@ BEGIN { next else if (comment == 1) { - if (FORMAT == "Makefile") - { - print "# Auto-generated Makefile Snip" - print "# Generated by : ./gcc/config/avr/genmultilib.awk" - print "# Generated from : ./gcc/config/avr/avr-mcus.def" - print "# Used by : tmake_file from Makefile and genmultilib" - print "" - } + print "# Auto-generated Makefile Snip" + print "# Generated by : ./gcc/config/avr/genmultilib.awk" + print "# Generated from : ./gcc/config/avr/avr-mcus.def" + print "# Used by : tmake_file from Makefile and genmultilib" + print "" } comment = 2; @@ -74,12 +76,10 @@ BEGIN { } ################################################################## -# Run over all AVR_MCU Lines and gather Information: -# cores[] : Enumerates the Cores (avr2, avr25, ...) -# mcu[] : Enumerates the Devices -# tiny_stack[]: Maps Core/Device to 0 (2-byte SP) or 1 (1-byte SP) -# option[] : Maps Core/Device to the mmcu= option to get it -# toCore[] : Maps Device to its Core +# Run over all AVR_MCU Lines. If we encounter a required multilib +# variant, add according combination of options to m_required, +# but onyl once. Add encountered cores to m_dirnames and +# according -mmcu= options to m_options. ################################################################## /^AVR_MCU/ { @@ -94,11 +94,12 @@ BEGIN { if (core == "avr1") next - cores[n_cores] = core - n_cores++ - tiny_stack[core] = 0 option[core] = "mmcu=" core + m_options = m_options m_sep option[core] + m_dirnames = m_dirnames " " core + m_sep = "/" + next } @@ -106,116 +107,40 @@ BEGIN { if (core == "avr1") next + opts = option[core] + # split device specific feature list n = split($4,dev_attribute,"|") - # set tiny_stack false by default - tiny_stack[name] = 0 for (i=1; i <= n; i++) - if (dev_attribute[i] == "AVR_SHORT_SP") { - tiny_stack[name] = 1 - break - } - - mcu[n_mcu] = name - n_mcu++ - option[name] = "mmcu=" name - toCore[name] = core - - if (tiny_stack[name] == 1) - tiny_stack[core] = 1 -} - -################################################################## -# -# We gathered all the Information, now build/output the following: -# -# awk Variable target Variable FORMAT -# ----------------------------------------------------------- -# m_options <-> MULTILIB_OPTIONS Makefile -# m_dirnames <-> MULTILIB_DIRNAMES " -# m_exceptions <-> MULTILIB_EXCEPTIONS " -# -################################################################## - -END { - m_options = "\nMULTILIB_OPTIONS = " - m_dirnames = "\nMULTILIB_DIRNAMES =" - m_exceptions = "\nMULTILIB_EXCEPTIONS =" - - ############################################################## - # Compose MULTILIB_OPTIONS. This represents the Cross-Product - # (avr2, avr25, ...) x msp8 - - sep = "" - for (c = 0; c < n_cores; c++) { - m_options = m_options sep option[cores[c]] - sep = "/" + if (dev_attribute[i] == "AVR_SHORT_SP") + opts = opts "/" opt_tiny } - # The ... x msp8 - m_options = m_options " " option[mtiny[1]] - - ############################################################## - # Map Device to its multilib - - for (t = 0; t < n_mcu; t++) + if (!have[opts]) { - core = toCore[mcu[t]] - - line = option[core] ":" option[mcu[t]] - gsub ("=", "?", line) - gsub (":", "=", line) + have[opts] = 1 + # Some special handling for the default mmcu: Remove a + # leading "mmcu=avr2/" in order not to confuse genmultilib. + opts = gensub (/mmcu=avr2\//, "", 1, opts) + if (opts != "mmcu=avr2") + m_required = m_required " \\\n\t" opts } +} - #################################################################### - # Compose MULTILIB_DIRNAMES and MULTILIB_EXEPTIONS - - n_mtiny = 2 - for (t = 0; t < n_mtiny; t++) - for (c = -1; c < n_cores; c++) - { - if (c == -1) - core = "" - else - core = cores[c] - - # The Directory Name for this multilib - - if (core != "" && mtiny[t] != "") - { - mdir = core "/" mtiny[t] - mopt = option[core] "/" option[mtiny[t]] - } - else - { - mdir = core mtiny[t] - mopt = option[core] option[mtiny[t]] - } - - if (core != "" && tiny_stack[core] == 0 && mtiny[t] != "") - { - # There's not a single SP = 8 Devices for this Core: - # Don't build respective multilib - m_exceptions = m_exceptions " \\\n\t" mopt - continue - } - - if (core != "avr2" || mtiny[t] == "") - m_dirnames = m_dirnames " " mdir - } +################################################################## +# +################################################################## +END { ############################################################ # Output that Stuff ############################################################ - if (FORMAT == "Makefile") - { - # Intended Target: ./gcc/config/avr/t-multilib + # Intended Target: ./gcc/config/avr/t-multilib - print m_options - print m_dirnames - print m_exceptions - } + print m_options " " opt_tiny + print m_dirnames " " dir_tiny + print m_required } diff --git a/gcc/config/avr/t-avr b/gcc/config/avr/t-avr index e725d58ca8e..251e52edc37 100644 --- a/gcc/config/avr/t-avr +++ b/gcc/config/avr/t-avr @@ -89,14 +89,13 @@ install-device-specs: s-device-specs installdirs $(INSTALL_DATA) $${file} $(DESTDIR)$(libsubdir)/$${file}; \ done -# Map -mmcu= to the right multilib variant +# Get multilib layout # MULTILIB_OPTIONS # MULTILIB_DIRNAMES -# MULTILIB_EXCEPTIONS -# MULTILIB_MATCHES +# MULTILIB_REQUIRED s-mlib: $(srcdir)/config/avr/t-multilib $(srcdir)/config/avr/t-multilib: $(srcdir)/config/avr/genmultilib.awk \ $(AVR_MCUS) - $(AWK) -f $< -v FORMAT=Makefile $< $(AVR_MCUS) > $@ + $(AWK) -f $< $< $(AVR_MCUS) > $@ diff --git a/gcc/config/avr/t-multilib b/gcc/config/avr/t-multilib index 83894226159..dbbf3bcb5cb 100644 --- a/gcc/config/avr/t-multilib +++ b/gcc/config/avr/t-multilib @@ -23,19 +23,22 @@ MULTILIB_OPTIONS = mmcu=avr2/mmcu=avr25/mmcu=avr3/mmcu=avr31/mmcu=avr35/mmcu=avr4/mmcu=avr5/mmcu=avr51/mmcu=avr6/mmcu=avrxmega2/mmcu=avrxmega4/mmcu=avrxmega5/mmcu=avrxmega6/mmcu=avrxmega7/mmcu=avrtiny msp8 -MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega2 avrxmega4 avrxmega5 avrxmega6 avrxmega7 avrtiny tiny-stack avr25/tiny-stack +MULTILIB_DIRNAMES = avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega2 avrxmega4 avrxmega5 avrxmega6 avrxmega7 avrtiny tiny-stack -MULTILIB_EXCEPTIONS = \ - mmcu=avr3/msp8 \ - mmcu=avr31/msp8 \ - mmcu=avr35/msp8 \ - mmcu=avr4/msp8 \ - mmcu=avr5/msp8 \ - mmcu=avr51/msp8 \ - mmcu=avr6/msp8 \ - mmcu=avrxmega2/msp8 \ - mmcu=avrxmega4/msp8 \ - mmcu=avrxmega5/msp8 \ - mmcu=avrxmega6/msp8 \ - mmcu=avrxmega7/msp8 \ - mmcu=avrtiny/msp8 +MULTILIB_REQUIRED = \ + msp8 \ + mmcu=avr25 \ + mmcu=avr25/msp8 \ + mmcu=avr3 \ + mmcu=avr31 \ + mmcu=avr35 \ + mmcu=avr4 \ + mmcu=avr5 \ + mmcu=avr51 \ + mmcu=avr6 \ + mmcu=avrxmega2 \ + mmcu=avrxmega4 \ + mmcu=avrxmega5 \ + mmcu=avrxmega6 \ + mmcu=avrxmega7 \ + mmcu=avrtiny -- 2.30.2