@@ -21,30 +21,108 @@ if (NOT DEFINED ${TGTNAME}_PROCESSORID)
2121 message (FATAL_ERROR "${TGTNAME} _PROCESSORID must be defined to link a final exe" )
2222endif (NOT DEFINED ${TGTNAME} _PROCESSORID)
2323
24- # Create a file for the statically-linked module list for this target
25- # do this for both PSP and CFS static modules
26- file (WRITE "${CMAKE_CURRENT_BINARY_DIR} /psp_module_list.inc.tmp"
27- "/* Automatically generated based on target config */\n " )
24+ string (CONCAT GENERATED_FILE_HEADER
25+ "/* This file is auto-generated from CMake build system. Do not manually edit! */\n "
26+ "#include \" target_config.h\"\n "
27+ )
28+
29+ string (CONCAT GENERATED_FILE_TRAILER
30+ "/* End of file */\n "
31+ )
32+
33+ # Generate a list of PSP modules along with a pointer to its API structure/entry point
34+ set (GENERATED_EXTERNS)
35+ set (GENERATED_KEYVALS)
2836foreach (PSPMOD ${${TGTNAME} _PSP_MODULELIST})
29- file (APPEND "${CMAKE_CURRENT_BINARY_DIR} /psp_module_list.inc.tmp" "LOAD_PSP_MODULE(${PSPMOD} )\n " )
37+ list (APPEND GENERATED_EXTERNS "extern char CFE_PSP_${PSPMOD} _API;\n " )
38+ list (APPEND GENERATED_KEYVALS "{ .Name = \" ${PSPMOD} \" , .Api = &CFE_PSP_${PSPMOD} _API },\n " )
3039endforeach (PSPMOD ${${TGTNAME} _PSP_MODULELIST})
31- execute_process (COMMAND ${CMAKE_COMMAND} -E copy_if_different
32- "${CMAKE_CURRENT_BINARY_DIR} /psp_module_list.inc.tmp"
33- "${CMAKE_CURRENT_BINARY_DIR} /psp_module_list.inc" )
34- file (REMOVE "${CMAKE_CURRENT_BINARY_DIR} /psp_module_list.inc.tmp" )
3540
36- file (WRITE "${CMAKE_CURRENT_BINARY_DIR} /cfs_static_symbol_list.inc.tmp"
37- "/* Automatically generated based on target config */\n " )
41+ string (CONCAT GENERATED_FILE_CONTENT
42+ ${GENERATED_EXTERNS}
43+ "const CFE_StaticModuleLoadEntry_t CFE_PSP_MODULE_LIST[] = {\n "
44+ ${GENERATED_KEYVALS}
45+ "{ NULL } /* End of list */\n "
46+ "};\n "
47+ )
48+
49+ configure_file (${CFE_SOURCE_DIR} /cmake/cfe_generated_file.h.in ${CMAKE_CURRENT_BINARY_DIR} /cfe_psp_module_list.c)
50+
51+ # Generate lists of modules that will be statically linked into this CFE core target
52+ set (GENERATED_ENTRIES_CORE_MODULES)
53+ foreach (DEP ${MISSION_CORE_MODULES} )
54+ list (APPEND GENERATED_ENTRIES_CORE_MODULES "{ \" ${DEP} \" },\n " )
55+ endforeach ()
56+
57+ set (GENERATED_ENTRIES_STATIC_APPS)
58+ foreach (DEP ${${TGTNAME} _STATIC_APPLIST})
59+ list (APPEND GENERATED_ENTRIES_STATIC_APPS "{ \" ${DEP} \" },\n " )
60+ endforeach ()
61+
62+ string (CONCAT GENERATED_FILE_CONTENT
63+ "CFE_ConfigName_t CFE_CORE_MODULE_LIST[] = {\n "
64+ ${GENERATED_ENTRIES_CORE_MODULES}
65+ "{ NULL } /* End of list */\n "
66+ "};\n "
67+ "CFE_ConfigName_t CFE_STATIC_APP_LIST[] = {\n "
68+ ${GENERATED_ENTRIES_STATIC_APPS}
69+ "{ NULL } /* End of list */\n "
70+ "};\n "
71+ )
72+
73+ configure_file (${CFE_SOURCE_DIR} /cmake/cfe_generated_file.h.in ${CMAKE_CURRENT_BINARY_DIR} /cfe_static_module_list.c)
74+
75+ # Generate a list of symbol names that must be known at runtime without OS loader support
76+ set (GENERATED_EXTERNS)
77+ set (GENERATED_KEYVALS)
3878foreach (CFSSYM ${${TGTNAME} _STATIC_SYMLIST})
39- file (APPEND "${CMAKE_CURRENT_BINARY_DIR} /cfs_static_symbol_list.inc.tmp" "STATIC_CFS_SYMBOL(${CFSSYM} )\n " )
79+ string (REPLACE "," ";" CFSSYM "${CFSSYM} " )
80+ list (GET CFSSYM 0 SYM_NAME)
81+ list (GET CFSSYM 1 SYM_MODULE)
82+ list (APPEND GENERATED_EXTERNS "extern void ${SYM_NAME} (void);\n " )
83+ list (APPEND GENERATED_KEYVALS "{ .Name = \" ${SYM_NAME} \" , .Address = &{SYM_NAME}, .Module = \" ${SYM_MODULE} \" }," )
4084endforeach (CFSSYM ${${TGTNAME} _STATIC_SYMLIST})
41- execute_process (COMMAND ${CMAKE_COMMAND} -E copy_if_different
42- "${CMAKE_CURRENT_BINARY_DIR} /cfs_static_symbol_list.inc.tmp"
43- "${CMAKE_CURRENT_BINARY_DIR} /cfs_static_symbol_list.inc" )
44- file (REMOVE "${CMAKE_CURRENT_BINARY_DIR} /cfs_static_symbol_list.inc.tmp" )
85+
86+ string (CONCAT GENERATED_FILE_HEADER
87+ "/* This file is auto-generated from CMake build system. Do not manually edit! */\n "
88+ "#include \" osapi-module.h\"\n "
89+ )
90+
91+ string (CONCAT GENERATED_FILE_CONTENT
92+ ${GENERATED_EXTERNS}
93+ "OS_static_symbol_record_t OS_STATIC_SYMBOL_TABLE[] = {\n "
94+ ${GENERATED_KEYVALS}
95+ "{ NULL } /* End of list */\n "
96+ "};\n "
97+ )
98+
99+ configure_file (${CFE_SOURCE_DIR} /cmake/cfe_generated_file.h.in ${CMAKE_CURRENT_BINARY_DIR} /cfe_static_symbol_list.c)
100+
101+ add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /cfe_build_env_table.c
102+ COMMAND ${CMAKE_COMMAND} -E copy
103+ ${MISSION_BINARY_DIR} /src/cfe_build_env_table.c
104+ ${CMAKE_CURRENT_BINARY_DIR} /cfe_build_env_table.c
105+ DEPENDS
106+ ${MISSION_BINARY_DIR} /src/cfe_build_env_table.c
107+ )
108+ add_custom_command (OUTPUT ${CMAKE_CURRENT_BINARY_DIR} /cfe_module_version_table.c
109+ COMMAND ${CMAKE_COMMAND} -E copy
110+ ${MISSION_BINARY_DIR} /src/cfe_module_version_table.c
111+ ${CMAKE_CURRENT_BINARY_DIR} /cfe_module_version_table.c
112+ DEPENDS
113+ ${MISSION_BINARY_DIR} /src/cfe_module_version_table.c
114+ )
45115
46116# Target for the final executable
47- add_executable (core-${TGTNAME} src/target_config.c)
117+ add_executable (core-${TGTNAME}
118+ ${MISSION_BINARY_DIR} /src/cfe_mission_strings.c
119+ ${CMAKE_CURRENT_BINARY_DIR} /cfe_module_version_table.c
120+ ${CMAKE_CURRENT_BINARY_DIR} /cfe_build_env_table.c
121+ ${CMAKE_CURRENT_BINARY_DIR} /cfe_psp_module_list.c
122+ ${CMAKE_CURRENT_BINARY_DIR} /cfe_static_symbol_list.c
123+ ${CMAKE_CURRENT_BINARY_DIR} /cfe_static_module_list.c
124+ src/target_config.c
125+ )
48126
49127target_compile_definitions (core-${TGTNAME} PRIVATE
50128 CFE_DEFAULT_MODULE_EXTENSION="${CMAKE_SHARED_MODULE_SUFFIX} "
@@ -54,8 +132,7 @@ target_compile_definitions(core-${TGTNAME} PRIVATE
54132 CFE_CPU_ID_VALUE=${${TGTNAME} _PROCESSORID}
55133)
56134
57- target_include_directories (core-${TGTNAME} PRIVATE
58- "${CMAKE_CURRENT_BINARY_DIR} "
135+ target_include_directories (core-${TGTNAME} PRIVATE
59136 "${CMAKE_BINARY_DIR} /${CFE_CORE_TARGET} /inc"
60137)
61138
0 commit comments