Skip to content

Commit

Permalink
Fixes to allow xmsgrid to build using CMake only
Browse files Browse the repository at this point in the history
  • Loading branch information
kwryankrattiger committed Apr 30, 2021
1 parent a7b0058 commit cc86271
Show file tree
Hide file tree
Showing 3 changed files with 98 additions and 37 deletions.
22 changes: 22 additions & 0 deletions CMake/xmsgrid-config.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Import the XMS::Grid target
find_package(Boost QUIET REQUIRED log_setup log system filesystem serialization timer)
include(${CMAKE_CURRENT_LIST_DIR}/xmsgrid-targets.cmake)

# Get the root installation dir
get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
if(_IMPORT_PREFIX STREQUAL "/")
set(_IMPORT_PREFIX "")
endif()

include(GNUInstallDirs)

# Set the FindXMSCore variables
set(XMSGrid_FOUND ${XMSCore_FOUND})
set(XMSGrid_PREFIX ${CMAKE_CURRENT_LIST_DIR})
set(XMSGrid_LIBRARY_DIRS "${_IMPORT_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
set(XMSGrid_INCLUDE_DIRS "${_IMPORT_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}")
set(XMSGrid_LIBRARIES XMS::Grid;XMS::Core)
set(XMSGrid_VERSION 5.2.0)
107 changes: 75 additions & 32 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,61 @@ cmake_minimum_required(VERSION 3.1.2)
cmake_policy(SET CMP0015 NEW) # Link Directory Pathing
set(CMAKE_DEBUG_POSTFIX _d)


if (APPLE OR WIN32)
# Target C++17 on MacOS and Windows. If building with version of Visual Studio without
# support, has no effect.
set(CMAKE_CXX_STANDARD 17)
else()
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD 14)
endif()
message("CMAKE_CXX_STANDARD: ${CMAKE_CXX_STANDARD}")

if (APPLE)
set(CMAKE_POSITION_INDEPENDENT_CODE False)
else()
set(CMAKE_POSITION_INDEPENDENT_CODE True)
endif()

project(xmsgridlib C CXX)
project(xmsgrid C CXX)

set(BUILD_TESTING NO CACHE BOOL "Enable/Disable testing")
set(IS_CONDA_BUILD NO CACHE BOOL "Set this if you want to make a conda package.")
set(PYTHON_TARGET_VERSION 3.6 CACHE STRING "Version of python to link to for python wrapping.")
include(GNUInstallDirs)

set(BUILD_SHARED_LIBS OFF CACHE BOOL "Enable/Disable building shared libraries")
set(BUILD_TESTING OFF CACHE BOOL "Enable/Disable testing")
set(XMS_BUILD_MODE "CONAN" CACHE STRING "Target packing system to build for.")
set_property(CACHE XMS_BUILD_MODE PROPERTY STRINGS "CONAN;CONDA;CMAKE")
set(XMS_BUILD NO CACHE BOOL "Set this if you want to use this package with XMS.")
set(CONDA_PREFIX "" CACHE PATH "Path to the conda environment used to build.")
set(IS_PYTHON_BUILD NO CACHE BOOL "Set this if you want to build the python bindings.")
set(ENABLE_PYTHON OFF CACHE BOOL "Set this if you want to build the python bindings.")
set(PYTHON_TARGET_VERSION 3.6 CACHE STRING "Version of python to link to for python wrapping.")
set(XMS_TEST_PATH ${PROJECT_SOURCE_DIR}/test_files/ CACHE PATH "Path to test files for testing")
set(XMS_VERSION "\"99.99.99\"" CACHE STRING "Library Version")
set(XMS_VERSION "5.2.0" CACHE STRING "Library Version")

