Skip to content

Commit a9bb682

Browse files
committed
Make source FMUs compileable and carry config
This changeset makes the compilation configuration durable through auto-generated configuration include files, which can be embedded in the FMU sources, thereby making the source code actually compileable. Note that the C++ examples are still not fully compileable since FMI does not guarantee C++ compilation capability, and FMI 2.0 cannot carry the necessary binary/library information needed.
1 parent 3e2c7d2 commit a9bb682

File tree

9 files changed

+75
-36
lines changed

9 files changed

+75
-36
lines changed

examples/OSMPCNetworkProxy/CMakeLists.txt

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ if(WIN32)
88
else()
99
set(PRIVATE_LOG_PATH_CPROXY "/tmp/OSMPCNetworkProxyLog.log" CACHE FILEPATH "Path to write private log file to")
1010
endif()
11+
if(PRIVATE_LOGGING)
12+
file(TO_NATIVE_PATH ${PRIVATE_LOG_PATH_CPROXY} PRIVATE_LOG_PATH_CPROXY_NATIVE)
13+
string(REPLACE "\\" "\\\\" PRIVATE_LOG_PATH ${PRIVATE_LOG_PATH_CPROXY_NATIVE})
14+
endif()
1115
set(VERBOSE_FMI_LOGGING OFF CACHE BOOL "Enable detailed FMI function logging")
1216
set(DEBUG_BREAKS OFF CACHE BOOL "Enable debugger traps for debug builds of FMU")
1317
set(FMU_DEFAULT_ADDRESS "127.0.0.1" CACHE STRING "Default address for connections")
@@ -17,27 +21,15 @@ set(FMU_LISTEN OFF CACHE BOOL "Create FMU that passively listens (server mode)")
1721
string(TIMESTAMP FMUTIMESTAMP UTC)
1822
string(MD5 FMUGUID modelDescription.in.xml)
1923
configure_file(modelDescription.in.xml modelDescription.xml @ONLY)
24+
configure_file(OSMPCNetworkProxyConfig.in.h OSMPCNetworkProxyConfig.h)
2025

2126
add_library(OSMPCNetworkProxy SHARED OSMPCNetworkProxy.c)
2227
set_target_properties(OSMPCNetworkProxy PROPERTIES PREFIX "")
2328
target_compile_definitions(OSMPCNetworkProxy PRIVATE "FMU_SHARED_OBJECT")
24-
target_compile_definitions(OSMPCNetworkProxy PRIVATE "FMU_GUID=\"${FMUGUID}\"")
25-
target_compile_definitions(OSMPCNetworkProxy PRIVATE "FMU_DEFAULT_ADDRESS=\"${FMU_DEFAULT_ADDRESS}\"")
26-
target_compile_definitions(OSMPCNetworkProxy PRIVATE "FMU_DEFAULT_PORT=\"${FMU_DEFAULT_PORT}\"")
27-
if(PRIVATE_LOGGING)
28-
file(TO_NATIVE_PATH ${PRIVATE_LOG_PATH_CPROXY} PRIVATE_LOG_PATH_CPROXY_NATIVE)
29-
string(REPLACE "\\" "\\\\" PRIVATE_LOG_PATH_CPROXY_ESCAPED ${PRIVATE_LOG_PATH_CPROXY_NATIVE})
30-
target_compile_definitions(OSMPCNetworkProxy PRIVATE
31-
"PRIVATE_LOG_PATH=\"${PRIVATE_LOG_PATH_CPROXY_ESCAPED}\"")
32-
endif()
33-
target_compile_definitions(OSMPCNetworkProxy PRIVATE
34-
$<$<BOOL:${FMU_LISTEN}>:FMU_LISTEN>
35-
$<$<BOOL:${PUBLIC_LOGGING}>:PUBLIC_LOGGING>
36-
$<$<BOOL:${VERBOSE_FMI_LOGGING}>:VERBOSE_FMI_LOGGING>
37-
$<$<BOOL:${DEBUG_BREAKS}>:DEBUG_BREAKS>)
3829
if(WIN32)
3930
target_link_libraries(OSMPCNetworkProxy wsock32 ws2_32)
4031
endif()
32+
include_directories(${CMAKE_CURRENT_BINARY_DIR})
4133

