-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathpre-push
More file actions
executable file
·101 lines (80 loc) · 21.1 KB
/
Copy pathpre-push
File metadata and controls
executable file
·101 lines (80 loc) · 21.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/bin/bash
# sudo apt install git cmake ninja-build ccache g++ clang clang-20 binutils-gold libboost-dev make libclang-rt-dev libc++-dev nvidia-cuda-toolkit libfftw3-dev valgrind clang-tidy --no-install-recommends
# sudo apt install git cmake ninja-build ccache g++ clang binutils-gold libboost-dev make libclang-rt-dev libc++-dev nvidia-cuda-toolkit pkg-config libfftw3-dev valgrind clang-tidy --no-install-recommends
# sudo dnf install boost-devel blas-devel ccache clang clang-tools-extra cmake cppcheck fftw-devel git lcov libasan liblas-devel libubsan ninja-build valgrind
# install circle # mkdir -p $HOME/bin && wget https://www.circle-lang.org/linux/circle_linux_x86_64.tgz -P $HOME/tmp/ && tar zxvf $HOME/tmp/circle_linux_x86_64.tgz --directory $HOME/bin/ && $HOME/bin/circle --version
# install nvc++
# on Ubuntu:
# curl https://developer.download.nvidia.com/hpc-sdk/ubuntu/DEB-GPG-KEY-NVIDIA-HPC-SDK | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg
# echo 'deb [signed-by=/usr/share/keyrings/nvidia-hpcsdk-archive-keyring.gpg] https://developer.download.nvidia.com/hpc-sdk/ubuntu/amd64 /' | sudo tee /etc/apt/sources.list.d/nvhpc.list
# sudo apt-get update -y
# sudo apt-get install -y nvhpc
# on Fedora:
# sudo yum-config-manager --add-repo https://developer.download.nvidia.com/hpc-sdk/rhel/nvhpc.repo && sudo yum install -y nvhpc-cuda-multi-24.5
# install oneAPI
# wget -O- https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | gpg --dearmor | sudo tee /usr/share/keyrings/oneapi-archive-keyring.gpg > /dev/null
# echo "deb [signed-by=/usr/share/keyrings/oneapi-archive-keyring.gpg] https://apt.repos.intel.com/oneapi all main" | sudo tee /etc/apt/sources.list.d/oneAPI.list
# sudo apt update
# sudo apt install intel-hpckit
# brew install cmake ninja ccache gcc@14 boost include-what-you-use cpplint cppcheck clang-tidy
set -x # echo on
set -e # quit on error
trap 'exit 666' ERR
export CMAKE_GENERATOR=Ninja
export NINJA_STATUS="[%f/%t||%r] "
export CMAKE_COLOR_DIAGNOSTICS="ON"
export CMAKE_CUDA_COMPILER_LAUNCHER="ccache"
export CMAKE_CXX_COMPILER_LAUNCHER="ccache"
# CMAKE_COMPILE_WARNING_AS_ERROR is NOT read from the environment by CMake
export MACOSX_DEPLOYMENT_TARGET=26.0
ccache -z
if [[ $OSTYPE == "darwin"* ]]; then
PHYS_CORES=$(sysctl -n hw.physicalcpu)
else
PHYS_CORES=$(lscpu -p=core | grep -v '^#' | sort -u | wc -l)
fi
export CMAKE_BUILD_PARALLEL_LEVEL=$((PHYS_CORES + 0))
export CTEST_OUTPUT_ON_FAILURE=1
export CTEST_PARALLEL_LEVEL=$PHYS_CORES
if [ -z "$1" ]; then
echo "no arg"
else
CMT="--target $1"
CTR="--verbose -R $1"
fi
if [[ $OSTYPE != "darwin"* ]]; then
export PMIX_MCA_gds=hash
export UBSAN_OPTIONS=print_stacktrace=1
(DIR=.build.g++; [ -d "$DIR" ] || CXX=g++ cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_CXX_FLAGS="-Wno-error=deprecated-declarations" && cmake --build "$DIR" $CMT && ctest --test-dir "$DIR" $CTR )
(DIR=.build.clang++; [ -d "$DIR" ] || CXX=clang++ CXXFLAGS=-Weverything cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_COMPILE_WARNING_AS_ERROR=ON && cmake --build "$DIR" $CMT && ctest --test-dir "$DIR" $CTR )
(DIR=.build.clang++.libcpp; [ -d "$DIR" ] || CXX=clang++ cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_CXX_STANDARD=23 -DDISABLE_MPI=1 -DCMAKE_CXX_FLAGS="-stdlib=libc++ -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_DEBUG -fsanitize=address,undefined" -DCMAKE_EXE_LINKER_FLAGS="-stdlib=libc++ -fsanitize=address,undefined" && cmake --build "$DIR" $CMT && ctest --test-dir "$DIR" $CTR )
(DIR=.build.g++.c++23; [ -d "$DIR" ] || CXX=g++ cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_CXX_STANDARD=23 -DCMAKE_CXX_FLAGS="-fconcepts-diagnostics-depth=30 -D_GLIBCXX_ASSERTIONS -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC" && cmake --build "$DIR" $CMT && ctest --test-dir "$DIR" $CTR )
# sudo apt-get install ruby-dev libgraphicsmagick++1-dev ruby-asciidoctor-pdf
# sudo gem install rouge
# single-file PDF of the documentation (local check; requires `gem install asciidoctor-pdf`).
# Cross-page `xref:file.adoc#id[]` links may emit warnings under plain Asciidoctor; the PDF is still produced.
PATH="/usr/bin:$PATH" asciidoctor-pdf --safe-mode unsafe --failure-level WARN -a pdf-theme=doc/pdf-theme.yml -a localdatetime="$(date)" doc/single.adoc -a allow-uri-read -o multi-documentation.pdf && echo "generated multi-documentation.pdf"
if [[ $(uname -m) != 'aarch64' ]]; then
(clang-format-21 --version 2>/dev/null && clang-format-21 --output-replacements-xml --dry-run -Werror include/**/*.hpp test/*.cpp || exit 666) || echo "clang-format-21 not installed"
(DIR=.build.nvcc.debug; [ -d "$DIR" ] || cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_CXX_STANDARD=20 -DENABLE_CUDA=1 -DCMAKE_CUDA_COMPILER=nvcc -DCMAKE_CUDA_FLAGS="--extended-lambda --threads 2" -DCMAKE_CUDA_HOST_COMPILER=g++-12 -DCMAKE_CXX_COMPILER=g++-12 -DCMAKE_CUDA_ARCHITECTURES=native && cmake --build "$DIR" $CMT && ctest --test-dir "$DIR" $CTR )
(DIR=.build.nvc++26; [ -d "$DIR" ] || cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=Release -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_CXX_STANDARD=20 -DBLA_PREFER_PKGCONFIG=ON -DCMAKE_CXX_COMPILER=/opt/nvidia/hpc_sdk/Linux_x86_64/2026/compilers/bin/nvc++ && cmake --build "$DIR" $CMT && ctest --test-dir "$DIR" $CTR )
(DIR=.build.culang; [ -d "$DIR" ] || cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=Release -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DENABLE_CUDA=1 -DCMAKE_CUDA_COMPILER=clang++-20 -DCMAKE_CUDA_HOST_COMPILER=clang++-20 -DCMAKE_CXX_COMPILER=clang++-20 -DCMAKE_CUDA_FLAGS="-Wno-unknown-cuda-version" -DCMAKE_CUDA_ARCHITECTURES=native && cmake --build "$DIR" $CMT && ctest --test-dir "$DIR" $CTR )
fi
(DIR=.build.g++.plus; [ -d "$DIR" ] || CXX=g++ cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=Release -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_CXX_STANDARD=23 -DDISABLE_MPI=1 -DBLA_VENDOR=OpenBLAS -DCMAKE_CXX_FLAGS="-D_GLIBCXX_DEBUG=1 -D_FORTIFY_SOURCE=3 -DRUNNING_ON_VALGRIND -fconcepts-diagnostics-depth=4 -fimplicit-constexpr -Wlto-type-mismatch -Wodr -Wno-analyzer-null-dereference -Wno-analyzer-possible-null-dereference -Wno-analyzer-malloc-leak -Wno-analyzer-use-of-uninitialized-value -Wno-analyzer-use-after-free" && cmake --build "$DIR" $CMT && PMIX_MCA_gds=hash ctest --test-dir "$DIR" --overwrite MemoryCheckCommandOptions="--trace-children=yes --leak-check=full --track-origins=yes --show-leak-kinds=all --errors-for-leak-kinds=all --gen-suppressions=all --error-exitcode=1" --overwrite MemoryCheckSuppressionFile=$PWD/.valgrind-suppressions -T memcheck $CTR )
(DIR=.build.clang++.plus; [ -d "$DIR" ] || CXX=clang++ cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=Release -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_CXX_STANDARD=20 -DDISABLE_MPI=1 -DBLA_VENDOR=Generic -DCMAKE_CXX_CLANG_TIDY="clang-tidy" -DCMAKE_CXX_FLAGS="-g -fsanitize=address,undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer -DUBSAN=1" -DCMAKE_EXE_LINKER_FLAGS="-fsanitize=address,undefined" && cmake --build "$DIR" $CMT && ctest --test-dir "$DIR" $CTR )
else
# brew install boost ccache clang-tidy cmake cppcheck cpplint ninja llvm@19 llvm@16
# ln -s "$(brew --prefix llvm)/bin/clang-tidy" "/usr/local/bin/clang-tidy"
# git clone thrust; cd thrust; mkdir build; cd build; cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$HOME -DTHRUST_ENABLE_HEADER_TESTING=OFF -DTHRUST_ENABLE_TESTING=OFF -DTHRUST_ENABLE_EXAMPLES=OFF
#$(brew --prefix)/opt/llvm@20/bin/clang-format --dry-run -Werror include/**/*.hpp test/*.cpp
(DIR=.build.c++.std23; [ -d "$DIR" ] || CXX=c++ CXXFLAGS="-fexperimental-library" cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DENABLE_TBLIS=ON -DCMAKE_CXX_STANDARD=23 && cmake --build "$DIR" $CMT && ctest --test-dir "$DIR" $CTR )
(DIR=.build.c++.asan; [ -d "$DIR" ] || CXX=c++ cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=Release -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DOpenMP_ROOT=/opt/homebrew/opt/libomp -DENABLE_TBLIS=ON -DCMAKE_CXX_STANDARD=20 -DCMAKE_CXX_FLAGS="-D_LIBCPP_DEBUG=1 -fsanitize=undefined -fsanitize=pointer-overflow -fsanitize-trap=pointer-overflow -fsanitize=address -fno-omit-frame-pointer -fsanitize=signed-integer-overflow" && cmake --build "$DIR" $CMT && ASAN_OPTIONS="new_delete_type_mismatch=1" ctest --test-dir "$DIR" $CTR )
#(DIR=.build.g++-14; [ -d "$DIR" ] || CXX=g++-14 cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=Release -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DOpenMP_ROOT=/opt/homebrew/opt/libomp -DCMAKE_CXX_STANDARD=23 -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=TRUE -DCMAKE_CXX_FLAGS="-D_GLIBCXX_ASSERTIONS -D_GLIBCXX_DEBUG=1 -D_FORTIFY_SOURCE=3" && cmake --build "$DIR" $CMT && ctest --test-dir "$DIR" $CTR )
(DIR=.build.c++.plus; [ -d "$DIR" ] || CXX=c++ cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DOpenMP_ROOT=/opt/homebrew/opt/libomp -DCMAKE_CXX_CPPLINT="cpplint;--quiet" -DCMAKE_CXX_FLAGS="-DCPPCHECK=1 -Werror=deprecated-declarations" -DCMAKE_CXX_CPPCHECK="cppcheck;-DCPPCHECK=1;--enable=all;--suppressions-list=$PWD/.cppcheck-suppressions;--checkers-report=cppcheck.report;--inline-suppr;--std=c++17;--error-exitcode=1" -DCMAKE_LINK_WHAT_YOU_USE=ON -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE="include-what-you-use;-Xiwyu;--mapping_file=/Users/correatedesco1/boost-multi/.iwyu-test.imp;-Xiwyu;--no_fwd_decls;-Xiwyu;-Werror" && cmake --build "$DIR" $CMT --verbose --parallel && ctest --test-dir "$DIR" $CTR )
(DIR=.build.c++.std26; [ -d "$DIR" ] || CXX=clang++ cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=Release -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DCMAKE_CXX_STANDARD=26 && cmake --build "$DIR" $CMT && ctest --test-dir "$DIR" $CTR )
if [[ $(uname -m) == 'arm64' ]]; then
(DIR=.build.c++.m32; [ -d "$DIR" ] || CXX=c++ cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=Release -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DOpenMP_ROOT=/opt/homebrew/opt/libomp -DCMAKE_CXX_FLAGS="-m32" -DDISABLE_TBLIS=ON && cmake --build "$DIR" $CMT && ctest --test-dir "$DIR" $CTR )
(DIR=.build.c++.tidy; [ -d "$DIR" ] || CXX=c++ cmake -S . -B "$DIR" -DCMAKE_BUILD_TYPE=Release -DCMAKE_COMPILE_WARNING_AS_ERROR=ON -DOpenMP_ROOT=/opt/homebrew/opt/libomp -DDISABLE_TBLIS=ON -DCMAKE_CXX_CLANG_TIDY=clang-tidy && cmake --build "$DIR" $CMT && ctest --test-dir "$DIR" $CTR )
fi
fi
ccache -s