# --------------------------------------------------------------------------
# ======== |
# \ / F ield | foam-extend: Open Source CFD
# \ / O peration | Version: 4.1
# \ / A nd | Web: http://www.foam-extend.org
# \/ M anipulation | For copyright notice see file Copyright
# --------------------------------------------------------------------------
# License
# This file is part of foam-extend.
#
# foam-extend is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or {at your
# option} any later version.
#
# foam-extend is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with foam-extend. If not, see .
#
# Description
# CMakeLists.txt file for libraries and applications
#
# Author
# Henrik Rusche, Wikki GmbH, 2017. All rights reserved
#
#
# --------------------------------------------------------------------------
add_custom_target(ImportMessage
${CMAKE_COMMAND} -E cmake_echo_color --red --bold
"Using FOAM ${FOAM_VERSION} in ${CMAKE_CURRENT_LIST_DIR}"
)
function(add_foam_library lib)
set(options USERSPACE)
set(oneValueArgs "")
set(multiValueArgs "")
cmake_parse_arguments(AFL "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
# Create target for lnInclude and use it
include_directories(lnInclude)
add_custom_command(
OUTPUT lnInclude/uptodate
DEPENDS CMakeLists.txt
COMMAND rm -rf lnInclude
COMMAND wmakeLnInclude .
COMMAND touch lnInclude/uptodate
)
add_custom_target(${lib}_lnInclude DEPENDS lnInclude/uptodate)
if(${AFL_USERSPACE})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY $ENV{FOAM_USER_LIBBIN})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $ENV{FOAM_USER_APPBIN})
endif()
# Add the library to the targets and set include paths
add_library(${lib} ${AFL_UNPARSED_ARGUMENTS})
add_dependencies(${lib} ${lib}_lnInclude)
target_include_directories(${lib} PUBLIC
$
$
)
# Install library and headers to install location
install(TARGETS ${lib} DESTINATION lib EXPORT FOAMTargets)
file(GLOB _files FOLLOW_SYMLINKS "${CMAKE_CURRENT_SOURCE_DIR}/lnInclude/*")
set (_resolvedFiles "")
foreach (_file ${_files})
get_filename_component(_resolvedFile "${_file}" REALPATH)
list (APPEND _resolvedFiles "${_resolvedFile}")
endforeach()
install(FILES ${_resolvedFiles} DESTINATION include/${lib})
# Export target to include them from externals builds to build location
export(TARGETS ${lib} APPEND FILE ${CMAKE_BINARY_DIR}/cmake/FOAMTargets.cmake)
#generate_export_header(${lib})
set_property(TARGET ${lib} PROPERTY VERSION ${FOAM_VERSION})
set_property(TARGET ${lib} PROPERTY SOVERSION 3)
set_property(TARGET ${lib} PROPERTY INTERFACE_FOAM_MAJOR_VERSION 4)
set_property(TARGET ${lib} APPEND PROPERTY
COMPATIBLE_INTERFACE_STRING FOAM_MAJOR_VERSION
)
if(NOT DEFINED HAVE_FOAM)
add_dependencies(${lib} ImportMessage)
endif()
endfunction()
function(add_foam_executable exe)
set(options USERSPACE)
set(oneValueArgs "")
set(multiValueArgs DEPENDS SOURCES)
cmake_parse_arguments(AFE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
if(${AFE_USERSPACE})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY $ENV{FOAM_USER_LIBBIN})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY $ENV{FOAM_USER_APPBIN})
endif()
add_executable(${exe} ${AFE_SOURCES})
target_link_libraries(${exe}
"-Xlinker --add-needed -Xlinker --no-as-needed"
)
target_link_libraries(${exe} ${AFE_DEPENDS})
install (TARGETS ${exe} DESTINATION bin)
if(NOT DEFINED HAVE_FOAM)
add_dependencies(${exe} ImportMessage)
endif()
endfunction()