-
Notifications
You must be signed in to change notification settings - Fork 616
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This refactors the cmake setup, modernizing it to a current flavor of cmake and cleaning up the definitions. This also makes the top level folder a "super project", meaning it is including what should be distinct / standalone sub-projects with their own finds that should work. Signed-off-by: Kimball Thurston <kdt3rd@gmail.com>
- Loading branch information
Showing
63 changed files
with
1,287 additions
and
2,070 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,211 +1,75 @@ | ||
|
||
IF (WIN32) | ||
CMAKE_MINIMUM_REQUIRED(VERSION 3.11) | ||
ELSE() | ||
CMAKE_MINIMUM_REQUIRED(VERSION 3.2) | ||
ENDIF() | ||
|
||
# test if we are being built as a standalone library or if | ||
# we are being built as part of the overall project | ||
IF(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR) | ||
IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/cmake) | ||
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_SOURCE_DIR}/cmake) | ||
ELSE() | ||
MESSAGE(FATAL_ERROR "Please compile using the top-level CMakeLists.txt or a pre-built package") | ||
ENDIF() | ||
INCLUDE(OpenEXRVersion) | ||
SET(ILMBASE_STANDALONE ON) | ||
ENDIF() | ||
|
||
SET(ILMBASE_BASEVERSION ${OPENEXR_BASEVERSION}) | ||
SET(ILMBASE_VERSION_MAJOR ${OPENEXR_VERSION_MAJOR}) | ||
SET(ILMBASE_VERSION_MINOR ${OPENEXR_VERSION_MINOR}) | ||
SET(ILMBASE_VERSION_PATCH ${OPENEXR_VERSION_PATCH}) | ||
SET(ILMBASE_VERSION ${OPENEXR_VERSION}) | ||
SET(ILMBASE_VERSION_API ${OPENEXR_VERSION_API}) | ||
|
||
PROJECT(ilmbase VERSION ${ILMBASE_VERSION}) | ||
|
||
IF(ILMBASE_STANDALONE) | ||
INCLUDE(OpenEXRSettings) | ||
ENDIF() | ||
|
||
INCLUDE_DIRECTORIES ( Iex IexMath Imath Half | ||
IlmThread IexTest ImathTest HalfTest | ||
${CMAKE_CURRENT_BINARY_DIR}/config ) | ||
|
||
IF(WIN32) | ||
SET(CMAKE_DEBUG_POSTFIX "_d") | ||
ENDIF() | ||
|
||
# also add the current directory to pick up the autogenerated headers | ||
SET(CMAKE_INCLUDE_CURRENT_DIR ON) | ||
|
||
MACRO(GET_TARGET_PROPERTY_WITH_DEFAULT _variable _target _property _default_value) | ||
GET_TARGET_PROPERTY (${_variable} ${_target} ${_property}) | ||
IF (${_variable} MATCHES NOTFOUND) | ||
SET (${_variable} ${_default_value}) | ||
ENDIF (${_variable} MATCHES NOTFOUND) | ||
ENDMACRO (GET_TARGET_PROPERTY_WITH_DEFAULT) | ||
|
||
MACRO(CREATE_LIBTOOL_FILE _target _install_DIR) | ||
SET(_target_location $<TARGET_FILE:${_target}>) | ||
GET_TARGET_PROPERTY_WITH_DEFAULT(_target_static_lib ${_target} STATIC_LIB "") | ||
GET_TARGET_PROPERTY_WITH_DEFAULT(_target_dependency_libs ${_target} LT_DEPENDENCY_LIBS "") | ||
GET_TARGET_PROPERTY_WITH_DEFAULT(_target_current ${_target} LT_VERSION_CURRENT 0) | ||
GET_TARGET_PROPERTY_WITH_DEFAULT(_target_age ${_target} LT_VERSION_AGE 0) | ||
GET_TARGET_PROPERTY_WITH_DEFAULT(_target_revision ${_target} LT_VERSION_REVISION 0) | ||
GET_TARGET_PROPERTY_WITH_DEFAULT(_target_installed ${_target} LT_INSTALLED yes) | ||
GET_TARGET_PROPERTY_WITH_DEFAULT(_target_shouldnotlink ${_target} LT_SHOULDNOTLINK yes) | ||
GET_TARGET_PROPERTY_WITH_DEFAULT(_target_dlopen ${_target} LT_DLOPEN "") | ||
GET_TARGET_PROPERTY_WITH_DEFAULT(_target_dlpreopen ${_target} LT_DLPREOPEN "") | ||
SET(_laname ${_target}${OPENEXR_LIBSUFFIX}) | ||
SET(_soname ${_laname}) | ||
SET(_laname ${PROJECT_BINARY_DIR}/${_laname}.la) | ||
FILE(WRITE ${_laname} "# ${_laname} - a libtool library file\n") | ||
FILE(APPEND ${_laname} "# Generated by CMake ${CMAKE_VERSION} (like GNU libtool)\n") | ||
FILE(APPEND ${_laname} "\n# Please DO NOT delete this file!\n# It is necessary for linking the library with libtool.\n\n" ) | ||
FILE(APPEND ${_laname} "# The name that we can dlopen(3).\n") | ||
FILE(APPEND ${_laname} "dlname='${_soname}'\n\n") | ||
FILE(APPEND ${_laname} "# Names of this library.\n") | ||
FILE(APPEND ${_laname} "library_names='${_soname}.${_target_current}.${_target_age}.${_target_revision} ${_soname}.${_target_current} ${_soname}'\n\n") | ||
FILE(APPEND ${_laname} "# The name of the static archive.\n") | ||
FILE(APPEND ${_laname} "old_library='${_target_static_lib}'\n\n") | ||
FILE(APPEND ${_laname} "# Libraries that this one depends upon.\n") | ||
FILE(APPEND ${_laname} "dependency_libs='${_target_dependency_libs}'\n\n") | ||
FILE(APPEND ${_laname} "# Names of additional weak libraries provided by this library\n") | ||
FILE(APPEND ${_laname} "weak_library_names=\n\n") | ||
FILE(APPEND ${_laname} "# Version information for ${_laname}.\n") | ||
FILE(APPEND ${_laname} "current=${_target_current}\n") | ||
FILE(APPEND ${_laname} "age=${_target_age}\n") | ||
FILE(APPEND ${_laname} "revision=${_target_revision}\n\n") | ||
FILE(APPEND ${_laname} "# Is this an already installed library?\n") | ||
FILE(APPEND ${_laname} "installed=${_target_installed}\n\n") | ||
FILE(APPEND ${_laname} "# Should we warn about portability when linking against -modules?\n") | ||
FILE(APPEND ${_laname} "shouldnotlink=${_target_shouldnotlink}\n\n") | ||
FILE(APPEND ${_laname} "# Files to dlopen/dlpreopen\n") | ||
FILE(APPEND ${_laname} "dlopen='${_target_dlopen}'\n") | ||
FILE(APPEND ${_laname} "dlpreopen='${_target_dlpreopen}'\n\n") | ||
FILE(APPEND ${_laname} "# Directory that this library needs to be installed in:\n") | ||
FILE(APPEND ${_laname} "libdir='${CMAKE_INSTALL_PREFIX}${_install_DIR}'\n") | ||
INSTALL( FILES ${_laname} DESTINATION ${CMAKE_INSTALL_PREFIX}${_install_DIR}) | ||
ENDMACRO(CREATE_LIBTOOL_FILE) | ||
|
||
ADD_SUBDIRECTORY ( Half ) | ||
ADD_SUBDIRECTORY ( Iex ) | ||
ADD_SUBDIRECTORY ( IexMath ) | ||
ADD_SUBDIRECTORY ( Imath ) | ||
ADD_SUBDIRECTORY ( IlmThread ) | ||
|
||
|
||
########################## | ||
# IlmBaseConfig.h generation | ||
########################## | ||
|
||
# By using a temp file then using configure_file below with copy, we | ||
# avoid constantly updating it (unless a value has changed) | ||
SET(ILMBASE_TMP_CONFIG ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h.in) | ||
IF (WIN32 AND NOT MSYS) | ||
FILE ( WRITE ${ILMBASE_TMP_CONFIG} "#ifdef HAVE_PTHREAD\n" ) | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "# undef HAVE_PTHREAD\n" ) | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#endif\n" ) | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#ifdef HAVE_POSIX_SEMAPHORES\n" ) | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "# undef HAVE_POSIX_SEMAPHORES\n" ) | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#endif\n" ) | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define PLATFORM_WINDOWS 1\n" ) | ||
ELSE () | ||
IF (APPLE) | ||
FILE ( WRITE ${ILMBASE_TMP_CONFIG} "#define HAVE_PTHREAD 1\n" ) | ||
ELSE () | ||
FILE ( WRITE ${ILMBASE_TMP_CONFIG} "#define HAVE_PTHREAD 1\n" ) | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_HAVE_LARGE_STACK 1\n" ) | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define HAVE_POSIX_SEMAPHORES 1\n" ) | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_HAVE_CONTROL_REGISTER_SUPPORT 1\n") | ||
ENDIF () | ||
ENDIF () | ||
|
||
IF (OPENEXR_FORCE_CXX03) | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_FORCE_CXX03 1\n" ) | ||
ELSEIF (NOT WIN32) | ||
# really only care about c++11 right now for the threading bits, but this can be changed to 14 | ||
# when needed... | ||
# Note that the __cplusplus check is not valid under MSVC | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#if __cplusplus < 201103L\n# error \"Modern C++ 11/14 not enabled but force cxx03 not set\"\n#endif\n" ) | ||
ENDIF () | ||
|
||
IF (OPENEXR_NAMESPACE_VERSIONING) | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_INTERNAL_NAMESPACE_CUSTOM 1\n") | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define IMATH_INTERNAL_NAMESPACE Imath_${ILMBASE_VERSION_API}\n") | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define IEX_INTERNAL_NAMESPACE Iex_${ILMBASE_VERSION_API}\n") | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMTHREAD_INTERNAL_NAMESPACE IlmThread_${ILMBASE_VERSION_API}\n") | ||
ELSE () | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_INTERNAL_NAMESPACE_CUSTOM 0\n") | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define IMATH_INTERNAL_NAMESPACE Imath\n") | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define IEX_INTERNAL_NAMESPACE Iex\n") | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMTHREAD_INTERNAL_NAMESPACE IlmThread\n") | ||
ENDIF () | ||
|
||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define IMATH_NAMESPACE Imath\n") | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define IEX_NAMESPACE Iex\n") | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMTHREAD_NAMESPACE IlmThread\n") | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_VERSION_STRING \"${ILMBASE_VERSION}\"\n" ) | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_PACKAGE_STRING \"IlmBase ${ILMBASE_VERSION}\"\n" ) | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_VERSION_MAJOR ${ILMBASE_VERSION_MAJOR}\n" ) | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_VERSION_MINOR ${ILMBASE_VERSION_MINOR}\n" ) | ||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} "#define ILMBASE_VERSION_PATCH ${ILMBASE_VERSION_PATCH}\n" ) | ||
|
||
FILE ( APPEND ${ILMBASE_TMP_CONFIG} " | ||
// Version as a single hex number, e.g. 0x01000300 == 1.0.3 | ||
#define ILMBASE_VERSION_HEX ((ILMBASE_VERSION_MAJOR << 24) | \\ | ||
(ILMBASE_VERSION_MINOR << 16) | \\ | ||
(ILMBASE_VERSION_PATCH << 8)) | ||
") | ||
|
||
CONFIGURE_FILE ( ${ILMBASE_TMP_CONFIG} ${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h COPYONLY ) | ||
FILE ( REMOVE ${ILMBASE_TMP_CONFIG} ) | ||
UNSET ( ILMBASE_TMP_CONFIG ) | ||
|
||
IF ( NOT WIN32 AND OPENEXR_BUILD_SHARED ) | ||
CREATE_LIBTOOL_FILE ( Half /lib ) | ||
CREATE_LIBTOOL_FILE ( Iex /lib ) | ||
CREATE_LIBTOOL_FILE ( IexMath /lib ) | ||
CREATE_LIBTOOL_FILE ( Imath /lib ) | ||
CREATE_LIBTOOL_FILE ( IlmThread /lib ) | ||
ENDIF () | ||
|
||
|
||
# Tests | ||
IF ( ENABLE_TESTS ) | ||
ADD_SUBDIRECTORY ( HalfTest ) | ||
ADD_SUBDIRECTORY ( IexTest ) | ||
ADD_SUBDIRECTORY ( ImathTest ) | ||
ENDIF () | ||
|
||
# Installation | ||
|
||
INSTALL ( FILES | ||
${CMAKE_CURRENT_BINARY_DIR}/config/IlmBaseConfig.h | ||
DESTINATION | ||
include/OpenEXR | ||
) | ||
|
||
IF ( NOT WIN32 ) | ||
FILE ( WRITE ${CMAKE_BINARY_DIR}/IlmBase.pc "prefix=${CMAKE_INSTALL_PREFIX}\n" ) | ||
FILE ( APPEND ${CMAKE_BINARY_DIR}/IlmBase.pc "exec_prefix=\${prefix} | ||
libdir=\${exec_prefix}/lib | ||
includedir=\${prefix}/include | ||
OpenEXR_includedir=\${prefix}/include/OpenEXR | ||
Name: IlmBase | ||
Description: Base math and exception libraries | ||
Version: ${ILMBASE_VERSION} | ||
Libs: -L\${libdir} -lImath${ILMBASE_LIBSUFFIX} -lIexMath${ILMBASE_LIBSUFFIX} -lHalf${ILMBASE_LIBSUFFIX} -lIex${ILMBASE_LIBSUFFIX} -lIlmThread${ILMBASE_LIBSUFFIX} -pthread | ||
Cflags: -pthread -I\${OpenEXR_includedir} | ||
") | ||
|
||
INSTALL ( FILES | ||
${CMAKE_BINARY_DIR}/IlmBase.pc | ||
DESTINATION | ||
lib/pkgconfig | ||
) | ||
ENDIF() | ||
# "More Modern" CMake version | ||
cmake_minimum_required(VERSION 3.12) | ||
|
||
# this is for target_sources, new policy converts relative paths to absolute | ||
cmake_policy(SET CMP0076 NEW) | ||
|
||
# we include this first to parse configure.ac and extract the version | ||
# numbers | ||
include(config/ParseConfigure.cmake) | ||
|
||
#set up our project | ||
project(IlmBase VERSION ${ILMBASE_VERSION} LANGUAGES C CXX) | ||
|
||
####################################### | ||
####################################### | ||
# This declares all the configuration variables visible | ||
# in cmake-gui or similar and the rest of the global | ||
# project setup | ||
# | ||
# Please look at this file to see what is configurable | ||
####################################### | ||
####################################### | ||
include(config/IlmBaseSetup.cmake) | ||
|
||
# generates config headers, package config files | ||
add_subdirectory(config) | ||
|
||
# utility function for the repeated boilerplate of defining | ||
# the libraries | ||
include(config/LibraryDefine.cmake) | ||
|
||
add_subdirectory( Half ) | ||
add_subdirectory( Iex ) | ||
add_subdirectory( IexMath ) | ||
add_subdirectory( Imath ) | ||
add_subdirectory( IlmThread ) | ||
|
||
# Can't seem to do EXCLUDE_FROM_ALL on the test executables | ||
# since you can't then create a dependency on the internal | ||
# "test" target such that it is auto built | ||
option(ILMBASE_ENABLE_TESTS "Enables building of tests" ON) | ||
if(ILMBASE_ENABLE_TESTS) | ||
enable_testing() | ||
# TODO: | ||
#include(CTest) | ||
#set(CTEST_PROJECT_NAME "OpenEXR - IlmBase") | ||
#set(CTEST_NIGHTLY_START_TIME "01:01:01 UTC") | ||
#set(CTEST_DROP_METHOD "http") # there are others... | ||
#set(CTEST_DROP_SITE "open.cdash.org") | ||
#set(CTEST_DROP_LOCATION "/submit.php?project=MyProject") | ||
#set(CTEST_DROP_SITE_CDASH TRUE) | ||
# | ||
# Then can make a ctest script that has something like the following | ||
# in it: | ||
# set(CTEST_SOURCE_DIRECTORY "/source") | ||
# set(CTEST_BINARY_DIRECTORY "/binary") | ||
# | ||
# set(ENV{CXXFLAGS} "--coverage") | ||
# set(CTEST_CMAKE_GENERATOR "Ninja") | ||
# set(CTEST_USE_LAUNCHERS 1) | ||
# set(CTEST_COVERAGE_COMMAND "gcov") | ||
# set(CTEST_MEMORYCHECK_COMMAND "valgrind") | ||
# #set(CTEST_MEMORYCHECK_TYPE "ThreadSanitizer") | ||
# ctest_start("Continuous") | ||
# ctest_configure() | ||
# ctest_build() | ||
# ctest_test() | ||
# ctest_coverage() | ||
# ctest_memcheck() | ||
# ctest_submit() | ||
|
||
add_subdirectory( HalfTest ) | ||
add_subdirectory( IexTest ) | ||
add_subdirectory( ImathTest ) | ||
endif() |
Oops, something went wrong.