From 829e17afc2e3485a6a705c37c097153d1d72f1df Mon Sep 17 00:00:00 2001 From: Benstone Zhang Date: Sat, 29 Mar 2025 19:47:12 +0800 Subject: [PATCH 01/10] support build on macOS with Apple Silicon Signed-off-by: Benstone Zhang --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6db01f90..b5daff7e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,7 @@ set_property(CACHE FMI_ARCHITECTURE PROPERTY STRINGS "" "aarch64" "x86" "x86_64" if (NOT FMI_ARCHITECTURE) if (${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "AMD64|x86_64") set(FMI_ARCHITECTURE "x86_64") - elseif (${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "aarch64") + elseif (${CMAKE_HOST_SYSTEM_PROCESSOR} MATCHES "aarch64|arm64") set(FMI_ARCHITECTURE "aarch64") else () message(FATAL_ERROR "Unknown System Architecture: ${CMAKE_SYSTEM_PROCESSOR}") From 7d9099a02e32757e8b1ae5c6c427d65977b26712 Mon Sep 17 00:00:00 2001 From: Benstone Zhang Date: Sat, 29 Mar 2025 19:50:09 +0800 Subject: [PATCH 02/10] integration dependence libs build. Bump cmake minimum required to 3.18, because of sundials v7.1.1 requirements. Signed-off-by: Benstone Zhang --- README.md | 2 +- fmusim/CMakeLists.txt | 85 +++++++++++++++++++++++++++++++++---------- 2 files changed, 66 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 4b3afc3d..fb9adf9c 100644 --- a/README.md +++ b/README.md @@ -131,7 +131,7 @@ The FMUs will be in the `dist` folder inside the selected build folder. ## Building fmusim -To build the `fmusim` executable, run the `build/build_*.py ` Python scripts (where `` is the platform to build for, e.g. `x86_64-windows`) and enable `WITH_FMUSIM` before generating the CMake project. +To build the `fmusim` executable, enable `WITH_FMUSIM` before generating the CMake project. ## License and attribution diff --git a/fmusim/CMakeLists.txt b/fmusim/CMakeLists.txt index 327534cc..547efd2d 100644 --- a/fmusim/CMakeLists.txt +++ b/fmusim/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required (VERSION 3.17) +cmake_minimum_required(VERSION 3.18) set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded) @@ -12,10 +12,55 @@ endif () set(FMUSIM_VERSION "" CACHE STRING "") -set(CVODE_DIR ${CMAKE_SOURCE_DIR}/build/cvode-${FMI_PLATFORM}/install/) -set(LIBXML2_DIR ${CMAKE_SOURCE_DIR}/build/libxml2-${FMI_PLATFORM}/install/) -set(ZLIB_DIR ${CMAKE_SOURCE_DIR}/build/zlib-${FMI_PLATFORM}/install/) -set(ZLIB_SRC_DIR ${CMAKE_SOURCE_DIR}/build/zlib-1.3.1/) +include(ExternalProject) +set(EXTERNAL_BASE_DIR ${CMAKE_BINARY_DIR}/external CACHE STRING "External base directory") + +ExternalProject_Add( + zlib_src + GIT_REPOSITORY https://github.com/madler/zlib.git + GIT_TAG 51b7f2abdade71cd9bb0e7a373ef2610ec6f9daf # v1.3.1 + GIT_SHALLOW True + UPDATE_DISCONNECTED True + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BASE_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY} -DZLIB_BUILD_MINIZIP=1 + PREFIX ${EXTERNAL_BASE_DIR} + BUILD_BYPRODUCTS ${EXTERNAL_BASE_DIR}/lib/libz.a +) +add_library(zlib STATIC IMPORTED) +set_target_properties(zlib PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib/libz.a) +add_dependencies(zlib zlib_src) + +set(ZLIB_SRC_DIR ${EXTERNAL_BASE_DIR}/src/zlib_src) +set_source_files_properties(${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c PROPERTIES GENERATED 1) +set_source_files_properties(${ZLIB_SRC_DIR}/contrib/minizip/unzip.c PROPERTIES GENERATED 1) +set_source_files_properties(${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c PROPERTIES GENERATED 1) + +ExternalProject_Add( + xml2_src + GIT_REPOSITORY https://github.com/GNOME/libxml2.git + GIT_TAG 60d3056c97067e6cb2125284878ed7c99c90ed81 # v2.13.4 + GIT_SHALLOW True + UPDATE_DISCONNECTED True + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BASE_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY} -DBUILD_SHARED_LIBS=OFF -DLIBXML2_WITH_ICONV=OFF -DLIBXML2_WITH_LZMA=OFF -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_ZLIB=OFF -DLIBXML2_WITH_TESTS=OFF + PREFIX ${EXTERNAL_BASE_DIR} + BUILD_BYPRODUCTS ${EXTERNAL_BASE_DIR}/lib/libxml2.a +) +add_library(xml2 STATIC IMPORTED) +set_target_properties(xml2 PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib/libxml2.a) +add_dependencies(xml2 xml2_src) + +ExternalProject_Add( + cvcode_src + GIT_REPOSITORY https://github.com/LLNL/sundials.git + GIT_TAG c28eaa3764a03705d61decb6025b409360e9d53f # v7.1.1 + GIT_SHALLOW True + UPDATE_DISCONNECTED True + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BASE_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY} -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DEXAMPLES_INSTALL=OFF -DSUNDIALS_ENABLE_ERROR_CHECKS=OFF + PREFIX ${EXTERNAL_BASE_DIR} + BUILD_BYPRODUCTS ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a +) +add_library(cvcode STATIC IMPORTED) +set_target_properties(cvcode PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a) +add_dependencies(cvcode cvcode_src) if (WIN32) set(FMUSIM_DIST_DIR ${CMAKE_BINARY_DIR}/dist/fmusim-windows/) @@ -86,14 +131,14 @@ if (WIN32) endif () add_executable(fmusim ${sources}) +add_dependencies(fmusim zlib xml2 cvcode) target_include_directories(fmusim PRIVATE . ../include - ${LIBXML2_DIR}/include/libxml2 - ${ZLIB_DIR}/include + ${EXTERNAL_BASE_DIR}/include + ${EXTERNAL_BASE_DIR}/include/libxml2 ${ZLIB_SRC_DIR}/contrib/minizip - ${CVODE_DIR}/include ) if (WIN32) @@ -104,29 +149,29 @@ endif () if (WIN32) set(libraries - ${LIBXML2_DIR}/lib/libxml2s.lib - ${ZLIB_DIR}/lib/zlibstatic.lib - ${CVODE_DIR}/lib/sundials_cvode_static.lib - ${CVODE_DIR}/lib/sundials_core_static.lib + ${EXTERNAL_BASE_DIR}/lib/libxml2s.lib + ${EXTERNAL_BASE_DIR}/lib/zlibstatic.lib + ${EXTERNAL_BASE_DIR}/lib/sundials_cvode_static.lib + ${EXTERNAL_BASE_DIR}/lib/sundials_core_static.lib wsock32 ws2_32 bcrypt ) elseif(UNIX AND NOT APPLE) set(libraries - ${LIBXML2_DIR}/lib/libxml2.a - ${ZLIB_DIR}lib/libz.a - ${CVODE_DIR}/lib/libsundials_cvode.a - ${CVODE_DIR}/lib/libsundials_core.a + ${EXTERNAL_BASE_DIR}/lib/libxml2.a + ${EXTERNAL_BASE_DIR}/lib/libz.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a ${CMAKE_DL_LIBS} m ) else () set(libraries - ${LIBXML2_DIR}/lib/libxml2.a - ${ZLIB_DIR}lib/libz.a - ${CVODE_DIR}/lib/libsundials_cvode.a - ${CVODE_DIR}/lib/libsundials_core.a + ${EXTERNAL_BASE_DIR}/lib/libxml2.a + ${EXTERNAL_BASE_DIR}/lib/libz.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a ) endif () From 729c9199adc2f7383669d2dba8db0637ea799416 Mon Sep 17 00:00:00 2001 From: Benstone Zhang Date: Sun, 30 Mar 2025 11:22:22 +0800 Subject: [PATCH 03/10] split external build into module file; always build with Release config for external libs Signed-off-by: Benstone Zhang --- build/external.cmake | 55 +++++++++++++++++++++++++++++++++++++++++++ fmusim/CMakeLists.txt | 52 ++-------------------------------------- 2 files changed, 57 insertions(+), 50 deletions(-) create mode 100644 build/external.cmake diff --git a/build/external.cmake b/build/external.cmake new file mode 100644 index 00000000..72ee02f0 --- /dev/null +++ b/build/external.cmake @@ -0,0 +1,55 @@ +include(ExternalProject) +set(EXTERNAL_BASE_DIR ${CMAKE_BINARY_DIR}/external CACHE STRING "External base directory") + +ExternalProject_Add( + zlib_src + PREFIX ${EXTERNAL_BASE_DIR} + GIT_REPOSITORY https://github.com/madler/zlib.git + GIT_TAG 51b7f2abdade71cd9bb0e7a373ef2610ec6f9daf # v1.3.1 + GIT_SHALLOW True + UPDATE_DISCONNECTED True + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BASE_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY} -DZLIB_BUILD_MINIZIP=1 + BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release + BUILD_BYPRODUCTS ${EXTERNAL_BASE_DIR}/lib/libz.a + INSTALL_COMMAND ${CMAKE_COMMAND} --install . --config Release +) +add_library(zlib STATIC IMPORTED) +set_target_properties(zlib PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib/libz.a) +add_dependencies(zlib zlib_src) + +set(ZLIB_SRC_DIR ${EXTERNAL_BASE_DIR}/src/zlib_src) +set_source_files_properties(${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c PROPERTIES GENERATED 1) +set_source_files_properties(${ZLIB_SRC_DIR}/contrib/minizip/unzip.c PROPERTIES GENERATED 1) +set_source_files_properties(${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c PROPERTIES GENERATED 1) + +ExternalProject_Add( + xml2_src + PREFIX ${EXTERNAL_BASE_DIR} + GIT_REPOSITORY https://github.com/GNOME/libxml2.git + GIT_TAG 60d3056c97067e6cb2125284878ed7c99c90ed81 # v2.13.4 + GIT_SHALLOW True + UPDATE_DISCONNECTED True + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BASE_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY} -DBUILD_SHARED_LIBS=OFF -DLIBXML2_WITH_ICONV=OFF -DLIBXML2_WITH_LZMA=OFF -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_ZLIB=OFF -DLIBXML2_WITH_TESTS=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release + BUILD_BYPRODUCTS ${EXTERNAL_BASE_DIR}/lib/libxml2.a + INSTALL_COMMAND ${CMAKE_COMMAND} --install . --config Release +) +add_library(xml2 STATIC IMPORTED) +set_target_properties(xml2 PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib/libxml2.a) +add_dependencies(xml2 xml2_src) + +ExternalProject_Add( + cvcode_src + PREFIX ${EXTERNAL_BASE_DIR} + GIT_REPOSITORY https://github.com/LLNL/sundials.git + GIT_TAG c28eaa3764a03705d61decb6025b409360e9d53f # v7.1.1 + GIT_SHALLOW True + UPDATE_DISCONNECTED True + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BASE_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY} -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DEXAMPLES_INSTALL=OFF -DSUNDIALS_ENABLE_ERROR_CHECKS=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release + BUILD_BYPRODUCTS ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a + INSTALL_COMMAND ${CMAKE_COMMAND} --install . --config Release +) +add_library(cvcode STATIC IMPORTED) +set_target_properties(cvcode PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a) +add_dependencies(cvcode cvcode_src) diff --git a/fmusim/CMakeLists.txt b/fmusim/CMakeLists.txt index 547efd2d..248b527e 100644 --- a/fmusim/CMakeLists.txt +++ b/fmusim/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.18) +cmake_minimum_required (VERSION 3.18) set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded) @@ -12,55 +12,7 @@ endif () set(FMUSIM_VERSION "" CACHE STRING "") -include(ExternalProject) -set(EXTERNAL_BASE_DIR ${CMAKE_BINARY_DIR}/external CACHE STRING "External base directory") - -ExternalProject_Add( - zlib_src - GIT_REPOSITORY https://github.com/madler/zlib.git - GIT_TAG 51b7f2abdade71cd9bb0e7a373ef2610ec6f9daf # v1.3.1 - GIT_SHALLOW True - UPDATE_DISCONNECTED True - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BASE_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY} -DZLIB_BUILD_MINIZIP=1 - PREFIX ${EXTERNAL_BASE_DIR} - BUILD_BYPRODUCTS ${EXTERNAL_BASE_DIR}/lib/libz.a -) -add_library(zlib STATIC IMPORTED) -set_target_properties(zlib PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib/libz.a) -add_dependencies(zlib zlib_src) - -set(ZLIB_SRC_DIR ${EXTERNAL_BASE_DIR}/src/zlib_src) -set_source_files_properties(${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c PROPERTIES GENERATED 1) -set_source_files_properties(${ZLIB_SRC_DIR}/contrib/minizip/unzip.c PROPERTIES GENERATED 1) -set_source_files_properties(${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c PROPERTIES GENERATED 1) - -ExternalProject_Add( - xml2_src - GIT_REPOSITORY https://github.com/GNOME/libxml2.git - GIT_TAG 60d3056c97067e6cb2125284878ed7c99c90ed81 # v2.13.4 - GIT_SHALLOW True - UPDATE_DISCONNECTED True - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BASE_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY} -DBUILD_SHARED_LIBS=OFF -DLIBXML2_WITH_ICONV=OFF -DLIBXML2_WITH_LZMA=OFF -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_ZLIB=OFF -DLIBXML2_WITH_TESTS=OFF - PREFIX ${EXTERNAL_BASE_DIR} - BUILD_BYPRODUCTS ${EXTERNAL_BASE_DIR}/lib/libxml2.a -) -add_library(xml2 STATIC IMPORTED) -set_target_properties(xml2 PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib/libxml2.a) -add_dependencies(xml2 xml2_src) - -ExternalProject_Add( - cvcode_src - GIT_REPOSITORY https://github.com/LLNL/sundials.git - GIT_TAG c28eaa3764a03705d61decb6025b409360e9d53f # v7.1.1 - GIT_SHALLOW True - UPDATE_DISCONNECTED True - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BASE_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY} -DBUILD_SHARED_LIBS=OFF -DBUILD_TESTING=OFF -DEXAMPLES_INSTALL=OFF -DSUNDIALS_ENABLE_ERROR_CHECKS=OFF - PREFIX ${EXTERNAL_BASE_DIR} - BUILD_BYPRODUCTS ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a -) -add_library(cvcode STATIC IMPORTED) -set_target_properties(cvcode PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a) -add_dependencies(cvcode cvcode_src) +include(../build/external.cmake) if (WIN32) set(FMUSIM_DIST_DIR ${CMAKE_BINARY_DIR}/dist/fmusim-windows/) From 1cddde78d70c5407966ece9a6aaa81f61b280715 Mon Sep 17 00:00:00 2001 From: Benstone Zhang Date: Mon, 31 Mar 2025 15:57:39 +0800 Subject: [PATCH 04/10] add fmusim-gui cmake build; also fix parallel build issue Signed-off-by: Benstone Zhang --- CMakeLists.txt | 15 +++++-- build/external.cmake | 10 +++-- fmusim-gui/CMakeLists.txt | 87 ++++++++++++++++++++++++++------------- fmusim-gui/MainWindow.cpp | 6 ++- fmusim/CMakeLists.txt | 8 +++- 5 files changed, 88 insertions(+), 38 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b5daff7e..38faabd3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required (VERSION 3.17) +cmake_minimum_required (VERSION 3.18) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") @@ -33,6 +33,7 @@ if (NOT FMI_ARCHITECTURE) endif () set(WITH_FMUSIM OFF CACHE BOOL "Add fmusim project") +set(WITH_FMUSIM_GUI OFF CACHE BOOL "Add fmusim Gui project") if (MSVC) add_compile_definitions(_CRT_SECURE_NO_WARNINGS) @@ -277,6 +278,14 @@ endforeach(MODEL_NAME) # Examples include(examples/Examples.cmake) -if (WITH_FMUSIM) - add_subdirectory(fmusim) +if(WITH_FMUSIM OR WITH_FMUSIM_GUI) + include(build/external.cmake) + + if (WITH_FMUSIM) + add_subdirectory(fmusim) + endif () + + if (WITH_FMUSIM_GUI) + add_subdirectory(fmusim-gui) + endif () endif () diff --git a/build/external.cmake b/build/external.cmake index 72ee02f0..a2d029dc 100644 --- a/build/external.cmake +++ b/build/external.cmake @@ -1,5 +1,11 @@ +cmake_host_system_information(RESULT TARGET_64_BITS QUERY IS_64BIT) + include(ExternalProject) set(EXTERNAL_BASE_DIR ${CMAKE_BINARY_DIR}/external CACHE STRING "External base directory") +file(MAKE_DIRECTORY ${EXTERNAL_BASE_DIR}/lib) +if(UNIX AND TARGET_64_BITS GREATER_EQUAL 1) + file(CREATE_LINK lib ${EXTERNAL_BASE_DIR}/lib64 SYMBOLIC) +endif() ExternalProject_Add( zlib_src @@ -18,12 +24,10 @@ set_target_properties(zlib PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib add_dependencies(zlib zlib_src) set(ZLIB_SRC_DIR ${EXTERNAL_BASE_DIR}/src/zlib_src) -set_source_files_properties(${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c PROPERTIES GENERATED 1) -set_source_files_properties(${ZLIB_SRC_DIR}/contrib/minizip/unzip.c PROPERTIES GENERATED 1) -set_source_files_properties(${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c PROPERTIES GENERATED 1) ExternalProject_Add( xml2_src + DEPENDS zlib PREFIX ${EXTERNAL_BASE_DIR} GIT_REPOSITORY https://github.com/GNOME/libxml2.git GIT_TAG 60d3056c97067e6cb2125284878ed7c99c90ed81 # v2.13.4 diff --git a/fmusim-gui/CMakeLists.txt b/fmusim-gui/CMakeLists.txt index b7fc8061..1a1fa6bf 100644 --- a/fmusim-gui/CMakeLists.txt +++ b/fmusim-gui/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.5) +cmake_minimum_required(VERSION 3.18) project(fmusim-gui VERSION 0.1 LANGUAGES C CXX) @@ -10,14 +10,16 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets) -set(CVODE_DIR ${CMAKE_SOURCE_DIR}/build/cvode-x86_64-windows/install) -set(LIBXML2_DIR ${CMAKE_SOURCE_DIR}/build/libxml2-x86_64-windows/install) -set(ZLIB_DIR ${CMAKE_SOURCE_DIR}/build/zlib-x86_64-windows/install) - -set(ZLIB_SRC_DIR ${CMAKE_SOURCE_DIR}/build/zlib-1.3.1) - find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) -find_package(Qt6 REQUIRED COMPONENTS WebEngineWidgets) +if(QT_VERSION_MAJOR GREATER_EQUAL 6) + find_package(Qt6 REQUIRED COMPONENTS WebEngineWidgets) +endif() + +set_source_files_properties( + ${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c + ${ZLIB_SRC_DIR}/contrib/minizip/unzip.c + ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c + PROPERTIES GENERATED 1) set(PROJECT_SOURCES main.cpp @@ -31,7 +33,6 @@ set(PROJECT_SOURCES ../fmusim/miniunzip.c ${ZLIB_SRC_DIR}/contrib/minizip/unzip.c ${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c - ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c ../fmusim/FMIModelDescription.c ../fmusim/FMIModelDescription.h ../fmusim/FMIBuildDescription.c @@ -39,6 +40,35 @@ set(PROJECT_SOURCES ../src/structured_variable_name.tab.c ../src/structured_variable_name.yy.c ) +if (WIN32) + set (PROJECT_SOURCES ${PROJECT_SOURCES} ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c) +endif () + +if(WIN32) + set(PROJECT_LIBRARIES + ${EXTERNAL_BASE_DIR}/lib/libxml2s.lib + ${EXTERNAL_BASE_DIR}/lib/zlibstatic.lib + ${EXTERNAL_BASE_DIR}/lib/sundials_cvode_static.lib + ${EXTERNAL_BASE_DIR}/lib/sundials_core_static.lib + ) +elseif(UNIX AND NOT APPLE) + set(PROJECT_LIBRARIES + ${EXTERNAL_BASE_DIR}/lib/libxml2.a + ${EXTERNAL_BASE_DIR}/lib/libz.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a + ${CMAKE_DL_LIBS} + m + ) +else() + set(PROJECT_LIBRARIES + ${EXTERNAL_BASE_DIR}/lib/libxml2.a + ${EXTERNAL_BASE_DIR}/lib/libz.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a + ) +endif() + if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) qt_add_executable(fmusim-gui @@ -109,26 +139,27 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) resources/build/build.qrc ) -target_include_directories(fmusim-gui PRIVATE - ../include - ../fmusim - ${LIBXML2_DIR}/include/libxml2 - ${ZLIB_DIR}/include - ${ZLIB_SRC_DIR}/contrib/minizip - ${CVODE_DIR}/include -) + add_dependencies(fmusim-gui zlib xml2 cvcode) -target_compile_definitions(fmusim-gui PRIVATE - YY_NO_UNISTD_H -) + target_include_directories(fmusim-gui PRIVATE + ../include + ../fmusim + ${EXTERNAL_BASE_DIR}/include + ${EXTERNAL_BASE_DIR}/include/libxml2 + ${ZLIB_SRC_DIR}/contrib/minizip + ${ZLIB_SRC_DIR}/contrib/minizip + ) -target_link_libraries(fmusim-gui PRIVATE - Qt6::WebEngineWidgets - ${LIBXML2_DIR}/lib/libxml2.lib - ${ZLIB_DIR}/lib/zlib.lib - ${CVODE_DIR}/lib/sundials_cvode_static.lib - ${CVODE_DIR}/lib/sundials_core_static.lib -) + if(WIN32) + target_compile_definitions(fmusim-gui PRIVATE + YY_NO_UNISTD_H + ) + endif() + + target_link_libraries(fmusim-gui PRIVATE + Qt6::WebEngineWidgets + ${PROJECT_LIBRARIES} + ) # Define target properties for Android with Qt 6 as: # set_property(TARGET fmusim-gui APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR @@ -171,6 +202,6 @@ install(TARGETS fmusim-gui RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) -if(QT_VERSION_MAJOR EQUAL 6) +if(QT_VERSION_MAJOR GREATER_EQUAL 6) qt_finalize_executable(fmusim-gui) endif() diff --git a/fmusim-gui/MainWindow.cpp b/fmusim-gui/MainWindow.cpp index 76590340..61b0176f 100644 --- a/fmusim-gui/MainWindow.cpp +++ b/fmusim-gui/MainWindow.cpp @@ -26,6 +26,8 @@ extern "C" { #include "FMICVode.h" } +#include + #define FMI_PATH_MAX 4096 @@ -561,7 +563,7 @@ void MainWindow::simulate() { const QByteArray ba = unzipdir.toLocal8Bit(); - settings->unzipdir = _strdup(ba.data()); + settings->unzipdir = strdup(ba.data()); settings->modelDescription = modelDescription; if (interfaceTypeComboBox->currentText() == "Co-Simulation") { @@ -610,7 +612,7 @@ void MainWindow::simulate() { for (auto [variable, value] : startValues.asKeyValueRange()) { settings->startVariables[i] = (FMIModelVariable*)variable; QByteArray buffer = value.toLocal8Bit(); - settings->startValues[i] = _strdup(buffer.data()); + settings->startValues[i] = strdup(buffer.data()); i++; } diff --git a/fmusim/CMakeLists.txt b/fmusim/CMakeLists.txt index 248b527e..1722eb28 100644 --- a/fmusim/CMakeLists.txt +++ b/fmusim/CMakeLists.txt @@ -12,8 +12,6 @@ endif () set(FMUSIM_VERSION "" CACHE STRING "") -include(../build/external.cmake) - if (WIN32) set(FMUSIM_DIST_DIR ${CMAKE_BINARY_DIR}/dist/fmusim-windows/) elseif (APPLE) @@ -26,6 +24,12 @@ project (FMUSim) file(MAKE_DIRECTORY ${FMUSIM_DIST_DIR}) +set_source_files_properties( + ${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c + ${ZLIB_SRC_DIR}/contrib/minizip/unzip.c + ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c + PROPERTIES GENERATED 1) + set(sources ../include/FMI.h ../src/FMI.c From 1f95d8c9ec5e0ce506c350cd487a01e54d81b8a1 Mon Sep 17 00:00:00 2001 From: Benstone Zhang Date: Tue, 1 Apr 2025 12:48:26 +0800 Subject: [PATCH 05/10] move common code of fmusim and fmusim-gui to sim_common.cmake Signed-off-by: Benstone Zhang --- build/sim_common.cmake | 102 ++++++++++++++++++++++++++++++++ fmusim-gui/CMakeLists.txt | 114 ++++-------------------------------- fmusim/CMakeLists.txt | 119 +++++--------------------------------- 3 files changed, 127 insertions(+), 208 deletions(-) create mode 100644 build/sim_common.cmake diff --git a/build/sim_common.cmake b/build/sim_common.cmake new file mode 100644 index 00000000..3e1754ca --- /dev/null +++ b/build/sim_common.cmake @@ -0,0 +1,102 @@ +set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded) + +if(WIN32) + set(FMI_PLATFORM "${FMI_ARCHITECTURE}-windows") +elseif(APPLE) + set(FMI_PLATFORM "${FMI_ARCHITECTURE}-darwin") +else() + set(FMI_PLATFORM "${FMI_ARCHITECTURE}-linux") +endif() + +set_source_files_properties( + ${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c + ${ZLIB_SRC_DIR}/contrib/minizip/unzip.c + ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c + PROPERTIES GENERATED 1) + +set(FMUSIM_SOURCES + ${CMAKE_SOURCE_DIR}/include/FMI.h + ${CMAKE_SOURCE_DIR}/src/FMI.c + ${CMAKE_SOURCE_DIR}/include/FMI1.h + ${CMAKE_SOURCE_DIR}/src/FMI1.c + ${CMAKE_SOURCE_DIR}/include/FMI2.h + ${CMAKE_SOURCE_DIR}/src/FMI2.c + ${CMAKE_SOURCE_DIR}/include/FMI3.h + ${CMAKE_SOURCE_DIR}/src/FMI3.c + ${CMAKE_SOURCE_DIR}/fmusim/FMIUtil.h + ${CMAKE_SOURCE_DIR}/fmusim/FMIUtil.c + ${CMAKE_SOURCE_DIR}/fmusim/FMIStaticInput.h + ${CMAKE_SOURCE_DIR}/fmusim/FMIStaticInput.c + ${CMAKE_SOURCE_DIR}/fmusim/FMISimulation.h + ${CMAKE_SOURCE_DIR}/fmusim/FMISimulation.c + ${CMAKE_SOURCE_DIR}/fmusim/FMI1CSSimulation.h + ${CMAKE_SOURCE_DIR}/fmusim/FMI1CSSimulation.c + ${CMAKE_SOURCE_DIR}/fmusim/FMI1MESimulation.h + ${CMAKE_SOURCE_DIR}/fmusim/FMI1MESimulation.c + ${CMAKE_SOURCE_DIR}/fmusim/FMI2CSSimulation.h + ${CMAKE_SOURCE_DIR}/fmusim/FMI2CSSimulation.c + ${CMAKE_SOURCE_DIR}/fmusim/FMI2MESimulation.h + ${CMAKE_SOURCE_DIR}/fmusim/FMI2MESimulation.c + ${CMAKE_SOURCE_DIR}/fmusim/FMI3CSSimulation.h + ${CMAKE_SOURCE_DIR}/fmusim/FMI3CSSimulation.c + ${CMAKE_SOURCE_DIR}/fmusim/FMI3MESimulation.h + ${CMAKE_SOURCE_DIR}/fmusim/FMI3MESimulation.c + ${CMAKE_SOURCE_DIR}/fmusim/FMIRecorder.h + ${CMAKE_SOURCE_DIR}/fmusim/FMIRecorder.c + ${CMAKE_SOURCE_DIR}/fmusim/FMIEuler.h + ${CMAKE_SOURCE_DIR}/fmusim/FMIEuler.c + ${CMAKE_SOURCE_DIR}/fmusim/FMICVode.h + ${CMAKE_SOURCE_DIR}/fmusim/FMICVode.c + ${CMAKE_SOURCE_DIR}/fmusim/csv.h + ${CMAKE_SOURCE_DIR}/fmusim/csv.c + ${CMAKE_SOURCE_DIR}/fmusim/FMIZip.h + ${CMAKE_SOURCE_DIR}/fmusim/FMIZip.c + ${CMAKE_SOURCE_DIR}/fmusim/miniunzip.c + ${CMAKE_SOURCE_DIR}/fmusim/FMIModelDescription.c + ${CMAKE_SOURCE_DIR}/fmusim/FMIModelDescription.h + ${CMAKE_SOURCE_DIR}/fmusim/FMIBuildDescription.c + ${CMAKE_SOURCE_DIR}/fmusim/FMIBuildDescription.h + ${CMAKE_SOURCE_DIR}/include/structured_variable_name.tab.h + ${CMAKE_SOURCE_DIR}/src/structured_variable_name.tab.c + ${CMAKE_SOURCE_DIR}/src/structured_variable_name.yy.c + ${ZLIB_SRC_DIR}/contrib/minizip/unzip.c + ${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c + ) +if(WIN32) + set(FMUSIM_SOURCES ${FMUSIM_SOURCES} ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c) +endif() + +set(FMUSIM_INCLUDES + ${CMAKE_SOURCE_DIR}/fmusim + ${CMAKE_SOURCE_DIR}/include + ${EXTERNAL_BASE_DIR}/include + ${EXTERNAL_BASE_DIR}/include/libxml2 + ${ZLIB_SRC_DIR}/contrib/minizip + ) + +if(WIN32) + set(FMUSIM_LIBS + ${EXTERNAL_BASE_DIR}/lib/libxml2s.lib + ${EXTERNAL_BASE_DIR}/lib/zlibstatic.lib + ${EXTERNAL_BASE_DIR}/lib/sundials_cvode_static.lib + ${EXTERNAL_BASE_DIR}/lib/sundials_core_static.lib + ) +elseif(UNIX AND NOT APPLE) + set(FMUSIM_LIBS + ${EXTERNAL_BASE_DIR}/lib/libxml2.a + ${EXTERNAL_BASE_DIR}/lib/libz.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a + ${CMAKE_DL_LIBS} + m + ) +else() + set(FMUSIM_LIBS + ${EXTERNAL_BASE_DIR}/lib/libxml2.a + ${EXTERNAL_BASE_DIR}/lib/libz.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a + ) +endif() + +set(FMUSIM_DEPENDS zlib xml2 cvcode) diff --git a/fmusim-gui/CMakeLists.txt b/fmusim-gui/CMakeLists.txt index 1a1fa6bf..db4018b5 100644 --- a/fmusim-gui/CMakeLists.txt +++ b/fmusim-gui/CMakeLists.txt @@ -15,114 +15,28 @@ if(QT_VERSION_MAJOR GREATER_EQUAL 6) find_package(Qt6 REQUIRED COMPONENTS WebEngineWidgets) endif() -set_source_files_properties( - ${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c - ${ZLIB_SRC_DIR}/contrib/minizip/unzip.c - ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c - PROPERTIES GENERATED 1) +include(${CMAKE_SOURCE_DIR}/build/sim_common.cmake) -set(PROJECT_SOURCES +set(FMUSIM_GUI_SOURCES + ${FMUSIM_SOURCES} main.cpp MainWindow.cpp MainWindow.h MainWindow.ui - ../src/FMI.c - ../include/FMI.h - ../fmusim/FMIZip.c - ../fmusim/FMIZip.h - ../fmusim/miniunzip.c - ${ZLIB_SRC_DIR}/contrib/minizip/unzip.c - ${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c - ../fmusim/FMIModelDescription.c - ../fmusim/FMIModelDescription.h - ../fmusim/FMIBuildDescription.c - ../fmusim/FMIBuildDescription.h - ../src/structured_variable_name.tab.c - ../src/structured_variable_name.yy.c ) -if (WIN32) - set (PROJECT_SOURCES ${PROJECT_SOURCES} ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c) -endif () - -if(WIN32) - set(PROJECT_LIBRARIES - ${EXTERNAL_BASE_DIR}/lib/libxml2s.lib - ${EXTERNAL_BASE_DIR}/lib/zlibstatic.lib - ${EXTERNAL_BASE_DIR}/lib/sundials_cvode_static.lib - ${EXTERNAL_BASE_DIR}/lib/sundials_core_static.lib - ) -elseif(UNIX AND NOT APPLE) - set(PROJECT_LIBRARIES - ${EXTERNAL_BASE_DIR}/lib/libxml2.a - ${EXTERNAL_BASE_DIR}/lib/libz.a - ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a - ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a - ${CMAKE_DL_LIBS} - m - ) -else() - set(PROJECT_LIBRARIES - ${EXTERNAL_BASE_DIR}/lib/libxml2.a - ${EXTERNAL_BASE_DIR}/lib/libz.a - ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a - ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a - ) -endif() - if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) qt_add_executable(fmusim-gui MANUAL_FINALIZATION - ${PROJECT_SOURCES} + ${FMUSIM_GUI_SOURCES} + ModelVariablesTableModel.h ModelVariablesTableModel.cpp - ../src/FMI1.c - ../src/FMI2.c - ../include/FMI1.h - ../include/FMI2.h - ../src/FMI3.c - ../include/FMI3.h - ../fmusim/FMIUtil.c - ../fmusim/FMIUtil.h - ../fmusim/csv.c - ../fmusim/csv.h - - ../fmusim/FMIStaticInput.h - ../fmusim/FMIStaticInput.c - - ../fmusim/FMI1CSSimulation.h - ../fmusim/FMI1CSSimulation.c - ../fmusim/FMI1MESimulation.h - ../fmusim/FMI1MESimulation.c - - ../fmusim/FMI2CSSimulation.h - ../fmusim/FMI2CSSimulation.c - ../fmusim/FMI2MESimulation.h - ../fmusim/FMI2MESimulation.c - - ../fmusim/FMI3CSSimulation.h - ../fmusim/FMI3CSSimulation.c - ../fmusim/FMI3MESimulation.h - ../fmusim/FMI3MESimulation.c - - ../fmusim/FMIRecorder.h - ../fmusim/FMIRecorder.c - - ../fmusim/FMISimulation.h - ../fmusim/FMISimulation.c - - ../fmusim/FMIEuler.h - ../fmusim/FMIEuler.c - - ../fmusim/FMICVode.h - ../fmusim/FMICVode.c resources/buttons/buttons.qrc resources/tools/tools.qrc - resources/plot/plot.html resources/plot/plot.qrc - resources/variables/variables.qrc VariablesFilterModel.h VariablesFilterModel.cpp @@ -138,17 +52,9 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) resources/icon/icon.rc resources/build/build.qrc ) + add_dependencies(fmusim-gui ${FMUSIM_DEPENDS}) - add_dependencies(fmusim-gui zlib xml2 cvcode) - - target_include_directories(fmusim-gui PRIVATE - ../include - ../fmusim - ${EXTERNAL_BASE_DIR}/include - ${EXTERNAL_BASE_DIR}/include/libxml2 - ${ZLIB_SRC_DIR}/contrib/minizip - ${ZLIB_SRC_DIR}/contrib/minizip - ) + target_include_directories(fmusim-gui PRIVATE ${FMUSIM_INCLUDES}) if(WIN32) target_compile_definitions(fmusim-gui PRIVATE @@ -158,7 +64,7 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) target_link_libraries(fmusim-gui PRIVATE Qt6::WebEngineWidgets - ${PROJECT_LIBRARIES} + ${FMUSIM_LIBS} ) # Define target properties for Android with Qt 6 as: @@ -168,13 +74,13 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) else() if(ANDROID) add_library(fmusim-gui SHARED - ${PROJECT_SOURCES} + ${FMUSIM_GUI_SOURCES} ) # Define properties for Android with Qt 5 after find_package() calls as: # set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android") else() add_executable(fmusim-gui - ${PROJECT_SOURCES} + ${FMUSIM_GUI_SOURCES} ) endif() endif() diff --git a/fmusim/CMakeLists.txt b/fmusim/CMakeLists.txt index 1722eb28..3ae4fa5c 100644 --- a/fmusim/CMakeLists.txt +++ b/fmusim/CMakeLists.txt @@ -1,101 +1,34 @@ cmake_minimum_required (VERSION 3.18) -set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded) +set(FMUSIM_VERSION "" CACHE STRING "") -if (WIN32) - set(FMI_PLATFORM "${FMI_ARCHITECTURE}-windows") -elseif (APPLE) - set(FMI_PLATFORM "${FMI_ARCHITECTURE}-darwin") -else () - set(FMI_PLATFORM "${FMI_ARCHITECTURE}-linux") -endif () +project (FMUSim) -set(FMUSIM_VERSION "" CACHE STRING "") +include(${CMAKE_SOURCE_DIR}/build/sim_common.cmake) -if (WIN32) +if(WIN32) set(FMUSIM_DIST_DIR ${CMAKE_BINARY_DIR}/dist/fmusim-windows/) -elseif (APPLE) +elseif(APPLE) set(FMUSIM_DIST_DIR ${CMAKE_BINARY_DIR}/dist/fmusim-darwin/) -else () +else() set(FMUSIM_DIST_DIR ${CMAKE_BINARY_DIR}/dist/fmusim-linux/) -endif () - -project (FMUSim) +endif() file(MAKE_DIRECTORY ${FMUSIM_DIST_DIR}) -set_source_files_properties( - ${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c - ${ZLIB_SRC_DIR}/contrib/minizip/unzip.c - ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c - PROPERTIES GENERATED 1) - -set(sources - ../include/FMI.h - ../src/FMI.c - ../include/FMI1.h - ../src/FMI1.c - ../include/FMI2.h - ../src/FMI2.c - ../include/FMI3.h - ../src/FMI3.c - csv.h - csv.c - FMIUtil.h - FMIUtil.c +set(FMUSIM_CLI_SOURCES + ${FMUSIM_SOURCES} FMISolver.h - FMIEuler.h - FMIEuler.c - FMICVode.h - FMICVode.c - FMIModelDescription.h - FMIModelDescription.c - FMIRecorder.h - FMIRecorder.c - FMIZip.h - FMIZip.c fmi1schema.h fmi2schema.h fmi3schema.h - FMISimulation.h - FMISimulation.c - FMIStaticInput.h - FMIStaticInput.c - FMI1CSSimulation.h - FMI1CSSimulation.c - FMI1MESimulation.h - FMI1MESimulation.c - FMI2CSSimulation.h - FMI2CSSimulation.c - FMI2MESimulation.h - FMI2MESimulation.c - FMI3CSSimulation.h - FMI3CSSimulation.c - FMI3MESimulation.h - FMI3MESimulation.c fmusim.c - miniunzip.c - ${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c - ${ZLIB_SRC_DIR}/contrib/minizip/unzip.c - ../src/structured_variable_name.yy.c - ../include/structured_variable_name.tab.h - ../src/structured_variable_name.tab.c ) -if (WIN32) - set (sources ${sources} ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c) -endif () +add_executable(fmusim ${FMUSIM_CLI_SOURCES}) +add_dependencies(fmusim ${FMUSIM_DEPENDS}) -add_executable(fmusim ${sources}) -add_dependencies(fmusim zlib xml2 cvcode) - -target_include_directories(fmusim PRIVATE - . - ../include - ${EXTERNAL_BASE_DIR}/include - ${EXTERNAL_BASE_DIR}/include/libxml2 - ${ZLIB_SRC_DIR}/contrib/minizip -) +target_include_directories(fmusim PRIVATE ${FMUSIM_INCLUDES}) if (WIN32) target_compile_definitions(fmusim PRIVATE FMUSIM_VERSION=${FMUSIM_VERSION} YY_NO_UNISTD_H LIBXML_STATIC) @@ -104,33 +37,11 @@ else () endif () if (WIN32) - set(libraries - ${EXTERNAL_BASE_DIR}/lib/libxml2s.lib - ${EXTERNAL_BASE_DIR}/lib/zlibstatic.lib - ${EXTERNAL_BASE_DIR}/lib/sundials_cvode_static.lib - ${EXTERNAL_BASE_DIR}/lib/sundials_core_static.lib - wsock32 - ws2_32 - bcrypt - ) -elseif(UNIX AND NOT APPLE) - set(libraries - ${EXTERNAL_BASE_DIR}/lib/libxml2.a - ${EXTERNAL_BASE_DIR}/lib/libz.a - ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a - ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a - ${CMAKE_DL_LIBS} - m - ) + set(FMUSIM_CLI_LIBS ${FMUSIM_LIBS} wsock32 ws2_32 bcrypt) else () - set(libraries - ${EXTERNAL_BASE_DIR}/lib/libxml2.a - ${EXTERNAL_BASE_DIR}/lib/libz.a - ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a - ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a - ) + set(FMUSIM_CLI_LIBS ${FMUSIM_LIBS}) endif () -target_link_libraries(fmusim ${libraries}) +target_link_libraries(fmusim ${FMUSIM_CLI_LIBS}) install(TARGETS fmusim DESTINATION ${CMAKE_INSTALL_PREFIX}) From ca34fa5ebc14720d437df4b422c231dde3de4a5a Mon Sep 17 00:00:00 2001 From: Benstone Zhang Date: Wed, 2 Apr 2025 21:12:53 +0800 Subject: [PATCH 06/10] support separate build of fmusim-gui Signed-off-by: Benstone Zhang --- .github/workflows/build-fmusim-gui.yml | 3 - .github/workflows/build.yml | 3 - build/external.cmake | 3 +- build/sim_common.cmake | 92 +++++++++++++------------- fmusim-gui/CMakeLists.txt | 6 +- 5 files changed, 53 insertions(+), 54 deletions(-) diff --git a/.github/workflows/build-fmusim-gui.yml b/.github/workflows/build-fmusim-gui.yml index 09511834..e05e818a 100644 --- a/.github/workflows/build-fmusim-gui.yml +++ b/.github/workflows/build-fmusim-gui.yml @@ -24,9 +24,6 @@ jobs: arch: 'win64_msvc2019_64' modules: 'qtpositioning qtwebchannel qtwebengine' - run: python -m pip install fmpy requests - - run: python fmusim-gui/build/build_cvode.py - - run: python fmusim-gui/build/build_libxml2.py - - run: python fmusim-gui/build/build_zlib.py - run: cmake -D CMAKE_PREFIX_PATH=${{env.QT_ROOT_DIR}} -S fmusim-gui -B fmusim-gui/build/fmusim-gui - run: cmake --build fmusim-gui/build/fmusim-gui --config Release - run: ${{env.QT_ROOT_DIR}}\bin\windeployqt.exe fmusim-gui\build\fmusim-gui\Release\fmusim-gui.exe diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b48c3a98..7bf2e176 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -50,9 +50,6 @@ jobs: run: | sudo apt-get update sudo apt-get install gcc-aarch64-linux-gnu qemu-user - - run: python build/build_cvode.py ${{ matrix.name }} - - run: python build/build_libxml2.py ${{ matrix.name }} - - run: python build/build_zlib.py ${{ matrix.name }} - run: python build/build.py ${{ matrix.name }} - if: matrix.name != 'aarch64-darwin' run: pytest tests --platform ${{ matrix.name }} diff --git a/build/external.cmake b/build/external.cmake index a2d029dc..629ced6c 100644 --- a/build/external.cmake +++ b/build/external.cmake @@ -14,7 +14,8 @@ ExternalProject_Add( GIT_TAG 51b7f2abdade71cd9bb0e7a373ef2610ec6f9daf # v1.3.1 GIT_SHALLOW True UPDATE_DISCONNECTED True - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BASE_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY} -DZLIB_BUILD_MINIZIP=1 + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BASE_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY} + # for zlib version v1.3.2+ add "-DZLIB_BUILD_MINIZIP=1" BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release BUILD_BYPRODUCTS ${EXTERNAL_BASE_DIR}/lib/libz.a INSTALL_COMMAND ${CMAKE_COMMAND} --install . --config Release diff --git a/build/sim_common.cmake b/build/sim_common.cmake index 3e1754ca..d2f7f5ed 100644 --- a/build/sim_common.cmake +++ b/build/sim_common.cmake @@ -15,50 +15,50 @@ set_source_files_properties( PROPERTIES GENERATED 1) set(FMUSIM_SOURCES - ${CMAKE_SOURCE_DIR}/include/FMI.h - ${CMAKE_SOURCE_DIR}/src/FMI.c - ${CMAKE_SOURCE_DIR}/include/FMI1.h - ${CMAKE_SOURCE_DIR}/src/FMI1.c - ${CMAKE_SOURCE_DIR}/include/FMI2.h - ${CMAKE_SOURCE_DIR}/src/FMI2.c - ${CMAKE_SOURCE_DIR}/include/FMI3.h - ${CMAKE_SOURCE_DIR}/src/FMI3.c - ${CMAKE_SOURCE_DIR}/fmusim/FMIUtil.h - ${CMAKE_SOURCE_DIR}/fmusim/FMIUtil.c - ${CMAKE_SOURCE_DIR}/fmusim/FMIStaticInput.h - ${CMAKE_SOURCE_DIR}/fmusim/FMIStaticInput.c - ${CMAKE_SOURCE_DIR}/fmusim/FMISimulation.h - ${CMAKE_SOURCE_DIR}/fmusim/FMISimulation.c - ${CMAKE_SOURCE_DIR}/fmusim/FMI1CSSimulation.h - ${CMAKE_SOURCE_DIR}/fmusim/FMI1CSSimulation.c - ${CMAKE_SOURCE_DIR}/fmusim/FMI1MESimulation.h - ${CMAKE_SOURCE_DIR}/fmusim/FMI1MESimulation.c - ${CMAKE_SOURCE_DIR}/fmusim/FMI2CSSimulation.h - ${CMAKE_SOURCE_DIR}/fmusim/FMI2CSSimulation.c - ${CMAKE_SOURCE_DIR}/fmusim/FMI2MESimulation.h - ${CMAKE_SOURCE_DIR}/fmusim/FMI2MESimulation.c - ${CMAKE_SOURCE_DIR}/fmusim/FMI3CSSimulation.h - ${CMAKE_SOURCE_DIR}/fmusim/FMI3CSSimulation.c - ${CMAKE_SOURCE_DIR}/fmusim/FMI3MESimulation.h - ${CMAKE_SOURCE_DIR}/fmusim/FMI3MESimulation.c - ${CMAKE_SOURCE_DIR}/fmusim/FMIRecorder.h - ${CMAKE_SOURCE_DIR}/fmusim/FMIRecorder.c - ${CMAKE_SOURCE_DIR}/fmusim/FMIEuler.h - ${CMAKE_SOURCE_DIR}/fmusim/FMIEuler.c - ${CMAKE_SOURCE_DIR}/fmusim/FMICVode.h - ${CMAKE_SOURCE_DIR}/fmusim/FMICVode.c - ${CMAKE_SOURCE_DIR}/fmusim/csv.h - ${CMAKE_SOURCE_DIR}/fmusim/csv.c - ${CMAKE_SOURCE_DIR}/fmusim/FMIZip.h - ${CMAKE_SOURCE_DIR}/fmusim/FMIZip.c - ${CMAKE_SOURCE_DIR}/fmusim/miniunzip.c - ${CMAKE_SOURCE_DIR}/fmusim/FMIModelDescription.c - ${CMAKE_SOURCE_DIR}/fmusim/FMIModelDescription.h - ${CMAKE_SOURCE_DIR}/fmusim/FMIBuildDescription.c - ${CMAKE_SOURCE_DIR}/fmusim/FMIBuildDescription.h - ${CMAKE_SOURCE_DIR}/include/structured_variable_name.tab.h - ${CMAKE_SOURCE_DIR}/src/structured_variable_name.tab.c - ${CMAKE_SOURCE_DIR}/src/structured_variable_name.yy.c + ../include/FMI.h + ../src/FMI.c + ../include/FMI1.h + ../src/FMI1.c + ../include/FMI2.h + ../src/FMI2.c + ../include/FMI3.h + ../src/FMI3.c + ../fmusim/FMIUtil.h + ../fmusim/FMIUtil.c + ../fmusim/FMIStaticInput.h + ../fmusim/FMIStaticInput.c + ../fmusim/FMISimulation.h + ../fmusim/FMISimulation.c + ../fmusim/FMI1CSSimulation.h + ../fmusim/FMI1CSSimulation.c + ../fmusim/FMI1MESimulation.h + ../fmusim/FMI1MESimulation.c + ../fmusim/FMI2CSSimulation.h + ../fmusim/FMI2CSSimulation.c + ../fmusim/FMI2MESimulation.h + ../fmusim/FMI2MESimulation.c + ../fmusim/FMI3CSSimulation.h + ../fmusim/FMI3CSSimulation.c + ../fmusim/FMI3MESimulation.h + ../fmusim/FMI3MESimulation.c + ../fmusim/FMIRecorder.h + ../fmusim/FMIRecorder.c + ../fmusim/FMIEuler.h + ../fmusim/FMIEuler.c + ../fmusim/FMICVode.h + ../fmusim/FMICVode.c + ../fmusim/csv.h + ../fmusim/csv.c + ../fmusim/FMIZip.h + ../fmusim/FMIZip.c + ../fmusim/miniunzip.c + ../fmusim/FMIModelDescription.c + ../fmusim/FMIModelDescription.h + ../fmusim/FMIBuildDescription.c + ../fmusim/FMIBuildDescription.h + ../include/structured_variable_name.tab.h + ../src/structured_variable_name.tab.c + ../src/structured_variable_name.yy.c ${ZLIB_SRC_DIR}/contrib/minizip/unzip.c ${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c ) @@ -67,8 +67,8 @@ if(WIN32) endif() set(FMUSIM_INCLUDES - ${CMAKE_SOURCE_DIR}/fmusim - ${CMAKE_SOURCE_DIR}/include + ../fmusim + ../include ${EXTERNAL_BASE_DIR}/include ${EXTERNAL_BASE_DIR}/include/libxml2 ${ZLIB_SRC_DIR}/contrib/minizip diff --git a/fmusim-gui/CMakeLists.txt b/fmusim-gui/CMakeLists.txt index db4018b5..f1c0377d 100644 --- a/fmusim-gui/CMakeLists.txt +++ b/fmusim-gui/CMakeLists.txt @@ -15,7 +15,11 @@ if(QT_VERSION_MAJOR GREATER_EQUAL 6) find_package(Qt6 REQUIRED COMPONENTS WebEngineWidgets) endif() -include(${CMAKE_SOURCE_DIR}/build/sim_common.cmake) +get_directory_property(NestedProject PARENT_DIRECTORY) +if(NOT NestedProject) + include(../build/external.cmake) +endif() +include(../build/sim_common.cmake) set(FMUSIM_GUI_SOURCES ${FMUSIM_SOURCES} From f48466d076695f44b036332b8756027ab90f276e Mon Sep 17 00:00:00 2001 From: Benstone Zhang Date: Wed, 9 Apr 2025 17:25:21 +0800 Subject: [PATCH 07/10] rename external base folder name to prevent possible path limitation issue on windows platform Signed-off-by: Benstone Zhang --- build/external.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/external.cmake b/build/external.cmake index 629ced6c..278a3f65 100644 --- a/build/external.cmake +++ b/build/external.cmake @@ -1,7 +1,7 @@ cmake_host_system_information(RESULT TARGET_64_BITS QUERY IS_64BIT) include(ExternalProject) -set(EXTERNAL_BASE_DIR ${CMAKE_BINARY_DIR}/external CACHE STRING "External base directory") +set(EXTERNAL_BASE_DIR ${CMAKE_BINARY_DIR}/_deps CACHE STRING "External base directory") file(MAKE_DIRECTORY ${EXTERNAL_BASE_DIR}/lib) if(UNIX AND TARGET_64_BITS GREATER_EQUAL 1) file(CREATE_LINK lib ${EXTERNAL_BASE_DIR}/lib64 SYMBOLIC) From c206388f5150060eb6d7676f52ae9304d8165532 Mon Sep 17 00:00:00 2001 From: Benstone Zhang Date: Wed, 9 Apr 2025 23:21:30 +0800 Subject: [PATCH 08/10] fix libxml2 link error on windows platform Signed-off-by: Benstone Zhang --- fmusim-gui/CMakeLists.txt | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/fmusim-gui/CMakeLists.txt b/fmusim-gui/CMakeLists.txt index f1c0377d..59e45a2f 100644 --- a/fmusim-gui/CMakeLists.txt +++ b/fmusim-gui/CMakeLists.txt @@ -21,6 +21,26 @@ if(NOT NestedProject) endif() include(../build/sim_common.cmake) +if(WIN32) + ExternalProject_Add( + xml2d_src + DEPENDS zlib xml2_src + PREFIX ${EXTERNAL_BASE_DIR} + SOURCE_DIR ${EXTERNAL_BASE_DIR}/src/xml2_src + DOWNLOAD_COMMAND "" + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${EXTERNAL_BASE_DIR} -DCMAKE_BUILD_TYPE=Release -DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY} -DLIBXML2_WITH_ICONV=OFF -DLIBXML2_WITH_LZMA=OFF -DLIBXML2_WITH_PYTHON=OFF -DLIBXML2_WITH_ZLIB=OFF -DLIBXML2_WITH_TESTS=OFF + BUILD_COMMAND ${CMAKE_COMMAND} --build . --config Release + BUILD_BYPRODUCTS ${EXTERNAL_BASE_DIR}/lib/libxml2.lib + INSTALL_COMMAND ${CMAKE_COMMAND} --install . --config Release + ) + add_library(xml2d STATIC IMPORTED) + set_target_properties(xml2d PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib/libxml2.lib) + add_dependencies(xml2d xml2d_src) + + set(FMUSIM_LIBS ${EXTERNAL_BASE_DIR}/lib/libxml2.lib ${FMUSIM_LIBS}) + set(FMUSIM_DEPENDS ${FMUSIM_DEPENDS} xml2d) +endif() + set(FMUSIM_GUI_SOURCES ${FMUSIM_SOURCES} main.cpp From 94a3279e40e942f1bd0613cef52f1b89fe73fe55 Mon Sep 17 00:00:00 2001 From: Benstone Zhang Date: Thu, 10 Apr 2025 18:11:20 +0800 Subject: [PATCH 09/10] combine external.cmake and sim_common.cmake as fmusim.cmake Signed-off-by: Benstone Zhang --- CMakeLists.txt | 2 +- build/{external.cmake => fmusim.cmake} | 97 +++++++++++++++++++++++ build/sim_common.cmake | 102 ------------------------- fmusim-gui/CMakeLists.txt | 9 ++- fmusim/CMakeLists.txt | 6 +- 5 files changed, 110 insertions(+), 106 deletions(-) rename build/{external.cmake => fmusim.cmake} (52%) delete mode 100644 build/sim_common.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 38faabd3..8169f906 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -279,7 +279,7 @@ endforeach(MODEL_NAME) include(examples/Examples.cmake) if(WITH_FMUSIM OR WITH_FMUSIM_GUI) - include(build/external.cmake) + include(build/fmusim.cmake) if (WITH_FMUSIM) add_subdirectory(fmusim) diff --git a/build/external.cmake b/build/fmusim.cmake similarity index 52% rename from build/external.cmake rename to build/fmusim.cmake index 278a3f65..7606e33f 100644 --- a/build/external.cmake +++ b/build/fmusim.cmake @@ -58,3 +58,100 @@ ExternalProject_Add( add_library(cvcode STATIC IMPORTED) set_target_properties(cvcode PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a) add_dependencies(cvcode cvcode_src) + +set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded) + +if(WIN32) + set(FMI_PLATFORM "${FMI_ARCHITECTURE}-windows") +elseif(APPLE) + set(FMI_PLATFORM "${FMI_ARCHITECTURE}-darwin") +else() + set(FMI_PLATFORM "${FMI_ARCHITECTURE}-linux") +endif() + +set(FMUSIM_SOURCES + ../include/FMI.h + ../src/FMI.c + ../include/FMI1.h + ../src/FMI1.c + ../include/FMI2.h + ../src/FMI2.c + ../include/FMI3.h + ../src/FMI3.c + ../fmusim/FMIUtil.h + ../fmusim/FMIUtil.c + ../fmusim/FMIStaticInput.h + ../fmusim/FMIStaticInput.c + ../fmusim/FMISimulation.h + ../fmusim/FMISimulation.c + ../fmusim/FMI1CSSimulation.h + ../fmusim/FMI1CSSimulation.c + ../fmusim/FMI1MESimulation.h + ../fmusim/FMI1MESimulation.c + ../fmusim/FMI2CSSimulation.h + ../fmusim/FMI2CSSimulation.c + ../fmusim/FMI2MESimulation.h + ../fmusim/FMI2MESimulation.c + ../fmusim/FMI3CSSimulation.h + ../fmusim/FMI3CSSimulation.c + ../fmusim/FMI3MESimulation.h + ../fmusim/FMI3MESimulation.c + ../fmusim/FMIRecorder.h + ../fmusim/FMIRecorder.c + ../fmusim/FMIEuler.h + ../fmusim/FMIEuler.c + ../fmusim/FMICVode.h + ../fmusim/FMICVode.c + ../fmusim/csv.h + ../fmusim/csv.c + ../fmusim/FMIZip.h + ../fmusim/FMIZip.c + ../fmusim/miniunzip.c + ../fmusim/FMIModelDescription.c + ../fmusim/FMIModelDescription.h + ../fmusim/FMIBuildDescription.c + ../fmusim/FMIBuildDescription.h + ../include/structured_variable_name.tab.h + ../src/structured_variable_name.tab.c + ../src/structured_variable_name.yy.c + ${ZLIB_SRC_DIR}/contrib/minizip/unzip.c + ${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c + ) +if(WIN32) + set(FMUSIM_SOURCES ${FMUSIM_SOURCES} ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c) +endif() + +set(FMUSIM_INCLUDES + ../fmusim + ../include + ${EXTERNAL_BASE_DIR}/include + ${EXTERNAL_BASE_DIR}/include/libxml2 + ${ZLIB_SRC_DIR}/contrib/minizip + ) + +if(WIN32) + set(FMUSIM_LIBS + ${EXTERNAL_BASE_DIR}/lib/libxml2s.lib + ${EXTERNAL_BASE_DIR}/lib/zlibstatic.lib + ${EXTERNAL_BASE_DIR}/lib/sundials_cvode_static.lib + ${EXTERNAL_BASE_DIR}/lib/sundials_core_static.lib + ) +elseif(UNIX AND NOT APPLE) + set(FMUSIM_LIBS + ${EXTERNAL_BASE_DIR}/lib/libxml2.a + ${EXTERNAL_BASE_DIR}/lib/libz.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a + ${CMAKE_DL_LIBS} + m + ) +else() + set(FMUSIM_LIBS + ${EXTERNAL_BASE_DIR}/lib/libxml2.a + ${EXTERNAL_BASE_DIR}/lib/libz.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a + ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a + ) +endif() + +set(FMUSIM_DEPENDS zlib xml2 cvcode) diff --git a/build/sim_common.cmake b/build/sim_common.cmake deleted file mode 100644 index d2f7f5ed..00000000 --- a/build/sim_common.cmake +++ /dev/null @@ -1,102 +0,0 @@ -set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded) - -if(WIN32) - set(FMI_PLATFORM "${FMI_ARCHITECTURE}-windows") -elseif(APPLE) - set(FMI_PLATFORM "${FMI_ARCHITECTURE}-darwin") -else() - set(FMI_PLATFORM "${FMI_ARCHITECTURE}-linux") -endif() - -set_source_files_properties( - ${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c - ${ZLIB_SRC_DIR}/contrib/minizip/unzip.c - ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c - PROPERTIES GENERATED 1) - -set(FMUSIM_SOURCES - ../include/FMI.h - ../src/FMI.c - ../include/FMI1.h - ../src/FMI1.c - ../include/FMI2.h - ../src/FMI2.c - ../include/FMI3.h - ../src/FMI3.c - ../fmusim/FMIUtil.h - ../fmusim/FMIUtil.c - ../fmusim/FMIStaticInput.h - ../fmusim/FMIStaticInput.c - ../fmusim/FMISimulation.h - ../fmusim/FMISimulation.c - ../fmusim/FMI1CSSimulation.h - ../fmusim/FMI1CSSimulation.c - ../fmusim/FMI1MESimulation.h - ../fmusim/FMI1MESimulation.c - ../fmusim/FMI2CSSimulation.h - ../fmusim/FMI2CSSimulation.c - ../fmusim/FMI2MESimulation.h - ../fmusim/FMI2MESimulation.c - ../fmusim/FMI3CSSimulation.h - ../fmusim/FMI3CSSimulation.c - ../fmusim/FMI3MESimulation.h - ../fmusim/FMI3MESimulation.c - ../fmusim/FMIRecorder.h - ../fmusim/FMIRecorder.c - ../fmusim/FMIEuler.h - ../fmusim/FMIEuler.c - ../fmusim/FMICVode.h - ../fmusim/FMICVode.c - ../fmusim/csv.h - ../fmusim/csv.c - ../fmusim/FMIZip.h - ../fmusim/FMIZip.c - ../fmusim/miniunzip.c - ../fmusim/FMIModelDescription.c - ../fmusim/FMIModelDescription.h - ../fmusim/FMIBuildDescription.c - ../fmusim/FMIBuildDescription.h - ../include/structured_variable_name.tab.h - ../src/structured_variable_name.tab.c - ../src/structured_variable_name.yy.c - ${ZLIB_SRC_DIR}/contrib/minizip/unzip.c - ${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c - ) -if(WIN32) - set(FMUSIM_SOURCES ${FMUSIM_SOURCES} ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c) -endif() - -set(FMUSIM_INCLUDES - ../fmusim - ../include - ${EXTERNAL_BASE_DIR}/include - ${EXTERNAL_BASE_DIR}/include/libxml2 - ${ZLIB_SRC_DIR}/contrib/minizip - ) - -if(WIN32) - set(FMUSIM_LIBS - ${EXTERNAL_BASE_DIR}/lib/libxml2s.lib - ${EXTERNAL_BASE_DIR}/lib/zlibstatic.lib - ${EXTERNAL_BASE_DIR}/lib/sundials_cvode_static.lib - ${EXTERNAL_BASE_DIR}/lib/sundials_core_static.lib - ) -elseif(UNIX AND NOT APPLE) - set(FMUSIM_LIBS - ${EXTERNAL_BASE_DIR}/lib/libxml2.a - ${EXTERNAL_BASE_DIR}/lib/libz.a - ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a - ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a - ${CMAKE_DL_LIBS} - m - ) -else() - set(FMUSIM_LIBS - ${EXTERNAL_BASE_DIR}/lib/libxml2.a - ${EXTERNAL_BASE_DIR}/lib/libz.a - ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a - ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a - ) -endif() - -set(FMUSIM_DEPENDS zlib xml2 cvcode) diff --git a/fmusim-gui/CMakeLists.txt b/fmusim-gui/CMakeLists.txt index 59e45a2f..64bef3d7 100644 --- a/fmusim-gui/CMakeLists.txt +++ b/fmusim-gui/CMakeLists.txt @@ -17,9 +17,14 @@ endif() get_directory_property(NestedProject PARENT_DIRECTORY) if(NOT NestedProject) - include(../build/external.cmake) + include(../build/fmusim.cmake) endif() -include(../build/sim_common.cmake) + +set_source_files_properties( + ${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c + ${ZLIB_SRC_DIR}/contrib/minizip/unzip.c + ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c + PROPERTIES GENERATED 1) if(WIN32) ExternalProject_Add( diff --git a/fmusim/CMakeLists.txt b/fmusim/CMakeLists.txt index 3ae4fa5c..ed7860af 100644 --- a/fmusim/CMakeLists.txt +++ b/fmusim/CMakeLists.txt @@ -4,7 +4,11 @@ set(FMUSIM_VERSION "" CACHE STRING "") project (FMUSim) -include(${CMAKE_SOURCE_DIR}/build/sim_common.cmake) +set_source_files_properties( + ${ZLIB_SRC_DIR}/contrib/minizip/ioapi.c + ${ZLIB_SRC_DIR}/contrib/minizip/unzip.c + ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.c + PROPERTIES GENERATED 1) if(WIN32) set(FMUSIM_DIST_DIR ${CMAKE_BINARY_DIR}/dist/fmusim-windows/) From 2f978baed7423722521d407106756976ac742f6b Mon Sep 17 00:00:00 2001 From: Benstone Zhang Date: Thu, 10 Apr 2025 18:15:07 +0800 Subject: [PATCH 10/10] fix typo of cvode Signed-off-by: Benstone Zhang --- build/fmusim.cmake | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/build/fmusim.cmake b/build/fmusim.cmake index 7606e33f..d2175d04 100644 --- a/build/fmusim.cmake +++ b/build/fmusim.cmake @@ -44,7 +44,7 @@ set_target_properties(xml2 PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib add_dependencies(xml2 xml2_src) ExternalProject_Add( - cvcode_src + cvode_src PREFIX ${EXTERNAL_BASE_DIR} GIT_REPOSITORY https://github.com/LLNL/sundials.git GIT_TAG c28eaa3764a03705d61decb6025b409360e9d53f # v7.1.1 @@ -55,9 +55,9 @@ ExternalProject_Add( BUILD_BYPRODUCTS ${EXTERNAL_BASE_DIR}/lib/libsundials_cvode.a ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a INSTALL_COMMAND ${CMAKE_COMMAND} --install . --config Release ) -add_library(cvcode STATIC IMPORTED) -set_target_properties(cvcode PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a) -add_dependencies(cvcode cvcode_src) +add_library(cvode STATIC IMPORTED) +set_target_properties(cvode PROPERTIES IMPORTED_LOCATION ${EXTERNAL_BASE_DIR}/lib/libsundials_core.a) +add_dependencies(cvode cvode_src) set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded) @@ -154,4 +154,4 @@ else() ) endif() -set(FMUSIM_DEPENDS zlib xml2 cvcode) +set(FMUSIM_DEPENDS zlib xml2 cvode)