@@ -41,6 +41,8 @@ set(LINKER_SCRIPT_TARGET ${IMAGE}linker_script_target)
4141set (OFFSETS_LIB ${IMAGE} offsets)
4242set (KERNEL_LIBRARY ${IMAGE} kernel)
4343
44+ set (PRIV_STACKS_PREBUILT ${IMAGE} priv_stacks_prebuilt)
45+
4446if (NOT ${IMAGE} PROPERTY_LINKER_SCRIPT_DEFINES)
4547 set_property (GLOBAL PROPERTY ${IMAGE} PROPERTY_LINKER_SCRIPT_DEFINES -D__GCC_LINKER_CMD__)
4648endif ()
@@ -343,7 +345,7 @@ if(CONFIG_USERSPACE)
343345 set (APP_SMEM_DEP app_smem_linker)
344346 endif ()
345347 if (CONFIG_ARM)
346- set (PRIV_STACK_DEP priv_stacks_prebuilt )
348+ set (PRIV_STACK_DEP ${PRIV_STACKS_PREBUILT} )
347349 endif ()
348350endif ()
349351
@@ -867,7 +869,7 @@ if(CONFIG_USERSPACE)
867869 get_property (compile_definitions_interface TARGET zephyr_interface
868870 PROPERTY INTERFACE_COMPILE_DEFINITIONS )
869871
870- set (complete_include_dirs ${include_dir_in_interface} ${sys_include_dir_in_interface} )
872+ set (${IMAGE} complete_include_dirs ${include_dir_in_interface} ${sys_include_dir_in_interface} )
871873endif ()
872874
873875
@@ -881,6 +883,14 @@ if(CONFIG_ARM AND CONFIG_USERSPACE)
881883 set (PRIV_STACKS_OUTPUT_OBJ priv_stacks_hash.c.obj)
882884 set (PRIV_STACKS_OUTPUT_OBJ_RENAMED priv_stacks_hash_renamed.o)
883885
886+ set (PRIV_STACKS_T ${IMAGE} priv_stacks)
887+ set (PRIV_STACKS_OUTPUT_SRC_PRE_T ${IMAGE} priv_stacks_output_src_pre)
888+ set (PRIV_STACKS_OUTPUT_SRC_T ${IMAGE} priv_stacks_output_src)
889+ set (PRIV_STACKS_OUTPUT_LIB ${IMAGE} priv_stacks_output_lib)
890+ set (PRIV_STACKS_OUTPUT_LIB_INTERFACE ${IMAGE} priv_stacks_output_lib_interface)
891+ set (PRIV_STACKS_OUTPUT_OBJ_RENAMED_T ${IMAGE} priv_stacks_output_obj_renamed)
892+ set (PRIV_STACKS_OUTPUT_OBJ_RENAMED_LIB ${IMAGE} priv_stacks_output_obj_renamed_lib)
893+
884894 # Essentially what we are doing here is extracting some information
885895 # out of the nearly finished elf file, generating the source code
886896 # for a hash table based on that information, and then compiling and
@@ -895,13 +905,13 @@ if(CONFIG_ARM AND CONFIG_USERSPACE)
895905 COMMAND
896906 ${PYTHON_EXECUTABLE}
897907 ${GEN_PRIV_STACKS}
898- --kernel $<TARGET_FILE:priv_stacks_prebuilt >
908+ --kernel $<TARGET_FILE:${PRIV_STACKS_PREBUILT} >
899909 --output ${PRIV_STACKS}
900910 $<$<BOOL :${CMAKE_VERBOSE_MAKEFILE} >:--verbose>
901- DEPENDS priv_stacks_prebuilt
911+ DEPENDS ${PRIV_STACKS_PREBUILT}
902912 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
903913 )
904- add_custom_target (priv_stacks DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${PRIV_STACKS} )
914+ add_custom_target (${PRIV_STACKS_T} DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${PRIV_STACKS} )
905915
906916 # Use gperf to generate C code (PRIV_STACKS_OUTPUT_SRC_PRE) which implements a
907917 # perfect hashtable based on PRIV_STACKS
@@ -911,10 +921,11 @@ if(CONFIG_ARM AND CONFIG_USERSPACE)
911921 ${GPERF} -C
912922 --output -file ${PRIV_STACKS_OUTPUT_SRC_PRE}
913923 ${PRIV_STACKS}
914- DEPENDS priv_stacks ${PRIV_STACKS}
924+ DEPENDS ${PRIV_STACKS_T} ${PRIV_STACKS}
915925 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
916926 )
917- add_custom_target (priv_stacks_output_src_pre DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${PRIV_STACKS_OUTPUT_SRC_PRE} )
927+ add_custom_target (${PRIV_STACKS_OUTPUT_SRC_PRE_T}
928+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${PRIV_STACKS_OUTPUT_SRC_PRE} )
918929
919930 # For our purposes the code/data generated by gperf is not optimal.
920931 #
@@ -930,10 +941,11 @@ if(CONFIG_ARM AND CONFIG_USERSPACE)
930941 -o ${PRIV_STACKS_OUTPUT_SRC}
931942 -p "struct _k_priv_stack_map"
932943 $<$<BOOL :${CMAKE_VERBOSE_MAKEFILE} >:--verbose>
933- DEPENDS priv_stacks_output_src_pre ${PRIV_STACKS_OUTPUT_SRC_PRE}
944+ DEPENDS ${PRIV_STACKS_OUTPUT_SRC_PRE_T} ${PRIV_STACKS_OUTPUT_SRC_PRE}
934945 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
935946 )
936- add_custom_target (priv_stacks_output_src DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${PRIV_STACKS_OUTPUT_SRC} )
947+ add_custom_target (${PRIV_STACKS_OUTPUT_SRC_T}
948+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${PRIV_STACKS_OUTPUT_SRC} )
937949
938950 set_source_files_properties (${CMAKE_CURRENT_BINARY_DIR} /${PRIV_STACKS_OUTPUT_SRC}
939951 PROPERTIES COMPILE_DEFINITIONS "${compile_definitions_interface} " )
@@ -946,21 +958,24 @@ if(CONFIG_ARM AND CONFIG_USERSPACE)
946958 # We need precise control of where generated text/data ends up in the final
947959 # kernel image. Disable function/data sections and use objcopy to move
948960 # generated data into special section names
949- add_library (priv_stacks_output_lib STATIC
961+ add_library (${PRIV_STACKS_OUTPUT_LIB} STATIC
950962 ${CMAKE_CURRENT_BINARY_DIR} /${PRIV_STACKS_OUTPUT_SRC}
951963 )
952964
953965 # Turn off -ffunction-sections, etc.
954- # NB: Using a library instead of target_compile_options(priv_stacks_output_lib
966+ # NB: Using a library instead of
967+ # target_compile_options(${PRIV_STACKS_OUTPUT_LIB}
955968 # [...]) because a library's options have precedence
956- add_library (priv_stacks_output_lib_interface INTERFACE )
957- foreach (incl ${complete_include_dirs} )
958- target_include_directories (priv_stacks_output_lib_interface INTERFACE ${incl} )
969+ add_library (${PRIV_STACKS_OUTPUT_LIB_INTERFACE} INTERFACE )
970+ foreach (incl ${${IMAGE} complete_include_dirs})
971+ target_include_directories (${PRIV_STACKS_OUTPUT_LIB_INTERFACE} INTERFACE ${incl} )
959972 endforeach ()
960973
961- target_link_libraries (priv_stacks_output_lib priv_stacks_output_lib_interface)
974+ target_link_libraries (${PRIV_STACKS_OUTPUT_LIB}
975+ ${PRIV_STACKS_OUTPUT_LIB_INTERFACE} )
962976
963- set (PRIV_STACKS_OUTPUT_OBJ_PATH ${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles/priv_stacks_output_lib.dir/${PRIV_STACKS_OUTPUT_OBJ} )
977+ set (PRIV_STACKS_OUTPUT_OBJ_PATH
978+ ${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles/${PRIV_STACKS_OUTPUT_LIB} .dir/${PRIV_STACKS_OUTPUT_OBJ} )
964979
965980 add_custom_command (
966981 OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /${PRIV_STACKS_OUTPUT_OBJ_RENAMED}
@@ -972,23 +987,25 @@ if(CONFIG_ARM AND CONFIG_USERSPACE)
972987 --rename -section .rodata=.priv_stacks.rodata
973988 ${PRIV_STACKS_OUTPUT_OBJ_PATH}
974989 ${PRIV_STACKS_OUTPUT_OBJ_RENAMED}
975- DEPENDS priv_stacks_output_lib
990+ DEPENDS ${PRIV_STACKS_OUTPUT_LIB}
976991 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
977992 )
978- add_custom_target (priv_stacks_output_obj_renamed DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${PRIV_STACKS_OUTPUT_OBJ_RENAMED} )
993+ add_custom_target (${PRIV_STACKS_OUTPUT_OBJ_RENAMED_T}
994+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${PRIV_STACKS_OUTPUT_OBJ_RENAMED} )
979995
980- add_library (priv_stacks_output_obj_renamed_lib STATIC IMPORTED GLOBAL )
996+ add_library (${PRIV_STACKS_OUTPUT_OBJ_RENAMED_LIB} STATIC IMPORTED GLOBAL )
981997 set_property (
982- TARGET priv_stacks_output_obj_renamed_lib
998+ TARGET ${PRIV_STACKS_OUTPUT_OBJ_RENAMED_LIB}
983999 PROPERTY
9841000 IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR} /${PRIV_STACKS_OUTPUT_OBJ_RENAMED}
9851001 )
9861002 add_dependencies (
987- priv_stacks_output_obj_renamed_lib
988- priv_stacks_output_obj_renamed
1003+ ${PRIV_STACKS_OUTPUT_OBJ_RENAMED_LIB}
1004+ ${PRIV_STACKS_OUTPUT_OBJ_RENAMED_T}
9891005 )
9901006
991- set_property (GLOBAL APPEND PROPERTY ${IMAGE} GENERATED_KERNEL_OBJECT_FILES priv_stacks_output_obj_renamed_lib)
1007+ set_property (GLOBAL APPEND PROPERTY ${IMAGE} GENERATED_KERNEL_OBJECT_FILES
1008+ ${PRIV_STACKS_OUTPUT_OBJ_RENAMED_LIB} )
9921009endif ()
9931010
9941011if (CONFIG_USERSPACE)
@@ -1001,6 +1018,13 @@ if(CONFIG_USERSPACE)
10011018 set (OUTPUT_OBJ kobject_hash.c.obj)
10021019 set (OUTPUT_OBJ_RENAMED kobject_hash_renamed.o)
10031020
1021+ set (OUTPUT_SRC_PRE_T ${IMAGE} output_src_pre)
1022+ set (OBJ_LIST_T ${IMAGE} obj_list)
1023+ set (OUTPUT_SRC_T ${IMAGE} output_src)
1024+ set (OUTPUT_LIB ${IMAGE} output_lib)
1025+ set (OUTPUT_LIB_INTERFACE ${IMAGE} output_lib_interface)
1026+ set (OUTPUT_OBJ_RENAMED_T ${IMAGE} output_obj_renamed)
1027+ set (OUTPUT_OBJ_RENAMED_LIB ${IMAGE} output_obj_renamed_lib)
10041028 # Essentially what we are doing here is extracting some information
10051029 # out of the nearly finished elf file, generating the source code
10061030 # for a hash table based on that information, and then compiling and
@@ -1021,7 +1045,7 @@ if(CONFIG_USERSPACE)
10211045 DEPENDS ${ZEPHYR_PREBUILT_EXECUTABLE}
10221046 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
10231047 )
1024- add_custom_target (obj_list DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${OBJ_LIST} )
1048+ add_custom_target (${OBJ_LIST_T} DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${OBJ_LIST} )
10251049
10261050 # Use gperf to generate C code (OUTPUT_SRC_PRE) which implements a
10271051 # perfect hashtable based on OBJ_LIST
@@ -1031,10 +1055,10 @@ if(CONFIG_USERSPACE)
10311055 ${GPERF}
10321056 --output -file ${OUTPUT_SRC_PRE}
10331057 ${OBJ_LIST}
1034- DEPENDS obj_list ${OBJ_LIST}
1058+ DEPENDS ${OBJ_LIST_T} ${OBJ_LIST}
10351059 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
10361060 )
1037- add_custom_target (output_src_pre DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${OUTPUT_SRC_PRE} )
1061+ add_custom_target (${OUTPUT_SRC_PRE_T} DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${OUTPUT_SRC_PRE} )
10381062
10391063 # For our purposes the code/data generated by gperf is not optimal.
10401064 #
@@ -1050,15 +1074,15 @@ if(CONFIG_USERSPACE)
10501074 -o ${OUTPUT_SRC}
10511075 -p "struct _k_object"
10521076 $<$<BOOL :${CMAKE_VERBOSE_MAKEFILE} >:--verbose>
1053- DEPENDS output_src_pre ${OUTPUT_SRC_PRE}
1077+ DEPENDS ${OUTPUT_SRC_PRE_T} ${OUTPUT_SRC_PRE}
10541078 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
10551079 )
1056- add_custom_target (output_src DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${OUTPUT_SRC} )
1080+ add_custom_target (${OUTPUT_SRC_T} DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${OUTPUT_SRC} )
10571081
10581082 # We need precise control of where generated text/data ends up in the final
10591083 # kernel image. Disable function/data sections and use objcopy to move
10601084 # generated data into special section names
1061- add_library (output_lib STATIC
1085+ add_library (${OUTPUT_LIB} STATIC
10621086 ${CMAKE_CURRENT_BINARY_DIR} /${OUTPUT_SRC}
10631087 )
10641088
@@ -1070,18 +1094,18 @@ if(CONFIG_USERSPACE)
10701094 PROPERTIES COMPILE_DEFINITIONS "${compile_definitions_interface} " )
10711095
10721096 # Turn off -ffunction-sections, etc.
1073- # NB: Using a library instead of target_compile_options(output_lib
1097+ # NB: Using a library instead of target_compile_options(${OUTPUT_LIB}
10741098 # [...]) because a library's options have precedence
1075- add_library (output_lib_interface INTERFACE )
1099+ add_library (${OUTPUT_LIB} _interface INTERFACE )
10761100
1077- target_link_libraries (output_lib output_lib_interface )
1101+ target_link_libraries (${OUTPUT_LIB} ${OUTPUT_LIB_INTERFACE} )
10781102
1079- foreach (incl ${complete_include_dirs} )
1080- target_include_directories (output_lib_interface INTERFACE ${incl} )
1103+ foreach (incl ${${IMAGE} complete_include_dirs})
1104+ target_include_directories (${OUTPUT_LIB_INTERFACE} INTERFACE ${incl} )
10811105 endforeach ()
10821106
10831107
1084- set (OUTPUT_OBJ_PATH ${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles/output_lib .dir/${OUTPUT_OBJ} )
1108+ set (OUTPUT_OBJ_PATH ${CMAKE_CURRENT_BINARY_DIR} /CMakeFiles/${OUTPUT_LIB} .dir/${OUTPUT_OBJ} )
10851109
10861110 add_custom_command (
10871111 OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /${OUTPUT_OBJ_RENAMED}
@@ -1092,23 +1116,24 @@ if(CONFIG_USERSPACE)
10921116 --rename -section .rodata=.kobject_data.rodata
10931117 ${OUTPUT_OBJ_PATH}
10941118 ${OUTPUT_OBJ_RENAMED}
1095- DEPENDS output_lib
1119+ DEPENDS ${OUTPUT_LIB}
10961120 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
10971121 )
1098- add_custom_target (output_obj_renamed DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${OUTPUT_OBJ_RENAMED} )
1122+ add_custom_target (${OUTPUT_OBJ_RENAMED_T} DEPENDS ${CMAKE_CURRENT_BINARY_DIR} /${OUTPUT_OBJ_RENAMED} )
10991123
1100- add_library (output_obj_renamed_lib STATIC IMPORTED GLOBAL )
1124+ add_library (${OUTPUT_OBJ_RENAMED_LIB} STATIC IMPORTED GLOBAL )
11011125 set_property (
1102- TARGET output_obj_renamed_lib
1126+ TARGET ${OUTPUT_OBJ_RENAMED_LIB}
11031127 PROPERTY
11041128 IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR} /${OUTPUT_OBJ_RENAMED}
11051129 )
11061130 add_dependencies (
1107- output_obj_renamed_lib
1108- output_obj_renamed
1131+ ${OUTPUT_OBJ_RENAMED_LIB}
1132+ ${OUTPUT_OBJ_RENAMED_T}
11091133 )
11101134
1111- set_property (GLOBAL APPEND PROPERTY ${IMAGE} GENERATED_KERNEL_OBJECT_FILES output_obj_renamed_lib)
1135+ set_property (GLOBAL APPEND PROPERTY ${IMAGE} GENERATED_KERNEL_OBJECT_FILES
1136+ ${OUTPUT_OBJ_RENAMED_LIB} )
11121137endif ()
11131138
11141139# Read global variables into local variables
@@ -1175,22 +1200,22 @@ if(CONFIG_USERSPACE AND CONFIG_ARM)
11751200 )
11761201
11771202 add_custom_target (
1178- linker_priv_stacks_script
1203+ ${IMAGE} linker_priv_stacks_script
11791204 DEPENDS
11801205 linker_priv_stacks.cmd
11811206 )
11821207
11831208 set_property (TARGET
1184- linker_priv_stacks_script
1209+ ${IMAGE} linker_priv_stacks_script
11851210 PROPERTY INCLUDE_DIRECTORIES
11861211 ${ZEPHYR_INCLUDE_DIRS}
11871212 )
11881213
1189- set (PRIV_STACK_LIB priv_stacks_output_obj_renamed_lib)
1190- add_executable ( priv_stacks_prebuilt misc/empty_file.c)
1191- target_link_libraries (priv_stacks_prebuilt ${TOPT} ${PROJECT_BINARY_DIR} /linker_priv_stacks.cmd ${zephyr_lnk} ${CODE_RELOCATION_DEP} )
1192- set_property (TARGET priv_stacks_prebuilt PROPERTY LINK_DEPENDS ${PROJECT_BINARY_DIR} /linker_priv_stacks.cmd)
1193- add_dependencies ( priv_stacks_prebuilt ${ALIGN_SIZING_DEP} linker_priv_stacks_script ${OFFSETS_LIB} )
1214+ set (PRIV_STACK_LIB ${IMAGE} priv_stacks_output_obj_renamed_lib)
1215+ add_executable ( ${PRIV_STACKS_PREBUILT} misc/empty_file.c)
1216+ target_link_libraries (${PRIV_STACKS_PREBUILT} ${TOPT} ${PROJECT_BINARY_DIR} /linker_priv_stacks.cmd ${zephyr_lnk} ${CODE_RELOCATION_DEP} )
1217+ set_property (TARGET ${PRIV_STACKS_PREBUILT} PROPERTY LINK_DEPENDS ${PROJECT_BINARY_DIR} /linker_priv_stacks.cmd)
1218+ add_dependencies ( ${PRIV_STACKS_PREBUILT} ${ALIGN_SIZING_DEP} ${IMAGE} linker_priv_stacks_script ${OFFSETS_LIB} )
11941219endif ()
11951220
11961221# FIXME: Is there any way to get rid of empty_file.c?
0 commit comments