diff --git a/CMakeLists.txt b/CMakeLists.txt index cf691d70ac8eaa6a8aae9731a4f01979bb9f335a..cd427a91191a55ca71365b5db2a82a23718074a4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,31 +55,40 @@ set(CMAKE_CXX_STANDARD_REQUIRED True) include(CMakeDependentOption) -# Setup shared library / -fPIC stuff +# Setup shared library defaults. If explicitly specified somehow, then default +# to that. Otherwise base the default on whether or not shared libs are even +# supported. get_property(SHARED_LIBS_SUPPORTED GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS) -if(DEFINED BUILD_SHARED_LIBS) - set(ADIOS2_BUILD_SHARED_LIBS_DEFAULT ${BUILD_SHARED_LIBS}) -elseif(DEFINED ADIOS2_BUILD_SHARED_LIBS) +if(DEFINED ADIOS2_BUILD_SHARED_LIBS) set(ADIOS2_BUILD_SHARED_LIBS_DEFAULT ${ADIOS2_BUILD_SHARED_LIBS}) +elseif(DEFINED BUILD_SHARED_LIBS) + set(ADIOS2_BUILD_SHARED_LIBS_DEFAULT ${BUILD_SHARED_LIBS}) else() set(ADIOS2_BUILD_SHARED_LIBS_DEFAULT ${SHARED_LIBS_SUPPORTED}) endif() -unset(BUILD_SHARED_LIBS) -option(ADIOS2_BUILD_SHARED_LIBS "Build shared libraries (so/dylib/dll)." ${ADIOS2_BUILD_SHARED_LIBS}) +cmake_dependent_option(ADIOS2_BUILD_SHARED_LIBS + "Build shared libraries (so/dylib/dll)." ${ADIOS2_BUILD_SHARED_LIBS_DEFAULT} + "SHARED_LIBS_SUPPORTED" OFF +) set(BUILD_SHARED_LIBS ${ADIOS2_BUILD_SHARED_LIBS}) -if(NOT SHARED_LIBS_SUPPORTED) - if(BUILD_SHARED_LIBS) - message(WARNING "A shared library build was requested but is not supported on this platform / compiler. Unexpected build results will likely occur") - endif() - set(BUILD_SHARED_LIBS OFF) +mark_as_advanced(BUILD_SHARED_LIBS) + +# Setup PIC defaults. If explicitly specified somehow, then default +# to that. Otherwise base the default on whether or not shared libs are even +# supported. +if(DEFINED ADIOS2_ENABLE_PIC) + set(ADIOS2_ENABLE_PIC_DEFAULT ${ADIOS2_ENABLE_PIC}) +elseif(DEFINED CMAKE_POSITION_INDEPENDENT_CODE) + set(ADIOS2_ENABLE_PIC_DEFAULT ${CMAKE_POSITION_INDEPENDENT_CODE}) +else() + set(ADIOS2_ENABLE_PIC_DEFAULT ${SHARED_LIBS_SUPPORTED}) endif() - cmake_dependent_option(ADIOS2_ENABLE_PIC - "Build with Position Independent Code" ON - "SHARED_LIBS_SUPPORTED" OFF) -if(ADIOS2_ENABLE_PIC) - set(CMAKE_POSITION_INDEPENDENT_CODE ON) -endif() + "Build with Position Independent Code" ${ADIOS2_ENABLE_PIC_DEFAULT} + "SHARED_LIBS_SUPPORTED" OFF +) +set(CMAKE_POSITION_INDEPENDENT_CODE ${ADIOS2_ENABLE_PIC}) +mark_as_advanced(CMAKE_POSITION_INDEPENDENT_CODE) adios_option(BZip2 "Enable support for BZip2 transforms" AUTO) adios_option(ZFP "Enable support for ZFP transforms" AUTO) @@ -162,10 +171,13 @@ message("") message(" Installation prefix: ${CMAKE_INSTALL_PREFIX}") message(" Features:") if(BUILD_SHARED_LIBS) - message(" Library Type: shared") + set(msg_lib_type "shared") +elseif(CMAKE_POSITION_INDEPENDENT_CODE) + set(msg_lib_type "static (with PIC)") else() - message(" Library Type: static") + set(msg_lib_type "static (without PIC)") endif() +message(" Library Type: ${msg_lib_type}") message(" Build Type: ${CMAKE_BUILD_TYPE}") message(" Testing: ${BUILD_TESTING}") message(" Build Options:") diff --git a/bindings/python/CMakeLists.txt b/bindings/python/CMakeLists.txt index 8403e7306894667f7b63a93f844a4562d938d0d3..90d030a55245ad5ee4e0d691a093d6e160567fa7 100644 --- a/bindings/python/CMakeLists.txt +++ b/bindings/python/CMakeLists.txt @@ -1,7 +1,3 @@ -if(NOT BUILD_SHARED_LIBS) - message(ERROR "Python bindings are only supported for shared libraries") -endif() - set(Python_ADDITIONAL_VERSIONS 3 2.7) find_package(PythonInterp REQUIRED) find_package(PythonLibsNew REQUIRED) diff --git a/cmake/DetectOptions.cmake b/cmake/DetectOptions.cmake index a484a5957f7c862b724cd102639b6339e7460c98..5022c676d3c31fe1dbaa82907f0ec9b72417a614 100644 --- a/cmake/DetectOptions.cmake +++ b/cmake/DetectOptions.cmake @@ -94,7 +94,7 @@ list(INSERT CMAKE_MODULE_PATH 0 "${ADIOS2_SOURCE_DIR}/thirdparty/pybind11/pybind11/tools" ) if(ADIOS2_USE_Python STREQUAL AUTO) - if(BUILD_SHARED_LIBS) + if(SHARED_LIBS_SUPPORTED AND ADIOS2_ENABLE_PIC) set(Python_ADDITIONAL_VERSIONS 3 2.7) find_package(PythonInterp) find_package(PythonLibsNew)