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 02b9c568..02c6d1b5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -51,9 +51,6 @@ jobs: sudo apt-get update sudo apt-get install gcc-aarch64-linux-gnu qemu-user - run: cmake --version - - 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/CMakeLists.txt b/CMakeLists.txt index 6db01f90..8169f906 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>") @@ -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}") @@ -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/fmusim.cmake) + + if (WITH_FMUSIM) + add_subdirectory(fmusim) + endif () + + if (WITH_FMUSIM_GUI) + add_subdirectory(fmusim-gui) + endif () endif () 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/build/fmusim.cmake b/build/fmusim.cmake new file mode 100644 index 00000000..d2175d04 --- /dev/null +++ b/build/fmusim.cmake @@ -0,0 +1,157 @@ +cmake_host_system_information(RESULT TARGET_64_BITS QUERY IS_64BIT) + +include(ExternalProject) +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) +endif() + +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} + # 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 +) +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) + +ExternalProject_Add( + xml2_src + DEPENDS zlib + 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( + cvode_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(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) + +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 cvode) diff --git a/fmusim-gui/CMakeLists.txt b/fmusim-gui/CMakeLists.txt index b7fc8061..64bef3d7 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,89 +10,62 @@ 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) +find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) +if(QT_VERSION_MAJOR GREATER_EQUAL 6) + find_package(Qt6 REQUIRED COMPONENTS WebEngineWidgets) +endif() -set(ZLIB_SRC_DIR ${CMAKE_SOURCE_DIR}/build/zlib-1.3.1) +get_directory_property(NestedProject PARENT_DIRECTORY) +if(NOT NestedProject) + include(../build/fmusim.cmake) +endif() -find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets) -find_package(Qt6 REQUIRED COMPONENTS WebEngineWidgets) +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( + 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(PROJECT_SOURCES + 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 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 - ${ZLIB_SRC_DIR}/contrib/minizip/iowin32.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(${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 @@ -108,27 +81,20 @@ if(${QT_VERSION_MAJOR} GREATER_EQUAL 6) resources/icon/icon.rc resources/build/build.qrc ) + add_dependencies(fmusim-gui ${FMUSIM_DEPENDS}) -target_include_directories(fmusim-gui PRIVATE - ../include - ../fmusim - ${LIBXML2_DIR}/include/libxml2 - ${ZLIB_DIR}/include - ${ZLIB_SRC_DIR}/contrib/minizip - ${CVODE_DIR}/include -) + target_include_directories(fmusim-gui PRIVATE ${FMUSIM_INCLUDES}) -target_compile_definitions(fmusim-gui PRIVATE - YY_NO_UNISTD_H -) + if(WIN32) + target_compile_definitions(fmusim-gui PRIVATE + YY_NO_UNISTD_H + ) + endif() -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 -) + target_link_libraries(fmusim-gui PRIVATE + Qt6::WebEngineWidgets + ${FMUSIM_LIBS} + ) # Define target properties for Android with Qt 6 as: # set_property(TARGET fmusim-gui APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR @@ -137,13 +103,13 @@ target_link_libraries(fmusim-gui PRIVATE 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() @@ -171,6 +137,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 327534cc..ed7860af 100644 --- a/fmusim/CMakeLists.txt +++ b/fmusim/CMakeLists.txt @@ -1,100 +1,38 @@ -cmake_minimum_required (VERSION 3.17) - -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 () +cmake_minimum_required (VERSION 3.18) 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/) +project (FMUSim) + +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) +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(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}) - -target_include_directories(fmusim PRIVATE - . - ../include - ${LIBXML2_DIR}/include/libxml2 - ${ZLIB_DIR}/include - ${ZLIB_SRC_DIR}/contrib/minizip - ${CVODE_DIR}/include -) +target_include_directories(fmusim PRIVATE ${FMUSIM_INCLUDES}) if (WIN32) target_compile_definitions(fmusim PRIVATE FMUSIM_VERSION=${FMUSIM_VERSION} YY_NO_UNISTD_H LIBXML_STATIC) @@ -103,33 +41,11 @@ else () 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 - 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 - ${CMAKE_DL_LIBS} - m - ) + set(FMUSIM_CLI_LIBS ${FMUSIM_LIBS} wsock32 ws2_32 bcrypt) 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 - ) + 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})