| # 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} |
| ${PARSE_SYSCALLS_TARGET} |
| 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" |
| ) |
| 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_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" |
| ) |
| 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} |
| ) |
| |
| 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 () |