diff --git a/CMakeLists.txt b/CMakeLists.txt index 5262edb1485..b6aec8ef23d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -573,6 +573,24 @@ add_custom_command( ) add_custom_target(${SYSCALL_LIST_H_TARGET} DEPENDS ${syscall_list_h}) + +# This only works for CMake version >=3.15, but as the property is ignored on +# older CMake versions there is no reason to check for version. +set_property(TARGET ${SYSCALL_LIST_H_TARGET} + APPEND PROPERTY + ADDITIONAL_CLEAN_FILES + ${CMAKE_CURRENT_BINARY_DIR}/include/generated/syscalls +) + +# Only works with make. +if(${CMAKE_VERSION} VERSION_LESS 3.15) + set_property(DIRECTORY + APPEND PROPERTY + ADDITIONAL_MAKE_CLEAN_FILES + ${CMAKE_CURRENT_BINARY_DIR}/include/generated/syscalls + ) +endif() + add_custom_target(${PARSE_SYSCALLS_TARGET} DEPENDS ${syscalls_json} @@ -725,7 +743,7 @@ if(CONFIG_GEN_ISR_TABLES) # isr_tables.c is generated from ${ZEPHYR_PREBUILT_EXECUTABLE} by # gen_isr_tables.py add_custom_command( - OUTPUT isr_tables.c + OUTPUT isr_tables.c isrList.bin COMMAND $ $ $${OUTPUT_FORMAT} @@ -981,6 +999,9 @@ if(CONFIG_USERSPACE) LIBRARIES_POST_SCRIPT "" DEPENDENCIES ${CODE_RELOCATION_DEP} ) + target_byproducts(TARGET app_smem_unaligned_prebuilt + BYPRODUCTS ${PROJECT_BINARY_DIR}/app_smem_unaligned_prebuilt.map + ) set_property(TARGET app_smem_unaligned_prebuilt PROPERTY LINK_DEPENDS ${PROJECT_BINARY_DIR}/linker_app_smem_unaligned.cmd) add_dependencies( app_smem_unaligned_prebuilt linker_app_smem_unaligned_script ${OFFSETS_LIB}) @@ -1012,6 +1033,9 @@ toolchain_ld_link_elf( LINKER_SCRIPT ${PROJECT_BINARY_DIR}/linker.cmd DEPENDENCIES ${CODE_RELOCATION_DEP} ) +target_byproducts(TARGET ${ZEPHYR_PREBUILT_EXECUTABLE} + BYPRODUCTS ${PROJECT_BINARY_DIR}/${ZEPHYR_PREBUILT_EXECUTABLE}.map +) set_property(TARGET ${ZEPHYR_PREBUILT_EXECUTABLE} PROPERTY LINK_DEPENDS ${PROJECT_BINARY_DIR}/linker.cmd) add_dependencies( ${ZEPHYR_PREBUILT_EXECUTABLE} ${LINKER_SCRIPT_TARGET} ${OFFSETS_LIB}) @@ -1054,6 +1078,9 @@ else() LIBRARIES_POST_SCRIPT "" DEPENDENCIES ${CODE_RELOCATION_DEP} ) + target_byproducts(TARGET ${ZEPHYR_FINAL_EXECUTABLE} + BYPRODUCTS ${PROJECT_BINARY_DIR}/${ZEPHYR_FINAL_EXECUTABLE}.map + ) set_property(TARGET ${ZEPHYR_FINAL_EXECUTABLE} PROPERTY LINK_DEPENDS ${PROJECT_BINARY_DIR}/linker_pass_final.cmd) add_dependencies( ${ZEPHYR_FINAL_EXECUTABLE} ${LINKER_PASS_FINAL_SCRIPT_TARGET}) @@ -1079,6 +1106,7 @@ list(APPEND COMMAND ${CMAKE_COMMAND} -E rename ${logical_target_for_zephyr_elf}.map ${KERNEL_MAP_NAME} ) +list(APPEND post_build_byproducts ${KERNEL_MAP_NAME}) if(NOT CONFIG_BUILD_NO_GAP_FILL) # Use ';' as separator to get proper space in resulting command. diff --git a/cmake/extensions.cmake b/cmake/extensions.cmake index 47e100f50a1..acd78098736 100644 --- a/cmake/extensions.cmake +++ b/cmake/extensions.cmake @@ -2136,3 +2136,27 @@ function(zephyr_get_targets directory types targets) endforeach() set(${targets} ${${targets}} PARENT_SCOPE) endfunction() + +# Usage: +# target_byproducts(TARGET BYPRODUCTS [...]) +# +# Specify additional BYPRODUCTS that this target produces. +# +# This function allows the build system to specify additional byproducts to +# target created with `add_executable()`. When linking an executable the linker +# may produce additional files, like map files. Those files are not known to the +# build system. This function makes it possible to describe such additional +# byproducts in an easy manner. +function(target_byproducts) + cmake_parse_arguments(TB "" "TARGET" "BYPRODUCTS" ${ARGN}) + + if(NOT DEFINED TB_TARGET) + message(FATAL_ERROR "target_byproducts() missing parameter: TARGET ") + endif() + + add_custom_command(TARGET ${TB_TARGET} + POST_BUILD COMMAND ${CMAKE_COMMAND} -E echo "" + BYPRODUCTS ${TB_BYPRODUCTS} + COMMENT "Logical command for additional byproducts on target: ${TB_TARGET}" + ) +endfunction() diff --git a/cmake/kobj.cmake b/cmake/kobj.cmake index 372f9bb0442..da71efd4fc6 100644 --- a/cmake/kobj.cmake +++ b/cmake/kobj.cmake @@ -14,7 +14,7 @@ function(gen_kobj gen_dir_out) file(MAKE_DIRECTORY ${gen_dir}) add_custom_command( - OUTPUT ${KOBJ_TYPES} ${KOBJ_OTYPE} + OUTPUT ${KOBJ_TYPES} ${KOBJ_OTYPE} ${KOBJ_SIZE} COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/gen_kobject_list.py