summaryrefslogtreecommitdiff
path: root/toolchain/toolchain-common.in
blob: 96d5709763e15bec951bcab972ff2d894f55a782 (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
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
# Generic toolchain options

# we want gdb config in the middle of both source and external
# toolchains, but mconf won't let us source the same file twice,
# so put it here instead
source "package/gdb/Config.in.host"

comment "Toolchain Generic Options"

# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64735
# exception_ptr, nested_exception, and future from libstdc++ are not
# available for architectures not supporting always lock-free atomic
# ints before GCC 7
config BR2_TOOLCHAIN_HAS_GCC_BUG_64735
	bool
	default y if BR2_nios2
	default y if BR2_ARM_CPU_ARMV4
	default y if BR2_ARM_CPU_ARMV5
	default y if BR2_sparc_v8

# https://sourceware.org/bugzilla/show_bug.cgi?id=19405
config BR2_TOOLCHAIN_HAS_BINUTILS_BUG_19405
	bool

config BR2_TOOLCHAIN_HAS_NATIVE_RPC
	bool

config BR2_USE_WCHAR
	bool

config BR2_ENABLE_LOCALE
	bool

config BR2_INSTALL_LIBSTDCPP
	bool

config BR2_TOOLCHAIN_HAS_FORTRAN
	bool

config BR2_TOOLCHAIN_HAS_THREADS
	bool

config BR2_TOOLCHAIN_HAS_THREADS_DEBUG
	bool

config BR2_TOOLCHAIN_HAS_THREADS_NPTL
	bool

config BR2_TOOLCHAIN_HAS_SHADOW_PASSWORDS
	bool

config BR2_TOOLCHAIN_HAS_SSP
	bool

config BR2_TOOLCHAIN_SUPPORTS_PIE
	bool

config BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY
	bool "Copy gconv libraries"
	depends on BR2_TOOLCHAIN_USES_GLIBC
	help
	  The gconv libraries are used to convert between different
	  character sets (charsets).

	  Say 'y' if you need to store and/or display different charsets.

config BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_LIST
	string "Gconv libraries to copy"
	depends on BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY
	help
	  Set to the list of gconv libraries to copy.
	  Leave empty to copy all gconv libraries.

	  Specify only the basename of the libraries, leave
	  out the .so extension. Eg.:
	    IBM850 ISO8859-15 UNICODE

	  Note: the full set of gconv libs are ~8MiB (on ARM).

# glibc and eglibc directly include gettext, so a separatly compiled
# gettext isn't needed and shouldn't be built to avoid conflicts. Some
# packages always need gettext, other packages only need gettext when
# locale support is enabled. See the documentation for how packages
# should rely on the following two options.

config BR2_NEEDS_GETTEXT
	bool
	default y if BR2_TOOLCHAIN_USES_UCLIBC

config BR2_NEEDS_GETTEXT_IF_LOCALE
	bool
	default y if (BR2_NEEDS_GETTEXT && BR2_ENABLE_LOCALE)

config BR2_USE_MMU
	bool "Enable MMU support" if BR2_ARCH_HAS_MMU_OPTIONAL
	default y if BR2_ARCH_HAS_MMU_OPTIONAL || BR2_ARCH_HAS_MMU_MANDATORY
	help
	  If your target has a MMU, you should say Y here.  If you
	  are unsure, just say Y.

config BR2_TARGET_OPTIMIZATION
	string "Target Optimizations"
	default ""
	help
	  Optimizations to use when building for the target host.
	  NOTE: gcc optimization level is defined in build options.

config BR2_TARGET_LDFLAGS
	string "Target linker options"
	help
	  Extra options to pass to the linker when building for the target.

	  Note that options with a '$' sign (eg. -Wl,-rpath='$ORIGIN/../lib')
	  are not supported.

config BR2_ECLIPSE_REGISTER
	bool "Register toolchain within Eclipse Buildroot plug-in"
	help
	  This options tells Buildroot to generate the necessary
	  configuration files to make your toolchain appear within
	  Eclipse, through the Eclipse Buildroot plugin.

# Options for packages to depend on, if they require at least a
# specific version of the kernel headers.
# Toolchains should choose the adequate option (ie. the highest
# version, not all of them).
config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0
	bool

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7

config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_9
	bool
	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8

# This order guarantees that the highest version is set, as kconfig
# stops affecting a value on the first matching default.
config BR2_TOOLCHAIN_HEADERS_AT_LEAST
	string
	default "4.9"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_9
	default "4.8"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8
	default "4.7"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
	default "4.6"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6
	default "4.5"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
	default "4.4"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
	default "4.3"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3
	default "4.2"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
	default "4.1"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1
	default "4.0"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
	default "3.19" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19
	default "3.18" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18
	default "3.17" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17
	default "3.16" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
	default "3.15" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15
	default "3.14" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
	default "3.13" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
	default "3.12" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
	default "3.11" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11
	default "3.10" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
	default "3.9"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9
	default "3.8"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8
	default "3.7"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7
	default "3.6"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6
	default "3.5"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
	default "3.4"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4
	default "3.3"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3
	default "3.2"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
	default "3.1"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
	default "3.0"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0
	default "2.6"

config BR2_TOOLCHAIN_GCC_AT_LEAST_4_3
	bool

config BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_3

config BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_4

config BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_5

config BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_6

config BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_7

config BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_8

config BR2_TOOLCHAIN_GCC_AT_LEAST_5
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9

config BR2_TOOLCHAIN_GCC_AT_LEAST_6
	bool
	select BR2_TOOLCHAIN_GCC_AT_LEAST_5

# This order guarantees that the highest version is set, as kconfig
# stops affecting a value on the first matching default.
config BR2_TOOLCHAIN_GCC_AT_LEAST
	string
	default "6"	if BR2_TOOLCHAIN_GCC_AT_LEAST_6
	default "5"	if BR2_TOOLCHAIN_GCC_AT_LEAST_5
	default "4.9"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
	default "4.8"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
	default "4.7"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
	default "4.6"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
	default "4.5"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
	default "4.4"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
	default "4.3"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_3

config BR2_TOOLCHAIN_HAS_SYNC_1
	bool
	default y
	depends on !BR2_bfin
	depends on !BR2_m68k_cf
	depends on !BR2_microblaze
	depends on !BR2_sparc
	depends on !(BR2_arc && !BR2_ARC_ATOMIC_EXT)

config BR2_TOOLCHAIN_HAS_SYNC_2
	bool
	default y if BR2_TOOLCHAIN_HAS_SYNC_1

config BR2_TOOLCHAIN_HAS_SYNC_4
	bool
	default y
	depends on !BR2_m68k_cf
	depends on !BR2_sparc
	depends on !(BR2_arc && !BR2_ARC_ATOMIC_EXT)

# The availability of __sync for 8-byte types on ARM is somewhat
# complicated:
#
#  - It appeared in gcc starting with gcc 4.7.
#
#  - On ARMv7, there is no problem, it can be directly implemented in
#    userspace.
#
#  - On < ARMv7, it requires help from the kernel. Unfortunately, the
#    libgcc code implementing 8-byte __sync with the help from the
#    kernel calls __write() when a failure occurs, which is a function
#    internal to glibc, not available in uClibc and musl. This means
#    that the 8-byte __sync operations are not available on < ARMv7
#    with uClibc and musl. This problem was fixed as part of gcc
#    PR68059, which was backported to the gcc 5 branch, but isn't yet
#    part of any gcc 5.x release.
#
config BR2_TOOLCHAIN_ARM_HAS_SYNC_8
	bool
	default y
	depends on BR2_arm || BR2_armeb
	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
	depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_ARM_CPU_ARMV7A

# 8-byte intrinsics available on most x86 CPUs, except a few old ones
config BR2_TOOLCHAIN_X86_HAS_SYNC_8
	bool
	default y
	depends on BR2_i386
	depends on !BR2_x86_i486
	depends on !BR2_x86_c3
	depends on !BR2_x86_winchip_c6
	depends on !BR2_x86_winchip2

# 8-byte intrinsics available:
#  - On all 64 bits architecture
#  - On a certain combinations of ARM platforms
#  - On certain x86 32 bits CPUs
config BR2_TOOLCHAIN_HAS_SYNC_8
	bool
	default y if BR2_ARCH_IS_64
	default y if BR2_TOOLCHAIN_ARM_HAS_SYNC_8
	default y if BR2_TOOLCHAIN_X86_HAS_SYNC_8

# libatomic is available since gcc 4.8, when thread support is
# enabled. Also, libatomic doesn't recognize "uclinux" as a valid OS
# part of the tuple, and is therefore not build on uclinux targets,
# which is why BR2_BINFMT_FLAT configurations are excluded.
config BR2_TOOLCHAIN_HAS_LIBATOMIC
	bool
	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_8 && \
		BR2_TOOLCHAIN_HAS_THREADS && \
		!BR2_BINFMT_FLAT

# __atomic intrinsics are available:
# - with gcc 4.8, either through built-ins or libatomic, on all
#   architectures. Since we don't want to separate the cases where
#   libatomic is needed vs. not needed, we simplify thing and only
#   support situations where libatomic is available, even if on some
#   architectures libatomic is not strictly needed as all __atomic
#   intrinsics might be built-in. The only case where libatomic is
#   missing entirely is when the toolchain does not have support for
#   threads. However, a package that does not need threads but still
#   uses atomics is quite a corner case, which does not warrant the
#   added complexity.
# - with gcc 4.7, libatomic did not exist, so only built-ins are
#   available. This means that __atomic can only be used in a subset
#   of the architectures
config BR2_TOOLCHAIN_HAS_ATOMIC
	bool
	default y if BR2_TOOLCHAIN_HAS_LIBATOMIC
	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_arm
	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_armeb
	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_xtensa
	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_ARCH_IS_64

# - libquadmath is not needed/available on all architectures (but gcc
#   correctly handles this already).
# - At least, libquadmath is available on:
#   - i*86
#   - x86_64
# - When available, libquadmath requires wchar support.
config BR2_TOOLCHAIN_HAS_LIBQUADMATH
	bool
	default y if BR2_i386 || BR2_x86_64