Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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}")
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 <platform>` Python scripts (where `<platform>` 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

Expand Down
55 changes: 55 additions & 0 deletions build/external.cmake
Original file line number Diff line number Diff line change
@@ -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)
37 changes: 17 additions & 20 deletions fmusim/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
cmake_minimum_required (VERSION 3.17)
cmake_minimum_required (VERSION 3.18)

set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreaded)

Expand All @@ -12,10 +12,7 @@ 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(../build/external.cmake)

if (WIN32)
set(FMUSIM_DIST_DIR ${CMAKE_BINARY_DIR}/dist/fmusim-windows/)
Expand Down Expand Up @@ -86,14 +83,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)
Expand All @@ -104,29 +101,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 ()

Expand Down
Loading