Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
e2e2d2b
openfast-cpp/CMakeLists.txt: fixed wrong case on SC.h causes install …
reos-rcrozier Feb 9, 2022
a951254
create_FAST_SFunc.m: need linux-specific mex call COMPFLAGS windows o…
reos-rcrozier Feb 9, 2022
b009fb7
Merge branch 'main' into dev
reos-rcrozier Feb 9, 2022
abcd0a5
Modify build system to create static libopenfast from object librarie…
reos-rcrozier Feb 10, 2022
0ab29c9
More modifying build system to create static libopenfast from object …
reos-rcrozier Feb 10, 2022
0d907d3
Adding more missing target_include_libraries for object libraries
reos-rcrozier Feb 10, 2022
4f4baff
servodyn/CMakeLists.txt: correct servodyn_obj target_link_libraries
reos-rcrozier Feb 10, 2022
6a14d06
Updating CMakeLists to add object libs to install directives to fix e…
reos-rcrozier Feb 11, 2022
2848f6c
top level CMakeLists.txt: add option to use locally built lapack and …
reos-rcrozier Feb 13, 2022
b35ce05
Add external lapack as dependency when USE_LOCAL_STATIC_LAPACK option…
reos-rcrozier Feb 13, 2022
a164971
supercontroller/CMakeLists.txt: add onject libs to install targets
reos-rcrozier Feb 13, 2022
2a793b4
openfast-library/CMakeLists.txt: remove object libraries from target_…
reos-rcrozier Feb 13, 2022
94fd3a7
top level CMakeLists.txt: install downloaded lapack in src dir, not s…
reos-rcrozier Feb 15, 2022
73614b0
Merge branch 'dev' into static-openfast-cmake-obj-libs
reos-rcrozier Mar 9, 2022
221b250
odifications to cmake files to ensure each object file is built only …
reos-rcrozier May 19, 2022
c769488
Add missing map library objects to openfast-library
reos-rcrozier May 19, 2022
54488a2
openfast-cpp/CMakeLists.txt: add OpenMP target link libs if necessary
reos-rcrozier May 23, 2022
af56d52
nwtc-library/CMakeLists.txt: put all nwtcsyslib_matlab_obj link libs …
reos-rcrozier May 23, 2022
36c4dec
openfast-library/CMakeLists.txt: change order of object files
reos-rcrozier May 23, 2022
ae106c5
Merge branch 'dev' into static-openfast-cmake-obj-libs
reos-rcrozier Jan 12, 2023
89d8a83
Solved circular nwtclibs versioninfo dependency and
reos-rcrozier Jan 13, 2023
57dfd99
openfast-library/CMakeLists.txt: correct target_link_libraries for op…
reos-rcrozier Jan 19, 2023
8b1bec3
Use object libraries to avoid missing symbol and linking errors in cp…
reos-rcrozier Jan 19, 2023
ab0d172
Merge branch 'dev' into static-openfast-cmake-obj-libs
reos-rcrozier Jan 20, 2023
4c73cdc
openfast-cpp CMakeLists.txt: ensure fortran implicit libs are linked
reos-rcrozier Jan 24, 2023
1da89df
Merge branch 'static-openfast-cmake-obj-libs' of github.com:REOptimiz…
reos-rcrozier Jan 24, 2023
de00a9e
Restore openfastlib to always be shared
reos-rcrozier Jan 25, 2023
b428af5
Added some comments to CMakeFiles.txt
reos-rcrozier Jan 25, 2023
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
36 changes: 32 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,12 @@ project(OpenFAST CXX C Fortran)

include(${CMAKE_SOURCE_DIR}/cmake/OpenfastCmakeUtils.cmake)
include(${CMAKE_SOURCE_DIR}/cmake/OpenfastFortranOptions.cmake)
include (FindPackageHandleStandardArgs)

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

set(CMAKE_Fortran_MODULE_DIRECTORY ${CMAKE_SOURCE_DIR}/build/ftnmods)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

This already happens in set_fast_fortran() on line 65

@reos-rcrozier reos-rcrozier Mar 9, 2022

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I also realised my comment was wrong when I went to examine this. I'm not yet sure what the issue really is, but I think it might be something to do with the fact that the cmake files now separately specify the target libraries and object libraries. Possibly it need to be changed so the target 'real' libraries all use the object libraries, so cmake doesn't attempt to build the same object twice.


