summaryrefslogtreecommitdiffstats
path: root/toolchain/Config.in
blob: b4ba5b3b677cf979311c683d9e13b3daf4755e1d (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
# Copyright (C) 2006-2013 OpenWrt.org
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#

menuconfig TARGET_OPTIONS
	bool "Target Options"  if DEVEL

	config TARGET_OPTIMIZATION
		string "Target Optimizations" if TARGET_OPTIONS
		default DEFAULT_TARGET_OPTIMIZATION
		help
		  Optimizations to use when building for the target host.

	config SOFT_FLOAT
		bool "Use software floating point by default" if TARGET_OPTIONS
		default y if !HAS_FPU
		depends on arm || armeb || powerpc || mipsel || mips || mips64el || mips64
		help
		  If your target CPU does not have a Floating Point Unit (FPU) or a
		  kernel FPU emulator, but you still wish to support floating point
		  functions, then everything will need to be compiled with soft floating
		  point support (-msoft-float).

		  Most people will answer N.

	config USE_MIPS16
		bool "Build packages with MIPS16 instructions" if TARGET_OPTIONS
		depends on HAS_MIPS16
		default y
		help
		  If your target CPU does support the MIPS16 instruction set
		  and you want to use it for packages, enable this option.
		  MIPS16 produces smaller binaries thus reducing pressure on
		  caches and TLB.

		  Most people will answer N.


	choice BPF_TOOLCHAIN
		prompt "BPF toolchain" if DEVEL
		default BPF_TOOLCHAIN_BUILD_LLVM if BUILDBOT
		default BPF_TOOLCHAIN_PREBUILT if HAS_PREBUILT_LLVM_TOOLCHAIN
		default BPF_TOOLCHAIN_NONE

		config BPF_TOOLCHAIN_NONE
			bool "None"

		config BPF_TOOLCHAIN_PREBUILT
			bool "Use prebuilt LLVM toolchain"
			depends on HAS_PREBUILT_LLVM_TOOLCHAIN
			select USE_LLVM_PREBUILT

		config BPF_TOOLCHAIN_HOST
			select USE_LLVM_HOST
			bool "Use host LLVM toolchain"

		config BPF_TOOLCHAIN_BUILD_LLVM
			select USE_LLVM_BUILD
			bool "Build LLVM toolchain for eBPF"
			help
			  If enabled, a LLVM toolchain for building eBPF binaries will be built.
			  If this is not enabled, eBPF packages can only be built if the host
			  has a suitable toolchain
	endchoice

	config BPF_TOOLCHAIN_HOST_PATH
		string
		depends on BPF_TOOLCHAIN_HOST
		prompt "Host LLVM toolchain path (prefix)" if DEVEL
		default "/usr/local/opt/llvm" if HOST_OS_MACOS
		default ""

menuconfig EXTERNAL_TOOLCHAIN
	bool
	prompt "Use external toolchain"  if DEVEL
	help
	  If enabled, the buildroot will compile using an existing toolchain instead of
	  compiling one.

	config NATIVE_TOOLCHAIN
		bool
		prompt "Use host's toolchain"  if DEVEL
		depends on EXTERNAL_TOOLCHAIN
		select NO_STRIP
		help
		  If enabled, the buildroot will compile using the native toolchain for your
		  host instead of compiling one.

	config TARGET_NAME
		string
		prompt "Target name"  if DEVEL
		depends on EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
		default "aarch64-unknown-linux-gnu"  if aarch64
		default "aarch64_be-unknown-linux-gnu"  if aarch64_be
		default "arm-unknown-linux-gnu"      if arm
		default "armeb-unknown-linux-gnu"    if armeb
		default "i486-unknown-linux-gnu"     if i386
		default "loongarch64-unknown-linux-gnu" if loongarch64
		default "mips-unknown-linux-gnu"     if mips
		default "mipsel-unknown-linux-gnu"   if mipsel
		default "powerpc-unknown-linux-gnu"  if powerpc
		default "x86_64-unknown-linux-gnu"   if x86_64

	config TOOLCHAIN_PREFIX
		string
		prompt "Toolchain prefix"  if DEVEL
		depends on EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
		default "aarch64-unknown-linux-gnu"  if aarch64
		default "aarch64_be-unknown-linux-gnu"  if aarch64_be
		default "arm-unknown-linux-gnu-"      if arm
		default "armeb-unknown-linux-gnu-"    if armeb
		default "i486-unknown-linux-gnu-"     if i386
		default "loongarch64-unknown-linux-gnu-" if loongarch64
		default "mips-unknown-linux-gnu-"     if mips
		default "mipsel-unknown-linux-gnu-"   if mipsel
		default "powerpc-unknown-linux-gnu-"  if powerpc
		default "x86_64-unknown-linux-gnu-"   if x86_64

	config TOOLCHAIN_ROOT
		string
		prompt "Toolchain root"  if DEVEL
		depends on EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
		default "/opt/cross/aarch64-unknown-linux-gnu"  if aarch64
		default "/opt/cross/aarch64_be-unknown-linux-gnu"  if aarch64_be
		default "/opt/cross/arm-unknown-linux-gnu"      if arm
		default "/opt/cross/armeb-unknown-linux-gnu"    if armeb
		default "/opt/cross/i486-unknown-linux-gnu"     if i386
		default "/opt/cross/loongarch64-unknown-linux-gnu" if loongarch64
		default "/opt/cross/mips-unknown-linux-gnu"     if mips
		default "/opt/cross/mipsel-unknown-linux-gnu"   if mipsel
		default "/opt/cross/powerpc-unknown-linux-gnu"  if powerpc
		default "/opt/cross/x86_64-unknown-linux-gnu"   if x86_64

	choice TOOLCHAIN_LIBC_TYPE
		prompt "Toolchain libc"  if DEVEL
		depends on EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
		default EXTERNAL_TOOLCHAIN_LIBC_USE_MUSL
		help
		  Specify the libc type used by the external toolchain. The given value
		  is passed as -m flag to all gcc and g++ invocations. This is mainly
		  intended for multilib toolchains which support glibc and uclibc at
		  the same time. If no value is specified, no -m flag is passed.

		config EXTERNAL_TOOLCHAIN_LIBC_USE_GLIBC
			bool "glibc"
			select USE_GLIBC

		config EXTERNAL_TOOLCHAIN_LIBC_USE_MUSL
			bool "musl"
			select USE_MUSL

	endchoice

	config EXTERNAL_GCC_VERSION
		string
		prompt "External Toolchain GCC Version" if DEVEL
		depends on EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
		help
		  Manually specify the GCC version used by the selected
		  external toolchain.

	config TOOLCHAIN_LIBC
		string
		depends on EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
		default "glibc" if EXTERNAL_TOOLCHAIN_LIBC_USE_GLIBC
		default "musl" if EXTERNAL_TOOLCHAIN_LIBC_USE_MUSL

	config TOOLCHAIN_BIN_PATH
		string
		prompt "Toolchain program path"  if DEVEL
		depends on EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
		default "./usr/bin ./bin"
		help
		  Specify additional directories searched for toolchain binaries
		  (override PATH). Use ./DIR for directories relative to the root above.

	config TOOLCHAIN_INC_PATH
		string
		prompt "Toolchain include path"  if DEVEL
		depends on EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
		default "./usr/include ./include/fortify ./include" if EXTERNAL_TOOLCHAIN_LIBC_USE_MUSL
		default "./usr/include ./include"
		help
		  Specify additional directories searched for header files (override
		  CPPFLAGS). Use ./DIR for directories relative to the root above.

	config TOOLCHAIN_LIB_PATH
		string
		prompt "Toolchain library path"  if DEVEL
		depends on EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN
		default "./usr/lib ./lib"
		help
		  Specify additional directories searched for libraries (override LDFLAGS).
		  Use ./DIR for directories relative to the root above.

config NEED_TOOLCHAIN
	bool
	depends on DEVEL
	default y if !EXTERNAL_TOOLCHAIN

menuconfig TOOLCHAINOPTS
	bool "Toolchain Options"  if DEVEL
	depends on NEED_TOOLCHAIN

menuconfig EXTRA_TARGET_ARCH
	bool
	prompt "Enable an extra toolchain target architecture" if TOOLCHAINOPTS
	depends on !sparc
	help
	  Some builds may require a 'biarch' toolchain. This option
	  allows you to specify an additional target arch.

	  Most people will answer N here.

	config EXTRA_TARGET_ARCH_NAME
		string
		prompt "Extra architecture name" if EXTRA_TARGET_ARCH
		help
		  Specify the cpu name (eg powerpc64 or x86_64) of the
		  additional target architecture.

	config EXTRA_TARGET_ARCH_OPTS
		string
		prompt "Extra architecture compiler options" if EXTRA_TARGET_ARCH
		help
		  If you're specifying an addition target architecture,
		  you'll probably need to also provide options to make
		  the compiler use this alternate arch.

		  For example, if you're building a compiler that can build
		  both powerpc and powerpc64 binaries, you'll need to
		  specify -m64 here.


	choice
		prompt "MIPS64 user-land ABI" if TOOLCHAINOPTS && (mips64 || mips64el)
		default MIPS64_ABI_N64
		help
		   MIPS64 supports 3 different user-land ABIs: o32 (legacy),
		   n32 and n64.

		config MIPS64_ABI_N64
			bool "n64"

		config MIPS64_ABI_N32
			depends on !LIBC_USE_MUSL
			bool "n32"

		config MIPS64_ABI_O32
			bool "o32"

	endchoice

comment "Binary tools"
	depends on TOOLCHAINOPTS

source "toolchain/binutils/Config.in"

config DWARVES
	bool
	prompt "Build pahole" if TOOLCHAINOPTS
	depends on !HOST_OS_MACOS
	help
	  Enable if you want to build pahole and the dwarves tools.

comment "Compiler"
	depends on TOOLCHAINOPTS

source "toolchain/gcc/Config.in"

config NASM
	bool
	depends on ( i386 || x86_64 )
	prompt "Build nasm" if TOOLCHAINOPTS
	default y
	help
	  Enable if you want to build nasm

comment "C Library"
	depends on TOOLCHAINOPTS

choice
	prompt "C Library implementation" if TOOLCHAINOPTS
	default LIBC_USE_GLIBC if arc
	default LIBC_USE_MUSL
	help
	  Select the C library implementation.

	config LIBC_USE_GLIBC
		bool "Use glibc"
		select USE_GLIBC

	config LIBC_USE_MUSL
		select USE_MUSL
		bool "Use musl"
		depends on !arc

endchoice

source "toolchain/musl/Config.in"

comment "Debuggers"
	depends on TOOLCHAINOPTS

config GDB
	bool
	prompt "Build gdb" if TOOLCHAINOPTS
	default y if !EXTERNAL_TOOLCHAIN
	help
	  Enable if you want to build the gdb.

config GDB_PYTHON
	bool
	depends on GDB
	prompt "Build gdb with python binding"
	
	help
	  Enable the python bindings for GDB to allow using python in the gdb shell.

config HAS_BPF_TOOLCHAIN
	bool

config HAS_PREBUILT_LLVM_TOOLCHAIN
	def_bool $(shell, [ -f llvm-bpf/.llvm-version ] && echo y || echo n)

config USE_LLVM_HOST
	select HAS_BPF_TOOLCHAIN
	bool

config USE_LLVM_PREBUILT
	select HAS_BPF_TOOLCHAIN
	default y if !DEVEL && !BUILDBOT && HAS_PREBUILT_LLVM_TOOLCHAIN
	bool

config USE_LLVM_BUILD
	default y if !DEVEL && BUILDBOT
	select HAS_BPF_TOOLCHAIN
	bool

config USE_GLIBC
	default y if !TOOLCHAINOPTS && !EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN && (arc)
	bool

config USE_MUSL
	default y if !TOOLCHAINOPTS && !EXTERNAL_TOOLCHAIN && !NATIVE_TOOLCHAIN && !(arc)
	bool

config SSP_SUPPORT
	default y if !PKG_CC_STACKPROTECTOR_NONE
	bool

config USE_EXTERNAL_LIBC
	bool
	default y if EXTERNAL_TOOLCHAIN || NATIVE_TOOLCHAIN

source "toolchain/binutils/Config.version"
source "toolchain/gcc/Config.version"

config LIBC
	string
	default "glibc"   if USE_GLIBC
	default "musl"	  if USE_MUSL

config TARGET_SUFFIX
	string
	default "gnueabi"         if USE_GLIBC && (arm || armeb)
	default "gnu"             if USE_GLIBC && !(arm || armeb)
	default "muslgnueabi"     if USE_MUSL && (arm || armeb)
	default "musl"            if USE_MUSL && !(arm || armeb)

config MIPS64_ABI
	depends on mips64 || mips64el
	string
	default "64" if MIPS64_ABI_N64
	default "n32" if MIPS64_ABI_N32
	default "32" if MIPS64_ABI_O32
	default "64"