874916567a
The MMU option is currently located in the "Toolchain" menu, but it doesn't make sense as it's really architecture related. In addition, the selection of MMU has an impact on the choice of binary format available, which is visible in the architecture menu. Therefore, this commit moves the MMU option into the architecture menu. However, if we simply move it in arch/Config.in, it means that we would have the following order of options: Target architecture Target architecture variant ABI MMU Binary format But really, the MMU option should be right below the Target architecture variant, and the available ABIs derived from that. The variant and ABI are arch-specfic, and defined in the per-arch Config.in fragments; a Kconfig option can have only one prompt defined, even under conditions, and appears at the place in the menu where its prompt was defined. So, there is no (easy) possibility to have a generic option appear where we want it. Since in fact only 2 architectures show a visible prompt for the MMU option (RISC-V and Xtensa), we move this option in arch/Config.in.riscv and arch/Config.in.xtensa. Some walkthrough the commit: - BR2_ARCH_HAS_MMU_MANDATORY and BR2_ARCH_HAS_MMU_OPTIONAL are removed as they are no longer needed - BR2_USE_MMU becomes a hidden boolean - All the places where we used to select BR2_ARCH_HAS_MMU_MANDATORY now select BR2_USE_MMU directly. - Introduce BR2_RISCV_USE_MMU and BR2_XTENSA_USE_MMU. - All defconfigs that used "# BR2_USE_MMU is not set" are switched to using the new option. All in all, this simplifies things quite a bit, and allows to have a good option ordering in the Target architecture menu. This commit might raise a concern in terms of backward compatibility with existing configurations. The only configurations that will be broken by this change are RISC-V noMMU (which was very recently introduced) and Xtensa noMMU (which we can probably agree is not such a widely popular configuration). Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> Reviewed-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> Tested-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> [yann.morin.1998@free.fr: - expand further why we need per-arch MMU options ] Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
482 lines
11 KiB
Plaintext
482 lines
11 KiB
Plaintext
menu "Target options"
|
|
|
|
config BR2_ARCH_IS_64
|
|
bool
|
|
|
|
config BR2_KERNEL_64_USERLAND_32
|
|
bool
|
|
|
|
config BR2_SOFT_FLOAT
|
|
bool
|
|
|
|
config BR2_USE_MMU
|
|
bool
|
|
|
|
choice
|
|
prompt "Target Architecture"
|
|
default BR2_i386
|
|
help
|
|
Select the target architecture family to build for.
|
|
|
|
config BR2_arcle
|
|
bool "ARC (little endian)"
|
|
select BR2_USE_MMU
|
|
help
|
|
Synopsys' DesignWare ARC Processor Cores are a family of
|
|
32-bit CPUs that can be used from deeply embedded to high
|
|
performance host applications. Little endian.
|
|
|
|
config BR2_arceb
|
|
bool "ARC (big endian)"
|
|
select BR2_USE_MMU
|
|
help
|
|
Synopsys' DesignWare ARC Processor Cores are a family of
|
|
32-bit CPUs that can be used from deeply embedded to high
|
|
performance host applications. Big endian.
|
|
|
|
config BR2_arm
|
|
bool "ARM (little endian)"
|
|
# MMU support is set by the subarchitecture file, arch/Config.in.arm
|
|
help
|
|
ARM is a 32-bit reduced instruction set computer (RISC)
|
|
instruction set architecture (ISA) developed by ARM Holdings.
|
|
Little endian.
|
|
http://www.arm.com/
|
|
http://en.wikipedia.org/wiki/ARM
|
|
|
|
config BR2_armeb
|
|
bool "ARM (big endian)"
|
|
select BR2_USE_MMU
|
|
help
|
|
ARM is a 32-bit reduced instruction set computer (RISC)
|
|
instruction set architecture (ISA) developed by ARM Holdings.
|
|
Big endian.
|
|
http://www.arm.com/
|
|
http://en.wikipedia.org/wiki/ARM
|
|
|
|
config BR2_aarch64
|
|
bool "AArch64 (little endian)"
|
|
select BR2_ARCH_IS_64
|
|
help
|
|
Aarch64 is a 64-bit architecture developed by ARM Holdings.
|
|
http://www.arm.com/products/processors/instruction-set-architectures/armv8-architecture.php
|
|
http://en.wikipedia.org/wiki/ARM
|
|
|
|
config BR2_aarch64_be
|
|
bool "AArch64 (big endian)"
|
|
select BR2_ARCH_IS_64
|
|
help
|
|
Aarch64 is a 64-bit architecture developed by ARM Holdings.
|
|
http://www.arm.com/products/processors/instruction-set-architectures/armv8-architecture.php
|
|
http://en.wikipedia.org/wiki/ARM
|
|
|
|
config BR2_csky
|
|
bool "csky"
|
|
select BR2_ARCH_HAS_NO_TOOLCHAIN_BUILDROOT
|
|
select BR2_USE_MMU
|
|
select BR2_ARCH_NEEDS_GCC_AT_LEAST_9
|
|
help
|
|
csky is processor IP from china.
|
|
http://www.c-sky.com/
|
|
http://www.github.com/c-sky
|
|
|
|
config BR2_i386
|
|
bool "i386"
|
|
select BR2_USE_MMU
|
|
help
|
|
Intel i386 architecture compatible microprocessor
|
|
http://en.wikipedia.org/wiki/I386
|
|
|
|
config BR2_m68k
|
|
bool "m68k"
|
|
# MMU support is set by the subarchitecture file, arch/Config.in.m68k
|
|
help
|
|
Motorola 68000 family microprocessor
|
|
http://en.wikipedia.org/wiki/M68k
|
|
|
|
config BR2_microblazeel
|
|
bool "Microblaze AXI (little endian)"
|
|
select BR2_USE_MMU
|
|
help
|
|
Soft processor core designed for Xilinx FPGAs from Xilinx. AXI
|
|
bus based architecture (little endian)
|
|
http://www.xilinx.com
|
|
http://en.wikipedia.org/wiki/Microblaze
|
|
|
|
config BR2_microblazebe
|
|
bool "Microblaze non-AXI (big endian)"
|
|
select BR2_USE_MMU
|
|
help
|
|
Soft processor core designed for Xilinx FPGAs from Xilinx. PLB
|
|
bus based architecture (non-AXI, big endian)
|
|
http://www.xilinx.com
|
|
http://en.wikipedia.org/wiki/Microblaze
|
|
|
|
config BR2_mips
|
|
bool "MIPS (big endian)"
|
|
select BR2_USE_MMU
|
|
help
|
|
MIPS is a RISC microprocessor from MIPS Technologies. Big
|
|
endian.
|
|
http://www.mips.com/
|
|
http://en.wikipedia.org/wiki/MIPS_Technologies
|
|
|
|
config BR2_mipsel
|
|
bool "MIPS (little endian)"
|
|
select BR2_USE_MMU
|
|
help
|
|
MIPS is a RISC microprocessor from MIPS Technologies. Little
|
|
endian.
|
|
http://www.mips.com/
|
|
http://en.wikipedia.org/wiki/MIPS_Technologies
|
|
|
|
config BR2_mips64
|
|
bool "MIPS64 (big endian)"
|
|
select BR2_ARCH_IS_64
|
|
select BR2_USE_MMU
|
|
help
|
|
MIPS is a RISC microprocessor from MIPS Technologies. Big
|
|
endian.
|
|
http://www.mips.com/
|
|
http://en.wikipedia.org/wiki/MIPS_Technologies
|
|
|
|
config BR2_mips64el
|
|
bool "MIPS64 (little endian)"
|
|
select BR2_ARCH_IS_64
|
|
select BR2_USE_MMU
|
|
help
|
|
MIPS is a RISC microprocessor from MIPS Technologies. Little
|
|
endian.
|
|
http://www.mips.com/
|
|
http://en.wikipedia.org/wiki/MIPS_Technologies
|
|
|
|
config BR2_nios2
|
|
bool "Nios II"
|
|
select BR2_USE_MMU
|
|
help
|
|
Nios II is a soft core processor from Altera Corporation.
|
|
http://www.altera.com/
|
|
http://en.wikipedia.org/wiki/Nios_II
|
|
|
|
config BR2_or1k
|
|
bool "OpenRISC"
|
|
select BR2_USE_MMU
|
|
help
|
|
OpenRISC is a free and open processor for embedded system.
|
|
http://openrisc.io
|
|
|
|
config BR2_powerpc
|
|
bool "PowerPC"
|
|
select BR2_USE_MMU
|
|
help
|
|
PowerPC is a RISC architecture created by Apple-IBM-Motorola
|
|
alliance. Big endian.
|
|
http://www.power.org/
|
|
http://en.wikipedia.org/wiki/Powerpc
|
|
|
|
config BR2_powerpc64
|
|
bool "PowerPC64 (big endian)"
|
|
select BR2_ARCH_IS_64
|
|
select BR2_USE_MMU
|
|
help
|
|
PowerPC is a RISC architecture created by Apple-IBM-Motorola
|
|
alliance. Big endian.
|
|
http://www.power.org/
|
|
http://en.wikipedia.org/wiki/Powerpc
|
|
|
|
config BR2_powerpc64le
|
|
bool "PowerPC64 (little endian)"
|
|
select BR2_ARCH_IS_64
|
|
select BR2_USE_MMU
|
|
help
|
|
PowerPC is a RISC architecture created by Apple-IBM-Motorola
|
|
alliance. Little endian.
|
|
http://www.power.org/
|
|
http://en.wikipedia.org/wiki/Powerpc
|
|
|
|
config BR2_riscv
|
|
bool "RISCV"
|
|
select BR2_ARCH_NEEDS_GCC_AT_LEAST_7
|
|
help
|
|
RISC-V is an open, free Instruction Set Architecture created
|
|
by the UC Berkeley Architecture Research group and supported
|
|
and promoted by RISC-V Foundation.
|
|
https://riscv.org/
|
|
https://en.wikipedia.org/wiki/RISC-V
|
|
|
|
config BR2_s390x
|
|
bool "s390x"
|
|
select BR2_ARCH_IS_64
|
|
select BR2_USE_MMU
|
|
help
|
|
s390x is a big-endian architecture made by IBM.
|
|
http://www.ibm.com/
|
|
http://en.wikipedia.org/wiki/IBM_System/390
|
|
|
|
config BR2_sh
|
|
bool "SuperH"
|
|
select BR2_USE_MMU
|
|
help
|
|
SuperH (or SH) is a 32-bit reduced instruction set computer
|
|
(RISC) instruction set architecture (ISA) developed by
|
|
Hitachi.
|
|
http://www.hitachi.com/
|
|
http://en.wikipedia.org/wiki/SuperH
|
|
|
|
config BR2_sparc
|
|
bool "SPARC"
|
|
select BR2_USE_MMU
|
|
help
|
|
SPARC (from Scalable Processor Architecture) is a RISC
|
|
instruction set architecture (ISA) developed by Sun
|
|
Microsystems.
|
|
http://www.oracle.com/sun
|
|
http://en.wikipedia.org/wiki/Sparc
|
|
|
|
config BR2_sparc64
|
|
bool "SPARC64"
|
|
select BR2_ARCH_IS_64
|
|
select BR2_USE_MMU
|
|
help
|
|
SPARC (from Scalable Processor Architecture) is a RISC
|
|
instruction set architecture (ISA) developed by Sun
|
|
Microsystems.
|
|
http://www.oracle.com/sun
|
|
http://en.wikipedia.org/wiki/Sparc
|
|
|
|
config BR2_x86_64
|
|
bool "x86_64"
|
|
select BR2_ARCH_IS_64
|
|
select BR2_USE_MMU
|
|
help
|
|
x86-64 is an extension of the x86 instruction set (Intel i386
|
|
architecture compatible microprocessor).
|
|
http://en.wikipedia.org/wiki/X86_64
|
|
|
|
config BR2_xtensa
|
|
bool "Xtensa"
|
|
# MMU support is set by the subarchitecture file, arch/Config.in.xtensa
|
|
help
|
|
Xtensa is a Tensilica processor IP architecture.
|
|
http://en.wikipedia.org/wiki/Xtensa
|
|
http://www.tensilica.com/
|
|
|
|
endchoice
|
|
|
|
# For some architectures or specific cores, our internal toolchain
|
|
# backend is not suitable (like, missing support in upstream gcc, or
|
|
# no ChipCo fork exists...)
|
|
config BR2_ARCH_HAS_NO_TOOLCHAIN_BUILDROOT
|
|
bool
|
|
|
|
config BR2_ARCH_HAS_TOOLCHAIN_BUILDROOT
|
|
bool
|
|
default y if !BR2_ARCH_HAS_NO_TOOLCHAIN_BUILDROOT
|
|
|
|
# The following symbols are selected by the individual
|
|
# Config.in.$ARCH files
|
|
config BR2_ARCH_NEEDS_GCC_AT_LEAST_4_8
|
|
bool
|
|
|
|
config BR2_ARCH_NEEDS_GCC_AT_LEAST_4_9
|
|
bool
|
|
select BR2_ARCH_NEEDS_GCC_AT_LEAST_4_8
|
|
|
|
config BR2_ARCH_NEEDS_GCC_AT_LEAST_5
|
|
bool
|
|
select BR2_ARCH_NEEDS_GCC_AT_LEAST_4_9
|
|
|
|
config BR2_ARCH_NEEDS_GCC_AT_LEAST_6
|
|
bool
|
|
select BR2_ARCH_NEEDS_GCC_AT_LEAST_5
|
|
|
|
config BR2_ARCH_NEEDS_GCC_AT_LEAST_7
|
|
bool
|
|
select BR2_ARCH_NEEDS_GCC_AT_LEAST_6
|
|
|
|
config BR2_ARCH_NEEDS_GCC_AT_LEAST_8
|
|
bool
|
|
select BR2_ARCH_NEEDS_GCC_AT_LEAST_7
|
|
|
|
config BR2_ARCH_NEEDS_GCC_AT_LEAST_9
|
|
bool
|
|
select BR2_ARCH_NEEDS_GCC_AT_LEAST_8
|
|
|
|
config BR2_ARCH_NEEDS_GCC_AT_LEAST_10
|
|
bool
|
|
select BR2_ARCH_NEEDS_GCC_AT_LEAST_9
|
|
|
|
config BR2_ARCH_NEEDS_GCC_AT_LEAST_11
|
|
bool
|
|
select BR2_ARCH_NEEDS_GCC_AT_LEAST_10
|
|
|
|
config BR2_ARCH_NEEDS_GCC_AT_LEAST_12
|
|
bool
|
|
select BR2_ARCH_NEEDS_GCC_AT_LEAST_11
|
|
|
|
# The following string values are defined by the individual
|
|
# Config.in.$ARCH files
|
|
config BR2_ARCH
|
|
string
|
|
|
|
config BR2_NORMALIZED_ARCH
|
|
string
|
|
|
|
config BR2_ENDIAN
|
|
string
|
|
|
|
config BR2_GCC_TARGET_ARCH
|
|
string
|
|
|
|
config BR2_GCC_TARGET_ABI
|
|
string
|
|
|
|
config BR2_GCC_TARGET_NAN
|
|
string
|
|
|
|
config BR2_GCC_TARGET_FP32_MODE
|
|
string
|
|
|
|
config BR2_GCC_TARGET_CPU
|
|
string
|
|
|
|
# The value of this option will be passed as --with-fpu=<value> when
|
|
# building gcc (internal backend) or -mfpu=<value> in the toolchain
|
|
# wrapper (external toolchain)
|
|
config BR2_GCC_TARGET_FPU
|
|
string
|
|
|
|
# The value of this option will be passed as --with-float=<value> when
|
|
# building gcc (internal backend) or -mfloat-abi=<value> in the toolchain
|
|
# wrapper (external toolchain)
|
|
config BR2_GCC_TARGET_FLOAT_ABI
|
|
string
|
|
|
|
# The value of this option will be passed as --with-mode=<value> when
|
|
# building gcc (internal backend) or -m<value> in the toolchain
|
|
# wrapper (external toolchain)
|
|
config BR2_GCC_TARGET_MODE
|
|
string
|
|
|
|
# Must be selected by binary formats that support shared libraries.
|
|
config BR2_BINFMT_SUPPORTS_SHARED
|
|
bool
|
|
|
|
# Must match the name of the architecture from readelf point of view,
|
|
# i.e the "Machine:" field of readelf output. See get_machine_name()
|
|
# in binutils/readelf.c for the list of possible values.
|
|
config BR2_READELF_ARCH_NAME
|
|
string
|
|
|
|
if BR2_arcle || BR2_arceb
|
|
source "arch/Config.in.arc"
|
|
endif
|
|
|
|
if BR2_arm || BR2_armeb || BR2_aarch64 || BR2_aarch64_be
|
|
source "arch/Config.in.arm"
|
|
endif
|
|
|
|
if BR2_csky
|
|
source "arch/Config.in.csky"
|
|
endif
|
|
|
|
if BR2_m68k
|
|
source "arch/Config.in.m68k"
|
|
endif
|
|
|
|
if BR2_microblazeel || BR2_microblazebe
|
|
source "arch/Config.in.microblaze"
|
|
endif
|
|
|
|
if BR2_mips || BR2_mips64 || BR2_mipsel || BR2_mips64el
|
|
source "arch/Config.in.mips"
|
|
endif
|
|
|
|
if BR2_nios2
|
|
source "arch/Config.in.nios2"
|
|
endif
|
|
|
|
if BR2_or1k
|
|
source "arch/Config.in.or1k"
|
|
endif
|
|
|
|
if BR2_powerpc || BR2_powerpc64 || BR2_powerpc64le
|
|
source "arch/Config.in.powerpc"
|
|
endif
|
|
|
|
if BR2_riscv
|
|
source "arch/Config.in.riscv"
|
|
endif
|
|
|
|
if BR2_s390x
|
|
source "arch/Config.in.s390x"
|
|
endif
|
|
|
|
if BR2_sh
|
|
source "arch/Config.in.sh"
|
|
endif
|
|
|
|
if BR2_sparc || BR2_sparc64
|
|
source "arch/Config.in.sparc"
|
|
endif
|
|
|
|
if BR2_i386 || BR2_x86_64
|
|
source "arch/Config.in.x86"
|
|
endif
|
|
|
|
if BR2_xtensa
|
|
source "arch/Config.in.xtensa"
|
|
endif
|
|
|
|
# Set up target binary format
|
|
choice
|
|
prompt "Target Binary Format"
|
|
default BR2_BINFMT_ELF if BR2_USE_MMU
|
|
default BR2_BINFMT_FLAT
|
|
|
|
config BR2_BINFMT_ELF
|
|
bool "ELF"
|
|
depends on BR2_USE_MMU
|
|
select BR2_BINFMT_SUPPORTS_SHARED
|
|
help
|
|
ELF (Executable and Linkable Format) is a format for libraries
|
|
and executables used across different architectures and
|
|
operating systems.
|
|
|
|
config BR2_BINFMT_FLAT
|
|
bool "FLAT"
|
|
depends on !BR2_USE_MMU
|
|
help
|
|
FLAT binary is a relatively simple and lightweight executable
|
|
format based on the original a.out format. It is widely used
|
|
in environment where no MMU is available.
|
|
|
|
endchoice
|
|
|
|
# Set up flat binary type
|
|
choice
|
|
prompt "FLAT Binary type"
|
|
default BR2_BINFMT_FLAT_ONE
|
|
depends on BR2_BINFMT_FLAT
|
|
|
|
config BR2_BINFMT_FLAT_ONE
|
|
bool "One memory region"
|
|
help
|
|
All segments are linked into one memory region.
|
|
|
|
config BR2_BINFMT_FLAT_SHARED
|
|
bool "Shared binary"
|
|
depends on BR2_m68k
|
|
# Even though this really generates shared binaries, there is no libdl
|
|
# and dlopen() cannot be used. So packages that require shared
|
|
# libraries cannot be built. Therefore, we don't select
|
|
# BR2_BINFMT_SUPPORTS_SHARED and therefore force BR2_STATIC_LIBS.
|
|
# Although this adds -static to the compilation, that's not a problem
|
|
# because the -mid-shared-library option overrides it.
|
|
help
|
|
Allow to load and link indiviual FLAT binaries at run time.
|
|
|
|
endchoice
|
|
|
|
endmenu # Target options
|