Skip to content

Commit 0d5c312

Browse files
SebastianBoehakonfam
authored andcommitted
multi_image: d
d Signed-off-by: Sebastian Bøe <[email protected]>
1 parent 7077602 commit 0d5c312

File tree

24 files changed

+468
-363
lines changed

24 files changed

+468
-363
lines changed

CMakeLists.txt

Lines changed: 79 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -28,33 +28,36 @@ check_c_compiler_flag("" toolchain_is_ok)
2828
assert(toolchain_is_ok "The toolchain is unable to build a dummy C file. See CMakeError.log.")
2929

3030
set(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__)
4346
endif()
4447

4548
define_property(GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT BRIEF_DOCS " " FULL_DOCS " ")
4649
set_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.
5861
zephyr_library_named(zephyr)
5962

6063
zephyr_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}
494497
set_ifndef( DTS_SOC_FIXUP_FILE ${SOC_DIR}/${ARCH}/${SOC_PATH}/dts_fixup.h)
495498
set( 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")
502505
foreach(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()
512515
endforeach()
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-
697698
set(OFFSETS_C_PATH ${ARCH_DIR}/${ARCH}/core/offsets/offsets.c)
698699
set(OFFSETS_H_PATH ${PROJECT_BINARY_DIR}/include/generated/offsets.h)
699-
700700
add_library( ${OFFSETS_LIB} OBJECT ${OFFSETS_C_PATH})
701-
target_link_libraries(${OFFSETS_LIB} zephyr_interface)
701+
target_link_libraries(${OFFSETS_LIB} ${IMAGE}zephyr_interface)
702702
add_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)
722722
add_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

727727
foreach(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

802802
if(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)
832832
endif()
833833

834834
if(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

854854
endif()
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)
992992
endif()
993993

994994
if(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)
11121112
endif()
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

11191119
get_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

12031203
if(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

13471363
if(CONFIG_OUTPUT_PRINT_MEMORY_USAGE)
13481364
# Use --print-memory-usage with the first link.
@@ -1364,7 +1380,7 @@ endif()
13641380
if(EMU_PLATFORM)
13651381
include(${ZEPHYR_BASE}/cmake/emu/${EMU_PLATFORM}.cmake)
13661382
else()
1367-
add_custom_target(run
1383+
add_custom_target(${IMAGE}run
13681384
COMMAND
13691385
${CMAKE_COMMAND} -E echo
13701386
"==================================================="
@@ -1374,7 +1390,7 @@ else()
13741390
endif()
13751391

13761392
add_subdirectory(cmake/flash)
1377-
add_subdirectory(cmake/usage)
1393+
# TODO what to do about cmake/usage?
13781394
add_subdirectory(cmake/reports)
13791395

13801396
if(CONFIG_ASSERT AND (NOT CONFIG_FORCE_NO_ASSERT))

Kconfig.zephyr

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ source "ext/Kconfig"
4040

4141
source "tests/Kconfig"
4242

43-
source "$(PROJECT_BINARY_DIR)/Kconfig.modules"
43+
source "$(CMAKE_BINARY_DIR)/Kconfig.modules"
4444

4545
menu "Build and Link Features"
4646

arch/x86/CMakeLists.txt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11

22
# Find out if we are optimizing for size
3-
get_target_property(zephyr_COMPILE_OPTIONS zephyr_interface INTERFACE_COMPILE_OPTIONS)
3+
get_target_property(zephyr_COMPILE_OPTIONS ${IMAGE}zephyr_interface INTERFACE_COMPILE_OPTIONS)
44
if ("-Os" IN_LIST zephyr_COMPILE_OPTIONS)
55
zephyr_cc_option(-mpreferred-stack-boundary=2)
66
else()
77
zephyr_compile_definitions(PERF_OPT)
88
endif()
99

1010
if(CONFIG_X86_IAMCU)
11-
set_property(GLOBAL APPEND PROPERTY PROPERTY_LINKER_SCRIPT_DEFINES -D__IAMCU)
11+
set_property(GLOBAL APPEND PROPERTY ${IMAGE}PROPERTY_LINKER_SCRIPT_DEFINES -D__IAMCU)
1212
set_property(GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT "elf32-iamcu")
1313
set_property(GLOBAL PROPERTY PROPERTY_OUTPUT_ARCH "iamcu:intel")
1414
else()
@@ -131,9 +131,9 @@ add_dependencies(irq_int_vector_map irq_int_vector_map_o)
131131
add_dependencies(staticIdt staticIdt_o)
132132
add_dependencies(irq_vectors_alloc irq_vectors_alloc_o)
133133

134-
set_property(GLOBAL APPEND PROPERTY GENERATED_KERNEL_OBJECT_FILES irq_int_vector_map)
135-
set_property(GLOBAL APPEND PROPERTY GENERATED_KERNEL_OBJECT_FILES staticIdt)
136-
set_property(GLOBAL APPEND PROPERTY GENERATED_KERNEL_OBJECT_FILES irq_vectors_alloc)
134+
set_property(GLOBAL APPEND PROPERTY ${IMAGE}GENERATED_KERNEL_OBJECT_FILES irq_int_vector_map)
135+
set_property(GLOBAL APPEND PROPERTY ${IMAGE}GENERATED_KERNEL_OBJECT_FILES staticIdt)
136+
set_property(GLOBAL APPEND PROPERTY ${IMAGE}GENERATED_KERNEL_OBJECT_FILES irq_vectors_alloc)
137137

138138
if(CONFIG_X86_MMU)
139139
# Use gen_mmu.py and objcopy to generate mmu_tables.o from from the
@@ -184,7 +184,7 @@ if(CONFIG_X86_MMU)
184184
add_library( mmu_tables STATIC IMPORTED GLOBAL)
185185
set_property(TARGET mmu_tables PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/mmu_tables.o)
186186
add_dependencies( mmu_tables mmu_tables_o)
187-
set_property(GLOBAL APPEND PROPERTY GENERATED_KERNEL_OBJECT_FILES mmu_tables)
187+
set_property(GLOBAL APPEND PROPERTY ${IMAGE}GENERATED_KERNEL_OBJECT_FILES mmu_tables)
188188
endif()
189189

190190
if(CONFIG_GDT_DYNAMIC)
@@ -222,5 +222,5 @@ if(CONFIG_GDT_DYNAMIC)
222222
add_library( gdt STATIC IMPORTED GLOBAL)
223223
set_property(TARGET gdt PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/gdt.o)
224224
add_dependencies( gdt gdt_o)
225-
set_property(GLOBAL APPEND PROPERTY GENERATED_KERNEL_OBJECT_FILES gdt)
225+
set_property(GLOBAL APPEND PROPERTY ${IMAGE}GENERATED_KERNEL_OBJECT_FILES gdt)
226226
endif()

0 commit comments

Comments
 (0)