From cd535b75aa267ff6abf42c78ff07d64e21313f67 Mon Sep 17 00:00:00 2001 From: Ederson de Souza Date: Sat, 13 Apr 2024 16:03:10 -0700 Subject: [PATCH] cmake: Reuse llext flags for EDK Some flags are common between in tree extensions and out of tree supported by the EDK. Instead of duplicating those flags, the EDK reuses the llext ones. However, as the EDK has its own needs, two new lists, `LLEXT_EDK_APPEND_FLAGS` and `LLEXT_EDK_REMOVE_FLAGS` are defined to allow EDK to append or remove flags as needed. Signed-off-by: Ederson de Souza --- CMakeLists.txt | 13 ++++++++++++- cmake/compiler/gcc/target_arm.cmake | 11 +++++++---- cmake/llext-edk.cmake | 6 +++--- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e1d88a2fca4..401060f989c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2064,6 +2064,17 @@ endif() # Extension Development Kit (EDK) generation. set(llext_edk_file ${PROJECT_BINARY_DIR}/${CONFIG_LLEXT_EDK_NAME}.tar.xz) + +# TODO maybe generate flags for C CXX ASM +zephyr_get_compile_options_for_lang(C zephyr_flags) + +# Filter out non LLEXT and LLEXT_EDK flags - and add required ones +llext_filter_zephyr_flags(LLEXT_REMOVE_FLAGS ${zephyr_flags} llext_edk_cflags) +llext_filter_zephyr_flags(LLEXT_EDK_REMOVE_FLAGS ${llext_edk_cflags} llext_edk_cflags) + +list(APPEND llext_edk_cflags ${LLEXT_APPEND_FLAGS}) +list(APPEND llext_edk_cflags ${LLEXT_EDK_APPEND_FLAGS}) + add_custom_command( OUTPUT ${llext_edk_file} # Regenerate syscalls in case CONFIG_LLEXT_EDK_USERSPACE_ONLY @@ -2085,7 +2096,7 @@ add_custom_command( -DINTERFACE_INCLUDE_DIRECTORIES="$,:>" -Dllext_edk_file=${llext_edk_file} -DAUTOCONF_H=${AUTOCONF_H} - -DLLEXT_CFLAGS="${LLEXT_CFLAGS}" + -Dllext_cflags="${llext_edk_cflags}" -Dllext_edk_name=${CONFIG_LLEXT_EDK_NAME} -DWEST_TOPDIR=${WEST_TOPDIR} -DZEPHYR_BASE=${ZEPHYR_BASE} diff --git a/cmake/compiler/gcc/target_arm.cmake b/cmake/compiler/gcc/target_arm.cmake index 7675e7cb6d5..78e5fc94550 100644 --- a/cmake/compiler/gcc/target_arm.cmake +++ b/cmake/compiler/gcc/target_arm.cmake @@ -59,8 +59,11 @@ set(LLEXT_APPEND_FLAGS -mthumb ) -set(LLEXT_CFLAGS - -mlong-calls - -mthumb +list(APPEND LLEXT_EDK_REMOVE_FLAGS + --sysroot=.* + -fmacro-prefix-map=.* + ) + +list(APPEND LLEXT_EDK_APPEND_FLAGS -nodefaultlibs - -c) + ) diff --git a/cmake/llext-edk.cmake b/cmake/llext-edk.cmake index 2136e7f3fba..c62aec4b030 100644 --- a/cmake/llext-edk.cmake +++ b/cmake/llext-edk.cmake @@ -19,7 +19,7 @@ # zephyr_interface target. # - AUTOCONF_H: Name of the autoconf.h file, used to generate the imacros flag. # - llext_edk_file: Output file name for the tarball. -# - LLEXT_CFLAGS: Additional flags to be added to the generated flags. +# - llext_cflags: Additional flags to be added to the generated flags. # - ZEPHYR_BASE: Path to the zephyr base directory. # - WEST_TOPDIR: Path to the west top directory. # - APPLICATION_SOURCE_DIR: Path to the application source directory. @@ -44,9 +44,9 @@ set(autoconf_h_edk ${llext_edk_inc}/${AUTOCONF_H}) cmake_path(RELATIVE_PATH AUTOCONF_H BASE_DIRECTORY ${PROJECT_BINARY_DIR} OUTPUT_VARIABLE autoconf_h_rel) list(APPEND base_flags_make - "${LLEXT_CFLAGS} -imacros\$(${install_dir_var})/include/zephyr/${autoconf_h_rel}") + "${llext_cflags} -imacros\$(${install_dir_var})/include/zephyr/${autoconf_h_rel}") list(APPEND base_flags_cmake - "${LLEXT_CFLAGS} -imacros\${CMAKE_CURRENT_LIST_DIR}/include/zephyr/${autoconf_h_rel}") + "${llext_cflags} -imacros\${CMAKE_CURRENT_LIST_DIR}/include/zephyr/${autoconf_h_rel}") file(MAKE_DIRECTORY ${llext_edk_inc}) foreach(dir ${include_dirs})