Replace _parse_syscalls_target_ custom target with explicit dependency management for syscall depending file generation. Signed-off-by: David Schneider <schneidav81@gmail.com>
94 lines
2.8 KiB
CMake
94 lines
2.8 KiB
CMake
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
find_program(GEN_KOBJECT_LIST NAMES gen_kobject_list gen_kobject_list.py PATHS ${ZEPHYR_BASE}/scripts/build)
|
|
message(STATUS "Found gen_kobject_list: ${GEN_KOBJECT_LIST}")
|
|
if(GEN_KOBJECT_LIST MATCHES "\.py$")
|
|
set(GEN_KOBJECT_LIST_INTERPRETER ${PYTHON_EXECUTABLE})
|
|
endif()
|
|
|
|
# Invokes gen_kobject_list.py with the given SCRIPT_ARGS, creating a TARGET that depends on the
|
|
# script's OUTPUTS
|
|
function(gen_kobject_list)
|
|
cmake_parse_arguments(PARSE_ARGV 0 arg
|
|
""
|
|
"TARGET"
|
|
"OUTPUTS;SCRIPT_ARGS;INCLUDES;DEPENDS"
|
|
)
|
|
foreach(include ${arg_INCLUDES})
|
|
list(APPEND arg_SCRIPT_ARGS --include-subsystem-list ${include})
|
|
endforeach()
|
|
add_custom_command(
|
|
OUTPUT ${arg_OUTPUTS}
|
|
COMMAND
|
|
${GEN_KOBJECT_LIST_INTERPRETER}
|
|
${GEN_KOBJECT_LIST}
|
|
${arg_SCRIPT_ARGS}
|
|
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
|
|
DEPENDS
|
|
${arg_DEPENDS}
|
|
${GEN_KOBJECT_LIST}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
)
|
|
add_custom_target(${arg_TARGET} DEPENDS ${arg_OUTPUTS})
|
|
endfunction()
|
|
|
|
# Generates a gperf header file named OUTPUT using the symbols found in the KERNEL_TARGET's output
|
|
# binary. INCLUDES is a list of JSON files defining kernel subsystems and sockets.
|
|
function(gen_kobject_list_gperf)
|
|
cmake_parse_arguments(PARSE_ARGV 0 arg
|
|
""
|
|
"TARGET;OUTPUT;KERNEL_TARGET"
|
|
"INCLUDES;DEPENDS"
|
|
)
|
|
gen_kobject_list(
|
|
TARGET ${arg_TARGET}
|
|
OUTPUTS ${arg_OUTPUT}
|
|
SCRIPT_ARGS
|
|
--kernel $<TARGET_FILE:${arg_KERNEL_TARGET}>
|
|
--gperf-output ${arg_OUTPUT}
|
|
INCLUDES ${arg_INCLUDES}
|
|
DEPENDS
|
|
${arg_DEPENDS}
|
|
${arg_KERNEL_TARGET}
|
|
)
|
|
endfunction()
|
|
|
|
# Generates header files describing the kernel subsystems defined by the JSON files in INCLUDES. The
|
|
# variable named by GEN_DIR_OUT_VAR is set to the directory containing the header files.
|
|
function(gen_kobject_list_headers)
|
|
cmake_parse_arguments(PARSE_ARGV 0 arg
|
|
""
|
|
"GEN_DIR_OUT_VAR"
|
|
"INCLUDES;DEPENDS"
|
|
)
|
|
if (PROJECT_BINARY_DIR)
|
|
set(gen_dir ${PROJECT_BINARY_DIR}/include/generated/zephyr)
|
|
else ()
|
|
set(gen_dir ${CMAKE_BINARY_DIR}/include/generated/zephyr)
|
|
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})
|
|
|
|
gen_kobject_list(
|
|
TARGET ${KOBJ_TYPES_H_TARGET}
|
|
OUTPUTS ${KOBJ_TYPES} ${KOBJ_OTYPE} ${KOBJ_SIZE}
|
|
SCRIPT_ARGS
|
|
--kobj-types-output ${KOBJ_TYPES}
|
|
--kobj-otype-output ${KOBJ_OTYPE}
|
|
--kobj-size-output ${KOBJ_SIZE}
|
|
INCLUDES ${arg_INCLUDES}
|
|
DEPENDS
|
|
${arg_DEPENDS}
|
|
${arg_KERNEL_TARGET}
|
|
)
|
|
|
|
if(arg_GEN_DIR_OUT_VAR)
|
|
cmake_path(GET gen_dir PARENT_PATH gen_dir)
|
|
set(${arg_GEN_DIR_OUT_VAR} ${gen_dir} PARENT_SCOPE)
|
|
endif()
|
|
endfunction ()
|