# CMake Configuration variables
if (NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "Release" CACHE STRING
Expand All @@ -38,6 +41,7 @@ option(ORCA_DLL_LOAD "Enable OrcaFlex Library Load" on)
option(BUILD_OPENFAST_CPP_API "Enable building OpenFAST - C++ API" off)
option(BUILD_FASTFARM "Enable building FAST.Farm" off)
option(OPENMP "Enable OpenMP support" off)
option(USE_LOCAL_STATIC_LAPACK "Enable downloading and building static LAPACK and BLAS libs" off)
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
# Configure the default install path to openfast/install
set(CMAKE_INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/install" CACHE PATH "OpenFAST install directory" FORCE)
Expand Down Expand Up @@ -107,10 +111,33 @@ if (MKL_FOUND)
set(BLAS_LIBRARIES ${MKL_LIBRARIES})
set(LAPACK_LIBRARIES ${MKL_LIBRARIES})
set(CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES "ifport;ifcore;imf;svml;m;ipgo;intlc;c;irc_s;dl;c")
else()
find_package(BLAS REQUIRED)
find_package(LAPACK REQUIRED)
endif()
else(MKL_FOUND)
if (USE_LOCAL_STATIC_LAPACK)

message(STATUS "--> Reference LAPACK and BLAS will be downloaded and build as static libraries for linking with openfast")
include(ExternalProject)
ExternalProject_Add(
lapack
URL http://www.netlib.org/lapack/lapack.tgz
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_SOURCE_DIR}/install
PREFIX ${CMAKE_BINARY_DIR}/dependencies
)
if (UNIX)
set(LAPACK_LIBRARIES ${CMAKE_BINARY_DIR}/dependencies/src/lapack-build/lib/liblapack.a ${CMAKE_BINARY_DIR}/dependencies/src/lapack-build/lib/libblas.a CACHE STRING "LAPACK library" FORCE)
else (UNIX) # On Windows
set(LAPACK_LIBRARIES ${CMAKE_BINARY_DIR}/dependencies/src/lapack-build/libliblapack.lib ${CMAKE_BINARY_DIR}/dependencies/src/lapack-build/lib/libblas.lib CACHE STRING "LAPACK library" FORCE)
endif (UNIX)

install(FILES ${LAPACK_LIBRARIES} DESTINATION ${CMAKE_SOURCE_DIR}/install/lib)

else(USE_LOCAL_STATIC_LAPACK)

find_package(BLAS REQUIRED)
find_package(LAPACK REQUIRED)

endif(USE_LOCAL_STATIC_LAPACK)

endif(MKL_FOUND)

# Set the RPATH after configuring the install prefix
include(${CMAKE_SOURCE_DIR}/cmake/set_rpath.cmake)
Expand Down Expand Up @@ -210,3 +237,4 @@ option(BUILD_DOCUMENTATION "Build documentation." OFF)
if(BUILD_DOCUMENTATION)
add_subdirectory(docs)
endif()

94 changes: 89 additions & 5 deletions glue-codes/openfast-cpp/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.12.0")
cmake_policy(SET CMP0074 NEW)
endif()

enable_language(CXX Fortran)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

Expand All @@ -38,26 +40,108 @@ include_directories(${CMAKE_BINARY_DIR}/modules/supercontroller/)
include_directories(${MPI_INCLUDE_PATH})

add_library(openfastcpplib
src/OpenFAST.cpp src/SC.cpp)
src/OpenFAST.cpp
src/SC.cpp
$<TARGET_OBJECTS:openfastlib_common_obj>
$<TARGET_OBJECTS:openfast_prelib_obj>
$<TARGET_OBJECTS:maplib_obj>
$<TARGET_OBJECTS:mapcpplib_obj>
$<TARGET_OBJECTS:nwtcbaselib_obj>
$<TARGET_OBJECTS:nwtcsyslib_obj>
$<TARGET_OBJECTS:nwtclibs_obj>
$<TARGET_OBJECTS:ifwlib_obj>
$<TARGET_OBJECTS:fvwlib_obj>
$<TARGET_OBJECTS:uaaerolib_obj>
$<TARGET_OBJECTS:afinfolib_obj>
$<TARGET_OBJECTS:aeroacoustics_obj>
$<TARGET_OBJECTS:aerodynlib_obj>
$<TARGET_OBJECTS:aerodyn14lib_obj>
$<TARGET_OBJECTS:servodynlib_obj>
$<TARGET_OBJECTS:elastodynlib_obj>
$<TARGET_OBJECTS:beamdynlib_obj>
$<TARGET_OBJECTS:subdynlib_obj>
$<TARGET_OBJECTS:hydrodynlib_obj>
$<TARGET_OBJECTS:orcaflexlib_obj>
$<TARGET_OBJECTS:extptfm_mckflib_obj>
$<TARGET_OBJECTS:openfoamtypeslib_obj>
$<TARGET_OBJECTS:foamfastlib_obj>
$<TARGET_OBJECTS:scdataextypeslib_obj>
$<TARGET_OBJECTS:scdataexlib_obj>
$<TARGET_OBJECTS:feamlib_obj>
$<TARGET_OBJECTS:moordynlib_obj>
$<TARGET_OBJECTS:icedynlib_obj>
$<TARGET_OBJECTS:icefloelib_obj>
$<TARGET_OBJECTS:openfast_postlib_obj>
$<TARGET_OBJECTS:versioninfolib_obj>
)

