@@ -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