diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..f4563f74 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,78 @@ +on: + pull_request: +name: Build +jobs: + build_docker: + strategy: + fail-fast: false + matrix: + target: [gcc11_debug, gcc11, gcc14, clang19, nvcc12, nvcc12_debug, rocm6_4_3, rocm_latest, sycl] + runs-on: ubuntu-latest + steps: + - run: | + sudo rm -rf /usr/share/dotnet + sudo rm -rf /usr/local/lib/android + sudo rm -rf /opt/ghc + sudo rm -rf /opt/hostedtoolcache/CodeQL + sudo docker image prune --all --force + - uses: actions/checkout@v2 + with: + submodules: recursive + - uses: docker/setup-buildx-action@v3 + - uses: docker/build-push-action@v6 + with: + target: ${{ matrix.target }} + build_mac: + runs-on: macos-latest + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive + - uses: threeal/cmake-action@v1.3.0 + with: + cmake-version: '3.29.x' # Back off version of cmake with known issue + build-dir: build + options: + CMAKE_CXX_STANDARD=20 + ENABLE_OPENMP=Off + CMAKE_BUILD_TYPE=Release + run-build: true + build-args: '--parallel 16' + - uses: threeal/ctest-action@v1.1.0 + build_windows: + strategy: + matrix: + shared: + - args: + BUILD_SHARED_LIBS=On + CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=On + - args: BUILD_SHARED_LIBS=Off + + runs-on: windows-latest + steps: + - uses: actions/checkout@v2 + with: + submodules: recursive +## ==================================== +## Config and build action + - uses: threeal/cmake-action@v1.3.0 + with: + cmake-version: '3.29.x' # Back off version of cmake with known issue + build-dir: build + options: + ENABLE_WARNINGS_AS_ERRORS=Off + BLT_CXX_STD="c++20" + CMAKE_CXX_STANDARD=20 + CMAKE_BUILD_TYPE=Release + ${{ matrix.shared.args }} + run-build: true + build-args: '--config Release --parallel 16' +## ==================================== +## Print the contents of the test directory in the build space (debugging) +## - run: | +## dir -r D:\a\RAJA\RAJA\build\test +## ==================================== +## Run tests action + - uses: threeal/ctest-action@v1.1.0 + with: + build-config: Release diff --git a/Dockerfile b/Dockerfile index 7a6657e7..73fbf8c3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,66 +7,134 @@ # SPDX-License-Identifier: (BSD-3-Clause) ############################################################################### -ARG BASE_IMG=gcc -ARG COMPILER=g++ -ARG VER=latest -ARG PRE_CMD="true" -ARG BUILD_TYPE=RelWithDebInfo -ARG CTEST_EXTRA="-E '(.*offload|blt.*smoke)'" -ARG CTEST_OPTIONS="${CTEST_EXTRA} -T test -V " -ARG CMAKE_EXTRA="" -ARG CMAKE_OPTIONS="-G Ninja -B build ${CMAKE_EXTRA} -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DENABLE_WARNINGS=On" -ARG PARALLEL=4 -ARG BUILD_EXTRA="" -ARG CMAKE_BUILD_OPTS="--build build --verbose --parallel ${PARALLEL} ${BUILD_EXTRA}" -ARG CUDA_IMG_SUFFIX="-devel-ubuntu22.04" +FROM ghcr.io/llnl/radiuss:gcc-11-ubuntu-24.04 AS gcc11_debug +ENV GTEST_COLOR=1 +COPY . /home/camp/workspace +WORKDIR /home/camp/workspace/build +RUN cmake -G Ninja -B build \ + -DCMAKE_CXX_COMPILER=g++ \ + -DCMAKE_BUILD_TYPE=Debug \ + -DENABLE_WARNINGS=On \ + -DENABLE_WARNINGS_AS_ERRORS=On \ + -DENABLE_COVERAGE=On .. && \ + cmake --build build --verbose --parallel 4 && \ + cd build && ctest -T test --output-on-failure && cd .. && \ + cmake --build build --target clean -### start compiler base images ### -# there is no official container in the hub, but there is an official script -# to install clang/llvm by version, installs a bit more than we need, but we -# do not have to maintain it, so I'm alright with that -FROM ghcr.io/llnl/radiuss:clang-${VER}-ubuntu-24.04 AS clang -ENV LD_LIBRARY_PATH=/opt/view/lib +FROM ghcr.io/llnl/radiuss:gcc-11-ubuntu-24.04 AS gcc11 +ENV GTEST_COLOR=1 +COPY . /home/camp/workspace +WORKDIR /home/camp/workspace/build +RUN cmake -G Ninja -B build \ + -DCMAKE_CXX_COMPILER=g++ \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DENABLE_WARNINGS=On .. && \ + cmake --build build --verbose --parallel 4 && \ + cd build && ctest -T test --output-on-failure && cd .. && \ + cmake --build build --target clean -FROM ghcr.io/llnl/radiuss:gcc-${VER}-ubuntu-24.04 AS gcc +FROM ghcr.io/llnl/radiuss:gcc-14-ubuntu-24.04 AS gcc14 +ENV GTEST_COLOR=1 +COPY . /home/camp/workspace +WORKDIR /home/camp/workspace/build +RUN cmake -G Ninja -B build \ + -DCMAKE_CXX_COMPILER=g++ \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DENABLE_WARNINGS=On .. && \ + cmake --build build --verbose --parallel 4 && \ + cd build && ctest -T test --output-on-failure && cd .. && \ + cmake --build build --target clean -FROM nvidia/cuda:${VER}${CUDA_IMG_SUFFIX} AS nvcc +FROM ghcr.io/llnl/radiuss:clang-19-ubuntu-24.04 AS clang19 +ENV GTEST_COLOR=1 +COPY . /home/camp/workspace +WORKDIR /home/camp/workspace/build +RUN /bin/bash -lc 'export LD_LIBRARY_PATH=/opt/view/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} && \ + cmake -G Ninja -B build \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DENABLE_WARNINGS=On .. && \ + cmake --build build --verbose --parallel 4 && \ + cd build && ctest -T test --output-on-failure && cd .. && \ + cmake --build build --target clean' -FROM nvcr.io/nvidia/nvhpc:23.3-devel-cuda12.0-ubuntu24.04 AS nvhpc +FROM nvidia/cuda:12.0.0-devel-ubuntu22.04 AS nvcc12 +ENV GTEST_COLOR=1 +COPY scripts/get-deps.sh /tmp/get-deps.sh +RUN bash /tmp/get-deps.sh +COPY . /home/camp/workspace +WORKDIR /home/camp/workspace/build +RUN cmake -G Ninja -B build \ + -DCMAKE_CXX_COMPILER=g++ \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DENABLE_WARNINGS=On \ + -DENABLE_CUDA=On \ + -DCMAKE_CUDA_ARCHITECTURES=70 .. && \ + cmake --build build --verbose --parallel 4 && \ + cmake --build build --target clean -FROM rocm/dev-ubuntu-24.04:${VER} AS rocm +FROM nvidia/cuda:12.2.2-devel-ubuntu22.04 AS nvcc12_debug +ENV GTEST_COLOR=1 +COPY scripts/get-deps.sh /tmp/get-deps.sh +RUN bash /tmp/get-deps.sh +COPY . /home/camp/workspace +WORKDIR /home/camp/workspace/build +RUN cmake -G Ninja -B build \ + -DCMAKE_CXX_COMPILER=g++ \ + -DCMAKE_BUILD_TYPE=Debug \ + -DENABLE_WARNINGS=On \ + -DENABLE_CUDA=On \ + -DCMAKE_CUDA_ARCHITECTURES=70 .. && \ + cmake --build build --verbose --parallel 4 && \ + cmake --build build --target clean -# The intel-runtime container no longer works, use the fat one -FROM intel/oneapi:${VER} AS oneapi -RUN bash -c 'echo . /opt/intel/oneapi/setvars.sh >> ~/setup_env.sh' -### end compiler base images ### +FROM ghcr.io/llnl/radiuss:hip-6.4.3-ubuntu-24.04 AS rocm6_4_3 +ENV GTEST_COLOR=1 +ENV HCC_AMDGPU_TARGET=gfx900 +COPY . /home/camp/workspace +WORKDIR /home/camp/workspace/build +RUN /bin/bash -lc 'export LD_LIBRARY_PATH=/opt/rocm-6.4.3/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} && \ + cmake -G Ninja -B build \ + -DCMAKE_CXX_COMPILER=/opt/rocm-6.4.3/bin/amdclang++ \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DENABLE_WARNINGS=On \ + -DROCM_PATH=/opt/rocm-6.4.3 \ + -DENABLE_HIP=On \ + -DENABLE_OPENMP=Off \ + -DENABLE_CUDA=Off .. && \ + cmake --build build --verbose --parallel 4 && \ + cmake --build build --target clean' -FROM ${BASE_IMG} AS base -ARG VER -ARG BASE_IMG +FROM rocm/dev-ubuntu-24.04:latest AS rocm_latest ENV GTEST_COLOR=1 -# Only install CMake/Ninja for images that don't reliably include them. -# (gcc/clang radiuss images already provide a full toolchain.) COPY scripts/get-deps.sh /tmp/get-deps.sh -RUN /bin/bash -lc 'if [[ "${BASE_IMG}" == "nvcc" || "${BASE_IMG}" == "rocm" || "${BASE_IMG}" == "oneapi" ]]; then bash /tmp/get-deps.sh; fi' +RUN bash /tmp/get-deps.sh COPY . /home/camp/workspace WORKDIR /home/camp/workspace/build +RUN /bin/bash -lc 'export LD_LIBRARY_PATH=/opt/rocm/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} && \ + cmake -G Ninja -B build \ + -DCMAKE_CXX_COMPILER=/opt/rocm/llvm/bin/amdclang++ \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DENABLE_WARNINGS=On \ + -DROCM_PATH=/opt/rocm \ + -DENABLE_HIP=On \ + -DENABLE_OPENMP=Off \ + -DENABLE_CUDA=Off .. && \ + cmake --build build --verbose --parallel 4 && \ + cmake --build build --target clean' -FROM base AS test -ARG PRE_CMD -ARG CTEST_OPTIONS -ARG CMAKE_OPTIONS -ARG CMAKE_BUILD_OPTS -ARG COMPILER -ENV COMPILER=${COMPILER:-g++} -RUN /bin/bash -lc '[[ -f ~/setup_env.sh ]] && source ~/setup_env.sh ; \ - CXX="${COMPILER:-g++}" ; \ - if [[ "${CMAKE_OPTIONS}" == *"sanitize=address"* ]]; then \ - sudo apt-get install libclang-rt-${VER}-dev -fy; \ - fi ; \ - ${PRE_CMD} && cmake ${CMAKE_OPTIONS} -DCMAKE_CXX_COMPILER="${CXX}" ..' -RUN /bin/bash -c "[[ -f ~/setup_env.sh ]] && source ~/setup_env.sh ; ${PRE_CMD} && cmake ${CMAKE_BUILD_OPTS}" -RUN /bin/bash -c "[[ -f ~/setup_env.sh ]] && source ~/setup_env.sh ; ${PRE_CMD} && cd build && ctest ${CTEST_OPTIONS}" - -# this is here to stop azure from downloading oneapi for every test -FROM alpine AS download_fast +FROM ghcr.io/llnl/radiuss:ubuntu-24.04-intel-2024.2 AS sycl +ENV GTEST_COLOR=1 +COPY . /home/camp/workspace +WORKDIR /home/camp/workspace/build +RUN /bin/bash -lc 'source /opt/intel/oneapi/setvars.sh 2>&1 && \ + export PATH=/opt/intel/oneapi/compiler/2024.2/bin/:$PATH && \ + export LD_LIBRARY_PATH=/opt/intel/oneapi/2024.2/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} && \ + cmake -G Ninja -B build \ + -DCMAKE_CXX_COMPILER=icpx \ + -DCMAKE_CXX_FLAGS="-fsycl -fsycl-unnamed-lambda" \ + -DCMAKE_BUILD_TYPE=RelWithDebInfo \ + -DENABLE_WARNINGS=On \ + -DENABLE_SYCL=On .. && \ + cmake --build build --verbose --parallel 4 && \ + cmake --build build --target clean' diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index ce76808a..00000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,172 +0,0 @@ -variables: - DO_BUILD: 'yes' - DO_TEST: 'yes' - DO_INSTALL: 'yes' - COMPILER: 'g++' - base_img: gcc - ver: latest - pre_cmd: true - build_type: RelWithDebInfo - # Disable cuda and hip tests since there are no GPUs on these platforms - ctest_extra: "-E '(.*offload|blt.*smoke|cuda_.*|hip_.*|CampEvent|CampResource)'" - cmake_extra: "" - parallel: 4 - cmake_build_opts: "--build build --verbose --parallel $(parallel)" - -jobs: -- job: Windows - strategy: - matrix: - shared: - SHARED_ARGS: '-DBUILD_SHARED_LIBS=On' - static: - SHARED_ARGS: '-DBUILD_SHARED_LIBS=Off' - pool: - vmImage: 'windows-2022' - variables: - CMAKE_EXTRA_FLAGS: '-DENABLE_WARNINGS_AS_ERRORS=Off -DBLT_CXX_STD="" -DCMAKE_CXX_STANDARD=20' - steps: - - checkout: self - clean: boolean - submodules: recursive - - task: CMake@1 - inputs: - workingDir: 'build' - cmakeArgs: '$(CMAKE_EXTRA_FLAGS) $(SHARED_ARGS) ../' - - task: CMake@1 - inputs: - workingDir: 'build' - cmakeArgs: '--build . --config Release --verbose --parallel $(parallel)' - - task: CmdLine@2 - inputs: - script: 'ctest.exe -T test -C Release' - workingDirectory: 'build' - condition: eq( variables['Agent.OS'], 'Windows_NT') - - task: PublishTestResults@2 - inputs: - testResultsFormat: 'cTest' - testResultsFiles: '**/Test.xml' -- job: Docker - timeoutInMinutes: 360 - strategy: - matrix: - gcc11-debug: - base_img: gcc - ver: 11 - cmake_extra: -DENABLE_WARNINGS_AS_ERRORS=On -DENABLE_COVERAGE=On - build_type: Debug - gcc11: - base_img: gcc - ver: 11 - gcc-14: - base_img: gcc - ver: 14 - cmake_extra: - clang19: - base_img: clang - compiler: clang++ - ver: 19 - # TODO re-enable sanitizer - # clang19-debug: - # base_img: clang - # compiler: clang++ - # ver: 19 - # cmake_extra: -DCMAKE_CXX_FLAGS=-fsanitize=address - # build_type: Debug - # NVIDIA no longer supports "latest", must update manually - nvcc12: - base_img: nvcc - ver: 12.0.0 - cmake_extra: -DENABLE_CUDA=On -DCMAKE_CUDA_ARCHITECTURES=70 - nvcc12-debug: - base_img: nvcc - ver: 12.2.2 - cmake_extra: -DENABLE_CUDA=On -DCMAKE_CUDA_ARCHITECTURES=70 - build_type: Debug - rocm: - base_img: rocm - cmake_extra: -DROCM_PATH=/opt/rocm -DENABLE_HIP=On -DENABLE_OPENMP=Off -DENABLE_CUDA=Off - compiler: /opt/rocm/llvm/bin/amdclang++ - sycl: - base_img: oneapi - cmake_extra: -DENABLE_SYCL=On - compiler: dpcpp - pool: - vmImage: 'ubuntu-latest' - variables: - DOCKER_BUILDKIT: '1' - CMAKE_EXTRA_FLAGS: '-DENABLE_DEVELOPER_BENCHMARKS=On -DENABLE_DEVELOPER_DEFAULTS=On -DCMAKE_CXX_STANDARD=11' - steps: - - checkout: self - clean: boolean - submodules: recursive - - task: Docker@1 - inputs: - containerRegistry: raja_ci_docker - command: build - dockerFile: 'Dockerfile' - arguments: >- - --target test - --build-arg BASE_IMG - --build-arg VER - --build-arg COMPILER - --build-arg PRE_CMD - --build-arg BUILD_TYPE - --build-arg CMAKE_EXTRA - --build-arg CTEST_EXTRA - --build-arg PARALLEL - --build-arg CMAKE_BUILD_OPTS - env: - BASE_IMG: $(base_img) - VER: $(ver) - COMPILER: $(COMPILER) - PRE_CMD: $(pre_cmd) - BUILD_TYPE: $(build_type) - CMAKE_EXTRA: $(cmake_extra) - CTEST_EXTRA: $(ctest_extra) - PARALLEL: $(parallel) - CMAKE_BUILD_OPTS: $(cmake_build_opts) - - script: | - CID=$(docker create llnl/camp:$(Build.BuildId)) - echo ${CID} - docker cp ${CID}:/home/axom/workspace/build local-build - docker rm ${CID} - displayName: 'Copy test artifacts' - condition: ne( variables['docker_target'], 'nvcc') - # - script: | - # bash <(curl -s https://raw.githubusercontent.com/codecov/codecov-bash/0b376529f626b50b7d4a9fb734e0e50d28b9b91e/codecov) >& /dev/null - # displayName: 'Upload code coverage' - # condition: eq( variables['docker_target'], 'gcc') - - task: PublishTestResults@2 - inputs: - testResultsFormat: 'cTest' - testResultsFiles: '**/Test.xml' - -- job: Mac - pool: - vmImage: 'macOS-latest' - variables: - CMAKE_EXTRA_FLAGS: '-DENABLE_OPENMP=Off' - steps: - - checkout: self - clean: boolean - submodules: recursive - - task: CMake@1 - inputs: - workingDir: 'build' - cmakeArgs: '$(CMAKE_EXTRA_FLAGS) ../' - - script: | - cd build - make - displayName: 'OSX Build' - condition: eq( variables['Agent.OS'], 'Darwin') - - script: | - cd build - ctest -T test --output-on-failure - displayName: 'OSX Test' - condition: eq( variables['Agent.OS'], 'Darwin') - - task: PublishTestResults@2 - inputs: - testResultsFormat: 'cTest' - testResultsFiles: '**/Test.xml' -