4234
if(WIN32)
4335
if(${CMAKE_SIZEOF_VOID_P} EQUAL 8)
@@ -67,5 +59,6 @@ add_custom_command(TARGET OSMPCNetworkProxy
6759
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/modelDescription.xml" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/modelDescription.xml"
6860
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/OSMPCNetworkProxy.c" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/sources/OSMPCNetworkProxy.c"
6961
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/OSMPCNetworkProxy.h" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/sources/OSMPCNetworkProxy.h"
62+
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/OSMPCNetworkProxyConfig.h" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/sources/OSMPCNetworkProxyConfig.h"
7063
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:OSMPCNetworkProxy> "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/binaries/${FMI_BINARIES_PLATFORM}"
7164
COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}/buildfmu" ${CMAKE_COMMAND} -E tar "cfv" "../OSMPCNetworkProxy.fmu" --format=zip "modelDescription.xml" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/sources" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/binaries/${FMI_BINARIES_PLATFORM}")

examples/OSMPCNetworkProxy/OSMPCNetworkProxy.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
99
*/
1010

11+
#include "OSMPCNetworkProxyConfig.h"
1112
#include <stdlib.h>
1213
#include <stdarg.h>
1314
#include <string.h>
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/*
2+
* PMSF FMU Framework for FMI 2.0 Co-Simulation FMUs
3+
*
4+
* (C) 2016 -- 2018 PMSF IT Consulting Pierre R. Mai
5+
*
6+
* This Source Code Form is subject to the terms of the Mozilla Public
7+
* License, v. 2.0. If a copy of the MPL was not distributed with this
8+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
9+
*/
10+
11+
#cmakedefine PUBLIC_LOGGING
12+
#cmakedefine PRIVATE_LOG_PATH "@PRIVATE_LOG_PATH@"
13+
#cmakedefine VERBOSE_FMI_LOGGING
14+
#cmakedefine DEBUG_BREAKS
15+
#define FMU_GUID "@FMUGUID@"
16+
17+
#cmakedefine FMU_LISTEN
18+
#define FMU_DEFAULT_ADDRESS "@FMU_DEFAULT_ADDRESS@"
19+
#define FMU_DEFAULT_PORT "@FMU_DEFAULT_PORT@"

examples/OSMPDummySensor/CMakeLists.txt

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,28 @@ if(WIN32)
1111
else()
1212
set(PRIVATE_LOG_PATH "/tmp/OSMPDummySensorLog.log" CACHE FILEPATH "Path to write private log file to")
1313
endif()
14+
if(PRIVATE_LOGGING)
15+
file(TO_NATIVE_PATH ${PRIVATE_LOG_PATH} PRIVATE_LOG_PATH_NATIVE)
16+
string(REPLACE "\\" "\\\\" PRIVATE_LOG_PATH ${PRIVATE_LOG_PATH_NATIVE})
17+
endif()
1418
set(VERBOSE_FMI_LOGGING OFF CACHE BOOL "Enable detailed FMI function logging")
1519
set(DEBUG_BREAKS OFF CACHE BOOL "Enable debugger traps for debug builds of FMU")
1620

1721
string(TIMESTAMP FMUTIMESTAMP UTC)
1822
string(MD5 FMUGUID modelDescription.in.xml)
1923
configure_file(modelDescription.in.xml modelDescription.xml @ONLY)
24+
configure_file(OSMPDummySensorConfig.in.h OSMPDummySensorConfig.h)
2025

