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})