summaryrefslogtreecommitdiff
path: root/config/cc/gcc.in.2
blob: aad488b472bdec62e87360cf8a81d24b3a54b10d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
# gcc configuration options

config CC_GCC_ENABLE_CXX_FLAGS
    string
    prompt "Flags to pass to --enable-cxx-flags"
    default ""
    help
      Enter here the value of the gcc's ./configure option --enable-cxx-flags.
      Leave empty if you don't know better.
      
      Note: just pass in the option _value_, that is only the part that goes
      after the '=' sign.

config CC_GCC_CORE_EXTRA_CONFIG_ARRAY
    string
    prompt "Core gcc extra config"
    default ""
    depends on CC_CORE_PASS_1_NEEDED || CC_CORE_PASS_2_NEEDED
    help
      Extra flags to pass onto ./configure when configuring the core gcc.
      
      The core gcc is a stripped down, C-only compiler needed to build
      the C library. Kinda bootstrap gcc, if you wish.
      
      You can enter multiple arguments here, and arguments can contain spaces
      if they are properly quoted (or escaped, but prefer quotes). Eg.:
          --with-foo="1st arg with 4 spaces" --with-bar=2nd-arg-without-space

config CC_GCC_EXTRA_CONFIG_ARRAY
    string
    prompt "gcc extra config"
    default ""
    help
      Extra flags to pass onto ./configure when configuring gcc.
      
      You can enter multiple arguments here, and arguments can contain spaces
      if they are properly quoted (or escaped, but prefer quotes). Eg.:
          --with-foo="1st arg with 4 spaces" --with-bar=2nd-arg-without-space

config CC_GCC_MULTILIB_LIST
    string
    prompt "List of multilib variants"
    depends on MULTILIB
    help
      Architecture-specific option of expanding or restricting the list of
      the multilib variants to be built. Refer to GCC installation manual
      for the format of this option for a particular architecture.
      Leave empty to use the default list for this architecture.

config CC_GCC_TARGET_FINAL
    bool
    prompt "Use the default targets all and install for the final compiler"
    default n
    depends on BARE_METAL
    help
      The final GCC for a bare metal system is built by the core gcc script.
      This script does a lot of tricks to build the core gcc, which are not
      required for the final gcc build. If you set this flag to true, all the
      tricks are not done and the compiler is build with all/install.

config STATIC_TOOLCHAIN
    bool
    select CC_GCC_STATIC_LIBSTDCXX

config CC_GCC_STATIC_LIBSTDCXX
    bool
    prompt "Link libstdc++ statically into the gcc binary"
    default y
    depends on CONFIGURE_has_static_link
    select WANTS_STATIC_LINK
    help
      Newer gcc versions require some c++ libraries. So statically
      linking libstdc++ increases the likeliness that the gcc binary will
      run on machines other than the one which it was built on, without
      having to worry about distributing the matching version of libstdc++
      along with it.

config CC_GCC_SYSTEM_ZLIB
    bool
    prompt "Use system zlib"
    help
      Do not use bundled zlib, and use the zlib already available for
      the host (eg. the system library).

      If zlib is built as a companion library, selecting this option
      will use it.
      
      If you want to build a static toolchain, you will need to also
      install the static version of zlib for your host.
      
      If unsure, say 'n'.

#-----------------------------------------------------------------------------
# Optimisation features

comment "Optimisation features"

# Defined in config/cc/gcc.in
config CC_GCC_USE_GRAPHITE
    prompt "Enable GRAPHITE loop optimisations"

# The way LTO works is a bit twisted.
# See: http://gcc.gnu.org/wiki/LinkTimeOptimization#Requirements
# Basically:
#   - if binutils has plugins: LTO is handled by ld/gold by loading
#     the plugin when linking
#   - if binutils does not have plugins: LTO is handled by collect2
# In any case, LTO support does not depend on plugins, but takes
# advantage of it
# Also, only the 4.5 series needs libelf for LTO; 4.6 has dropped
# the dependency.
# Defined in config/cc/gcc.in
config CC_GCC_USE_LTO
    prompt "Enable LTO"

#-----------------------------------------------------------------------------
comment "Settings for libraries running on target"

