1menu "Toolchain"
2
3# Invisible option that makes sure the toolchain package always gets
4# built
5config BR2_TOOLCHAIN
6	bool
7	default y
8
9# Should be selected for glibc or eglibc
10config BR2_TOOLCHAIN_USES_GLIBC
11	bool
12	select BR2_USE_WCHAR
13	select BR2_ENABLE_LOCALE
14	select BR2_TOOLCHAIN_HAS_FULL_GETTEXT
15	select BR2_TOOLCHAIN_HAS_THREADS
16	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
17	select BR2_TOOLCHAIN_HAS_THREADS_NPTL
18	select BR2_TOOLCHAIN_HAS_UCONTEXT
19	select BR2_TOOLCHAIN_SUPPORTS_PIE
20
21config BR2_TOOLCHAIN_USES_UCLIBC
22	bool
23	# ucontext is only available for a subset of the supported
24	# architectures
25	select BR2_TOOLCHAIN_HAS_UCONTEXT if BR2_ARM_CPU_HAS_ARM || BR2_i386 \
26		|| BR2_mips || BR2_mipsel || BR2_mips64 || BR2_mips64el \
27		|| BR2_sparc || BR2_x86_64
28	select BR2_TOOLCHAIN_SUPPORTS_PIE if !BR2_m68k && !BR2_microblaze && !BR2_STATIC_LIBS
29
30config BR2_TOOLCHAIN_USES_MUSL
31	bool
32	select BR2_USE_WCHAR
33	select BR2_ENABLE_LOCALE
34	select BR2_TOOLCHAIN_HAS_THREADS
35	select BR2_TOOLCHAIN_HAS_THREADS_DEBUG
36	select BR2_TOOLCHAIN_HAS_THREADS_NPTL
37	select BR2_TOOLCHAIN_SUPPORTS_PIE if !BR2_STATIC_LIBS
38
39choice
40	prompt "Toolchain type"
41	help
42	  Select whether to use the toolchain provided by buildroot
43	  or an external toolchain.
44
45	  Some vendors provide toolchains in binary form, some in
46	  source form.
47
48config BR2_TOOLCHAIN_BUILDROOT
49	bool "Buildroot toolchain"
50	depends on BR2_ARCH_HAS_TOOLCHAIN_BUILDROOT
51
52config BR2_TOOLCHAIN_EXTERNAL
53	bool "External toolchain"
54	help
55	  Select if you want to use an existing cross-compiling
56	  toolchain. Buildroot can either download automatically a
57	  toolchain, or use an already installed toolchain.
58
59endchoice
60
61source "toolchain/toolchain-buildroot/Config.in"
62source "toolchain/toolchain-external/Config.in"
63
64# Generic toolchain options
65
66# we want gdb config in the middle of both source and external
67# toolchains, but mconf won't let us source the same file twice,
68# so put it here instead
69source "package/gdb/Config.in.host"
70
71comment "Toolchain Generic Options"
72
73# https://sourceware.org/bugzilla/show_bug.cgi?id=30730
74# Affect toolchains built with binutils 2.40, still not fixed.
75config BR2_TOOLCHAIN_HAS_BINUTILS_BUG_30730
76	bool
77	default y if BR2_m68k_cf
78
79# Atomic types can be:
80#  - never lock-free
81#  - sometimes lock-free
82#  - always lock-free
83# see https://en.cppreference.com/w/c/atomic/ATOMIC_LOCK_FREE_consts
84#
85# On most architectures, gcc provides "always lock-free" atomic types,
86# but a few architectures are limited to "sometimes lock-free"
87# types. This hidden option allows to know if the architecture
88# provides "always lock-free" atomic types.
89config BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS
90	bool
91	default y
92	depends on !BR2_nios2
93	depends on !BR2_ARM_CPU_ARMV4
94	depends on !BR2_ARM_CPU_ARMV5
95	depends on !BR2_sparc_v8
96	depends on !BR2_m68k_cf5208
97
98# GCC uses thunk functions to adjust the 'this' pointer when calling
99# C++ member functions in classes derived with multiple inheritance.
100# Generation of thunk functions requires support from the compiler
101# back end. In the absence of that support target-independent code
102# in the C++ front end is used to generate thunk functions, but it
103# does not support vararg functions.
104# or1k will support it in the gcc mainline starting with gcc-9.
105config BR2_TOOLCHAIN_SUPPORTS_VARIADIC_MI_THUNK
106	bool
107	default y
108	depends on !BR2_or1k
109	depends on !BR2_xtensa
110
111# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43744. This bug
112# reappeared on gcc 9.x and is still not fixed on gcc 11.x
113config BR2_TOOLCHAIN_HAS_GCC_BUG_43744
114	bool
115	default y if !BR2_TOOLCHAIN_GCC_AT_LEAST_8
116	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_9
117	depends on BR2_sh
118
119# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63261. This bug no
120# longer exists in gcc 8.x.
121config BR2_TOOLCHAIN_HAS_GCC_BUG_63261
122	bool
123	default y if BR2_microblaze
124	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_8
125
126# Prior to gcc 7.x, exception_ptr, nested_exception and future from
127# libstdc++ would only be provided on architectures that support
128# always lock-free atomic ints. See
129# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64735. This issue has
130# been removed in GCC 7.x, where exception propagation is now
131# supported without lock-free atomic int.
132config BR2_TOOLCHAIN_HAS_GCC_BUG_64735
133	bool
134	default y if !BR2_TOOLCHAIN_SUPPORTS_ALWAYS_LOCKFREE_ATOMIC_INTS && \
135		!BR2_TOOLCHAIN_GCC_AT_LEAST_7
136
137# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68485. This bug still
138# exists in gcc 12.x
139config BR2_TOOLCHAIN_HAS_GCC_BUG_68485
140	bool
141	default y if BR2_microblaze
142
143# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81426
144config BR2_TOOLCHAIN_HAS_GCC_BUG_81426
145	bool
146	default y if BR2_sh
147
148# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83143
149# Error: invalid operands (*UND* and .text sections) for `-' on sh4.
150# This bug no longer exists in gcc 10.x but reappeared on gcc 11.x and
151# it still not been fixed yet.
152config BR2_TOOLCHAIN_HAS_GCC_BUG_83143
153	bool
154	default y if !BR2_TOOLCHAIN_GCC_AT_LEAST_10
155	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_11
156	depends on BR2_sh
157
158# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85180. This bug no
159# longer exists in gcc 8.x.
160config BR2_TOOLCHAIN_HAS_GCC_BUG_85180
161	bool
162	default y if BR2_microblaze
163	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_8
164
165# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85862
166# An infinite loop exists in the find_base_term() logic of 6.x
167# on microblaze.  http://autobuild.buildroot.net/results/158e8ebb39713e1b436a5cc1a1916f46c30694df/
168config BR2_TOOLCHAIN_HAS_GCC_BUG_85862
169	bool
170	default y if BR2_microblaze
171	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_7
172
173# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90620
174# ICE: in do_output_reload, at reload1.c:7978 on microblaze.
175# This bug no longer exists in gcc 10.x but reappeared in gcc 11.x
176config BR2_TOOLCHAIN_HAS_GCC_BUG_90620
177	bool
178	default y if BR2_microblaze
179	depends on !BR2_TOOLCHAIN_GCC_AT_LEAST_10 \
180		|| BR2_TOOLCHAIN_GCC_AT_LEAST_11
181
182# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93847
183# ICE: compiler error: Segmentation fault on Nios II. This bug
184# no longer exists in gcc 9.x.
185config BR2_TOOLCHAIN_HAS_GCC_BUG_93847
186	bool
187	default y if BR2_nios2 && !BR2_TOOLCHAIN_GCC_AT_LEAST_9
188
189# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99410
190# Error: branch offset out of range on Nios II. This bug
191# no longer exists in gcc 8.x but reappeared on gcc 9.x and still exists
192# on gcc 12.x
193config BR2_TOOLCHAIN_HAS_GCC_BUG_99410
194	bool
195	default y if !BR2_TOOLCHAIN_GCC_AT_LEAST_8
196	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_9
197	depends on BR2_nios2
198
199# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101737
200# ICE: SH4 -Os causes internal compiler error. This bug
201# still exists in gcc = 11.1.0
202config BR2_TOOLCHAIN_HAS_GCC_BUG_101737
203	bool
204	default y if BR2_sh
205
206# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101915
207# ICE: in extract_insn, at recog.c:2294 on microblaze.
208# This bug still exists in gcc = 12.1.0
209config BR2_TOOLCHAIN_HAS_GCC_BUG_101915
210	bool
211	default y if BR2_microblaze
212
213# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101916
214# ICE: on SH4: Segmentation fault signal terminated program cc1.
215# This bug still exists in gcc = 11.1.0
216config BR2_TOOLCHAIN_HAS_GCC_BUG_101916
217	bool
218	default y if BR2_sh4
219
220# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101952
221# ICE: on SH4: unaligned opcodes detected in executable segment.
222# This bug still exists in gcc = 11.1.0
223config BR2_TOOLCHAIN_HAS_GCC_BUG_101952
224	bool
225	default y if BR2_sh4
226
227# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104028
228# ICE: on M68K: Error: value -16034 out of range
229# This bug still exists in gcc = 11.1.0
230config BR2_TOOLCHAIN_HAS_GCC_BUG_104028
231	bool
232	default y if BR2_m68k
233
234# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107728
235# https://sourceware.org/bugzilla/show_bug.cgi?id=29621
236config BR2_TOOLCHAIN_HAS_GCC_BUG_107728
237	bool
238	default y if BR2_microblazebe || BR2_microblazeel \
239		|| BR2_mips || BR2_mipsel \
240		|| BR2_nios2 \
241		|| BR2_or1k \
242		|| BR2_sh
243	depends on BR2_TOOLCHAIN_USES_GLIBC
244	depends on BR2_OPTIMIZE_0
245
246# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110934
247# ICE: on M68K: in change_address_1, at emit-rtl.cc:2287
248# This bug exists in gcc = 12.3.0 and gcc = 13.2.0
249config BR2_TOOLCHAIN_HAS_GCC_BUG_110934
250	bool
251	default y if BR2_m68k
252
253# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111001
254# ICE: on SH4: during RTL pass: sh_treg_combine2
255# This bug exist in gcc = 13.2.0
256config BR2_TOOLCHAIN_HAS_GCC_BUG_111001
257	bool
258	default y if BR2_sh
259	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_13
260	depends on BR2_OPTIMIZE_1 || \
261		   BR2_OPTIMIZE_2 || \
262		   BR2_OPTIMIZE_3
263
264config BR2_TOOLCHAIN_HAS_NATIVE_RPC
265	bool
266
267config BR2_USE_WCHAR
268	bool
269
270config BR2_ENABLE_LOCALE
271	bool
272
273config BR2_INSTALL_LIBSTDCPP
274	bool
275
276config BR2_TOOLCHAIN_HAS_DLANG
277	bool
278
279config BR2_TOOLCHAIN_HAS_FORTRAN
280	bool
281
282config BR2_TOOLCHAIN_HAS_THREADS
283	bool
284
285config BR2_TOOLCHAIN_HAS_THREADS_DEBUG
286	bool
287
288config BR2_TOOLCHAIN_HAS_THREADS_NPTL
289	bool
290
291config BR2_TOOLCHAIN_HAS_SSP
292	bool
293
294config BR2_TOOLCHAIN_HAS_SSP_STRONG
295	bool
296	default y if BR2_TOOLCHAIN_HAS_SSP && BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
297
298# This boolean is true if the toolchain provides a full featured
299# ucontext implementation with ucontext_t and {get,make,set}context
300config BR2_TOOLCHAIN_HAS_UCONTEXT
301	bool
302
303config BR2_TOOLCHAIN_HAS_OPENMP
304	bool
305
306config BR2_TOOLCHAIN_SUPPORTS_PIE
307	bool
308
309config BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY
310	bool "Copy gconv libraries"
311	depends on BR2_TOOLCHAIN_USES_GLIBC
312	help
313	  The gconv libraries are used to convert between different
314	  character sets (charsets).
315
316	  Say 'y' if you need to store and/or display different
317	  charsets.
318
319config BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_LIST
320	string "Gconv libraries to copy"
321	depends on BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY
322	help
323	  Set to the list of gconv libraries to copy.
324	  Leave empty to copy all gconv libraries.
325
326	  Specify only the basename of the libraries, leave
327	  out the .so extension. Eg.:
328	    IBM850 ISO8859-15 UNICODE
329
330	  Note: the full set of gconv libs are ~8MiB (on ARM).
331
332config BR2_TOOLCHAIN_EXTRA_LIBS
333	string "Extra toolchain libraries to be copied to target"
334	default BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS if BR2_TOOLCHAIN_EXTRA_EXTERNAL_LIBS != "" # legacy
335	depends on !BR2_STATIC_LIBS
336	help
337	  If your toolchain provides extra libraries that need to be
338	  copied to the target filesystem, enter them here, separated
339	  by spaces. The library should not include a suffix or any
340	  type of pre/post wildcard.
341
342	  Examples where this can be useful is for adding debug
343	  libraries to the target like the GCC libsanitizer.
344	  e.g. "libasan liblsan libtsan libubsan"
345
346# This boolean is true if the toolchain provides a built-in full
347# featured gettext implementation (glibc), and false if only a stub
348# gettext implementation is provided (uclibc, musl)
349config BR2_TOOLCHAIN_HAS_FULL_GETTEXT
350	bool
351
352config BR2_TARGET_OPTIMIZATION
353	string "Target Optimizations"
354	default ""
355	help
356	  Optimizations to use when building for the target host.
357	  NOTE: gcc optimization level is defined in build options.
358
359config BR2_TARGET_LDFLAGS
360	string "Target linker options"
361	help
362	  Extra options to pass to the linker when building for the
363	  target.
364
365	  Note that options with a '$' sign (eg.
366	  -Wl,-rpath='$ORIGIN/../lib') are not supported.
367
368# Options for packages to depend on, if they require at least a
369# specific version of the kernel headers.
370# Toolchains should choose the adequate option (ie. the highest
371# version, not all of them).
372config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0
373	bool
374
375config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
376	bool
377	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0
378
379config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
380	bool
381	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
382
383config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3
384	bool
385	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
386
387config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4
388	bool
389	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3
390
391config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
392	bool
393	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4
394
395config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6
396	bool
397	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
398
399config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7
400	bool
401	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6
402
403config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8
404	bool
405	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7
406
407config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9
408	bool
409	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8
410
411config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
412	bool
413	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9
414
415config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11
416	bool
417	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
418
419config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
420	bool
421	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11
422
423config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
424	bool
425	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
426
427config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
428	bool
429	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
430
431config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15
432	bool
433	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
434
435config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
436	bool
437	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15
438
439config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17
440	bool
441	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
442
443config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18
444	bool
445	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17
446
447config BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19
448	bool
449	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18
450
451config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
452	bool
453	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19
454
455config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1
456	bool
457	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
458
459config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
460	bool
461	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1
462
463config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3
464	bool
465	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
466
467config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
468	bool
469	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3
470
471config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
472	bool
473	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
474
475config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6
476	bool
477	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
478
479config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
480	bool
481	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6
482
483config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8
484	bool
485	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
486
487config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_9
488	bool
489	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8
490
491config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10
492	bool
493	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_9
494
495config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_11
496	bool
497	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10
498
499config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12
500	bool
501	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_11
502
503config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_13
504	bool
505	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12
506
507config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_14
508	bool
509	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_13
510
511config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15
512	bool
513	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_14
514
515config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_16
516	bool
517	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15
518
519config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17
520	bool
521	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_16
522
523config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18
524	bool
525	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17
526
527config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19
528	bool
529	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18
530
531config BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20
532	bool
533	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19
534
535config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0
536	bool
537	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20
538
539config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_1
540	bool
541	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0
542
543config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_2
544	bool
545	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_1
546
547config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_3
548	bool
549	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_2
550
551config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4
552	bool
553	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_3
554
555config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_5
556	bool
557	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4
558
559config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_6
560	bool
561	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_5
562
563config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_7
564	bool
565	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_6
566
567config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_8
568	bool
569	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_7
570
571config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_9
572	bool
573	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_8
574
575config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_10
576	bool
577	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_9
578
579config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_11
580	bool
581	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_10
582
583config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_12
584	bool
585	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_11
586
587config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_13
588	bool
589	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_12
590
591config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_14
592	bool
593	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_13
594
595config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_15
596	bool
597	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_14
598
599config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_16
600	bool
601	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_15
602
603config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_17
604	bool
605	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_16
606
607config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_18
608	bool
609	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_17
610
611config BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_19
612	bool
613	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_18
614
615config BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_0
616	bool
617	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_19
618
619config BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_1
620	bool
621	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_0
622
623config BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_2
624	bool
625	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_1
626
627config BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_3
628	bool
629	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_2
630
631config BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_4
632	bool
633	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_3
634
635config BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_5
636	bool
637	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_4
638
639config BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_6
640	bool
641	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_5
642
643config BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_7
644	bool
645	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_6
646
647config BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_8
648	bool
649	select BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_7
650	select BR2_TOOLCHAIN_HEADERS_LATEST
651
652# This should be selected by the latest version, above, to indicate that
653# Buildroot does not know of more recent headers than the ones selected.
654# This allows using toolchains with headers more recent than Buildroot
655# knows about, while still enforcing strict check for older headers.
656config BR2_TOOLCHAIN_HEADERS_LATEST
657	bool
658
659# This order guarantees that the highest version is set, as kconfig
660# stops affecting a value on the first matching default.
661config BR2_TOOLCHAIN_HEADERS_AT_LEAST
662	string
663	default "6.8"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_8
664	default "6.7"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_7
665	default "6.6"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_6
666	default "6.5"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_5
667	default "6.4"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_4
668	default "6.3"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_3
669	default "6.2"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_2
670	default "6.1"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_1
671	default "6.0"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_6_0
672	default "5.19" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_19
673	default "5.18" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_18
674	default "5.17" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_17
675	default "5.16" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_16
676	default "5.15" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_15
677	default "5.14" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_14
678	default "5.13" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_13
679	default "5.12" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_12
680	default "5.11" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_11
681	default "5.10" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_10
682	default "5.9"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_9
683	default "5.8"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_8
684	default "5.7"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_7
685	default "5.6"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_6
686	default "5.5"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_5
687	default "5.4"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_4
688	default "5.3"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_3
689	default "5.2"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_2
690	default "5.1"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_1
691	default "5.0"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_5_0
692	default "4.20" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_20
693	default "4.19" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_19
694	default "4.18" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_18
695	default "4.17" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_17
696	default "4.16" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_16
697	default "4.15" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_15
698	default "4.14" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_14
699	default "4.13" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_13
700	default "4.12" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_12
701	default "4.11" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_11
702	default "4.10" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_10
703	default "4.9"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_9
704	default "4.8"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_8
705	default "4.7"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_7
706	default "4.6"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_6
707	default "4.5"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_5
708	default "4.4"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_4
709	default "4.3"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_3
710	default "4.2"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_2
711	default "4.1"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_1
712	default "4.0"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_4_0
713	default "3.19" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_19
714	default "3.18" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_18
715	default "3.17" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_17
716	default "3.16" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_16
717	default "3.15" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_15
718	default "3.14" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_14
719	default "3.13" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_13
720	default "3.12" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_12
721	default "3.11" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_11
722	default "3.10" if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_10
723	default "3.9"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_9
724	default "3.8"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_8
725	default "3.7"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7
726	default "3.6"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_6
727	default "3.5"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_5
728	default "3.4"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_4
729	default "3.3"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_3
730	default "3.2"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_2
731	default "3.1"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_1
732	default "3.0"  if BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_0
733	default "2.6"
734
735config BR2_TOOLCHAIN_GCC_AT_LEAST_4_3
736	bool
737
738config BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
739	bool
740	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_3
741
742config BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
743	bool
744	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
745
746config BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
747	bool
748	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
749
750config BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
751	bool
752	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
753
754config BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
755	bool
756	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
757
758config BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
759	bool
760	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
761
762config BR2_TOOLCHAIN_GCC_AT_LEAST_5
763	bool
764	select BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
765
766config BR2_TOOLCHAIN_GCC_AT_LEAST_6
767	bool
768	select BR2_TOOLCHAIN_GCC_AT_LEAST_5
769
770config BR2_TOOLCHAIN_GCC_AT_LEAST_7
771	bool
772	select BR2_TOOLCHAIN_GCC_AT_LEAST_6
773
774config BR2_TOOLCHAIN_GCC_AT_LEAST_8
775	bool
776	select BR2_TOOLCHAIN_GCC_AT_LEAST_7
777
778config BR2_TOOLCHAIN_GCC_AT_LEAST_9
779	bool
780	select BR2_TOOLCHAIN_GCC_AT_LEAST_8
781
782config BR2_TOOLCHAIN_GCC_AT_LEAST_10
783	bool
784	select BR2_TOOLCHAIN_GCC_AT_LEAST_9
785
786config BR2_TOOLCHAIN_GCC_AT_LEAST_11
787	bool
788	select BR2_TOOLCHAIN_GCC_AT_LEAST_10
789
790config BR2_TOOLCHAIN_GCC_AT_LEAST_12
791	bool
792	select BR2_TOOLCHAIN_GCC_AT_LEAST_11
793
794config BR2_TOOLCHAIN_GCC_AT_LEAST_13
795	bool
796	select BR2_TOOLCHAIN_GCC_AT_LEAST_12
797
798config BR2_TOOLCHAIN_GCC_AT_LEAST_14
799	bool
800	select BR2_TOOLCHAIN_GCC_AT_LEAST_13
801
802# This order guarantees that the highest version is set, as kconfig
803# stops affecting a value on the first matching default.
804config BR2_TOOLCHAIN_GCC_AT_LEAST
805	string
806	default "14"	if BR2_TOOLCHAIN_GCC_AT_LEAST_14
807	default "13"	if BR2_TOOLCHAIN_GCC_AT_LEAST_13
808	default "12"	if BR2_TOOLCHAIN_GCC_AT_LEAST_12
809	default "11"	if BR2_TOOLCHAIN_GCC_AT_LEAST_11
810	default "10"	if BR2_TOOLCHAIN_GCC_AT_LEAST_10
811	default "9"	if BR2_TOOLCHAIN_GCC_AT_LEAST_9
812	default "8"	if BR2_TOOLCHAIN_GCC_AT_LEAST_8
813	default "7"	if BR2_TOOLCHAIN_GCC_AT_LEAST_7
814	default "6"	if BR2_TOOLCHAIN_GCC_AT_LEAST_6
815	default "5"	if BR2_TOOLCHAIN_GCC_AT_LEAST_5
816	default "4.9"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
817	default "4.8"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
818	default "4.7"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
819	default "4.6"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_6
820	default "4.5"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_5
821	default "4.4"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_4
822	default "4.3"	if BR2_TOOLCHAIN_GCC_AT_LEAST_4_3
823
824config BR2_TOOLCHAIN_HAS_MNAN_OPTION
825	bool
826	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_9
827
828config BR2_TOOLCHAIN_HAS_SYNC_1
829	bool
830	default y
831	depends on !BR2_m68k_cf
832	depends on !BR2_microblaze
833	depends on !BR2_sparc
834	depends on !(BR2_arc && !BR2_ARC_ATOMIC_EXT)
835
836config BR2_TOOLCHAIN_HAS_SYNC_2
837	bool
838	default y if BR2_TOOLCHAIN_HAS_SYNC_1
839
840config BR2_TOOLCHAIN_HAS_SYNC_4
841	bool
842	default y
843	depends on !BR2_m68k_cf
844	depends on !BR2_sparc
845	depends on !(BR2_arc && !BR2_ARC_ATOMIC_EXT)
846
847# The availability of __sync for 8-byte types on ARM is somewhat
848# complicated:
849#
850#  - It appeared in gcc starting with gcc 4.7.
851#
852#  - On ARMv7, there is no problem, it can be directly implemented in
853#    userspace.
854#
855#  - On < ARMv7, it requires help from the kernel. Unfortunately, the
856#    libgcc code implementing 8-byte __sync with the help from the
857#    kernel calls __write() when a failure occurs, which is a function
858#    internal to glibc, not available in uClibc and musl. This means
859#    that the 8-byte __sync operations are not available on < ARMv7
860#    with uClibc and musl. This problem was fixed as part of gcc
861#    PR68059, which was backported to the gcc 5 branch, but isn't yet
862#    part of any gcc 5.x release.
863#
864config BR2_TOOLCHAIN_ARM_HAS_SYNC_8
865	bool
866	default y
867	depends on BR2_arm || BR2_armeb
868	depends on BR2_TOOLCHAIN_GCC_AT_LEAST_4_7
869	depends on BR2_TOOLCHAIN_USES_GLIBC || BR2_ARM_CPU_ARMV7A
870
871# 8-byte intrinsics available on most x86 CPUs, except a few old ones
872config BR2_TOOLCHAIN_X86_HAS_SYNC_8
873	bool
874	default y
875	depends on BR2_i386
876	depends on !BR2_x86_i486
877	depends on !BR2_x86_c3
878	depends on !BR2_x86_winchip_c6
879	depends on !BR2_x86_winchip2
880
881# 8-byte intrinsics available:
882#  - On all 64 bits architecture
883#  - On a certain combinations of ARM platforms
884#  - On certain x86 32 bits CPUs
885config BR2_TOOLCHAIN_HAS_SYNC_8
886	bool
887	default y if BR2_ARCH_IS_64
888	default y if BR2_TOOLCHAIN_ARM_HAS_SYNC_8
889	default y if BR2_TOOLCHAIN_X86_HAS_SYNC_8
890
891# libatomic is available since gcc 4.8, when thread support is enabled.
892# However, the gcc logic in libatomic/configure.tgt does not recognize
893# "uclinux" as a valid OS part of the target tuple, and therefore it
894# does not build libatomic. The "uclinux" part of the tuple is used by
895# Buildroot when BR2_BINFMT_FLAT=y. This broken logic has only been
896# fixed for arm since gcc 10.1.0.
897config BR2_TOOLCHAIN_HAS_LIBATOMIC
898	bool
899	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_8
900	depends on BR2_TOOLCHAIN_HAS_THREADS
901	depends on BR2_BINFMT_ELF || \
902		(BR2_BINFMT_FLAT && BR2_arm && \
903		BR2_TOOLCHAIN_GCC_AT_LEAST_10)
904
905# __atomic intrinsics are available:
906# - with gcc 4.8, either through built-ins or libatomic, on all
907#   architectures. Since we don't want to separate the cases where
908#   libatomic is needed vs. not needed, we simplify thing and only
909#   support situations where libatomic is available, even if on some
910#   architectures libatomic is not strictly needed as all __atomic
911#   intrinsics might be built-in. The only case where libatomic is
912#   missing entirely is when the toolchain does not have support for
913#   threads. However, a package that does not need threads but still
914#   uses atomics is quite a corner case, which does not warrant the
915#   added complexity.
916# - with gcc 4.7, libatomic did not exist, so only built-ins are
917#   available. This means that __atomic can only be used in a subset
918#   of the architectures
919config BR2_TOOLCHAIN_HAS_ATOMIC
920	bool
921	default y if BR2_TOOLCHAIN_HAS_LIBATOMIC
922	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_arm
923	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_armeb
924	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_xtensa
925	default y if BR2_TOOLCHAIN_GCC_AT_LEAST_4_7 && BR2_ARCH_IS_64
926
927# - libquadmath is not needed/available on all architectures (but gcc
928#   correctly handles this already).
929# - At least, libquadmath is available on:
930#   - i*86
931#   - x86_64
932#   - PowerPC with vector scalar (VSX) instruction set
933# - When available, libquadmath requires wchar support.
934config BR2_TOOLCHAIN_HAS_LIBQUADMATH
935	bool
936	default y if BR2_i386 || BR2_x86_64
937	default y if BR2_POWERPC_CPU_HAS_VSX
938
939comment "Bare metal toolchain"
940
941config BR2_TOOLCHAIN_BARE_METAL_BUILDROOT
942	bool "Build a bare metal toolchain"
943	select BR2_PACKAGE_NEWLIB_BARE_METAL
944	help
945	  Select if you need a bare-metal toolchain for building
946	  platform specific firmware images.
947
948source "toolchain/toolchain-bare-metal-buildroot/Config.in"
949
950endmenu
951