Skip to content

Commit 61877ad

Browse files
committed
refactor generate_fmu.cmake
1 parent b0dc053 commit 61877ad

1 file changed

Lines changed: 30 additions & 42 deletions

File tree

cmake/generate_fmu.cmake

Lines changed: 30 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -40,29 +40,12 @@ function(generateFMU modelIdentifier)
4040
endif ()
4141

4242

43-
# create an internal object library from provided sources
44-
set(model_objects_target "${modelIdentifier}_fmu_objects")
45-
46-
add_library(${model_objects_target} OBJECT ${FMU_SOURCES})
47-
target_include_directories(${model_objects_target} PUBLIC "${_fmu4cpp_root}/export/include")
48-
# apply user-provided include dirs to the object target
49-
if (FMU_INCLUDE_DIRS)
50-
target_include_directories(${model_objects_target} PRIVATE ${FMU_INCLUDE_DIRS})
51-
endif ()
52-
# apply user-provided link targets to the object target
53-
if (FMU_LINK_TARGETS)
54-
target_link_libraries(${model_objects_target} PRIVATE ${FMU_LINK_TARGETS})
55-
endif ()
56-
# apply user-provided compile definitions to the object target
57-
if (FMU_COMPILE_DEFINITIONS)
58-
target_compile_definitions(${model_objects_target} PRIVATE ${FMU_COMPILE_DEFINITIONS})
59-
endif ()
60-
set_target_properties(${model_objects_target} PROPERTIES POSITION_INDEPENDENT_CODE ON)
61-
62-
6343
foreach (fmiVersion IN LISTS FMU_FMI_VERSIONS)
6444

65-
# versioned shared library target built from object libraries
45+
set(fmuOutputDir "${fmuResultDir}/${fmiVersion}")
46+
set(modelOutputDir "${fmuOutputDir}/${modelIdentifier}")
47+
set(binaryOutputDir "$<1:${modelOutputDir}/binaries/${TARGET_PLATFORM}>")
48+
6649
set(versionTarget "${modelIdentifier}_${fmiVersion}")
6750

6851
set(FMU4CPP_MODEL_IDENTIFIER "${versionTarget}")
@@ -75,37 +58,49 @@ function(generateFMU modelIdentifier)
7558

7659
_getTargetPlatform(${fmiVersion})
7760

61+
set(VERSIONS_DEFS "")
7862
if (fmiVersion STREQUAL "fmi2")
63+
list(APPEND VERSION_DEFS "FMI2")
64+
target_compile_definitions(fmu4cpp_fmi2 PUBLIC "FMI2")
7965
list(APPEND VERSION_OBJECTS "$<TARGET_OBJECTS:fmu4cpp_fmi2>")
80-
list(APPEND VERSION_DEFS FMI2)
8166
elseif (fmiVersion STREQUAL "fmi3")
67+
list(APPEND VERSION_DEFS "FMI3")
68+
target_compile_definitions(fmu4cpp_fmi3 PUBLIC "FMI3")
8269
list(APPEND VERSION_OBJECTS "$<TARGET_OBJECTS:fmu4cpp_fmi3>")
83-
list(APPEND VERSION_DEFS FMI3)
8470
endif ()
8571

86-
set(fmuOutputDir "${fmuResultDir}/${fmiVersion}")
87-
set(modelOutputDir "${fmuOutputDir}/${modelIdentifier}")
88-
set(binaryOutputDir "$<1:${modelOutputDir}/binaries/${TARGET_PLATFORM}>")
89-
9072
add_library(${versionTarget} SHARED
9173
"$<TARGET_OBJECTS:fmu4cpp_base>"
92-
"$<TARGET_OBJECTS:${model_objects_target}>"
74+
"${FMU_SOURCES}"
9375
"${VERSION_OBJECTS}"
9476
)
95-
target_include_directories(${versionTarget} PRIVATE "${_fmu4cpp_root}/export/include")
96-
target_compile_definitions(${versionTarget} PRIVATE ${VERSION_DEFS})
77+
target_include_directories(${versionTarget}
78+
PRIVATE
79+
"${_fmu4cpp_root}/export/include"
80+
"${FMU_INCLUDE_DIRS}"
81+
)
82+
83+
target_compile_definitions(${versionTarget}
84+
PUBLIC
85+
${VERSION_DEFS}
86+
${FMU_COMPILE_DEFINITIONS}
87+
)
88+
9789

98-
# link user-provided link targets (must be propagated to the final shared lib)
9990
if (FMU_LINK_TARGETS)
91+
target_link_libraries(${versionTarget} PRIVATE ${FMU_LINK_TARGETS})
10092
_bundle_link_libraries()
10193
endif ()
10294

103-
# if user provided compile definitions, also ensure final target sees them (optional)
104-
if (FMU_COMPILE_DEFINITIONS)
105-
target_compile_definitions(${model_objects_target} PRIVATE ${FMU_COMPILE_DEFINITIONS})
106-
target_compile_definitions(${versionTarget} PRIVATE ${FMU_COMPILE_DEFINITIONS})
95+
if (FMU_WITH_SOURCES)
96+
if (fmiVersion STREQUAL "fmi2")
97+
message(WARNING "[generateFMU-fmi2] FMU_WITH_SOURCES is not supported for fmi2; skipping source inclusion for model '${modelIdentifier}'")
98+
else ()
99+
_include_sources_in_fmu()
100+
endif ()
107101
endif ()
108102

103+
109104
if (WIN32)
110105
set_target_properties(${versionTarget}
111106
PROPERTIES
@@ -119,13 +114,6 @@ function(generateFMU modelIdentifier)
119114
)
120115
endif ()
121116

122-
if (FMU_WITH_SOURCES)
123-
if (fmiVersion STREQUAL "fmi2")
124-
message(WARNING "[generateFMU-fmi2] FMU_WITH_SOURCES is not supported for fmi2; skipping source inclusion for model '${modelIdentifier}'")
125-
else ()
126-
_include_sources_in_fmu()
127-
endif ()
128-
endif ()
129117

130118
# Generate modelDescription.xml
131119
add_custom_command(TARGET ${versionTarget} POST_BUILD

0 commit comments

Comments
 (0)