set_property(TARGET openfastcpplib PROPERTY POSITION_INDEPENDENT_CODE ON)

# note the use of ${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES}. This is to ensure the compiler
# links to the required fortran libraries (e.g. libgfortran). Because the library is
# entirely made up of objects cmake cannot reliably detect that it is a fortran library
# and must be informed of the correct libraries to link to or else there can be undefined
# symbol errors
target_link_libraries(openfastcpplib
openfastlib
openfastlib_common_obj
openfast_prelib_obj
maplib_obj
mapcpplib_obj
nwtcbaselib_obj
nwtcsyslib_obj
nwtclibs_obj
ifwlib_obj
fvwlib_obj
uaaerolib_obj
afinfolib_obj
aeroacoustics_obj
aerodynlib_obj
aerodyn14lib_obj
servodynlib_obj
elastodynlib_obj
beamdynlib_obj
subdynlib_obj
hydrodynlib_obj
orcaflexlib_obj
extptfm_mckflib_obj
openfoamtypeslib_obj
foamfastlib_obj
scdataextypeslib_obj
scdataexlib_obj
feamlib_obj
moordynlib_obj
icedynlib_obj
icefloelib_obj
openfast_postlib_obj
versioninfolib_obj
${HDF5_C_LIBRARIES}
${HDF5_HL_LIBRARIES}
${ZLIB_LIBRARIES}
${LIBXML2_LIBRARIES}
${MPI_LIBRARIES}
${CMAKE_DL_LIBS})
${CMAKE_DL_LIBS}
${CMAKE_Fortran_IMPLICIT_LINK_LIBRARIES}
)

add_executable(openfastcpp src/FAST_Prog.cpp)
target_link_libraries(openfastcpp openfastcpplib openfastlib
target_link_libraries(openfastcpp
openfastcpplib
${MPI_LIBRARIES}
${YAML_CPP_LIBRARIES}
${HDF5_C_LIBRARIES}
${HDF5_HL_LIBRARIES}
${ZLIB_LIBRARIES}
${LIBXML2_LIBRARIES}
${CMAKE_DL_LIBS})
${CMAKE_DL_LIBS}
)

if (OPENMP)
find_package(OpenMP)
if(OpenMP_CXX_FOUND)
target_link_libraries(openfastcpplib OpenMP::OpenMP_CXX)
target_link_libraries(openfastcpp OpenMP::OpenMP_CXX)
endif()
endif(OPENMP)

