From 28c35120e046f4b8cf1ba0e0dd238344f1297bb5 Mon Sep 17 00:00:00 2001 From: Daniel Leung Date: Thu, 18 Mar 2021 12:02:19 -0700 Subject: [PATCH] cmake: rename variables related to kernel objects This renames the variables related to the generation of kernel object hashes, and simply makes them more descriptive. Signed-off-by: Daniel Leung --- CMakeLists.txt | 108 +++++++++++++++++++++++++++++-------------------- 1 file changed, 64 insertions(+), 44 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2721294d48a..b88478c9ae1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -801,11 +801,11 @@ if(CONFIG_USERSPACE) set(GEN_KOBJ_LIST ${ZEPHYR_BASE}/scripts/gen_kobject_list.py) set(PROCESS_GPERF ${ZEPHYR_BASE}/scripts/process_gperf.py) - set(OBJ_LIST kobject_hash.gperf) - set(OUTPUT_SRC_PRE kobject_hash_preprocessed.c) - set(OUTPUT_SRC kobject_hash.c) - set(OUTPUT_OBJ kobject_hash.c.obj) - set(OUTPUT_OBJ_RENAMED kobject_hash_renamed.o) + set(KOBJECT_HASH_LIST kobject_hash.gperf) + set(KOBJECT_HASH_OUTPUT_SRC_PRE kobject_hash_preprocessed.c) + set(KOBJECT_HASH_OUTPUT_SRC kobject_hash.c) + set(KOBJECT_HASH_OUTPUT_OBJ kobject_hash.c.obj) + set(KOBJECT_HASH_OUTPUT_OBJ_RENAMED kobject_hash_renamed.o) # Essentially what we are doing here is extracting some information # out of the nearly finished elf file, generating the source code @@ -815,112 +815,132 @@ if(CONFIG_USERSPACE) # Use the script GEN_KOBJ_LIST to scan the kernel binary's # (${ZEPHYR_PREBUILT_EXECUTABLE}) DWARF information to produce a table of kernel - # objects (OBJ_LIST) which we will then pass to gperf + # objects (KOBJECT_HASH_LIST) which we will then pass to gperf add_custom_command( - OUTPUT ${OBJ_LIST} + OUTPUT ${KOBJECT_HASH_LIST} COMMAND ${PYTHON_EXECUTABLE} ${GEN_KOBJ_LIST} --kernel $ - --gperf-output ${OBJ_LIST} + --gperf-output ${KOBJECT_HASH_LIST} ${gen_kobject_list_include_args} $<$:--verbose> DEPENDS ${ZEPHYR_PREBUILT_EXECUTABLE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) - add_custom_target(obj_list DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${OBJ_LIST}) + add_custom_target( + kobj_hash_list + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_LIST} + ) - # Use gperf to generate C code (OUTPUT_SRC_PRE) which implements a - # perfect hashtable based on OBJ_LIST + # Use gperf to generate C code (KOBJECT_HASH_OUTPUT_SRC_PRE) which implements a + # perfect hashtable based on KOBJECT_HASH_LIST add_custom_command( - OUTPUT ${OUTPUT_SRC_PRE} + OUTPUT ${KOBJECT_HASH_OUTPUT_SRC_PRE} COMMAND ${GPERF} - --output-file ${OUTPUT_SRC_PRE} - ${OBJ_LIST} - DEPENDS obj_list ${OBJ_LIST} + --output-file ${KOBJECT_HASH_OUTPUT_SRC_PRE} + ${KOBJECT_HASH_LIST} + DEPENDS kobj_hash_list ${KOBJECT_HASH_LIST} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) - add_custom_target(output_src_pre DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_SRC_PRE}) + add_custom_target( + kobj_hash_output_src_pre + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_OUTPUT_SRC_PRE} + ) # For our purposes the code/data generated by gperf is not optimal. # - # The script PROCESS_GPERF creates a new c file OUTPUT_SRC based on - # OUTPUT_SRC_PRE to greatly reduce the amount of code/data generated + # The script PROCESS_GPERF creates a new c file KOBJECT_HASH_OUTPUT_SRC based on + # KOBJECT_HASH_OUTPUT_SRC_PRE to greatly reduce the amount of code/data generated # since we know we are always working with pointer values add_custom_command( - OUTPUT ${OUTPUT_SRC} + OUTPUT ${KOBJECT_HASH_OUTPUT_SRC} COMMAND ${PYTHON_EXECUTABLE} ${PROCESS_GPERF} - -i ${OUTPUT_SRC_PRE} - -o ${OUTPUT_SRC} + -i ${KOBJECT_HASH_OUTPUT_SRC_PRE} + -o ${KOBJECT_HASH_OUTPUT_SRC} -p "struct z_object" $<$:--verbose> - DEPENDS output_src_pre ${OUTPUT_SRC_PRE} + DEPENDS kobj_hash_output_src_pre ${KOBJECT_HASH_OUTPUT_SRC_PRE} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) - add_custom_target(output_src DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_SRC}) + add_custom_target( + kobj_hash_output_src + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_OUTPUT_SRC} + ) # We need precise control of where generated text/data ends up in the final # kernel image. Disable function/data sections and use objcopy to move # generated data into special section names - add_library(output_lib STATIC - ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_SRC} + add_library( + kobj_hash_output_lib + STATIC ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_OUTPUT_SRC} ) - set_source_files_properties(${OUTPUT_SRC} PROPERTIES COMPILE_FLAGS + set_source_files_properties(${KOBJECT_HASH_OUTPUT_SRC} + PROPERTIES COMPILE_FLAGS "${NO_COVERAGE_FLAGS} -fno-function-sections -fno-data-sections") - set_source_files_properties(${OUTPUT_SRC} + set_source_files_properties(${KOBJECT_HASH_OUTPUT_SRC} PROPERTIES COMPILE_DEFINITIONS "${compile_definitions_interface}") # Turn off -ffunction-sections, etc. - # NB: Using a library instead of target_compile_options(output_lib + # NB: Using a library instead of target_compile_options(kobj_hash_output_lib # [...]) because a library's options have precedence - add_library(output_lib_interface INTERFACE) + add_library(kobj_hash_output_lib_interface INTERFACE) - target_link_libraries(output_lib output_lib_interface) + target_link_libraries(kobj_hash_output_lib kobj_hash_output_lib_interface) foreach(incl ${include_dir_in_interface}) - target_include_directories(output_lib_interface INTERFACE ${incl}) + target_include_directories(kobj_hash_output_lib_interface INTERFACE ${incl}) endforeach() foreach(incl ${sys_include_dir_in_interface}) - target_include_directories(output_lib_interface SYSTEM INTERFACE ${incl}) + target_include_directories(kobj_hash_output_lib_interface SYSTEM INTERFACE ${incl}) endforeach() - set(OUTPUT_OBJ_PATH ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/output_lib.dir/${OUTPUT_OBJ}) + set( + KOBJECT_HASH_OUTPUT_OBJ_PATH + ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/kobj_hash_output_lib.dir/${KOBJECT_HASH_OUTPUT_OBJ} + ) add_custom_command( - OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_OBJ_RENAMED} + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_OUTPUT_OBJ_RENAMED} COMMAND $ $ $.data=.kobject_data.data $.text=.kobject_data.text $.rodata=.kobject_data.rodata - $${OUTPUT_OBJ_PATH} - $${OUTPUT_OBJ_RENAMED} + $${KOBJECT_HASH_OUTPUT_OBJ_PATH} + $${KOBJECT_HASH_OUTPUT_OBJ_RENAMED} $ - DEPENDS output_lib + DEPENDS kobj_hash_output_lib WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMAND_EXPAND_LISTS ) - add_custom_target(output_obj_renamed DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_OBJ_RENAMED}) + add_custom_target( + kobj_hash_output_obj_renamed + DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_OUTPUT_OBJ_RENAMED} + ) - add_library(output_obj_renamed_lib STATIC IMPORTED GLOBAL) + add_library(kobj_hash_output_obj_renamed_lib STATIC IMPORTED GLOBAL) set_property( - TARGET output_obj_renamed_lib + TARGET kobj_hash_output_obj_renamed_lib PROPERTY - IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_OBJ_RENAMED} + IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_OUTPUT_OBJ_RENAMED} ) add_dependencies( - output_obj_renamed_lib - output_obj_renamed + kobj_hash_output_obj_renamed_lib + kobj_hash_output_obj_renamed ) - set_property(GLOBAL APPEND PROPERTY GENERATED_KERNEL_OBJECT_FILES output_obj_renamed_lib) + set_property( + GLOBAL APPEND PROPERTY + GENERATED_KERNEL_OBJECT_FILES kobj_hash_output_obj_renamed_lib + ) endif() # Read global variables into local variables