add_definitions(-DXMS_VERSION=\"${XMS_VERSION}\")

if(IS_CONDA_BUILD)
if (XMS_BUILD_MODE STREQUAL "CMAKE")
if (BUILD_SHARED_LIBS)
set(Boost_USE_STATIC_LIBS OFF)
else ()
set(Boost_USE_STATIC_LIBS ON)
endif ()
find_package(Boost QUIET REQUIRED log_setup log system filesystem serialization timer)
find_package(XMSCore REQUIRED
NAMES xms xmscore)
list(APPEND EXT_INCLUDE_DIRS ${XMSCore_INCLUDE_DIRS};${Boost_INCLUDE_DIRS})
list(APPEND EXT_LIB_DIRS ${XMSCore_LIBRARY_DIRS};${Boost_LIBRARY_DIRS})
list(APPEND EXT_LIBS ${XMSCore_LIBRARIES};${Boost_LIBRARIES};z)
elseif (XMS_BUILD_MODE STREQUAL "CONDA")
include(${CMAKE_CURRENT_LIST_DIR}/condabuildinfo.cmake)
else() # If we are not using conda, we are using conan
else () # If we are using conan
# Conan setup
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup(TARGETS)
set(EXT_INCLUDE_DIRS ${CONAN_INCLUDE_DIRS})
set(EXT_LIB_DIRS ${CONAN_LIB_DIRS})
set(EXT_LIBS ${CONAN_LIBS})
endif(IS_CONDA_BUILD)
list(APPEND EXT_INCLUDE_DIRS ${CONAN_INCLUDE_DIRS})
list(APPEND EXT_LIB_DIRS ${CONAN_LIB_DIRS})
list(APPEND EXT_LIBS ${CONAN_LIBS})
endif ()

if(WIN32)
string(COMPARE EQUAL "${CONAN_SETTINGS_COMPILER_RUNTIME}" "MT" USES_MT)
Expand All @@ -60,22 +79,23 @@ if(WIN32)
endif()
endif()

if(IS_PYTHON_BUILD)
if(ENABLE_PYTHON)

# Pybind11 module
if(IS_CONDA_BUILD)
if(XMS_BUILD_MODE STREQUAL "CONDA")
include("${CONDA_PREFIX}/share/cmake/pybind11/pybind11Targets.cmake")
include("${CONDA_PREFIX}/share/cmake/pybind11/FindPythonLibsNew.cmake")
include("${CONDA_PREFIX}/share/cmake/pybind11/pybind11Config.cmake")
include("${CONDA_PREFIX}/share/cmake/pybind11/pybind11ConfigVersion.cmake")
include("${CONDA_PREFIX}/share/cmake/pybind11/pybind11Tools.cmake")

else()
elseif(XMS_BUILD_MODE STREQUAL "CONAN")
include("${CONAN_PYBIND11_ROOT}/share/cmake/pybind11/pybind11Targets.cmake")
include("${CONAN_PYBIND11_ROOT}/share/cmake/pybind11/FindPythonLibsNew.cmake")
include("${CONAN_PYBIND11_ROOT}/share/cmake/pybind11/pybind11Config.cmake")
include("${CONAN_PYBIND11_ROOT}/share/cmake/pybind11/pybind11ConfigVersion.cmake")
include("${CONAN_PYBIND11_ROOT}/share/cmake/pybind11/pybind11Tools.cmake")
else()
find_package(pybind11 CONFIG REQUIRED)
endif()

list(APPEND EXT_INCLUDE_DIRS
Expand All @@ -92,10 +112,6 @@ if(IS_PYTHON_BUILD)
)
endif()

message("External Include Dirs: ${EXT_INCLUDE_DIRS}")
message("External Lib Dirs: ${EXT_LIB_DIRS}")
message("Extneral Libs: ${EXT_LIBS}")

include_directories(${CMAKE_CURRENT_LIST_DIR})
include_directories(${EXT_INCLUDE_DIRS})
link_directories(${EXT_LIB_DIRS})
Expand Down Expand Up @@ -224,9 +240,11 @@ if (BUILD_TESTING)
endif ()

# Static library
add_library(${PROJECT_NAME} STATIC
add_library(${PROJECT_NAME}
${xmsgrid_sources} ${xmsgrid_headers}
)
set_property(TARGET ${PROJECT_NAME} PROPERTY EXPORT_NAME Grid)

target_include_directories(${PROJECT_NAME}
PUBLIC
$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}>
Expand All @@ -244,7 +262,7 @@ if(UNIX AND NOT APPLE)
target_link_libraries(${PROJECT_NAME} rt)
endif()

if(IS_PYTHON_BUILD)
if(ENABLE_PYTHON)
pybind11_add_module(_xmsgrid
${xmsgrid_py} ${xmsgrid_py_headers}
)
Expand All @@ -262,20 +280,31 @@ if(IS_PYTHON_BUILD)
LINKER_LANGUAGE CXX
)

if (XMS_BUILD_MODE STREQUAL "CMAKE")
# Using a standard installation heirarchy for python packages
set(XMS_PYTHON_INSTALL_PREFIX "${CMAKE_INSTALL_LIBDIR}/python-${PYTHON_TARGET_VERSION}/site-packages")
# Skip installing setup.py
set(XMS_PYTHON_INSTALL_PACKAGE_EXTRA
PATTERN "setup.py" EXCLUDE)
else ()
set(XMS_PYTHON_INSTALL_PREFIX "_package")
endif ()
# Install recipe
install(
TARGETS _xmsgrid
ARCHIVE DESTINATION "_package/xms/grid"
LIBRARY DESTINATION "_package/xms/grid"
ARCHIVE DESTINATION "${XMS_PYTHON_INSTALL_PREFIX}/xms/grid"
LIBRARY DESTINATION "${XMS_PYTHON_INSTALL_PREFIX}/xms/grid"
)

install(DIRECTORY "_package/" DESTINATION "_package"
FILES_MATCHING PATTERN "*.py"
PATTERN "_package/tests" EXCLUDE)
install(
DIRECTORY "_package/"
DESTINATION "${XMS_PYTHON_INSTALL_PREFIX}"
FILES_MATCHING PATTERN "*.py"
PATTERN "_package/tests" EXCLUDE
${XMS_PYTHON_INSTALL_PACKAGE_EXTRA})
endif()

# Disable Optimization for GCC6 for now... Report issue to gcc and pybind
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND IS_PYTHON_BUILD)
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND ENABLE_PYTHON)
if(CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 6 AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7)
Message("Disabling Optimization for GCC 6...")
STRING(REPLACE "-O3" "" CMAKE_CXX_FLAGS_RELEASE ${CMAKE_CXX_FLAGS_RELEASE})
Expand All @@ -291,13 +320,27 @@ endif()
# Install recipe
install(
TARGETS ${PROJECT_NAME}
ARCHIVE DESTINATION "lib"
LIBRARY DESTINATION "lib"
EXPORT ${PROJECT_NAME}
ARCHIVE DESTINATION "${CMAKE_INSTALL_LIBDIR}"
LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}"
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
INCLUDES DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}"
)

