@@ -34,62 +34,137 @@ cd ${WORKSPACE}
3434mkdir -p build
3535cd build
3636
37+ if [[ -z " ${CMAKE_BUILD_TYPE} " ]]; then
38+ CMAKE_BUILD_TYPE=" Release"
39+ fi
40+
41+ CMAKE_BUILD_FLAGS=" --"
42+
3743# The Docker image sets up `${CXX}` and `${CUDACXX}`.
38- CMAKE_FLAGS=" -G Ninja -DCMAKE_CXX_COMPILER='${CXX} ' -DCMAKE_CUDA_COMPILER='${CUDACXX} '"
39-
40- if [ " ${BUILD_MODE} " == " branch" ]; then
41- # Post-commit build.
42- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_INCLUDE_CUB_CMAKE=ON"
43- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_ENABLE_MULTICONFIG=ON"
44- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP11=ON"
45- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_IGNORE_DEPRECATED_CPP_11=ON"
46- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP14=ON"
47- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP17=OFF"
48- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CPP=ON"
49- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_TBB=ON"
50- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_OMP=ON"
51- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CUDA=ON"
52- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_WORKLOAD=LARGE"
44+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} "
45+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCMAKE_CUDA_COMPILER='${CUDACXX} '"
46+
47+ if [[ " ${CXX_TYPE} " == " nvcxx" ]]; then
48+ # NVC++ isn't properly detected by CMake, so we have to tell CMake to ignore
49+ # detection and explicit provide the compiler ID. Ninja currently isn't
50+ # supported, so we just use makefiles.
51+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCMAKE_CUDA_COMPILER_FORCED=ON"
52+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCMAKE_CUDA_COMPILER_ID=NVCXX"
53+ # Don't stop on build failures.
54+ CMAKE_BUILD_FLAGS=" ${CMAKE_BUILD_FLAGS: +${CMAKE_BUILD_FLAGS} } -k"
55+ # NVC++ currently uses a lot of memory.
56+ PARALLEL_LEVEL=1
5357else
54- # Pre-commit build.
55- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_DISABLE_ARCH_BY_DEFAULT=ON"
56- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_ENABLE_COMPUTE_50=ON"
57- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_ENABLE_COMPUTE_60=ON"
58- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_ENABLE_COMPUTE_70=ON"
59- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_ENABLE_COMPUTE_80=ON"
60- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_INCLUDE_CUB_CMAKE=ON"
61- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_ENABLE_MULTICONFIG=ON"
62- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP11=ON"
63- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_IGNORE_DEPRECATED_CPP_11=ON"
64- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP14=ON"
65- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP17=OFF"
66- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CPP=ON"
67- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_TBB=ON"
68- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_OMP=ON"
69- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CUDA=ON"
70- CMAKE_FLAGS=" ${CMAKE_FLAGS} -DTHRUST_MULTICONFIG_WORKLOAD=SMALL"
58+ if [[ " ${CXX_TYPE} " == " icc" ]]; then
59+ # Only the latest version of the Intel C++ compiler, which NVCC doesn't
60+ # officially support yet, is freely available.
61+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCMAKE_CUDA_FLAGS=-allow-unsupported-compiler"
62+ fi
63+ # We're using NVCC so we need to set the host compiler.
64+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCMAKE_CXX_COMPILER='${CXX} '"
65+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -G Ninja"
66+ # Don't stop on build failures.
67+ CMAKE_BUILD_FLAGS=" ${CMAKE_BUILD_FLAGS: +${CMAKE_BUILD_FLAGS} } -k0"
7168fi
7269
73- CMAKE_BUILD_FLAGS=" -j${PARALLEL_LEVEL} "
70+ if [[ -n " ${PARALLEL_LEVEL} " ]]; then
71+ DETERMINE_PARALLELISM_FLAGS=" -j ${PARALLEL_LEVEL} "
72+ fi
7473
75- if [ ! -z " ${@ } " ]; then
76- CMAKE_BUILD_FLAGS=" ${CMAKE_BUILD_FLAGS} -- ${@ } "
74+ # COVERAGE_PLAN options:
75+ # * Exhaustive
76+ # * Thorough
77+ # * Minimal
78+ if [[ -z " ${COVERAGE_PLAN} " ]]; then
79+ if [[ " ${BUILD_TYPE} " == " cpu" ]] && [[ " ${BUILD_MODE} " == " branch" ]]; then
80+ # Post-commit CPU CI builds.
81+ COVERAGE_PLAN=" Exhaustive"
82+ elif [[ " ${BUILD_TYPE} " == " cpu" ]]; then
83+ # Pre-commit CPU CI builds.
84+ COVERAGE_PLAN=" Thorough"
85+ elif [[ " ${BUILD_TYPE} " == " gpu" ]]; then
86+ # Pre- and post-commit GPU CI builds.
87+ COVERAGE_PLAN=" Minimal"
88+ fi
7789fi
7890
79- CTEST_FLAGS=" "
91+ case " ${COVERAGE_PLAN} " in
92+ Exhaustive)
93+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_INCLUDE_CUB_CMAKE=ON"
94+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_ENABLE_MULTICONFIG=ON"
95+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP11=ON"
96+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_IGNORE_DEPRECATED_CPP_11=ON"
97+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP14=ON"
98+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP17=OFF"
99+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CPP=ON"
100+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_TBB=ON"
101+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_OMP=ON"
102+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CUDA=ON"
103+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_WORKLOAD=LARGE"
104+ ;;
105+ Thorough)
106+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_INCLUDE_CUB_CMAKE=ON"
107+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_ENABLE_MULTICONFIG=ON"
108+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP11=ON"
109+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_IGNORE_DEPRECATED_CPP_11=ON"
110+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP14=ON"
111+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_DIALECT_CPP17=OFF"
112+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CPP=ON"
113+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_TBB=ON"
114+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_OMP=ON"
115+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_ENABLE_SYSTEM_CUDA=ON"
116+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_MULTICONFIG_WORKLOAD=SMALL"
117+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_AUTO_DETECT_COMPUTE_ARCHS=ON"
118+ if [[ " ${CXX_TYPE} " != " nvcxx" ]]; then
119+ # NVC++ can currently only target one CUDA architecture at a time.
120+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_ENABLE_COMPUTE_50=ON"
121+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_ENABLE_COMPUTE_60=ON"
122+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_ENABLE_COMPUTE_70=ON"
123+ fi
124+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_ENABLE_COMPUTE_80=ON"
125+ ;;
126+ Minimal)
127+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_INCLUDE_CUB_CMAKE=ON"
128+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCUB_ENABLE_THOROUGH_TESTING=OFF"
129+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCUB_ENABLE_BENCHMARK_TESTING=OFF"
130+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DCUB_ENABLE_MINIMAL_TESTING=ON"
131+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_HOST_SYSTEM=CPP"
132+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_DEVICE_SYSTEM=CUDA"
133+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_CPP_DIALECT=14"
134+ CMAKE_FLAGS=" ${CMAKE_FLAGS: +${CMAKE_FLAGS} } -DTHRUST_AUTO_DETECT_COMPUTE_ARCHS=ON"
135+ ;;
136+ esac
137+
138+ if [[ -n " ${@ } " ]]; then
139+ CMAKE_BUILD_FLAGS=" ${CMAKE_BUILD_FLAGS: +${CMAKE_BUILD_FLAGS} }${@ } "
140+ fi
80141
81- if [ " ${BUILD_TYPE} " == " cpu" ]; then
82- CTEST_FLAGS=" ${CTEST_FLAGS} -E ^cub|^thrust.*cuda"
142+ CTEST_FLAGS=" ${CTEST_FLAGS: +${CTEST_FLAGS} } --output-on-failure"
143+
144+ if [[ " ${BUILD_TYPE} " == " cpu" ]]; then
145+ CTEST_FLAGS=" ${CTEST_FLAGS: +${CTEST_FLAGS} } -E ^cub|^thrust.*cuda"
83146fi
84147
85- if [ ! -z " ${@ } " ]; then
86- CTEST_FLAGS=" ${CTEST_FLAGS} -R ^${@ } $"
148+ if [[ -n " ${@ } " ] ]; then
149+ CTEST_FLAGS=" ${CTEST_FLAGS: + ${CTEST_FLAGS} } -R ^${@ } $"
87150fi
88151
152+ # Export variables so they'll show up in the logs when we report the environment.
153+ export COVERAGE_PLAN
154+ export CMAKE_FLAGS
155+ export CMAKE_BUILD_FLAGS
156+ export CTEST_FLAGS
157+
89158# ###############################################################################
90159# ENVIRONMENT - Configure and print out information about the environment.
91160# ###############################################################################
92161
162+ logger " Determine system topology..."
163+
164+ # Set `${PARALLEL_LEVEL}` if it is unset; otherwise, this just reports the
165+ # system topology.
166+ source ${WORKSPACE} /ci/common/determine_build_parallelism.bash ${DETERMINE_PARALLELISM_FLAGS}
167+
93168logger " Get environment..."
94169env
95170
@@ -102,15 +177,20 @@ ${CUDACXX} --version
102177# ###############################################################################
103178
104179logger " Configure Thrust and CUB..."
180+ echo cmake .. ${CMAKE_FLAGS}
105181cmake .. ${CMAKE_FLAGS}
106182
107183logger " Build Thrust and CUB..."
108- cmake --build . ${CMAKE_BUILD_FLAGS}
184+ # ${PARALLEL_LEVEL} needs to be passed after we run
185+ # determine_build_parallelism.bash, so it can't be part of ${CMAKE_BUILD_FLAGS}.
186+ echo cmake --build . ${CMAKE_BUILD_FLAGS} -j ${PARALLEL_LEVEL}
187+ cmake --build . ${CMAKE_BUILD_FLAGS} -j ${PARALLEL_LEVEL}
109188
110189# ###############################################################################
111190# TEST - Run Thrust and CUB examples and tests.
112191# ###############################################################################
113192
114193logger " Test Thrust and CUB..."
194+ echo ctest ${CTEST_FLAGS}
115195ctest ${CTEST_FLAGS}
116196
0 commit comments