if(MPI_COMPILE_FLAGS)
set_target_properties(openfastcpp PROPERTIES
Expand Down
50 changes: 48 additions & 2 deletions glue-codes/openfast/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,54 @@ set_property(TARGET openfast PROPERTY LINKER_LANGUAGE Fortran)
include_directories(${CMAKE_SOURCE_DIR}/modules/openfast-library/src/)
include_directories(${CMAKE_BINARY_DIR}/modules/openfoam/)
include_directories(${CMAKE_BINARY_DIR}/modules/supercontroller/)
add_executable(openfast_cpp src/FAST_Prog.cpp src/FastLibAPI.cpp)
target_link_libraries(openfast_cpp openfastlib)

add_executable(openfast_cpp src/FAST_Prog.cpp src/FastLibAPI.cpp
$<TARGET_OBJECTS:openfastlib_common_obj>
$<TARGET_OBJECTS:openfast_prelib_obj>
$<TARGET_OBJECTS:mapcpplib_obj>
$<TARGET_OBJECTS:maplib_obj>
$<TARGET_OBJECTS:nwtcbaselib_obj>
$<TARGET_OBJECTS:nwtcsyslib_obj>
$<TARGET_OBJECTS:nwtclibs_obj>
$<TARGET_OBJECTS:ifwlib_obj>
$<TARGET_OBJECTS:fvwlib_obj>
$<TARGET_OBJECTS:uaaerolib_obj>
$<TARGET_OBJECTS:afinfolib_obj>
$<TARGET_OBJECTS:aeroacoustics_obj>
$<TARGET_OBJECTS:aerodynlib_obj>
$<TARGET_OBJECTS:aerodyn14lib_obj>
$<TARGET_OBJECTS:servodynlib_obj>
$<TARGET_OBJECTS:elastodynlib_obj>
$<TARGET_OBJECTS:beamdynlib_obj>
$<TARGET_OBJECTS:subdynlib_obj>
$<TARGET_OBJECTS:hydrodynlib_obj>
$<TARGET_OBJECTS:orcaflexlib_obj>
$<TARGET_OBJECTS:extptfm_mckflib_obj>
$<TARGET_OBJECTS:openfoamtypeslib_obj>
$<TARGET_OBJECTS:foamfastlib_obj>
$<TARGET_OBJECTS:scdataextypeslib_obj>
$<TARGET_OBJECTS:scdataexlib_obj>
$<TARGET_OBJECTS:feamlib_obj>
$<TARGET_OBJECTS:moordynlib_obj>
$<TARGET_OBJECTS:icedynlib_obj>
$<TARGET_OBJECTS:icefloelib_obj>
$<TARGET_OBJECTS:openfast_postlib_obj>
$<TARGET_OBJECTS:versioninfolib_obj>
)

set_property(TARGET openfast_cpp PROPERTY LINKER_LANGUAGE CXX)

target_link_libraries(openfast_cpp
${LAPACK_LIBRARIES}
${CMAKE_DL_LIBS}
)

if (OPENMP)
find_package(OpenMP)
if(OpenMP_CXX_FOUND)
target_link_libraries(openfast_cpp OpenMP::OpenMP_CXX)
endif()
endif(OPENMP)

string(TOUPPER ${CMAKE_Fortran_COMPILER_ID} _compiler_id)
if (${_compiler_id} STREQUAL "GNU" AND NOT ${VARIABLE_TRACKING})
Expand Down
13 changes: 9 additions & 4 deletions glue-codes/simulink/src/create_FAST_SFunc.m
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@

mexname = 'FAST_SFunc'; % base name of the resulting mex file

built_with_visualStudio = true; %if the libraries were built with cmake, set to false
built_with_visualStudio = false; %if the libraries were built with cmake, set to false


if (ispc && built_with_visualStudio)
Expand Down Expand Up @@ -47,12 +47,12 @@
% If there are shared libraries does it work for outDir to be the local directory?
else
installDir = '../../../install';
outDir = fullfile(installDir, 'lib');
outDir = '.';
end

libDir = fullfile(installDir, 'lib');
includeDir = fullfile(installDir, 'include');
libName = 'openfastlib';
libName = 'openfastlib_mex';
end

%% BUILD COMMAND
Expand All @@ -76,9 +76,14 @@
else % mac/unix

mex('-largeArrayDims', ...
'-v', ... %add this line for "verbose" output (for debugging)
... '-v', ... %add this line for "verbose" output (for debugging)
['-L', libDir], ...
['-l', libName], ...
'-lgfortran', ...
'-lquadmath', ...
'-llapack', ...
'-lblas', ...
'-ldl', ...
['-I', includeDir], ...
'-outdir', outDir, ...
['CFLAGS=$CFLAGS -DS_FUNCTION_NAME=' mexname], ...
Expand Down
30 changes: 23 additions & 7 deletions modules/aerodyn/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -80,23 +80,39 @@ set(ADI_LIB_SOURCES
)

# UnsteadyAero lib
add_library(uaaerolib ${UA_LIBS_SOURCES})
add_library(uaaerolib_obj OBJECT ${UA_LIBS_SOURCES})
target_link_libraries(uaaerolib_obj afinfolib_obj nwtclibs_obj)

add_library(uaaerolib $<TARGET_OBJECTS:uaaerolib_obj>)
target_link_libraries(uaaerolib afinfolib nwtclibs)

# AirfoilInfo lib
add_library(afinfolib ${AFINFO_LIBS_SOURCES})
add_library(afinfolib_obj OBJECT ${AFINFO_LIBS_SOURCES})
target_link_libraries(afinfolib_obj nwtclibs_obj)

add_library(afinfolib $<TARGET_OBJECTS:afinfolib_obj>)
target_link_libraries(afinfolib nwtclibs)

# this lib is only for the ctest
add_library(fvwlib ${FVW_LIBS_SOURCES})
add_library(fvwlib_obj OBJECT ${FVW_LIBS_SOURCES})
target_link_libraries(fvwlib_obj uaaerolib_obj afinfolib_obj nwtclibs_obj)

add_library(fvwlib $<TARGET_OBJECTS:fvwlib_obj>)
target_link_libraries(fvwlib uaaerolib afinfolib nwtclibs)

# Aero acoustics
add_library(aeroacoustics ${AEROACOUSTIC_SOURCES})
add_library(aeroacoustics_obj OBJECT ${AEROACOUSTIC_SOURCES})
target_link_libraries(aeroacoustics_obj afinfolib_obj nwtclibs_obj)

add_library(aeroacoustics $<TARGET_OBJECTS:aeroacoustics_obj>)
target_link_libraries(aeroacoustics afinfolib nwtclibs)

add_library(aerodynlib ${AD_LIBS_SOURCES})
target_link_libraries(aerodynlib fvwlib uaaerolib afinfolib nwtclibs aeroacoustics)

add_library(aerodynlib_obj OBJECT ${AD_LIBS_SOURCES})
target_link_libraries(aerodynlib_obj uaaerolib_obj afinfolib_obj fvwlib_obj aeroacoustics_obj nwtclibs_obj)

add_library(aerodynlib $<TARGET_OBJECTS:aerodynlib_obj> $<TARGET_OBJECTS:uaaerolib_obj> $<TARGET_OBJECTS:afinfolib_obj> $<TARGET_OBJECTS:fvwlib_obj> $<TARGET_OBJECTS:aeroacoustics_obj>)
target_link_libraries(aerodynlib nwtclibs)

# ADI lib
add_library(adilib ${ADI_LIB_SOURCES})
Expand Down Expand Up @@ -133,7 +149,7 @@ if(APPLE OR UNIX)
endif()


install(TARGETS unsteadyaero_driver aerodyn_driver adilib aerodynlib fvwlib uaaerolib afinfolib aeroacoustics aerodyn_inflow_c_binding
install(TARGETS unsteadyaero_driver aerodyn_driver adilib aerodynlib fvwlib uaaerolib afinfolib aeroacoustics aerodyn_inflow_c_binding aerodynlib_obj fvwlib_obj uaaerolib_obj afinfolib_obj aeroacoustics_obj
EXPORT "${CMAKE_PROJECT_NAME}Libraries"
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
Expand Down
7 changes: 5 additions & 2 deletions modules/aerodyn14/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,13 @@ set(AD14_LIBS_SOURCES
src/DWM_Types.f90
)

add_library(aerodyn14lib ${AD14_LIBS_SOURCES})
add_library(aerodyn14lib_obj OBJECT ${AD14_LIBS_SOURCES})
target_link_libraries(aerodyn14lib_obj ifwlib_obj nwtclibs_obj)

add_library(aerodyn14lib $<TARGET_OBJECTS:aerodyn14lib_obj>)
target_link_libraries(aerodyn14lib ifwlib nwtclibs)

install(TARGETS aerodyn14lib
install(TARGETS aerodyn14lib aerodyn14lib_obj
EXPORT "${CMAKE_PROJECT_NAME}Libraries"
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
Expand Down
9 changes: 6 additions & 3 deletions modules/beamdyn/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,13 @@ set(BD_SOURCES
src/BeamDyn_Types.f90
)

add_library(beamdynlib ${BD_SOURCES})
add_library(beamdynlib_obj OBJECT ${BD_SOURCES})
target_link_libraries(beamdynlib_obj nwtclibs_obj)

add_library(beamdynlib $<TARGET_OBJECTS:beamdynlib_obj>)
target_link_libraries(beamdynlib nwtclibs)

install(TARGETS beamdynlib
install(TARGETS beamdynlib beamdynlib_obj
EXPORT "${CMAKE_PROJECT_NAME}Libraries"
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
Expand All @@ -42,7 +45,7 @@ set(BD_DRIVER_SOURCES
add_executable(beamdyn_driver ${BD_DRIVER_SOURCES})
target_link_libraries(beamdyn_driver beamdynlib nwtclibs versioninfolib ${CMAKE_DL_LIBS})

install(TARGETS beamdyn_driver
install(TARGETS beamdyn_driver
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib)
7 changes: 5 additions & 2 deletions modules/elastodyn/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,13 @@ set(ED_SOURCES
src/ElastoDyn_Types.f90
)

add_library(elastodynlib ${ED_SOURCES})
add_library(elastodynlib_obj OBJECT ${ED_SOURCES})
target_link_libraries(elastodynlib_obj servodynlib_obj nwtclibs_obj)

add_library(elastodynlib $<TARGET_OBJECTS:elastodynlib_obj>)
target_link_libraries(elastodynlib servodynlib nwtclibs)

install(TARGETS elastodynlib
install(TARGETS elastodynlib elastodynlib_obj
EXPORT "${CMAKE_PROJECT_NAME}Libraries"
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
Expand Down
Loading