zephyr/cmake/kobj.cmake
Torsten Rasmussen c4c79f5f33 cmake: improved handling of output and byproducts in CMake
Fixes: #23449

This commit adds additional OUTPUT and BYPRODUCTS to custom command
and targets in the Zephyr build system.

This ensures that files produced during the build will be removed again
when invoking ninja clean / make clean.

The generated syscalls headers include folder is added to the syscall
target using ADDITIONAL_CLEAN_FILES property.
However, this property is new in CMake 3.15, so will not work when using
older CMake with ninja.

For CMake versions <=3.15 the ADDITIONAL_MAKE_CLEAN_FILES property is
used. However, this only supports Makefile generator.

Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
2021-02-14 18:09:24 -05:00

36 lines
1 KiB
CMake

# SPDX-License-Identifier: Apache-2.0
function(gen_kobj gen_dir_out)
if (PROJECT_BINARY_DIR)
set(gen_dir ${PROJECT_BINARY_DIR}/include/generated)
else ()
set(gen_dir ${CMAKE_BINARY_DIR}/include/generated)
endif ()
set(KOBJ_TYPES ${gen_dir}/kobj-types-enum.h)
set(KOBJ_OTYPE ${gen_dir}/otype-to-str.h)
set(KOBJ_SIZE ${gen_dir}/otype-to-size.h)
file(MAKE_DIRECTORY ${gen_dir})
add_custom_command(
OUTPUT ${KOBJ_TYPES} ${KOBJ_OTYPE} ${KOBJ_SIZE}
COMMAND
${PYTHON_EXECUTABLE}
${ZEPHYR_BASE}/scripts/gen_kobject_list.py
--kobj-types-output ${KOBJ_TYPES}
--kobj-otype-output ${KOBJ_OTYPE}
--kobj-size-output ${KOBJ_SIZE}
${gen_kobject_list_include_args}
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
DEPENDS
${ZEPHYR_BASE}/scripts/gen_kobject_list.py
${PARSE_SYSCALLS_TARGET}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
)
add_custom_target(${KOBJ_TYPES_H_TARGET} DEPENDS ${KOBJ_TYPES} ${KOBJ_OTYPE})
set(${gen_dir_out} ${gen_dir} PARENT_SCOPE)
endfunction ()