Skip to content

Commit d03231b

Browse files
wdeconinckhavogt
authored andcommitted
Support for shared Fortran library (#191)
1 parent aef839c commit d03231b

File tree

3 files changed

+26
-9
lines changed

3 files changed

+26
-9
lines changed

CMakeLists.txt

+1-7
Original file line numberDiff line numberDiff line change
@@ -111,12 +111,6 @@ find_package(Threads REQUIRED)
111111
# Set script directory
112112
set(SCRIPT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tools)
113113

114-
# If we build the C Interface we require shared libraries
115-
if(SERIALBOX_ENABLE_C AND NOT(SERIALBOX_BUILD_SHARED))
116-
message(STATUS "SERIALBOX_ENABLE_C requires shared libraries, setting SERIALBOX_BUILD_SHARED=ON")
117-
set(SERIALBOX_BUILD_SHARED ON)
118-
endif()
119-
120114
# If we build the Fortran Interface, we need a Fortran compiler
121115
if(SERIALBOX_ENABLE_FORTRAN)
122116
enable_language(Fortran)
@@ -260,7 +254,7 @@ if(SERIALBOX_ENABLE_EXPERIMENTAL_FILESYSTEM)
260254
if( STD_FILESYSTEM_LIB_CHECK )
261255
message(STATUS "Using std::experimental::filesystem (no dependency on compiled boost libs)")
262256
add_library(SerialboxFilesytemTarget INTERFACE)
263-
target_link_libraries(SerialboxFilesytemTarget INTERFACE stdc++fs)
257+
target_link_libraries(SerialboxFilesytemTarget INTERFACE ${STD_FILESYSTEM_LIB_CHECK})
264258
set(SERIALBOX_FILESYSTEM_LIBRARY_STRING "SERIALBOX_USE_STD_EXPERIMENTAL_FILESYSTEM")
265259
set(_use_boost_filesystem OFF)
266260
else()

cmake/SerialboxConfig.cmake.in

+9-2
Original file line numberDiff line numberDiff line change
@@ -84,17 +84,23 @@ endif(SERIALBOX_HAS_C)
8484
if(SERIALBOX_HAS_FORTRAN)
8585
get_property(_static_lib TARGET Serialbox::SerialboxFortranStatic PROPERTY LOCATION)
8686
message(STATUS " Static serialbox FORTRAN: ${_static_lib}")
87+
88+
if(SERIALBOX_HAS_SHARED_LIBRARY)
89+
get_property(_shared_lib TARGET Serialbox::SerialboxFortranShared PROPERTY LOCATION)
90+
message(STATUS " Shared serialbox FORTRAN: ${_shared_lib}")
91+
endif()
92+
8793
endif(SERIALBOX_HAS_FORTRAN)
8894

8995
#===---------------------------------------------------------------------------------------------===
9096
# Find external libraries
9197
#====--------------------------------------------------------------------------------------------===
9298
if(NOT(DEFINED SERIALBOX_NO_EXTERNAL_LIBS))
93-
9499
include(CMakeFindDependencyMacro)
95100
#
96101
# Pthreads
97102
#
103+
message( STATUS "Serialbox: find_depencency( Threads )" )
98104
find_dependency(Threads)
99105

100106
#
@@ -111,7 +117,8 @@ if(NOT(DEFINED SERIALBOX_NO_EXTERNAL_LIBS))
111117
set(BOOST_INCLUDEDIR "${SERIALBOX_BOOST_INCLUDE_DIRS}")
112118
set(Boost_NO_SYSTEM_PATHS "ON") # Force boost to search locations specified above
113119

114-
find_package(Boost
120+
message( STATUS "Serialbox: find_depencency( Boost ${SERIALBOX_BOOST_VERSION} EXACT COMPONENTS ${SERIALBOX_REQUIRED_BOOST_COMPONENTS}}")
121+
find_dependency(Boost
115122
${SERIALBOX_BOOST_VERSION} EXACT COMPONENTS ${SERIALBOX_REQUIRED_BOOST_COMPONENTS})
116123
if(Boost_FOUND)
117124
list(APPEND SERIALBOX_INCLUDE_DIRS ${Boost_INCLUDE_DIRS})

src/serialbox-fortran/CMakeLists.txt

+16
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,22 @@ if(SERIALBOX_ENABLE_FORTRAN)
4444
ARCHIVE DESTINATION lib
4545
)
4646

47+
if(BUILD_SHARED_LIBS)
48+
set_target_properties( SerialboxFortranSerializeObjects PROPERTIES POSITION_INDEPENDENT_CODE ON )
49+
set_target_properties( SerialboxFortranObjects PROPERTIES POSITION_INDEPENDENT_CODE ON )
50+
add_library(SerialboxFortranShared SHARED $<TARGET_OBJECTS:SerialboxFortranSerializeObjects> $<TARGET_OBJECTS:SerialboxFortranObjects>)
51+
target_link_libraries(SerialboxFortranShared PUBLIC SerialboxFortranObjects)
52+
target_link_libraries(SerialboxFortranShared PUBLIC SerialboxFortranSerializeObjects)
53+
target_link_libraries(SerialboxFortranShared PUBLIC SerialboxCShared)
54+
set_target_properties(SerialboxFortranShared PROPERTIES VERSION ${Serialbox_VERSION_STRING})
55+
56+
install(TARGETS SerialboxFortranShared
57+
EXPORT SerialboxTargets
58+
LIBRARY DESTINATION lib
59+
ARCHIVE DESTINATION lib
60+
)
61+
endif()
62+
4763
# Install mod files
4864
foreach(source ${SOURCES_FORTRAN} ${SOURCES_FORTRAN_SERIALIZE})
4965
get_filename_component(module_name ${source} NAME_WE)

0 commit comments

Comments
 (0)