foreach (header IN LISTS xmsgrid_headers xmsgrid_py_headers)
get_filename_component(subdir "${header}" DIRECTORY)
install(
FILES "${header}"
DESTINATION "include/${subdir}"
)
endforeach ()

# Install the CMake configs
install(EXPORT ${PROJECT_NAME}
FILE xmsgrid-targets.cmake
NAMESPACE XMS::
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/xms")

install(
FILES CMake/xmsgrid-config.cmake
DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/xms")
6 changes: 1 addition & 5 deletions condabuildinfo.cmake
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
set(EXT_INCLUDE_DIRS "${CMAKE_INSTALL_PREFIX}/include/xmscore")
set(EXT_LIB_DIRS "${CMAKE_INSTALL_PREFIX}/lib")
set(EXT_LIBS xmscore)

set(Boost_USE_STATIC_LIBS TRUE)
find_package(Boost REQUIRED log_setup log system filesystem serialization timer)
list(APPEND EXT_INCLUDE_DIRS ${Boost_INCLUDE_DIRS})
list(APPEND EXT_LIB_DIRS ${Boost_LIBRARY_DIRS})
list(APPEND EXT_LIBS ${Boost_LIBRARIES})
list(APPEND EXT_LIBS ${Boost_LIBRARIES};z)

0 comments on commit cc86271

Please sign in to comment.