diff --git a/CMakeLists.txt b/CMakeLists.txt index f8aa87911..7e85a128e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,14 @@ -cmake_minimum_required(VERSION 3.2) +cmake_minimum_required(VERSION 3.3) project(xgboost LANGUAGES CXX C VERSION 0.82) include(cmake/Utils.cmake) list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/modules") 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() msvc_use_static_runtime() @@ -39,6 +44,8 @@ endif (USE_AVX) # Sanitizer if (USE_SANITIZER) + # Older CMake versions have had troubles with Sanitizer + cmake_minimum_required(VERSION 3.12) include(cmake/Sanitizer.cmake) enable_sanitizers("${ENABLED_SANITIZERS}") endif (USE_SANITIZER) diff --git a/Jenkinsfile b/Jenkinsfile index f7dc488fa..b6b01ef53 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -171,8 +171,9 @@ def BuildCPU() { """ // 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_args = "--build-arg CMAKE_VERSION=3.12" 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/ ${docker_extra_params} ${dockerRun} ${container_type} ${docker_binary} build/testxgboost """ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cacf3582f..2886706d2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -77,7 +77,7 @@ target_include_directories(objxgboost target_compile_options(objxgboost PRIVATE $<$,$>:/MP> - $<$:-funroll-loops>) + $<$>,$>:-funroll-loops>) if (WIN32 AND MINGW) target_compile_options(objxgboost PUBLIC -static-libstdc++) endif (WIN32 AND MINGW) @@ -106,6 +106,9 @@ if (USE_OPENMP) find_package(OpenMP REQUIRED) if (OpenMP_CXX_FOUND OR OPENMP_FOUND) target_compile_options(objxgboost PRIVATE $<$:${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}) set(LINKED_LIBRARIES_PRIVATE "${LINKED_LIBRARIES_PRIVATE};${SRC_LIBS}" PARENT_SCOPE) endif (OpenMP_CXX_FOUND OR OPENMP_FOUND) diff --git a/tests/ci_build/Dockerfile.cpu b/tests/ci_build/Dockerfile.cpu index 4f8849218..aaea658fa 100644 --- a/tests/ci_build/Dockerfile.cpu +++ b/tests/ci_build/Dockerfile.cpu @@ -1,4 +1,5 @@ FROM ubuntu:18.04 +ARG CMAKE_VERSION=3.3 # Environment ENV DEBIAN_FRONTEND noninteractive @@ -6,10 +7,10 @@ ENV DEBIAN_FRONTEND noninteractive # Install all basic requirements RUN \ 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 - wget -nv -nc https://cmake.org/files/v3.12/cmake-3.12.0-Linux-x86_64.sh --no-check-certificate && \ - bash cmake-3.12.0-Linux-x86_64.sh --skip-license --prefix=/usr && \ + wget -nv -nc https://cmake.org/files/v$CMAKE_VERSION/cmake-$CMAKE_VERSION.0-Linux-x86_64.sh --no-check-certificate && \ + bash cmake-$CMAKE_VERSION.0-Linux-x86_64.sh --skip-license --prefix=/usr && \ # Python 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 diff --git a/tests/ci_build/ci_build.sh b/tests/ci_build/ci_build.sh index 3b3fd0747..56cf85467 100755 --- a/tests/ci_build/ci_build.sh +++ b/tests/ci_build/ci_build.sh @@ -90,10 +90,12 @@ WORKSPACE="${WORKSPACE:-${SCRIPT_DIR}/../../}" DOCKER_IMG_NAME="xgb-ci.${CONTAINER_TYPE}" # 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 -JDK_VERSION=$(echo "${CI_DOCKER_BUILD_ARG}" | grep JDK_VERSION | egrep -o '[0-9]*') -DOCKER_IMG_NAME=$DOCKER_IMG_NAME$CUDA_VERSION$JDK_VERSION +JDK_VERSION=$(echo "${CI_DOCKER_BUILD_ARG}" | egrep -o 'JDK_VERSION=[0-9]+' | egrep -o '[0-9]+') +# 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 # commas (,) and equal signs (=), which are not valid inside docker image names. diff --git a/tests/cpp/CMakeLists.txt b/tests/cpp/CMakeLists.txt index bd303917b..eedbcd83b 100644 --- a/tests/cpp/CMakeLists.txt +++ b/tests/cpp/CMakeLists.txt @@ -44,6 +44,9 @@ set_target_properties( testxgboost PROPERTIES CXX_STANDARD 11 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 PRIVATE ${GTEST_LIBRARIES}