Skip to content

Commit e159244

Browse files
committed
cmake: objects for AD, MD, SS c-bind shared/static lib builds
Without this approach, errors occur when making the _C_Binding.f90 for static and shared in parallel.
1 parent 92c80cc commit e159244

File tree

3 files changed

+33
-24
lines changed

3 files changed

+33
-24
lines changed

modules/aerodyn/CMakeLists.txt

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -98,23 +98,27 @@ add_executable(unsteadyaero_driver
9898
)
9999
target_link_libraries(unsteadyaero_driver basicaerolib lindynlib versioninfolib)
100100

101+
101102
# AeroDyn-InflowWind c-bindings interface library
102-
add_library(aerodyn_inflow_c_binding SHARED
103+
# create object instead of directly linking into shared and static -- causes issues in parallel builds
104+
# This is only required because we are static linking the library for wavetank
105+
add_library(aerodyn_inflow_c_binding_object OBJECT
103106
src/AeroDyn_Inflow_C_Binding_Types.f90
104107
src/AeroDyn_Inflow_C_Binding.f90
105108
)
106-
target_link_libraries(aerodyn_inflow_c_binding aerodyn_driver_subs versioninfolib)
109+
set_property(TARGET aerodyn_inflow_c_binding_object PROPERTY POSITION_INDEPENDENT_CODE 1) # required for shared libs
110+
111+
# shared
112+
add_library(aerodyn_inflow_c_binding SHARED $<TARGET_OBJECTS:aerodyn_inflow_c_binding_object>)
113+
target_link_libraries(aerodyn_inflow_c_binding adilib aerodyn_driver_subs nwtclibs versioninfolib)
107114
if(APPLE OR UNIX)
108115
target_compile_definitions(aerodyn_inflow_c_binding PRIVATE IMPLICIT_DLLEXPORT)
109116
endif()
110117

111118
# C-bindings non-shared interface
112119
# This is a workaround for building wavetank into a single DLL (also allows setting CU globaly for sending screen to file for labview integration)
113-
add_library(aerodyn_inflow_c_bind_static STATIC
114-
src/AeroDyn_Inflow_C_Binding_Types.f90
115-
src/AeroDyn_Inflow_C_Binding.f90
116-
)
117-
target_link_libraries(aerodyn_inflow_c_bind_static aerodyn_driver_subs versioninfolib)
120+
add_library(aerodyn_inflow_c_bind_static STATIC $<TARGET_OBJECTS:aerodyn_inflow_c_binding_object>)
121+
target_link_libraries(aerodyn_inflow_c_bind_static adilib aerodyn_driver_subs nwtclibs versioninfolib)
118122
if(APPLE OR UNIX)
119123
target_compile_definitions(aerodyn_inflow_c_bind_static PRIVATE IMPLICIT_DLLEXPORT)
120124
endif()

modules/moordyn/CMakeLists.txt

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,22 @@ add_executable(moordyn_driver
3737
target_link_libraries(moordyn_driver moordynlib versioninfolib)
3838

3939
# C-bindings interface library
40-
add_library(moordyn_c_binding SHARED
41-
src/MoorDyn_C_Binding.f90
42-
)
43-
target_link_libraries(moordyn_c_binding moordynlib seastlib versioninfolib)
40+
# create object instead of directly linking into shared and static -- causes issues in parallel builds
41+
# This is only required because we are static linking the library for wavetank
42+
add_library(moordyn_c_binding_object OBJECT src/MoorDyn_C_Binding.f90)
43+
set_property(TARGET moordyn_c_binding_object PROPERTY POSITION_INDEPENDENT_CODE 1) # required for shared libs
44+
45+
# shared
46+
add_library(moordyn_c_binding SHARED $<TARGET_OBJECTS:moordyn_c_binding_object>)
47+
target_link_libraries(moordyn_c_binding moordynlib seastlib nwtclibs versioninfolib)
4448
if(APPLE OR UNIX)
4549
target_compile_definitions(moordyn_c_binding PRIVATE IMPLICIT_DLLEXPORT)
4650
endif()
4751

4852
# C-bindings non-shared interface
4953
# This is a workaround for building wavetank into a single DLL (also allows setting CU globaly for sending screen to file for labview integration)
50-
add_library(moordyn_c_bind_static STATIC
51-
src/MoorDyn_C_Binding.f90
52-
)
53-
target_link_libraries(moordyn_c_bind_static moordynlib seastlib versioninfolib)
54+
add_library(moordyn_c_bind_static SHARED $<TARGET_OBJECTS:moordyn_c_binding_object>)
55+
target_link_libraries(moordyn_c_bind_static moordynlib seastlib nwtclibs versioninfolib)
5456
if(APPLE OR UNIX)
5557
target_compile_definitions(moordyn_c_bind_static PRIVATE IMPLICIT_DLLEXPORT)
5658
endif()

modules/seastate/CMakeLists.txt

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,21 +39,24 @@ add_library(seastlib STATIC
3939
)
4040
target_link_libraries(seastlib nwtclibs versioninfolib)
4141

42+
4243
# C-bindings interface library
43-
add_library(seastate_c_binding SHARED
44-
src/SeaState_C_Binding.f90
45-
)
46-
target_link_libraries(seastate_c_binding seastlib versioninfolib)
44+
# create object instead of directly linking into shared and static -- causes issues in parallel builds
45+
# This is only required because we are static linking the library for wavetank
46+
add_library(seastate_c_binding_object OBJECT src/SeaState_C_Binding.f90)
47+
set_property(TARGET seastate_c_binding_object PROPERTY POSITION_INDEPENDENT_CODE 1) # required for shared libs
48+
49+
# shared
50+
add_library(seastate_c_binding SHARED $<TARGET_OBJECTS:seastate_c_binding_object>)
51+
target_link_libraries(seastate_c_binding seastlib nwtclibs versioninfolib)
4752
if(APPLE OR UNIX)
4853
target_compile_definitions(seastate_c_binding PRIVATE IMPLICIT_DLLEXPORT)
4954
endif()
5055

51-
# C-bindings non-shared interface
56+
# C-bindings static interface
5257
# This is a workaround for building wavetank into a single DLL (also allows setting CU globaly for sending screen to file for labview integration)
53-
add_library(seastate_c_bind_static STATIC
54-
src/SeaState_C_Binding.f90
55-
)
56-
target_link_libraries(seastate_c_bind_static seastlib versioninfolib)
58+
add_library(seastate_c_bind_static STATIC $<TARGET_OBJECTS:seastate_c_binding_object>)
59+
target_link_libraries(seastate_c_bind_static seastlib nwtclibs versioninfolib)
5760
if(APPLE OR UNIX)
5861
target_compile_definitions(seastate_c_bind_static PRIVATE IMPLICIT_DLLEXPORT)
5962
endif()

0 commit comments

Comments
 (0)