Simplify config/avr/genmultilib.awk.
authorGeorg-Johann Lay <avr@gjlay.de>
Mon, 22 May 2017 12:16:21 +0000 (12:16 +0000)
committerGeorg-Johann Lay <gjl@gcc.gnu.org>
Mon, 22 May 2017 12:16:21 +0000 (12:16 +0000)
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
gcc/config/avr/genmultilib.awk
gcc/config/avr/t-avr
gcc/config/avr/t-multilib

index 0a3ea11..1384587 100644 (file)
@@ -1,3 +1,12 @@
+2017-05-22  Georg-Johann Lay  <avr@gjlay.de>
+
+       * 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  <hubicka@ucw.cz>
 
        * ipa-inline-analysis.c (inline_summary::reset): Do not reset
index b28ce79..ff93c1b 100644 (file)
 # 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
 }
index e725d58..251e52e 100644 (file)
@@ -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) > $@
index 8389422..dbbf3bc 100644 (file)
 
 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