Files
ResInsight/ThirdParty/custom-opm-common/CMakeLists.txt
Magne Sjaastad 3f08901379 Use updated opm-common
* Update opm-common submodule and use branch development https://github.com/CeetronSolutions/opm-common/tree/development

* Add cmake-format of ThirdParty/custom-opm-common/CMakeLists.txt

* Add boost-test

* Update generated files and simplify CMake configuration

Add -D_USE_MATH_DEFINES to CMake to avoid multiple local defines
Introduce flag CREATE_OPM_COMMON_KEYWORDS used to generate C++ files JSON files. This enables use also in MSVC. Remove obsolete direct include of source files.

* Update generated ESMRY test file

There was a invalid extra : postfix for some keywords like NEWTON and other N* keywords. When creating ESRMY using updated opm-common fix this issue.

* Update URL for custom-opm-common
2025-01-22 08:34:46 +01:00

121 lines
3.9 KiB
CMake

if(CMAKE_VERSION VERSION_LESS 3.8)
message(WARNING "CMake version does not support c++17, guessing -std=c++17")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
else()
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
endif()
if(MSVC)
add_definitions(
"/wd4996 /wd4244 /wd4267 /wd4101 /wd4477 /wd4661 -D_USE_MATH_DEFINES"
)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP /permissive-")
endif(MSVC)
if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} -Wno-unused-parameter -Wno-switch -Wno-sign-compare -Wno-deprecated-copy -Wno-missing-field-initializers"
)
endif()
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(CMAKE_CXX_FLAGS
"${CMAKE_CXX_FLAGS} -Wno-sign-compare -Wno-missing-field-initializers -Wno-deprecated-copy"
)
endif()
# Set defines to include required files for ResInsight. Make sure that these
# defines are set before including the opm-common CMakeLists
set(ENABLE_ECL_INPUT true)
set(ENABLE_ECL_OUTPUT true)
set(BUILD_TESTING false)
set(ENABLE_MOCKSIM false)
set(OPM_ENABLE_PYTHON false)
set(OPM_INSTALL_PYTHON false)
set(OPM_ENABLE_EMBEDDED_PYTHON false)
set(OPM_ENABLE_DUNE false)
set(BUILD_EXAMPLES false)
if(CREATE_OPM_COMMON_KEYWORDS)
# In ResInsight, we need a subset of the files in opm-common. We also need to
# generate the keywords. The flag CREATE_OPM_COMMON_KEYWORDS is set in the
# main CMakeLists.txt file. When this flag is set, the opm-common is added to
# the solution. Build a test target to trigger the c++ code generation using
# the tool genkw, use CarfinTest.exe Copy files generated code from
# build/ThirdParty/custom-opm-common/opm-common: copy ParserInit.cpp and
# config.h to source folder ThirdParty/custom-opm-common/generated-opm-common/
# copy the folders "ParserKeywords" and "include" to source folder
# ThirdParty/custom-opm-common/generated-opm-common/
add_subdirectory(opm-common)
message(
STATUS
"opm-common is added to the solution used to create keywords from JSON files"
)
else(CREATE_OPM_COMMON_KEYWORDS)
project(custom-opm-common)
find_package(Boost)
list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/opm-common/cmake/Modules)
if(NOT cjson_FOUND)
include(DownloadCjson)
endif()
include_directories(${cjson_SOURCE_DIR})
list(APPEND opm-common_SOURCES ${cjson_SOURCE_DIR}/cJSON.c)
include_directories(
opm-common generated-opm-common generated-opm-common/include
)
add_definitions(-DFMT_HEADER_ONLY)
include_directories(SYSTEM ../fmtlib/include)
include(opm-common/CMakeLists_files.cmake)
set(opm_parser_source_files_short_path ${MAIN_SOURCE_FILES})
foreach(file ${opm_parser_source_files_short_path})
list(APPEND opm_parser_source_files_long_path "opm-common/${file}")
endforeach()
set(opm_parser_source_files ${opm_parser_source_files_long_path}
${opm_parser_generated_source_files}
)
# Add generated files These files are generated by the parser generator genkw
file(GLOB ALL_FILES_IN_FOLDER generated-opm-common/ParserKeywords/*.cpp)
list(APPEND opm-common_SOURCES ${ALL_FILES_IN_FOLDER})
list(APPEND opm-common_SOURCES generated-opm-common/ParserInit.cpp)
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9.0)
list(APPEND ADDITIONAL_LINK_LIBRARIES stdc++fs)
endif()
endif()
add_library(
${PROJECT_NAME} STATIC ${opm_parser_source_files_long_path}
${opm-common_SOURCES}
)
find_path(BOOST_SPIRIT_INCLUDE_DIRS "boost/spirit.hpp"
HINTS ${Boost_INCLUDE_DIRS}
)
target_link_libraries(custom-opm-common ${ADDITIONAL_LINK_LIBRARIES})
target_include_directories(
custom-opm-common
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/opm-common
${CMAKE_CURRENT_SOURCE_DIR}/generated-opm-common/include
PRIVATE ${BOOST_SPIRIT_INCLUDE_DIRS}
)
endif(CREATE_OPM_COMMON_KEYWORDS)