Skip to content

Commit 6f0e72e

Browse files
committed
Add native FMI 3.0 C API support for adder-c-fmu
Signed-off-by: Pierre R. Mai <pmai@pmsf.de>
1 parent 1504688 commit 6f0e72e

3 files changed

Lines changed: 730 additions & 156 deletions

File tree

.github/workflows/build.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ jobs:
1515
steps:
1616
- name: Checkout
1717
uses: actions/checkout@v6
18+
with:
19+
submodules: recursive
1820

1921
- name: Login to GitHub Container Registry
2022
uses: docker/login-action@v4

CMakeLists.txt

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,42 @@ if(WIT_BINDGEN_EXECUTABLE)
406406

407407
add_custom_target(adder-c-fmu DEPENDS adder-c-fmu-wasm)
408408

409+
# -----------------------------------------------------------------------
410+
# Compile the C FMU to a native x86_64-linux shared library
411+
#
412+
# The same source file is used with the native toolchain (not the WASI SDK)
413+
# and without any WIT-bindgen headers; __wasm__ is not defined, so the
414+
# #else branch in adder-c-fmu.c activates the standard FMI 3.0 C API.
415+
# -----------------------------------------------------------------------
416+
set(ADDER_C_FMU_NATIVE_SO "${CMAKE_BINARY_DIR}/adder_c_fmu.so")
417+
set(FMI3_HEADERS_DIR "${CMAKE_SOURCE_DIR}/examples/fmi-standard/headers")
418+
419+
add_custom_command(
420+
OUTPUT "${ADDER_C_FMU_NATIVE_SO}"
421+
COMMAND cc -std=c11 -O2 -Wall -Wextra -shared -fPIC
422+
-I"${FMI3_HEADERS_DIR}"
423+
"${ADDER_C_FMU_DIR}/adder-c-fmu.c"
424+
-o "${ADDER_C_FMU_NATIVE_SO}"
425+
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
426+
DEPENDS "${ADDER_C_FMU_DIR}/adder-c-fmu.c"
427+
COMMENT "Building adder-c-fmu native shared library (x86_64-linux)..."
428+
VERBATIM
429+
)
430+
431+
add_custom_target(adder-c-fmu-native
432+
DEPENDS "${ADDER_C_FMU_NATIVE_SO}"
433+
)
434+
435+
add_test(
436+
NAME adder-c-fmu-native-symbols
437+
COMMAND /bin/sh -c
438+
"nm -D '${ADDER_C_FMU_NATIVE_SO}' | grep -q ' T fmi3InstantiateCoSimulation'"
439+
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
440+
)
441+
set_tests_properties(adder-c-fmu-native-symbols
442+
PROPERTIES DEPENDS adder-c-fmu-wasm-validation
443+
)
444+
409445
# Validate the compiled component against the WIT package.
410446
add_custom_target(validate-adder-c-fmu
411447
COMMAND ${WASM_TOOLS_EXECUTABLE} validate --features component-model
@@ -436,19 +472,25 @@ if(WIT_BINDGEN_EXECUTABLE)
436472
OUTPUT "${ADDER_C_FMU_ARCHIVE}"
437473
COMMAND ${CMAKE_COMMAND} -E rm -rf "${ADDER_C_FMU_STAGING}"
438474
COMMAND ${CMAKE_COMMAND} -E make_directory
439-
"${ADDER_C_FMU_STAGING}/binaries/wasm32-wasip2"
475+
"${ADDER_C_FMU_STAGING}/binaries/wasm32-wasip2"
476+
COMMAND ${CMAKE_COMMAND} -E make_directory
477+
"${ADDER_C_FMU_STAGING}/binaries/x86_64-linux"
440478
COMMAND ${CMAKE_COMMAND} -E copy
441479
"${ADDER_C_FMU_MODEL_DESC}"
442480
"${ADDER_C_FMU_STAGING}/modelDescription.xml"
443481
COMMAND ${CMAKE_COMMAND} -E copy
444482
"${ADDER_C_FMU_WASM}"
445483
"${ADDER_C_FMU_STAGING}/binaries/wasm32-wasip2/adder_c_fmu.wasm"
484+
COMMAND ${CMAKE_COMMAND} -E copy
485+
"${ADDER_C_FMU_NATIVE_SO}"
486+
"${ADDER_C_FMU_STAGING}/binaries/x86_64-linux/adder_c_fmu.so"
446487
COMMAND ${CMAKE_COMMAND} -E chdir "${ADDER_C_FMU_STAGING}"
447488
${CMAKE_COMMAND} -E tar cf "${ADDER_C_FMU_ARCHIVE}" --format=zip
448489
-- modelDescription.xml binaries
449490
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
450491
DEPENDS
451492
adder-c-fmu-wasm
493+
"${ADDER_C_FMU_NATIVE_SO}"
452494
"${ADDER_C_FMU_MODEL_DESC}"
453495
COMMENT "Packaging adder-c-fmu FMU archive (adder-c-fmu.fmu)..."
454496
VERBATIM

0 commit comments

Comments
 (0)