@@ -28,33 +28,36 @@ check_c_compiler_flag("" toolchain_is_ok)
2828assert(toolchain_is_ok "The toolchain is unable to build a dummy C file. See CMakeError.log." )
2929
3030set (CMAKE_EXECUTABLE_SUFFIX .elf)
31- set (ZEPHYR_PREBUILT_EXECUTABLE zephyr_prebuilt)
3231
33- set (OFFSETS_H_TARGET offsets_h)
34- set (SYSCALL_MACROS_H_TARGET syscall_macros_h_target)
35- set (SYSCALL_LIST_H_TARGET syscall_list_h_target)
36- set (DRIVER_VALIDATION_H_TARGET driver_validation_h_target)
37- set (KOBJ_TYPES_H_TARGET kobj_types_h_target)
38- set (LINKER_SCRIPT_TARGET linker_script_target)
32+ set (ZEPHYR_PREBUILT_EXECUTABLE ${IMAGE} zephyr_prebuilt)
3933
34+ set (OFFSETS_H_TARGET ${IMAGE} offsets_h)
35+ set (SYSCALL_MACROS_H_TARGET ${IMAGE} syscall_macros_h_target)
36+ set (SYSCALL_LIST_H_TARGET ${IMAGE} syscall_list_h_target)
37+ set (DRIVER_VALIDATION_H_TARGET ${IMAGE} driver_validation_h_target)
38+ set (KOBJ_TYPES_H_TARGET ${IMAGE} kobj_types_h_target)
39+ set (LINKER_SCRIPT_TARGET ${IMAGE} linker_script_target)
4040
41- if (NOT PROPERTY_LINKER_SCRIPT_DEFINES)
42- set_property (GLOBAL PROPERTY PROPERTY_LINKER_SCRIPT_DEFINES -D__GCC_LINKER_CMD__)
41+ set (OFFSETS_LIB ${IMAGE} offsets)
42+ set (KERNEL_LIBRARY ${IMAGE} kernel)
43+
44+ if (NOT ${IMAGE} PROPERTY_LINKER_SCRIPT_DEFINES)
45+ set_property (GLOBAL PROPERTY ${IMAGE} PROPERTY_LINKER_SCRIPT_DEFINES -D__GCC_LINKER_CMD__)
4346endif ()
4447
4548define_property (GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT BRIEF_DOCS " " FULL_DOCS " " )
4649set_property ( GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT elf32-little${ARCH} ) # BFD format
4750
48- # " zephyr_interface" is a source-less library that encapsulates all the global
51+ # ${IMAGE} zephyr_interface is a source-less library that encapsulates all the global
4952# compiler options needed by all source files. All zephyr libraries,
5053# including the library named "zephyr" link with this library to
5154# obtain these flags.
5255# https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#interface-libraries
53- add_library (zephyr_interface INTERFACE )
56+ add_library (${IMAGE} zephyr_interface INTERFACE )
5457
5558# "zephyr" is a catch-all CMake library for source files that can be
5659# built purely with the include paths, defines, and other compiler
57- # flags that come with zephyr_interface.
60+ # flags that come with ${IMAGE} zephyr_interface.
5861zephyr_library_named(zephyr)
5962
6063zephyr_include_directories(
@@ -446,8 +449,8 @@ function(construct_add_custom_command_for_linker_pass linker_output_name output_
446449 endif ()
447450
448451 zephyr_get_include_directories_for_lang(C current_includes)
449- get_filename_component ( base_name ${CMAKE_CURRENT_BINARY_DIR} NAME )
450- get_property (current_defines GLOBAL PROPERTY PROPERTY_LINKER_SCRIPT_DEFINES)
452+ file (RELATIVE_PATH base_name " ${CMAKE_BINARY_DIR} " " ${PROJECT_BINARY_DIR} " )
453+ get_property (current_defines GLOBAL PROPERTY ${IMAGE} PROPERTY_LINKER_SCRIPT_DEFINES)
451454
452455 set (${output_variable}
453456 OUTPUT ${linker_cmd_file_name}
@@ -494,11 +497,11 @@ set_ifndef( DTS_BOARD_FIXUP_FILE ${BOARD_DIR}
494497set_ifndef( DTS_SOC_FIXUP_FILE ${SOC_DIR} /${ARCH} /${SOC_PATH} /dts_fixup.h)
495498set ( DTS_APP_FIXUP_FILE ${APPLICATION_SOURCE_DIR} /dts_fixup.h)
496499
497- set_ifndef(DTS_CAT_OF_FIXUP_FILES ${ZEPHYR_BINARY_DIR} /include /generated /generated_dts_board_fixups.h)
500+ set_ifndef(${IMAGE} DTS_CAT_OF_FIXUP_FILES ${ZEPHYR_BINARY_DIR} /include /generated /generated_dts_board_fixups.h)
498501
499502# Concatenate the fixups into a single header file for easy
500503# #include'ing
501- file (WRITE ${DTS_CAT_OF_FIXUP_FILES} "/* May only be included by generated_dts_board.h */\n\n " )
504+ file (WRITE ${${IMAGE} DTS_CAT_OF_FIXUP_FILES} "/* May only be included by generated_dts_board.h */\n\n " )
502505foreach (fixup_file
503506 ${DTS_BOARD_FIXUP_FILE}
504507 ${DTS_SOC_FIXUP_FILE}
@@ -507,7 +510,7 @@ foreach(fixup_file
507510 )
508511 if (EXISTS ${fixup_file} )
509512 file (READ ${fixup_file} contents)
510- file (APPEND ${DTS_CAT_OF_FIXUP_FILES} "${contents} " )
513+ file (APPEND ${${IMAGE} DTS_CAT_OF_FIXUP_FILES} "${contents} " )
511514 endif ()
512515endforeach ()
513516
@@ -517,12 +520,12 @@ endforeach()
517520# build are not exported to external build systems #5605"; when we
518521# integrate with an external build system we read out all compiler
519522# flags when the external project is created. So an external project
520- # defined in subsys or ext will not get global flags added by drivers/
523+ # defined in subsys or ext will not get image- global flags added by drivers/
521524# or tests/ as the subdirectories are ordered now.
522525#
523526# Another example of when the order matters is the reading and writing
524- # of global properties such as ZEPHYR_LIBS or
525- # GENERATED_KERNEL_OBJECT_FILES.
527+ # of global properties such as ${IMAGE} ZEPHYR_LIBS or
528+ # ${IMAGE} GENERATED_KERNEL_OBJECT_FILES.
526529#
527530# Arch is placed early because it defines important compiler flags
528531# that must be exported to external build systems defined in
@@ -692,13 +695,10 @@ gen_kobj(KOBJ_INCLUDE_PATH)
692695# Generate offsets.c.obj from offsets.c
693696# Generate offsets.h from offsets.c.obj
694697
695- set (OFFSETS_LIB offsets)
696-
697698set (OFFSETS_C_PATH ${ARCH_DIR} /${ARCH} /core/offsets/offsets.c)
698699set (OFFSETS_H_PATH ${PROJECT_BINARY_DIR} /include /generated /offsets.h)
699-
700700add_library ( ${OFFSETS_LIB} OBJECT ${OFFSETS_C_PATH} )
701- target_link_libraries (${OFFSETS_LIB} zephyr_interface)
701+ target_link_libraries (${OFFSETS_LIB} ${IMAGE} zephyr_interface)
702702add_dependencies ( ${OFFSETS_LIB}
703703 ${SYSCALL_LIST_H_TARGET}
704704 ${SYSCALL_MACROS_H_TARGET}
@@ -722,10 +722,10 @@ zephyr_get_include_directories_for_lang(C ZEPHYR_INCLUDES)
722722add_subdirectory (kernel)
723723
724724# Read list content
725- get_property (ZEPHYR_LIBS_PROPERTY GLOBAL PROPERTY ZEPHYR_LIBS)
725+ get_property (ZEPHYR_LIBS_PROPERTY GLOBAL PROPERTY ${IMAGE} ZEPHYR_LIBS)
726726
727727foreach (zephyr_lib ${ZEPHYR_LIBS_PROPERTY} )
728- # TODO: Could this become an INTERFACE property of zephyr_interface?
728+ # TODO: Could this become an INTERFACE property of ${IMAGE} zephyr_interface?
729729 add_dependencies (${zephyr_lib} ${OFFSETS_H_TARGET} )
730730
731731 # Verify that all (non-imported) libraries have source
@@ -734,7 +734,7 @@ foreach(zephyr_lib ${ZEPHYR_LIBS_PROPERTY})
734734 get_target_property (lib_imported ${zephyr_lib} IMPORTED )
735735 get_target_property (lib_sources ${zephyr_lib} SOURCES )
736736 if (lib_sources STREQUAL lib_sources-NOTFOUND
737- AND (NOT (${zephyr_lib} STREQUAL app))
737+ AND (NOT (${zephyr_lib} STREQUAL ${IMAGE} app))
738738 AND (NOT lib_imported)
739739 )
740740 # app is not checked because it's sources are added to it after
@@ -792,11 +792,11 @@ set(zephyr_lnk
792792 ${LINKERFLAGPREFIX} ,--whole-archive
793793 ${ZEPHYR_LIBS_PROPERTY}
794794 ${LINKERFLAGPREFIX} ,--no -whole-archive
795- kernel
795+ ${KERNEL_LIBRARY}
796796 $<TARGET_OBJECTS:${OFFSETS_LIB} >
797- ${LIB_INCLUDE_DIR}
797+ ${${IMAGE} LIB_INCLUDE_DIR}
798798 -L${PROJECT_BINARY_DIR}
799- ${TOOLCHAIN_LIBS}
799+ ${${IMAGE} TOOLCHAIN_LIBS}
800800 )
801801
802802if (CONFIG_GEN_ISR_TABLES)
@@ -828,7 +828,7 @@ if(CONFIG_GEN_ISR_TABLES)
828828 ${GEN_ISR_TABLE_EXTRA_ARG}
829829 DEPENDS ${ZEPHYR_PREBUILT_EXECUTABLE}
830830 )
831- set_property (GLOBAL APPEND PROPERTY GENERATED_KERNEL_SOURCE_FILES isr_tables.c)
831+ set_property (GLOBAL APPEND PROPERTY ${IMAGE} GENERATED_KERNEL_SOURCE_FILES isr_tables.c)
832832endif ()
833833
834834if (CONFIG_CODE_DATA_RELOCATION)
@@ -842,14 +842,14 @@ if(CONFIG_CODE_DATA_RELOCATION)
842842 ${ZEPHYR_BASE} /scripts/gen_relocate_app.py
843843 $<$<BOOL :${CMAKE_VERBOSE_MAKEFILE} >:--verbose>
844844 -d ${APPLICATION_BINARY_DIR}
845- -i '$<TARGET_PROPERTY:code_data_relocation_target,COMPILE_DEFINITIONS >'
845+ -i '$<TARGET_PROPERTY:${IMAGE} code_data_relocation_target,COMPILE_DEFINITIONS >'
846846 -o ${MEM_RELOCATAION_LD}
847847 -c ${MEM_RELOCATAION_CODE}
848- DEPENDS app kernel ${ZEPHYR_LIBS_PROPERTY}
848+ DEPENDS ${KERNEL_LIBRARY} ${ZEPHYR_LIBS_PROPERTY}
849849 )
850850
851- add_library (code_relocation_source_lib STATIC ${MEM_RELOCATAION_CODE} )
852- target_link_libraries (code_relocation_source_lib zephyr_interface)
851+ add_library (${IMAGE} code_relocation_source_lib STATIC ${MEM_RELOCATAION_CODE} )
852+ target_link_libraries (${IMAGE} code_relocation_source_lib ${IMAGE} zephyr_interface)
853853
854854endif ()
855855
@@ -988,7 +988,7 @@ if(CONFIG_ARM AND CONFIG_USERSPACE)
988988 priv_stacks_output_obj_renamed
989989 )
990990
991- set_property (GLOBAL APPEND PROPERTY GENERATED_KERNEL_OBJECT_FILES priv_stacks_output_obj_renamed_lib)
991+ set_property (GLOBAL APPEND PROPERTY ${IMAGE} GENERATED_KERNEL_OBJECT_FILES priv_stacks_output_obj_renamed_lib)
992992endif ()
993993
994994if (CONFIG_USERSPACE)
@@ -1108,12 +1108,12 @@ if(CONFIG_USERSPACE)
11081108 output_obj_renamed
11091109 )
11101110
1111- set_property (GLOBAL APPEND PROPERTY GENERATED_KERNEL_OBJECT_FILES output_obj_renamed_lib)
1111+ set_property (GLOBAL APPEND PROPERTY ${IMAGE} GENERATED_KERNEL_OBJECT_FILES output_obj_renamed_lib)
11121112endif ()
11131113
11141114# Read global variables into local variables
1115- get_property (GKOF GLOBAL PROPERTY GENERATED_KERNEL_OBJECT_FILES)
1116- get_property (GKSF GLOBAL PROPERTY GENERATED_KERNEL_SOURCE_FILES)
1115+ get_property (GKOF GLOBAL PROPERTY ${IMAGE} GENERATED_KERNEL_OBJECT_FILES)
1116+ get_property (GKSF GLOBAL PROPERTY ${IMAGE} GENERATED_KERNEL_SOURCE_FILES)
11171117
11181118
11191119get_property (CSTD GLOBAL PROPERTY CSTD)
@@ -1153,7 +1153,7 @@ if(CONFIG_APP_SHARED_MEM AND CONFIG_USERSPACE)
11531153 ${NEWLIB_PART}
11541154 $<$<BOOL :${CMAKE_VERBOSE_MAKEFILE} >:--verbose>
11551155 DEPENDS
1156- kernel
1156+ ${KERNEL_LIBRARY}
11571157 ${ZEPHYR_LIBS_PROPERTY}
11581158 WORKING_DIRECTORY ${PROJECT_BINARY_DIR} /
11591159 COMMENT "Generating app_smem linker section"
@@ -1201,7 +1201,7 @@ add_dependencies( ${ZEPHYR_PREBUILT_EXECUTABLE} ${ALIGN_SIZING_DEP} ${PRIV_S
12011201
12021202
12031203if (GKOF OR GKSF)
1204- set (KERNEL_ELF kernel_elf)
1204+ set (KERNEL_ELF ${IMAGE} kernel_elf)
12051205 set (logical_target_for_zephyr_elf ${KERNEL_ELF} )
12061206
12071207 # The second linker pass uses the same source linker script of the
@@ -1220,7 +1220,7 @@ if(GKOF OR GKSF)
12201220 ${custom_command}
12211221 )
12221222
1223- set (LINKER_PASS_FINAL_SCRIPT_TARGET linker_pass_final_script_target)
1223+ set (LINKER_PASS_FINAL_SCRIPT_TARGET ${IMAGE} linker_pass_final_script_target)
12241224 add_custom_target (
12251225 ${LINKER_PASS_FINAL_SCRIPT_TARGET}
12261226 DEPENDS
@@ -1319,30 +1319,46 @@ add_custom_command(
13191319 POST_BUILD
13201320 ${post_build_commands}
13211321 COMMENT "Generating files from zephyr.elf for board: ${BOARD} "
1322+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
13221323 # NB: COMMENT only works for some CMake-Generators
13231324 )
1325+ if (FIRST_BOILERPLATE_EXECUTION)
1326+
1327+ # To populate with hex files to merge, do the following:
1328+ # set_property(GLOBAL APPEND PROPERTY HEX_FILES_TO_MERGE ${my_local_list})
1329+ # Note that the zephyr.hex file will not be included automatically.
1330+ get_property (
1331+ HEX_FILES_TO_MERGE
1332+ GLOBAL PROPERTY
1333+ HEX_FILES_TO_MERGE
1334+ )
1335+ get_property (
1336+ HEX_FILES_TO_MERGE_TARGET
1337+ GLOBAL PROPERTY
1338+ HEX_FILES_TO_MERGE_TARGET
1339+ )
13241340
1325- # To populate with hex files to merge, do the following:
1326- # set_property(GLOBAL APPEND PROPERTY HEX_FILES_TO_MERGE ${my_local_list})
1327- # Note that the zephyr.hex file will not be included automatically.
1328- get_property (HEX_FILES_TO_MERGE GLOBAL PROPERTY HEX_FILES_TO_MERGE)
1329- if (HEX_FILES_TO_MERGE)
1330- # Merge in out-of-tree hex files.
1331- set (MERGED_HEX_NAME merged.hex)
1341+ if (HEX_FILES_TO_MERGE)
1342+ # Merge in out-of-tree hex files.
1343+ set (MERGED_HEX_NAME merged.hex)
1344+
1345+ add_custom_command (
1346+ OUTPUT ${MERGED_HEX_NAME}
1347+ COMMAND
1348+ ${PYTHON_EXECUTABLE}
1349+ ${ZEPHYR_BASE} /scripts/mergehex.py
1350+ -o ${MERGED_HEX_NAME}
1351+ ${HEX_FILES_TO_MERGE}
1352+ DEPENDS
1353+ ${HEX_FILES_TO_MERGE_TARGET}
1354+ ${logical_target_for_zephyr_elf}
1355+ )
13321356
1333- add_custom_command (
1334- OUTPUT ${MERGED_HEX_NAME}
1335- COMMAND
1336- ${PYTHON_EXECUTABLE}
1337- ${ZEPHYR_BASE} /scripts/mergehex.py
1338- -o ${MERGED_HEX_NAME}
1339- ${HEX_FILES_TO_MERGE}
1340- DEPENDS ${HEX_FILES_TO_MERGE} ${logical_target_for_zephyr_elf}
1341- )
1357+ add_custom_target (mergehex ALL DEPENDS ${MERGED_HEX_NAME} )
1358+ list (APPEND FLASH_DEPS mergehex)
1359+ endif ()
13421360
1343- add_custom_target (mergehex ALL DEPENDS ${MERGED_HEX_NAME} )
1344- list (APPEND FLASH_DEPS mergehex)
1345- endif ()
1361+ endif (FIRST_BOILERPLATE_EXECUTION)
13461362
13471363if (CONFIG_OUTPUT_PRINT_MEMORY_USAGE)
13481364 # Use --print-memory-usage with the first link.
@@ -1364,7 +1380,7 @@ endif()
13641380if (EMU_PLATFORM)
13651381 include (${ZEPHYR_BASE} /cmake/emu/${EMU_PLATFORM} .cmake)
13661382else ()
1367- add_custom_target (run
1383+ add_custom_target (${IMAGE} run
13681384 COMMAND
13691385 ${CMAKE_COMMAND} -E echo
13701386 "==================================================="
@@ -1374,7 +1390,7 @@ else()
13741390endif ()
13751391
13761392add_subdirectory (cmake/flash)
1377- add_subdirectory ( cmake/usage)
1393+ # TODO what to do about cmake/usage?
13781394add_subdirectory (cmake/reports)
13791395
13801396if (CONFIG_ASSERT AND (NOT CONFIG_FORCE_NO_ASSERT))
0 commit comments