config CC_GCC_ENABLE_TARGET_OPTSPACE
    bool
    prompt "Optimize gcc libs for size"
    default y
    help
      Pass --enable-target-optspace to crossgcc's configure.
      
      This will compile crossgcc's libs with -Os.

config CC_GCC_LIBMUDFLAP
    bool
    prompt "Compile libmudflap"
    help
      libmudflap is a pointer-use checking tool, which can detect
      various mis-usages of pointers in C and (to some extents) C++.
      
      You should say 'N' here, as libmduflap generates instrumented
      code (thus it is a bit bigger and a bit slower) and requires
      re-compilation and re-link, while it exists better run-time
      alternatives (eg. DUMA, dmalloc...) that need neither re-
      compilation nor re-link.

config CC_GCC_LIBGOMP
    bool
    prompt "Compile libgomp"
    depends on !THREADS_NONE
    help
      libgomp is "the GNU implementation of the OpenMP Application Programming
      Interface (API) for multi-platform shared-memory parallel programming in
      C/C++ and Fortran". See:
        http://gcc.gnu.org/onlinedocs/libgomp/

      GNU OpenMP support requires threading.

      The default is 'N'. Say 'Y' if you need it, and report success/failure.

config CC_GCC_LIBSSP
    bool
    prompt "Compile libssp"
    help
      libssp is the run-time Stack-Smashing Protection library.
      
      The default is 'N'. Say 'Y' if you need it, and report success/failure.

config CC_GCC_LIBQUADMATH
    bool
    prompt "Compile libquadmath"
    depends on CC_GCC_HAS_LIBQUADMATH
    help
      libquadmath is a library which provides quad-precision mathematical
      functions on targets supporting the __float128 datatype. See:
        http://gcc.gnu.org/onlinedocs/libquadmath/
      
      The default is 'N'. Say 'Y' if you need it, and report success/failure.

config CC_GCC_LIBSANITIZER
    bool
    prompt "Compile libsanitizer"
    depends on CC_GCC_HAS_LIBSANITIZER
    depends on THREADS_NATIVE
    depends on ! LIBC_uClibc && ! LIBC_musl # Currently lacks required headers (like netrom.h)
    help
      libsanitizer is a library which provides run-time sanitising of either
      or both of:
        - memory access patterns (out-of-bonds, use-after-free)
        - racy data accesses (in multi-threaded programs)

      The default is 'N'. Say 'Y' if you need it, and report success/failure.

config CC_GCC_LIBMPX
    bool
    default y
    prompt "Compile libmpx"
    depends on CC_GCC_HAS_LIBMPX
    depends on ARCH_x86
    # MUSL does not define libc types that GCC requires. Mingw lacks certain headers.
    depends on !LIBC_musl && ! LIBC_mingw
    help
      Enable GCC support for Intel Memory Protection Extensions (MPX).

#-----------------------------------------------------------------------------

comment "Misc. obscure options."

config CC_CXA_ATEXIT
    bool
    prompt "Use __cxa_atexit"
    default y
    depends on ! BARE_METAL || LIBC_PROVIDES_CXA_ATEXIT
    help
      If you get the missing symbol "__cxa_atexit" when building C++ programs,
      you might want to try disabling this option.

config CC_GCC_DISABLE_PCH
    bool
    prompt "Do not build PCH"
    help
      Say 'y' here to not use Pre-Compiled Headers in the resulting toolchain.
      at the expense of speed when compiling C++ code.
      
      For some configurations (most notably canadian?), PCH are broken, and
      need to be disabled. Please see:
        http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40974

config CC_GCC_SJLJ_EXCEPTIONS
    tristate
    prompt "Use sjlj for exceptions"
    depends on ! BARE_METAL
    default m
    help
      'sjlj' is short for setjmp/longjmp.
      
      On some architectures, stack unwinding during exception handling
      works perfectly well without using sjlj, while on some others,
      use of sjlj is required for proper stack unwinding.
      
       Option  | sjlj use           | Associated ./configure switch
      ---------+--------------------+--------------------------------
         Y     | forcibly used      | --enable-sjlj-exceptions
         M     | auto               | (none, ./configure decides)
         N     | forcibly not used  | --disable-sjlj-exceptions
      
      It should be safe to say 'M' or 'N'.
      
      It can happen that ./configure is wrong in some cases. Known
      case is for ARM big endian, where you should say 'N'.

