yann@1: # Target definition: architecture, optimisations, etc... yann@1: yann@1: menu "Target options" yann@1: yann@1: comment "General target options" yann@1: yann@1: choice yann@1: bool yann@1: prompt "Target architecture:" yann@1: default ARCH_x86 yann@1: yann@1: config ARCH_ARM yann@1: bool yann@1: prompt "arm" yann@1: yann@1: config ARCH_MIPS yann@1: bool yann@1: prompt "mips" yann@1: yann@1: config ARCH_x86 yann@1: bool yann@1: prompt "x86" yann@1: yann@1: config ARCH_x86_64 yann@1: bool yann@1: prompt "x86_64" yann@1: yann@1: endchoice yann@1: yann@1: choice yann@1: bool yann@1: prompt "Endianness:" yann@1: yann@1: config ARCH_BE yann@1: bool yann@1: prompt "Big endian" yann@1: yann@1: config ARCH_LE yann@1: bool yann@1: prompt "Little endian" yann@1: yann@1: endchoice yann@1: yann@1: comment "Target optimisations" yann@1: yann@1: config ARCH_CPU yann@1: string yann@1: prompt "Emit assembly for CPU" yann@1: default "" yann@1: help yann@1: This specifies the name of the target ARM processor. GCC uses this name yann@1: to determine what kind of instructions it can emit when generating yann@1: assembly code. yann@1: yann@1: Pick a value from the gcc manual for your choosen gcc version and your yann@1: target CPU. yann@1: yann@1: Leave blank if you don't know, or if your target architecture does not yann@1: offer this option. yann@1: yann@1: config ARCH_TUNE yann@1: string yann@1: prompt "Tune for CPU" yann@1: default "" yann@1: help yann@1: This option is very similar to the ARCH_CPU option (above), except yann@1: that instead of specifying the actual target processor type, and hence yann@1: restricting which instructions can be used, it specifies that GCC should yann@1: tune the performance of the code as if the target were of the type yann@1: specified in this option, but still choosing the instructions that it yann@1: will generate based on the cpu specified by the ARCH_CPU option yann@1: (above), or a (command-line) -mcpu= option. yann@1: yann@1: Pick a value from the gcc manual for your choosen gcc version and your yann@1: target CPU. yann@1: yann@1: Leave blank if you don't know, or if your target architecture does not yann@1: offer this option. yann@1: yann@1: config ARCH_ARCH yann@1: string yann@1: prompt "Achitecture level" yann@1: default "" yann@1: help yann@1: GCC uses this name to determine what kind of instructions it can emit yann@1: when generating assembly code. This option can be used in conjunction yann@1: with or instead of the ARCH_CPU option (above), or a (command-line) yann@1: -mcpu= option. yann@1: yann@1: Pick a value from the gcc manual for your choosen gcc version and your yann@1: target CPU. yann@1: yann@1: Leave blank if you don't know, or if your target architecture does not yann@1: offer this option. yann@1: yann@1: config ARCH_FPU yann@1: string yann@1: prompt "Use FPU" yann@1: default "" yann@1: help yann@1: On some targets (eg. ARM), you can specify the kind of FPU to emit yann@1: code for. yann@1: yann@1: See below wether to actually emit FP opcodes, or to emulate them. yann@1: yann@1: Pick a value from the gcc manual for your choosen gcc version and your yann@1: target CPU. yann@1: yann@1: Leave blank if you don't know, or if your target architecture does not yann@1: offer this option. yann@1: yann@1: choice yann@1: bool yann@1: prompt "Floating point:" yann@1: yann@1: config ARCH_FLOAT_HW yann@1: bool yann@1: prompt "hardware (FPU)" yann@1: help yann@1: Emit hardware floating point opcodes. yann@1: yann@1: If you've got a processor with a FPU, then you want that. yann@1: If your hardware has no FPU, you still can use HW floating point, but yann@1: need to compile support for FPU emulation in your kernel. Needless to yann@1: say that emulating the FPU is /slooowwwww/... yann@1: yann@1: One situation you'd want HW floating point without a FPU is if you get yann@1: binary blobs from different vendors that are compiling this way and yann@1: can't (don't wan't to) change. yann@1: yann@1: config ARCH_FLOAT_SW yann@1: bool yann@1: prompt "software" yann@1: help yann@1: Do not emit any hardware floating point opcode. yann@1: yann@1: If your processor has no FPU, then you most probably want this, as it yann@1: is faster than emulating the FPU in the kernel. yann@1: yann@1: endchoice yann@1: yann@1: config ARCH_FLOAT_SW_LIBFLOAT yann@1: bool yann@1: prompt "Use libfloat" yann@1: default n yann@1: depends on ARCH_FLOAT_SW yann@1: help yann@1: For those targets upporting it, you can use libfloat for the software yann@1: floating point emulation. yann@1: yann@1: Note that some versions of gcc have support code that supersedes libfloat, yann@1: while others don't. Known version of gcc that don't have support code are yann@1: versions prior to 3.0, and version above 4.0. yann@1: yann@1: You should check gcc before deciding to use libfloat. yann@1: yann@1: config TARGET_CFLAGS yann@1: string yann@1: prompt "Default target CFLAGS" yann@1: default "" yann@1: help yann@1: Used to add specific options when compiling libraries of the toolchain, yann@1: that will run on the target (eg. libc.so). yann@1: yann@1: Note that the options above for CPU, tune, arch and FPU will be yann@1: automaticaly used. You don't need to specify them here. yann@1: yann@1: Leave blank if you don't know better. yann@1: yann@1: comment "Toolchain options" yann@1: yann@1: config USE_SYSROOT yann@1: bool yann@1: prompt "Use sysroot'ed toolchain" yann@1: default y yann@1: help yann@1: Use the 'shinny new' sysroot feature of gcc: libraries split between yann@1: prefix/target/sys-root/lib and prefix/target/sys-root/usr/lib yann@1: yann@1: You definitely want to say 'Y' here. Yes you do. I know you do. Say 'Y'. yann@1: yann@1: config SHARED_LIBS yann@1: bool yann@1: prompt "Build shared libraries" yann@1: default y yann@1: help yann@1: Say 'y' here, unless you don't want shared libraries. yann@1: yann@1: You might not want shared librries if you're building for a target that yann@1: don't support it (maybe some nommu targets, for example, or bare metal). yann@1: yann@1: config TARGET_MULTILIB yann@1: bool yann@1: # prompt "Enable 'multilib' support (EXPERIMENTAL)" yann@1: default n yann@1: help yann@1: Enable the so-called 'multilib' support. yann@1: yann@1: With the same toolchain, and on some architectures, you will be able to yann@1: build big and little endian binaries, soft- and hard-float, etc... yann@1: yann@1: See the gcc configure manual at http://gcc.gnu.org/install/configure.html yann@1: to see what multilib your target supports. yann@1: yann@1: It's preferable for now to build two (or more) toolchains, one for each yann@1: configuration you need to support (eg. one for thumb and one for ARM, yann@1: etc...). You can use the vendor string to diferentiate those toolchains. yann@1: yann@1: config TARGET_VENDOR yann@1: string yann@1: prompt "Vendor string" yann@1: default "unknown" yann@1: help yann@1: Vendor part of the machine triplet. yann@1: yann@1: A triplet is of the form arch-vendor-kernel-system. yann@1: You can set the second part, vendor, to whatever you see fit. yann@1: Use a single word, or use underscores "_" to separate words. yann@1: yann@1: Keep the default (unkown) if you don't know better. yann@1: yann@1: config TARGET_ALIAS yann@1: string yann@1: prompt "Target alias" yann@1: default "" yann@1: help yann@1: Normaly, you'd call your toolchain component (especially gcc) by yann@1: prefixing the target triplet followed by a dash and the component name yann@1: (eg. armeb-unknown-linux-uclibc-gcc). yann@1: yann@1: You can enter a shortcut here. This string will be used to create yann@1: symbolic links to the toolchain tools (eg. if you enter "foo-bar" here, yann@1: then gcc for your toolchain will also be available as "foo-bar-gcc" along yann@1: with the original name). yann@1: yann@1: You shouldn't need to enter anything here, unless you plan to manually yann@1: call the tools (autotools-based ./configure will use the standard name). yann@1: yann@1: config ARCH yann@1: string yann@1: default "arm" if ARCH_ARM yann@1: default "mips" if ARCH_MIPS yann@1: default "x86" if ARCH_x86 yann@1: default "x86_64" if ARCH_x86_64 yann@1: yann@1: config BUILD yann@1: string yann@1: prompt "Build system triplet" yann@1: default "" yann@1: help yann@1: Canonical name of the machine building the toolchain. yann@1: You should leave empty, unless you really now what you're doing. yann@1: yann@1: config CC_NATIVE yann@1: string yann@1: prompt "Native gcc" yann@1: default "gcc" yann@1: help yann@1: The native C compiler. yann@1: yann@1: You can set this to an alternative compiler if you have more than one yann@1: installed (eg. gcc is gcc-4.1.1 and you want to use gcc-3.4.6). yann@1: yann@1: You can leave this empty as well, in which case gcc will be used. yann@1: yann@1: config CANADIAN yann@1: bool yann@1: prompt "Canadian build (EXPERIMENTAL)" yann@1: default n yann@1: help yann@1: A canadian build allows to build a compiler on a first machine yann@1: (build system), that will run on second machine (host system), yann@1: targetting a third machine (target system). yann@1: yann@1: An example where you'd want a candian cross-compiler is to create yann@1: a native compiler for your target. In this case host and target yann@1: are the same. yann@1: yann@1: config HOST yann@1: string yann@1: prompt "Host system triplet" yann@1: default "" yann@1: depends on CANADIAN yann@1: help yann@1: Canonical name of the machine serving as host. yann@1: yann@1: config HOST_CC yann@1: string yann@1: prompt "Host system compiler" yann@1: default "${CT_HOST}-" yann@1: depends on CANADIAN yann@1: help yann@1: C compiler targeting the host system. yann@1: If HOST_CC ends with a dash (-), then it is considered to be the yann@1: prefix to gcc (eg. x86-pc-linuc-gnu-). yann@1: If it is empty, it is formed by appending '-gcc' to HOST. yann@1: Else it is considered to be the complete name of the compiler, with yann@1: full path, or without path (provided that it can be found in PATH). yann@1: yann@1: endmenu