2126
find_package(Protobuf 2.6.1 REQUIRED)
2227
add_library(OSMPDummySensor SHARED OSMPDummySensor.cpp)
2328
set_target_properties(OSMPDummySensor PROPERTIES PREFIX "")
2429
target_compile_definitions(OSMPDummySensor PRIVATE "FMU_SHARED_OBJECT")
25-
target_compile_definitions(OSMPDummySensor PRIVATE "FMU_GUID=\"${FMUGUID}\"")
2630
if(LINK_WITH_SHARED_OSI)
2731
target_link_libraries(OSMPDummySensor open_simulation_interface)
2832
else()
2933
target_link_libraries(OSMPDummySensor open_simulation_interface_pic)
3034
endif()
31-
if(PRIVATE_LOGGING)
32-
file(TO_NATIVE_PATH ${PRIVATE_LOG_PATH} PRIVATE_LOG_PATH_NATIVE)
33-
string(REPLACE "\\" "\\\\" PRIVATE_LOG_PATH_ESCAPED ${PRIVATE_LOG_PATH_NATIVE})
34-
target_compile_definitions(OSMPDummySensor PRIVATE
35-
"PRIVATE_LOG_PATH=\"${PRIVATE_LOG_PATH_ESCAPED}\"")
36-
endif()
37-
target_compile_definitions(OSMPDummySensor PRIVATE
38-
$<$<BOOL:${PUBLIC_LOGGING}>:PUBLIC_LOGGING>
39-
$<$<BOOL:${VERBOSE_FMI_LOGGING}>:VERBOSE_FMI_LOGGING>
40-
$<$<BOOL:${DEBUG_BREAKS}>:DEBUG_BREAKS>)
35+
include_directories(${CMAKE_CURRENT_BINARY_DIR})
4136

4237
if(WIN32)
4338
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
@@ -67,5 +62,6 @@ add_custom_command(TARGET OSMPDummySensor
6762
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/modelDescription.xml" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu"
6863
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/OSMPDummySensor.cpp" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/sources/"
6964
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/OSMPDummySensor.h" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/sources/"
65+
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/OSMPDummySensorConfig.h" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/sources/OSMPDummySensorConfig.h"
7066
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:OSMPDummySensor> $<$<PLATFORM_ID:Windows>:$<$<CONFIG:Debug>:$<TARGET_PDB_FILE:OSMPDummySensor>>> "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/binaries/${FMI_BINARIES_PLATFORM}"
7167
COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}/buildfmu" ${CMAKE_COMMAND} -E tar "cfv" "../OSMPDummySensor.fmu" --format=zip "modelDescription.xml" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/sources" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/binaries/${FMI_BINARIES_PLATFORM}")

examples/OSMPDummySensor/OSMPDummySensor.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
99
*/
1010

11+
#include "OSMPDummySensorConfig.h"
12+
1113
using namespace std;
1214

1315
#ifndef FMU_SHARED_OBJECT
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* PMSF FMU Framework for FMI 2.0 Co-Simulation FMUs
3+
*
4+
* (C) 2016 -- 2018 PMSF IT Consulting Pierre R. Mai
5+
*
6+
* This Source Code Form is subject to the terms of the Mozilla Public
7+
* License, v. 2.0. If a copy of the MPL was not distributed with this
8+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
9+
*/
10+
11+
#cmakedefine PUBLIC_LOGGING
12+
#cmakedefine PRIVATE_LOG_PATH "@PRIVATE_LOG_PATH@"
13+
#cmakedefine VERBOSE_FMI_LOGGING
14+
#cmakedefine DEBUG_BREAKS
15+
#define FMU_GUID "@FMUGUID@"

examples/OSMPDummySource/CMakeLists.txt

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,33 +11,28 @@ if(WIN32)
1111
else()
1212
set(PRIVATE_LOG_PATH_SOURCE "/tmp/OSMPDummySourceLog.log" CACHE FILEPATH "Path to write private log file to")
1313
endif()
14+
if(PRIVATE_LOGGING)
15+
file(TO_NATIVE_PATH ${PRIVATE_LOG_PATH_SOURCE} PRIVATE_LOG_PATH_SOURCE_NATIVE)
16+
string(REPLACE "\\" "\\\\" PRIVATE_LOG_PATH ${PRIVATE_LOG_PATH_SOURCE_NATIVE})
17+
endif()
1418
set(VERBOSE_FMI_LOGGING OFF CACHE BOOL "Enable detailed FMI function logging")
1519
set(DEBUG_BREAKS OFF CACHE BOOL "Enable debugger traps for debug builds of FMU")
1620