config CC_GCC_LDBL_128
    tristate
    prompt "Enable 128-bit long doubles"
    default m
    help
      Saying 'Y' will force gcc to use 128-bit wide long doubles
      Saying 'N' will force gcc to use 64-bit wide long doubles
      Saying 'M' will let gcc choose (default is 128-bit for
                 glibc >= 2.4, 64-bit otherwise)
      
      If in doubt, keep the default, ie. 'M'.

config CC_GCC_BUILD_ID
    bool
    prompt "Enable build-id"
    depends on CC_GCC_HAS_BUILD_ID
    help
      Tells GCC to pass --build-id option to the linker for all final
      links (links performed without the -r or --relocatable option),
      if the linker supports it. If you say 'y' here, but your linker
      does not support --build-id option, a warning is issued and this
      option is ignored.
      
      The default is off.

choice CC_GCC_LNK_HASH_STYLE_CHOICE
    bool
    prompt "linker hash style"
    depends on CC_GCC_HAS_LNK_HASH_STYLE
    depends on BINUTILS_HAS_HASH_STYLE

config CC_GCC_LNK_HASH_STYLE_DEFAULT
    bool
    prompt "Default"
    help
      Do not specify any value, and use the default value (sysv).

config CC_GCC_LNK_HASH_STYLE_SYSV
    bool
    prompt "sysv"
    help
      Force use of the SYSV hash style.

config CC_GCC_LNK_HASH_STYLE_GNU
    bool
    prompt "gnu"
    help
      Force use of the GNU hash style.

config CC_GCC_LNK_HASH_STYLE_BOTH
    bool
    prompt "both"
    help
      Force use of both hash styles.

endchoice # CC_GCC_LNK_HASH_STYLE_CHOICE

config CC_GCC_LNK_HASH_STYLE
    string
    default ""      if CC_GCC_LNK_HASH_STYLE_DEFAULT
    default "sysv"  if CC_GCC_LNK_HASH_STYLE_SYSV
    default "gnu"   if CC_GCC_LNK_HASH_STYLE_GNU
    default "both"  if CC_GCC_LNK_HASH_STYLE_BOTH

choice CC_GCC_DEC_FLOATS_CHOICE
    bool "Decimal floats"
    default CC_GCC_DEC_FLOATS_AUTO
    help
      Choose what type of decimal floats to support.
      
      Note that using decimal floats requires a C library that provides
      support for fenv (namely, the fenv.h header).  This is the case
      for (e)glibc, and uClibc on x86/32.  For other C libraries, or
      uClibc on other archs, this might not be the case, so you should
      disable support for decimal floats.
      
      The default is to let ./configure decide.

config CC_GCC_DEC_FLOAT_AUTO
    bool "auto"
    help
      Let ./configure decide. If you say 'y' here, gcc will default to:
        - 'bid' for x86 (32- and 64-bit)
        - 'dpd' for powerpc
        - 'no' for the other architectures

config CC_GCC_DEC_FLOAT_BID
    bool "bid"
    help
      Use the 'binary integer decimal' format for decimal floats.

config CC_GCC_DEC_FLOAT_DPD
    bool "dpd"
    help
      Use the 'densely packed decimal' for decimal floats.

config CC_GCC_DEC_FLOATS_NO
    bool "no"
    help
      Do not support decimal floats. The default.

endchoice # CC_GCC_DEC_FLOATS_CHOICE

config CC_GCC_DEC_FLOATS
    string
    default ""      if CC_GCC_DEC_FLOATS_AUTO
    default "bid"   if CC_GCC_DEC_FLOATS_BID
    default "dpd"   if CC_GCC_DEC_FLOATS_DPD
    default "no"    if CC_GCC_DEC_FLOATS_NO

#-----------------------------------------------------------------------------

config CC_GCC_HAS_ARCH_OPTIONS
    bool

comment "archictecture-specific options"
    depends on CC_GCC_HAS_ARCH_OPTIONS

if ARCH_mips
source "config/cc/gcc.in.mips"
endif # ARCH_mips