2012-11-14 12:45:48 +01:00
|
|
|
# -*- mode: cmake; tab-width: 2; indent-tabs-mode: t; truncate-lines: t; compile-command: "cmake -Wdev" -*-
|
|
|
|
|
# vim: set filetype=cmake autoindent tabstop=2 shiftwidth=2 noexpandtab softtabstop=2 nowrap:
|
|
|
|
|
cmake_minimum_required (VERSION 2.8)
|
|
|
|
|
project (opm-core)
|
2012-11-15 11:36:50 +01:00
|
|
|
set (opm-core_MAJOR_VERSION 0)
|
|
|
|
|
set (opm-core_MINOR_VERSION 3)
|
2012-11-14 12:45:48 +01:00
|
|
|
enable_language (CXX)
|
|
|
|
|
|
2012-11-29 21:22:40 +01:00
|
|
|
# build debug by default
|
|
|
|
|
if (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
|
|
|
|
set (CMAKE_BUILD_TYPE "Debug")
|
|
|
|
|
endif (NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
|
|
|
|
|
message (STATUS "Build type: ${CMAKE_BUILD_TYPE}")
|
|
|
|
|
|
2012-11-14 12:45:48 +01:00
|
|
|
# all public header files are together with the source
|
|
|
|
|
set (opm-core_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}")
|
|
|
|
|
|
2012-11-14 12:46:35 +01:00
|
|
|
# additional search modules
|
|
|
|
|
list (APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/Modules")
|
|
|
|
|
|
2012-11-28 10:44:54 +01:00
|
|
|
# macro to set standard variables (INCLUDE_DIRS, LIBRARIES etc.)
|
|
|
|
|
include (UseOpmFind)
|
|
|
|
|
|
2012-11-16 14:40:54 +01:00
|
|
|
# compile with C++0x/11 support if available
|
|
|
|
|
find_package (CXX11Features REQUIRED)
|
|
|
|
|
|
2012-11-29 12:36:29 +01:00
|
|
|
# put debug information into every executable
|
|
|
|
|
include (UseDebugSymbols)
|
|
|
|
|
|
2012-11-29 13:09:56 +01:00
|
|
|
# optimize full if we're not doing a debug build
|
|
|
|
|
include (UseOptimization)
|
|
|
|
|
|
2012-11-29 13:12:13 +01:00
|
|
|
# turn on all warnings
|
|
|
|
|
include (UseWarnings)
|
|
|
|
|
|
2012-11-16 23:21:04 +01:00
|
|
|
# blas/lapack
|
|
|
|
|
find_and_append_package (BLAS REQUIRED)
|
|
|
|
|
find_and_append_package (LAPACK REQUIRED)
|
|
|
|
|
|
2012-11-26 00:19:27 +01:00
|
|
|
# Tim Davis' SuiteSparse archive
|
|
|
|
|
find_and_append_package (SuiteSparse COMPONENTS umfpack)
|
|
|
|
|
|
2012-11-22 12:18:50 +01:00
|
|
|
# SuperLU
|
|
|
|
|
find_and_append_package (SUPERLU)
|
|
|
|
|
|
2012-11-16 23:29:08 +01:00
|
|
|
# xml processing (for config parsing)
|
|
|
|
|
find_and_append_package (LibXml2 REQUIRED)
|
|
|
|
|
|
2012-11-17 00:36:54 +01:00
|
|
|
# various runtime library enhancements
|
|
|
|
|
find_and_append_package (Boost 1.39.0
|
|
|
|
|
COMPONENTS date_time filesystem system unit_test_framework REQUIRED)
|
2012-11-23 13:44:32 +01:00
|
|
|
include (UseDynamicBoost)
|
2012-11-17 00:36:54 +01:00
|
|
|
|
2012-11-25 20:38:55 +01:00
|
|
|
# DUNE dependency
|
|
|
|
|
find_and_append_package (dune-istl)
|
|
|
|
|
|
2012-11-14 12:45:48 +01:00
|
|
|
# put libraries in lib/
|
|
|
|
|
set (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/lib")
|
2012-11-25 23:05:57 +01:00
|
|
|
set (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/bin")
|
2012-11-14 12:45:48 +01:00
|
|
|
|
|
|
|
|
# find all the source code
|
|
|
|
|
file (GLOB_RECURSE opm-core_SOURCES "opm/*.c" "opm/*.cpp")
|
|
|
|
|
|
2012-11-14 12:51:19 +01:00
|
|
|
# these files are provided in source control, but can only compile with Matlab
|
|
|
|
|
# available
|
|
|
|
|
list (REMOVE_ITEM opm-core_SOURCES
|
|
|
|
|
${PROJECT_SOURCE_DIR}/opm/core/grid/cpgpreprocess/mxgrdecl.c
|
|
|
|
|
${PROJECT_SOURCE_DIR}/opm/core/grid/cpgpreprocess/processgrid.c
|
|
|
|
|
${PROJECT_SOURCE_DIR}/opm/core/utility/parameters/tinyxml/xmltest.cpp
|
|
|
|
|
${PROJECT_SOURCE_DIR}/opm/core/linalg/LinearSolverAGMG.cpp
|
|
|
|
|
)
|
|
|
|
|
|
2012-11-14 12:46:35 +01:00
|
|
|
# we don't try to find any of these
|
|
|
|
|
set (HAVE_AGMG 0)
|
|
|
|
|
set (HAVE_ERT)
|
|
|
|
|
|
|
|
|
|
# create configuration header which describes available features
|
|
|
|
|
# necessary to compile this library
|
|
|
|
|
include (UseConfigVars)
|
|
|
|
|
list (APPEND opm-core_CONFIG_VARS
|
|
|
|
|
"HAVE_AGMG"
|
|
|
|
|
"HAVE_DUNE_ISTL"
|
|
|
|
|
"HAVE_DYNAMIC_BOOST_TEST"
|
|
|
|
|
"HAVE_ERT"
|
|
|
|
|
"HAVE_SUITESPARSE_UMFPACK_H"
|
2012-11-16 14:40:54 +01:00
|
|
|
"/* C++0x/11 support */"
|
|
|
|
|
"HAVE_NULLPTR"
|
|
|
|
|
"HAVE_STATIC_ASSERT"
|
2012-11-14 12:46:35 +01:00
|
|
|
)
|
|
|
|
|
configure_vars (
|
|
|
|
|
FILE "${PROJECT_BINARY_DIR}/config.h"
|
|
|
|
|
WRITE ${opm-core_CONFIG_VARS}
|
|
|
|
|
)
|
|
|
|
|
|
2012-11-28 10:44:54 +01:00
|
|
|
# some CMake properties do not do list expansion
|
|
|
|
|
list (REMOVE_DUPLICATES opm-core_LINKER_FLAGS)
|
|
|
|
|
string (REPLACE ";" " " opm-core_LINKER_FLAGS_STR "${opm-core_LINKER_FLAGS}")
|
|
|
|
|
remove_duplicate_libraries (opm-core)
|
|
|
|
|
|
2012-11-14 12:45:48 +01:00
|
|
|
# create this library
|
|
|
|
|
include_directories (${opm-core_INCLUDE_DIRS})
|
2012-11-30 12:59:08 +01:00
|
|
|
link_directories (${opm-core_LIBRARY_DIRS})
|
2012-11-28 10:44:54 +01:00
|
|
|
add_definitions (${opm-core_DEFINITIONS})
|
2012-11-14 12:45:48 +01:00
|
|
|
add_library (opmcore SHARED ${opm-core_SOURCES})
|
2012-11-15 11:36:50 +01:00
|
|
|
set_target_properties (opmcore PROPERTIES
|
|
|
|
|
SOVERSION ${opm-core_MAJOR_VERSION}
|
|
|
|
|
VERSION ${opm-core_MAJOR_VERSION}.${opm-core_MINOR_VERSION}
|
2012-11-28 10:44:54 +01:00
|
|
|
LINK_FLAGS "${opm-core_LINKER_FLAGS_STR}"
|
2012-11-15 11:36:50 +01:00
|
|
|
)
|
2012-11-28 10:44:54 +01:00
|
|
|
target_link_libraries (opmcore ${opm-core_LIBRARIES})
|
2012-11-25 23:05:57 +01:00
|
|
|
|
2012-11-29 12:36:29 +01:00
|
|
|
# queue this executable to be stripped
|
|
|
|
|
strip_debug_symbols (LIBRARY opmcore)
|
|
|
|
|
|
2012-11-29 22:50:19 +01:00
|
|
|
# write configuration file to locate library
|
|
|
|
|
set (opm-core_VERSION "${opm-core_MAJOR_VERSION}.${opm-core_MINOR_VERSION}")
|
|
|
|
|
configure_file (
|
|
|
|
|
${PROJECT_SOURCE_DIR}/opm-core-config.cmake.in
|
|
|
|
|
${PROJECT_BINARY_DIR}/opm-core-config.cmake
|
|
|
|
|
@ONLY
|
|
|
|
|
)
|
|
|
|
|
|
2012-11-25 23:05:57 +01:00
|
|
|
### test programs ###
|
|
|
|
|
|
|
|
|
|
# find the source code
|
|
|
|
|
file (GLOB_RECURSE tests_SOURCES "tests/*.c" "tests/*.cpp")
|
|
|
|
|
|
2012-11-25 23:06:39 +01:00
|
|
|
# conditionally disable tests when features aren't available
|
|
|
|
|
macro (cond_disable_test name)
|
|
|
|
|
if ((NOT DEFINED ${HAVE_${name}}) OR (NOT ${HAVE_${name}}))
|
|
|
|
|
message (STATUS "${name} test disabled, since ${name} is not found.")
|
|
|
|
|
string (TOLOWER "${name}" name_lower)
|
|
|
|
|
get_filename_component (test_${name}_FILE "tests/test_${name_lower}.cpp" ABSOLUTE)
|
|
|
|
|
list (REMOVE_ITEM tests_SOURCES "${test_${name}_FILE}")
|
|
|
|
|
endif ((NOT DEFINED ${HAVE_${name}}) OR (NOT ${HAVE_${name}}))
|
|
|
|
|
endmacro (cond_disable_test name)
|
|
|
|
|
cond_disable_test ("AGMG")
|
|
|
|
|
cond_disable_test ("ERT")
|
|
|
|
|
|
2012-11-25 23:05:57 +01:00
|
|
|
# compile each of these separately
|
|
|
|
|
foreach (test_FILE IN LISTS tests_SOURCES)
|
|
|
|
|
get_filename_component (test_NAME "${test_FILE}" NAME_WE)
|
|
|
|
|
add_executable (${test_NAME} ${test_FILE})
|
|
|
|
|
set_target_properties (${test_NAME} PROPERTIES
|
|
|
|
|
LINK_FLAGS "${opm-core_LINKER_FLAGS_STR}"
|
|
|
|
|
)
|
|
|
|
|
target_link_libraries (${test_NAME} opmcore ${opm-core_LIBRARIES})
|
2012-11-29 12:36:29 +01:00
|
|
|
strip_debug_symbols (RUNTIME ${test_NAME})
|
2012-11-25 23:05:57 +01:00
|
|
|
endforeach (test_FILE)
|