1721
string(TIMESTAMP FMUTIMESTAMP UTC)
1822
string(MD5 FMUGUID modelDescription.in.xml)
1923
configure_file(modelDescription.in.xml modelDescription.xml @ONLY)
24+
configure_file(OSMPDummySourceConfig.in.h OSMPDummySourceConfig.h)
2025

2126
find_package(Protobuf 2.6.1 REQUIRED)
2227
add_library(OSMPDummySource SHARED OSMPDummySource.cpp)
2328
set_target_properties(OSMPDummySource PROPERTIES PREFIX "")
2429
target_compile_definitions(OSMPDummySource PRIVATE "FMU_SHARED_OBJECT")
25-
target_compile_definitions(OSMPDummySource PRIVATE "FMU_GUID=\"${FMUGUID}\"")
2630
if(LINK_WITH_SHARED_OSI)
2731
target_link_libraries(OSMPDummySource open_simulation_interface)
2832
else()
2933
target_link_libraries(OSMPDummySource open_simulation_interface_pic)
3034
endif()
31-
if(PRIVATE_LOGGING)
32-
file(TO_NATIVE_PATH ${PRIVATE_LOG_PATH_SOURCE} PRIVATE_LOG_PATH_SOURCE_NATIVE)
33-
string(REPLACE "\\" "\\\\" PRIVATE_LOG_PATH_SOURCE_ESCAPED ${PRIVATE_LOG_PATH_SOURCE_NATIVE})
34-
target_compile_definitions(OSMPDummySource PRIVATE
35-
"PRIVATE_LOG_PATH=\"${PRIVATE_LOG_PATH_SOURCE_ESCAPED}\"")
36-
endif()
37-
target_compile_definitions(OSMPDummySource PRIVATE
38-
$<$<BOOL:${PUBLIC_LOGGING}>:PUBLIC_LOGGING>
39-
$<$<BOOL:${VERBOSE_FMI_LOGGING}>:VERBOSE_FMI_LOGGING>
40-
$<$<BOOL:${DEBUG_BREAKS}>:DEBUG_BREAKS>)
35+
include_directories(${CMAKE_CURRENT_BINARY_DIR})
4136

4237
if(WIN32)
4338
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
@@ -67,5 +62,6 @@ add_custom_command(TARGET OSMPDummySource
6762
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/modelDescription.xml" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu"
6863
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/OSMPDummySource.cpp" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/sources/"
6964
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/OSMPDummySource.h" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/sources/"
65+
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_BINARY_DIR}/OSMPDummySourceConfig.h" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/sources/OSMPDummySourceConfig.h"
7066
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_FILE:OSMPDummySource> $<$<PLATFORM_ID:Windows>:$<$<CONFIG:Debug>:$<TARGET_PDB_FILE:OSMPDummySource>>> "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/binaries/${FMI_BINARIES_PLATFORM}"
7167
COMMAND ${CMAKE_COMMAND} -E chdir "${CMAKE_CURRENT_BINARY_DIR}/buildfmu" ${CMAKE_COMMAND} -E tar "cfv" "../OSMPDummySource.fmu" --format=zip "modelDescription.xml" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/sources" "${CMAKE_CURRENT_BINARY_DIR}/buildfmu/binaries/${FMI_BINARIES_PLATFORM}")

examples/OSMPDummySource/OSMPDummySource.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
99
*/
1010

11+
#include "OSMPDummySourceConfig.h"
12+
1113
using namespace std;
1214

1315
#ifndef FMU_SHARED_OBJECT
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/*
2+
* PMSF FMU Framework for FMI 2.0 Co-Simulation FMUs
3+
*
4+
* (C) 2016 -- 2018 PMSF IT Consulting Pierre R. Mai
5+
*
6+
* This Source Code Form is subject to the terms of the Mozilla Public
7+
* License, v. 2.0. If a copy of the MPL was not distributed with this
8+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
9+
*/
10+
11+
#cmakedefine PUBLIC_LOGGING
12+
#cmakedefine PRIVATE_LOG_PATH "@PRIVATE_LOG_PATH@"
13+
#cmakedefine VERBOSE_FMI_LOGGING
14+
#cmakedefine DEBUG_BREAKS
15+
#define FMU_GUID "@FMUGUID@"

0 commit comments

Comments
 (0)