dcb74db89e
This commit is based on earlier work from Łukasz Stelmach <l.stelmach@samsung.com> to add support for different page sizes on ARM64. In his initial submission, Łukasz took an approach similar to this one, i.e make it ARM64-specific. Following the feedback on the mailing list, his second version [1] tried to generalize the logic to configure the page size between architectures. But the general consensus during the review process was that there wasn't much to generalize in the end. So, this new iteration is back to a simpler approach: * We have new options in Config.in.arm to configure the page size. Only 4 KB and 64 KB are supported, because our testing in Qemu and real hardware has not allowed to get a successful setup for 16 KB pages. We can always re-add support for 16 KB later if that is resolved. * The logic to define the ARCH_TOOLCHAIN_WRAPPER_OPTS options is moved from the ARC-specific file to arch/arch.mk, and extended to cover ARM64. * The appropriate logic in uclibc.mk and linux.mk is added to tweak the relevant configuration options. * A test case is added in the runtime test infrastructure to test building and booting under Qemu a 64 KB configuration, with all 3 C libraries. For the regular configuration of 4 KB pages, this commit makes one functional change: on ARM64, -Wl,-z,max-page-size=4096 is now passed in the compiler flags of the wrapper. [1] https://patchwork.ozlabs.org/project/buildroot/list/?series=275452 Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be>
34 lines
1.4 KiB
Makefile
34 lines
1.4 KiB
Makefile
################################################################################
|
|
#
|
|
# Architecture-specific definitions
|
|
#
|
|
################################################################################
|
|
|
|
# Allow GCC target configuration settings to be optionally
|
|
# overwritten by architecture specific makefiles.
|
|
|
|
# Makefiles must use the GCC_TARGET_* variables below instead
|
|
# of the BR2_GCC_TARGET_* versions.
|
|
GCC_TARGET_ARCH := $(call qstrip,$(BR2_GCC_TARGET_ARCH))
|
|
GCC_TARGET_ABI := $(call qstrip,$(BR2_GCC_TARGET_ABI))
|
|
GCC_TARGET_NAN := $(call qstrip,$(BR2_GCC_TARGET_NAN))
|
|
GCC_TARGET_FP32_MODE := $(call qstrip,$(BR2_GCC_TARGET_FP32_MODE))
|
|
GCC_TARGET_CPU := $(call qstrip,$(BR2_GCC_TARGET_CPU))
|
|
GCC_TARGET_FPU := $(call qstrip,$(BR2_GCC_TARGET_FPU))
|
|
GCC_TARGET_FLOAT_ABI := $(call qstrip,$(BR2_GCC_TARGET_FLOAT_ABI))
|
|
GCC_TARGET_MODE := $(call qstrip,$(BR2_GCC_TARGET_MODE))
|
|
|
|
# Explicitly set LD's "max-page-size" instead of relying on some defaults
|
|
ifeq ($(BR2_ARC_PAGE_SIZE_4K)$(BR2_ARM64_PAGE_SIZE_4K),y)
|
|
ARCH_TOOLCHAIN_WRAPPER_OPTS += -Wl,-z,max-page-size=4096
|
|
else ifeq ($(BR2_ARC_PAGE_SIZE_8K),y)
|
|
ARCH_TOOLCHAIN_WRAPPER_OPTS += -Wl,-z,max-page-size=8192
|
|
else ifeq ($(BR2_ARC_PAGE_SIZE_16K),y)
|
|
ARCH_TOOLCHAIN_WRAPPER_OPTS += -Wl,-z,max-page-size=16384
|
|
else ifeq ($(BR2_ARM64_PAGE_SIZE_64K),y)
|
|
ARCH_TOOLCHAIN_WRAPPER_OPTS += -Wl,-z,max-page-size=65536
|
|
endif
|
|
|
|
# Include any architecture specific makefiles.
|
|
-include $(sort $(wildcard arch/arch.mk.*))
|