Skip to content

Integrate external project zlib, libxml2 and sundials build into main cmake build #640

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 11 commits into
base: main
Choose a base branch
from
Open
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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
GIT_TAG 51b7f2abdade71cd9bb0e7a373ef2610ec6f9daf # v1.3.1
GIT_TAG 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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
GIT_TAG 60d3056c97067e6cb2125284878ed7c99c90ed81 # v2.13.4
GIT_TAG v2.13.4

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Per cmake document ExternalProject, commit hash should be preferred than tag.
Anyway, if you really want tag, I will update it.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK to keep as is.

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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
GIT_TAG c28eaa3764a03705d61decb6025b409360e9d53f # v7.1.1
GIT_TAG 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