1 # Copyright (C) 2011-2013 Free Software Foundation, Inc.
3 # This file is part of GCC.
5 # GCC is free software; you can redistribute it and/or modify it under
6 # the terms of the GNU General Public License as published by the Free
7 # Software Foundation; either version 3, or (at your option) any later
10 # GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11 # WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 # You should have received a copy of the GNU General Public License
16 # along with GCC; see the file COPYING3. If not see
17 # <http://www.gnu.org/licenses/>.
19 ##################################################################
21 # Transform Core/Device Information from avr-mcus.def to a
22 # Representation that is understood by GCC's multilib Machinery.
24 # The Script works as a Filter from STDIN to STDOUT.
26 # FORMAT = "Makefile": Generate Makefile Snipet that sets some
27 # MULTILIB_* Variables as needed.
29 ##################################################################
40 mtiny
[1] =
"tiny-stack"
41 option
["tiny-stack"] =
"msp8"
44 ##################################################################
45 # Add some Comments to the generated Files and copy-paste
46 # Copyright Notice from above.
47 ##################################################################
52 else if (comment ==
1)
54 if (FORMAT ==
"Makefile")
56 print "# Auto-generated Makefile Snip"
57 print "# Generated by : ./gcc/config/avr/genmultilib.awk"
58 print "# Generated from : ./gcc/config/avr/avr-mcus.def"
59 print "# Used by : tmake_file from Makefile and genmultilib"
70 # The first empty line stops copy-pasting the GPL comments
71 # from this file to the generated file.
76 ##################################################################
77 # Run over all AVR_MCU Lines and gather Information:
78 # cores[] : Enumerates the Cores (avr2, avr25, ...)
79 # mcu[] : Enumerates the Devices
80 # tiny_stack[]: Maps Core/Device to 0 (2-byte SP) or 1 (1-byte SP)
81 # option[] : Maps Core/Device to the mmcu= option to get it
82 # toCore[] : Maps Device to its Core
83 ##################################################################
93 # avr1 is supported for Assembler only: It gets no multilib
100 option
[core
] =
"mmcu=" core
105 # avr1 is supported for Assembler only: Its Devices are ignored
109 tiny_stack
[name
] = $
5
112 option
[name
] =
"mmcu=" name
115 if (tiny_stack
[name
] ==
1)
119 ##################################################################
121 # We gathered all the Information, now build/output the following:
123 # awk Variable target Variable FORMAT
124 # -----------------------------------------------------------
125 # m_options <-> MULTILIB_OPTIONS Makefile
126 # m_dirnames <-> MULTILIB_DIRNAMES "
127 # m_exceptions <-> MULTILIB_EXCEPTIONS "
128 # m_matches <-> MULTILIB_MATCHES "
130 ##################################################################
133 m_options =
"\nMULTILIB_OPTIONS = "
134 m_dirnames =
"\nMULTILIB_DIRNAMES ="
135 m_exceptions =
"\nMULTILIB_EXCEPTIONS ="
136 m_matches =
"\nMULTILIB_MATCHES ="
138 ##############################################################
139 # Compose MULTILIB_OPTIONS. This represents the Cross-Product
140 # (avr2, avr25, ...) x msp8
143 for (c =
0; c
< n_cores
; c
++)
145 m_options = m_options sep option
[cores
[c
]]
150 m_options = m_options
" " option
[mtiny
[1]]
152 ##############################################################
153 # Map Device to its multilib
155 for (t =
0; t
< n_mcu
; t
++)
157 core = toCore
[mcu
[t
]]
159 line = option
[core
] ":" option
[mcu
[t
]]
160 gsub ("=", "?", line
)
161 gsub (":", "=", line
)
163 m_matches = m_matches
" \\\n\t" line
166 ####################################################################
167 # Compose MULTILIB_DIRNAMES and MULTILIB_EXEPTIONS
170 for (t =
0; t
< n_mtiny
; t
++)
171 for (c =
-1; c
< n_cores
; c
++)
178 # The Directory Name for this multilib
180 if (core
!= "" && mtiny
[t
] != "")
182 mdir = core
"/" mtiny
[t
]
183 mopt = option
[core
] "/" option
[mtiny
[t
]]
188 mopt = option
[core
] option
[mtiny
[t
]]
191 if (core
!= "" && tiny_stack
[core
] ==
0 && mtiny
[t
] != "")
193 # There's not a single SP = 8 Devices for this Core:
194 # Don't build respective multilib
195 m_exceptions = m_exceptions
" \\\n\t" mopt
199 if (core
!= "avr2" || mtiny
[t
] ==
"")
200 m_dirnames = m_dirnames
" " mdir
203 ############################################################
205 ############################################################
207 if (FORMAT ==
"Makefile")
209 # Intended Target: ./gcc/config/avr/t-multilib