From c66cb76fed7d5cc8a9e766f70d5e2d34b3ed66e9 Mon Sep 17 00:00:00 2001 From: Klaus Petersen Date: Thu, 15 Nov 2018 10:37:46 +0100 Subject: [PATCH] Build: Added support for out-of-tree Arch Introduces the ARCH_ROOT argument, similar to BOARD_ROOT and SOC_ROOT. This enables support for out-of-tree architectures. The ARCH_ROOT out-of-tree layout is expected to be the following: * ${ARCH_ROOT}/arch/${ARCH}/ * ${ARCH_ROOT}/include/arch/${ARCH}/ (Optional) Signed-off-by: Klaus Petersen --- CMakeLists.txt | 4 ++-- arch/CMakeLists.txt | 2 +- arch/Kconfig | 2 +- cmake/app/boilerplate.cmake | 6 ++++++ cmake/kconfig.cmake | 2 ++ doc/CMakeLists.txt | 1 + 6 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8bf0a972cce..36fe06f8c57 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,7 +59,7 @@ zephyr_library_named(zephyr) zephyr_include_directories( kernel/include - arch/${ARCH}/include + ${ARCH_DIR}/${ARCH}/include include include/drivers ${PROJECT_BINARY_DIR}/include/generated @@ -690,7 +690,7 @@ gen_kobj(KOBJ_INCLUDE_PATH) set(OFFSETS_LIB offsets) -set(OFFSETS_C_PATH ${ZEPHYR_BASE}/arch/${ARCH}/core/offsets/offsets.c) +set(OFFSETS_C_PATH ${ARCH_DIR}/${ARCH}/core/offsets/offsets.c) set(OFFSETS_H_PATH ${PROJECT_BINARY_DIR}/include/generated/offsets.h) add_library( ${OFFSETS_LIB} OBJECT ${OFFSETS_C_PATH}) diff --git a/arch/CMakeLists.txt b/arch/CMakeLists.txt index 1d96abbfe6e..6d9d7ebe656 100644 --- a/arch/CMakeLists.txt +++ b/arch/CMakeLists.txt @@ -1,4 +1,4 @@ add_definitions(-D__ZEPHYR_SUPERVISOR__) add_subdirectory(common) -add_subdirectory(${ARCH}) +add_subdirectory(${ARCH_DIR}/${ARCH} arch/${ARCH}) diff --git a/arch/Kconfig b/arch/Kconfig index 78bc67b4049..fb14dfd8f05 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -12,7 +12,7 @@ # overriden (by defining symbols in multiple locations) # Note: $ARCH might be a glob pattern -source "arch/$(ARCH)/Kconfig" +source "$(ARCH_DIR)/$(ARCH)/Kconfig" choice prompt "Architecture" diff --git a/cmake/app/boilerplate.cmake b/cmake/app/boilerplate.cmake index fe3f93581a1..e79c9d54227 100644 --- a/cmake/app/boilerplate.cmake +++ b/cmake/app/boilerplate.cmake @@ -255,6 +255,12 @@ else() set(SOC_DIR ${SOC_ROOT}/soc) endif() +if(NOT ARCH_ROOT) + set(ARCH_DIR ${ZEPHYR_BASE}/arch) +else() + set(ARCH_DIR ${ARCH_ROOT}/arch) +endif() + # Use BOARD to search for a '_defconfig' file. # e.g. zephyr/boards/arm/96b_carbon_nrf51/96b_carbon_nrf51_defconfig. # When found, use that path to infer the ARCH we are building for. diff --git a/cmake/kconfig.cmake b/cmake/kconfig.cmake index 89766c63c39..ad62a6fadab 100644 --- a/cmake/kconfig.cmake +++ b/cmake/kconfig.cmake @@ -30,6 +30,7 @@ set(ENV{ARCH} ${ARCH}) set(ENV{BOARD_DIR} ${BOARD_DIR}) set(ENV{SOC_DIR} ${SOC_DIR}) set(ENV{PROJECT_BINARY_DIR} ${PROJECT_BINARY_DIR}) +set(ENV{ARCH_DIR} ${ARCH_DIR}) add_custom_target( menuconfig @@ -43,6 +44,7 @@ add_custom_target( SOC_DIR=$ENV{SOC_DIR} PROJECT_BINARY_DIR=$ENV{PROJECT_BINARY_DIR} ZEPHYR_TOOLCHAIN_VARIANT=${ZEPHYR_TOOLCHAIN_VARIANT} + ARCH_DIR=$ENV{ARCH_DIR} ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/kconfig/menuconfig.py ${KCONFIG_ROOT} WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/kconfig USES_TERMINAL diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 68f9c638b95..5cdfa9727ee 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -142,6 +142,7 @@ add_custom_target( KERNELVERSION=${KERNELVERSION} BOARD_DIR=boards/*/*/ ARCH=* + ARCH_DIR=arch/ SOC_DIR=soc/ SRCARCH=x86 KCONFIG_TURBO_MODE=${KCONFIG_TURBO_MODE}