Skip to content

Commit

Permalink
CMake FMU runtime dependencies for Windows (#9544)
Browse files Browse the repository at this point in the history
* CMake FMU runtime dependencies for Windows

  - Exclude system libraries for "modelica"
  - On Windwos `DIRECTORIES` has to be used to specify
    directories of dependencies.
  - "all" probably needs to have `DIRECTORIES` with all of
    the Windows systems locations. But that doesn't sound like a
    good idea to run "all" on Windows.
  - Check if FMI_INTERFACE_HEADER_FILES_DIRECTORY has fmi2Functions.h
  • Loading branch information
AnHeuermann committed Oct 19, 2022
1 parent 1d68a3f commit 8bfbef9
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 7 deletions.
3 changes: 2 additions & 1 deletion OMCompiler/Compiler/SimCode/SimCodeUtil.mo
Expand Up @@ -15566,10 +15566,11 @@ algorithm
(locations, libraries) := getDirectoriesForDLLsFromLinkLibs(libs);
locations := List.map(locations, addQuotationMarks);
// Use target_link_directories when CMake 3.13 is available and skip the find_library part
cmakecode := cmakecode + "set(EXTERNAL_LIBDIRECTORIES " + stringDelimitList(locations, "\n ") + ")\n";
for lib in libraries loop
cmakecode := cmakecode + "find_library(" + lib + "\n" +
" NAMES " + lib + "\n" +
" PATHS " + stringDelimitList(locations, "\n ") + ")\n" +
" PATHS ${EXTERNAL_LIBDIRECTORIES})\n" +
"message(STATUS \"Linking ${" + lib + "}\")" + "\n" +
"target_link_libraries(${FMU_NAME} PRIVATE ${" + lib + "})" + "\n";
end for;
Expand Down
Expand Up @@ -17,17 +17,25 @@ endif()
if(NOT FMI_INTERFACE_HEADER_FILES_DIRECTORY)
message(FATAL_ERROR "No FMI export headers provided. Set -DFMI_INTERFACE_HEADER_FILES_DIRECTORY=/path/to/fmi/headers")
endif()
find_file(FMI2_FUNCTIONS_H "fmi2Functions.h"
PATHS ${FMI_INTERFACE_HEADER_FILES_DIRECTORY}
NO_DEFAULT_PATH,
NO_CMAKE_FIND_ROOT_PATH)
if(NOT FMI2_FUNCTIONS_H)
message(FATAL_ERROR "Could not find fmi2Functions.h in FMI_INTERFACE_HEADER_FILES_DIRECTORY=${FMI_INTERFACE_HEADER_FILES_DIRECTORY}")
endif()
message(STATUS "FMI2 include directory: ${FMI_INTERFACE_HEADER_FILES_DIRECTORY}")

set(THREADS_PTHREAD_ARG "2" CACHE STRING "Forcibly set by CMakeLists.txt." FORCE)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)

file(GLOB_RECURSE FMU_RUNTIME_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/external_solvers/*.c
${CMAKE_CURRENT_SOURCE_DIR}/gc/*.c
${CMAKE_CURRENT_SOURCE_DIR}/math-support/pivot.c
${CMAKE_CURRENT_SOURCE_DIR}/meta/*.c
${CMAKE_CURRENT_SOURCE_DIR}/simulation/*.c
${CMAKE_CURRENT_SOURCE_DIR}/util/*.c)
${CMAKE_CURRENT_SOURCE_DIR}/gc/*.c
${CMAKE_CURRENT_SOURCE_DIR}/math-support/pivot.c
${CMAKE_CURRENT_SOURCE_DIR}/meta/*.c
${CMAKE_CURRENT_SOURCE_DIR}/simulation/*.c
${CMAKE_CURRENT_SOURCE_DIR}/util/*.c)

file(GLOB FMU_GENERATED_MODEL_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.c)

Expand Down Expand Up @@ -80,13 +88,17 @@ target_compile_definitions(${FMU_NAME} PRIVATE OMC_MINIMAL_RUNTIME=1;OMC_FMI_RUN
if(RUNTIME_DEPENDENCIES_LEVEL STREQUAL "all")
install(TARGETS ${FMU_NAME}
RUNTIME_DEPENDENCIES
DIRECTORIES ${EXTERNAL_LIBDIRECTORIES}
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR})
elseif(RUNTIME_DEPENDENCIES_LEVEL STREQUAL "modelica")
install(TARGETS ${FMU_NAME}
RUNTIME_DEPENDENCIES POST_EXCLUDE_REGEXES "^\\/lib.*" "^\\/usr\\/lib.*" "^\\/usr\\/local\\/lib.*"
RUNTIME_DEPENDENCIES
DIRECTORIES ${EXTERNAL_LIBDIRECTORIES}
PRE_EXCLUDE_REGEXES "api-ms-" "ext-ms-"
POST_EXCLUDE_REGEXES "^\\/lib.*" "^\\/usr\\/lib.*" "^\\/usr\\/local\\/lib.*" ".*system32/.*\\.dll"
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
Expand Down

0 comments on commit 8bfbef9

Please sign in to comment.