Make CMakeLists.txt compatible with CMake 3.3 (#4420)
* Make CMakeLists.txt compatible with CMake 3.3; require CMake 3.11 for MSVC * Use CMake 3.12 when sanitizer is enabled * Disable funroll-loops for MSVC * Use cmake version in container name * Add missing arg * Fix egrep use in ci_build.sh * Display CMake version * Do not set OpenMP_CXX_LIBRARIES for MSVC * Use cmake_minimum_required()
This commit is contained in:
parent
17df5fd296
commit
bfddc2c42c
@ -1,9 +1,14 @@
|
|||||||
cmake_minimum_required(VERSION 3.2)
|
cmake_minimum_required(VERSION 3.3)
|
||||||
project(xgboost LANGUAGES CXX C VERSION 0.82)
|
project(xgboost LANGUAGES CXX C VERSION 0.82)
|
||||||
include(cmake/Utils.cmake)
|
include(cmake/Utils.cmake)
|
||||||
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/modules")
|
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/modules")
|
||||||
cmake_policy(SET CMP0022 NEW)
|
cmake_policy(SET CMP0022 NEW)
|
||||||
|
|
||||||
|
message(STATUS "CMake version ${CMAKE_VERSION}")
|
||||||
|
if (MSVC)
|
||||||
|
cmake_minimum_required(VERSION 3.11)
|
||||||
|
endif (MSVC)
|
||||||
|
|
||||||
set_default_configuration_release()
|
set_default_configuration_release()
|
||||||
msvc_use_static_runtime()
|
msvc_use_static_runtime()
|
||||||
|
|
||||||
@ -39,6 +44,8 @@ endif (USE_AVX)
|
|||||||
|
|
||||||
# Sanitizer
|
# Sanitizer
|
||||||
if (USE_SANITIZER)
|
if (USE_SANITIZER)
|
||||||
|
# Older CMake versions have had troubles with Sanitizer
|
||||||
|
cmake_minimum_required(VERSION 3.12)
|
||||||
include(cmake/Sanitizer.cmake)
|
include(cmake/Sanitizer.cmake)
|
||||||
enable_sanitizers("${ENABLED_SANITIZERS}")
|
enable_sanitizers("${ENABLED_SANITIZERS}")
|
||||||
endif (USE_SANITIZER)
|
endif (USE_SANITIZER)
|
||||||
|
|||||||
3
Jenkinsfile
vendored
3
Jenkinsfile
vendored
@ -171,8 +171,9 @@ def BuildCPU() {
|
|||||||
"""
|
"""
|
||||||
// Sanitizer test
|
// Sanitizer test
|
||||||
def docker_extra_params = "CI_DOCKER_EXTRA_PARAMS_INIT='-e ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer -e ASAN_OPTIONS=symbolize=1 --cap-add SYS_PTRACE'"
|
def docker_extra_params = "CI_DOCKER_EXTRA_PARAMS_INIT='-e ASAN_SYMBOLIZER_PATH=/usr/bin/llvm-symbolizer -e ASAN_OPTIONS=symbolize=1 --cap-add SYS_PTRACE'"
|
||||||
|
def docker_args = "--build-arg CMAKE_VERSION=3.12"
|
||||||
sh """
|
sh """
|
||||||
${dockerRun} ${container_type} ${docker_binary} tests/ci_build/build_via_cmake.sh -DUSE_SANITIZER=ON -DENABLED_SANITIZERS="address" \
|
${dockerRun} ${container_type} ${docker_binary} ${docker_args} tests/ci_build/build_via_cmake.sh -DUSE_SANITIZER=ON -DENABLED_SANITIZERS="address" \
|
||||||
-DCMAKE_BUILD_TYPE=Debug -DSANITIZER_PATH=/usr/lib/x86_64-linux-gnu/
|
-DCMAKE_BUILD_TYPE=Debug -DSANITIZER_PATH=/usr/lib/x86_64-linux-gnu/
|
||||||
${docker_extra_params} ${dockerRun} ${container_type} ${docker_binary} build/testxgboost
|
${docker_extra_params} ${dockerRun} ${container_type} ${docker_binary} build/testxgboost
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -77,7 +77,7 @@ target_include_directories(objxgboost
|
|||||||
target_compile_options(objxgboost
|
target_compile_options(objxgboost
|
||||||
PRIVATE
|
PRIVATE
|
||||||
$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<COMPILE_LANGUAGE:CXX>>:/MP>
|
$<$<AND:$<CXX_COMPILER_ID:MSVC>,$<COMPILE_LANGUAGE:CXX>>:/MP>
|
||||||
$<$<COMPILE_LANGUAGE:CXX>:-funroll-loops>)
|
$<$<AND:$<NOT:$<CXX_COMPILER_ID:MSVC>>,$<COMPILE_LANGUAGE:CXX>>:-funroll-loops>)
|
||||||
if (WIN32 AND MINGW)
|
if (WIN32 AND MINGW)
|
||||||
target_compile_options(objxgboost PUBLIC -static-libstdc++)
|
target_compile_options(objxgboost PUBLIC -static-libstdc++)
|
||||||
endif (WIN32 AND MINGW)
|
endif (WIN32 AND MINGW)
|
||||||
@ -106,6 +106,9 @@ if (USE_OPENMP)
|
|||||||
find_package(OpenMP REQUIRED)
|
find_package(OpenMP REQUIRED)
|
||||||
if (OpenMP_CXX_FOUND OR OPENMP_FOUND)
|
if (OpenMP_CXX_FOUND OR OPENMP_FOUND)
|
||||||
target_compile_options(objxgboost PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${OpenMP_CXX_FLAGS}>)
|
target_compile_options(objxgboost PRIVATE $<$<COMPILE_LANGUAGE:CXX>:${OpenMP_CXX_FLAGS}>)
|
||||||
|
if ((NOT OpenMP_CXX_LIBRARIES) AND (NOT MSVC)) # old CMake doesn't define this variable
|
||||||
|
set(OpenMP_CXX_LIBRARIES "gomp;pthread")
|
||||||
|
endif ((NOT OpenMP_CXX_LIBRARIES) AND (NOT MSVC))
|
||||||
list(APPEND SRC_LIBS ${OpenMP_CXX_LIBRARIES})
|
list(APPEND SRC_LIBS ${OpenMP_CXX_LIBRARIES})
|
||||||
set(LINKED_LIBRARIES_PRIVATE "${LINKED_LIBRARIES_PRIVATE};${SRC_LIBS}" PARENT_SCOPE)
|
set(LINKED_LIBRARIES_PRIVATE "${LINKED_LIBRARIES_PRIVATE};${SRC_LIBS}" PARENT_SCOPE)
|
||||||
endif (OpenMP_CXX_FOUND OR OPENMP_FOUND)
|
endif (OpenMP_CXX_FOUND OR OPENMP_FOUND)
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
FROM ubuntu:18.04
|
FROM ubuntu:18.04
|
||||||
|
ARG CMAKE_VERSION=3.3
|
||||||
|
|
||||||
# Environment
|
# Environment
|
||||||
ENV DEBIAN_FRONTEND noninteractive
|
ENV DEBIAN_FRONTEND noninteractive
|
||||||
@ -6,10 +7,10 @@ ENV DEBIAN_FRONTEND noninteractive
|
|||||||
# Install all basic requirements
|
# Install all basic requirements
|
||||||
RUN \
|
RUN \
|
||||||
apt-get update && \
|
apt-get update && \
|
||||||
apt-get install -y tar unzip wget git build-essential doxygen graphviz llvm libasan2 && \
|
apt-get install -y tar unzip wget git build-essential doxygen graphviz llvm libasan2 libidn11 && \
|
||||||
# CMake
|
# CMake
|
||||||
wget -nv -nc https://cmake.org/files/v3.12/cmake-3.12.0-Linux-x86_64.sh --no-check-certificate && \
|
wget -nv -nc https://cmake.org/files/v$CMAKE_VERSION/cmake-$CMAKE_VERSION.0-Linux-x86_64.sh --no-check-certificate && \
|
||||||
bash cmake-3.12.0-Linux-x86_64.sh --skip-license --prefix=/usr && \
|
bash cmake-$CMAKE_VERSION.0-Linux-x86_64.sh --skip-license --prefix=/usr && \
|
||||||
# Python
|
# Python
|
||||||
wget https://repo.continuum.io/miniconda/Miniconda3-4.5.12-Linux-x86_64.sh && \
|
wget https://repo.continuum.io/miniconda/Miniconda3-4.5.12-Linux-x86_64.sh && \
|
||||||
bash Miniconda3-4.5.12-Linux-x86_64.sh -b -p /opt/python
|
bash Miniconda3-4.5.12-Linux-x86_64.sh -b -p /opt/python
|
||||||
|
|||||||
@ -90,10 +90,12 @@ WORKSPACE="${WORKSPACE:-${SCRIPT_DIR}/../../}"
|
|||||||
DOCKER_IMG_NAME="xgb-ci.${CONTAINER_TYPE}"
|
DOCKER_IMG_NAME="xgb-ci.${CONTAINER_TYPE}"
|
||||||
|
|
||||||
# Append cuda version if available
|
# Append cuda version if available
|
||||||
CUDA_VERSION=$(echo "${CI_DOCKER_BUILD_ARG}" | grep CUDA_VERSION | egrep -o '[0-9]*\.[0-9]*')
|
CUDA_VERSION=$(echo "${CI_DOCKER_BUILD_ARG}" | egrep -o 'CUDA_VERSION=[0-9]+\.[0-9]+' | egrep -o '[0-9]+\.[0-9]+')
|
||||||
# Append jdk version if available
|
# Append jdk version if available
|
||||||
JDK_VERSION=$(echo "${CI_DOCKER_BUILD_ARG}" | grep JDK_VERSION | egrep -o '[0-9]*')
|
JDK_VERSION=$(echo "${CI_DOCKER_BUILD_ARG}" | egrep -o 'JDK_VERSION=[0-9]+' | egrep -o '[0-9]+')
|
||||||
DOCKER_IMG_NAME=$DOCKER_IMG_NAME$CUDA_VERSION$JDK_VERSION
|
# Append cmake version if available
|
||||||
|
CMAKE_VERSION=$(echo "${CI_DOCKER_BUILD_ARG}" | egrep -o 'CMAKE_VERSION=[0-9]+\.[0-9]+' | egrep -o '[0-9]+\.[0-9]+')
|
||||||
|
DOCKER_IMG_NAME=$DOCKER_IMG_NAME$CUDA_VERSION$JDK_VERSION$CMAKE_VERSION
|
||||||
|
|
||||||
# Under Jenkins matrix build, the build tag may contain characters such as
|
# Under Jenkins matrix build, the build tag may contain characters such as
|
||||||
# commas (,) and equal signs (=), which are not valid inside docker image names.
|
# commas (,) and equal signs (=), which are not valid inside docker image names.
|
||||||
|
|||||||
@ -44,6 +44,9 @@ set_target_properties(
|
|||||||
testxgboost PROPERTIES
|
testxgboost PROPERTIES
|
||||||
CXX_STANDARD 11
|
CXX_STANDARD 11
|
||||||
CXX_STANDARD_REQUIRED ON)
|
CXX_STANDARD_REQUIRED ON)
|
||||||
|
if ((NOT OpenMP_CXX_LIBRARIES) AND (NOT MSVC)) # old CMake doesn't define this variable
|
||||||
|
set(OpenMP_CXX_LIBRARIES "gomp;pthread")
|
||||||
|
endif ((NOT OpenMP_CXX_LIBRARIES) AND (NOT MSVC))
|
||||||
target_link_libraries(testxgboost
|
target_link_libraries(testxgboost
|
||||||
PRIVATE
|
PRIVATE
|
||||||
${GTEST_LIBRARIES}
|
${GTEST_LIBRARIES}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user