-
Notifications
You must be signed in to change notification settings - Fork 645
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1011 from akx/tweak-cmake-build-1
Optimize Cmake build slightly
- Loading branch information
Showing
2 changed files
with
22 additions
and
35 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -6,6 +6,10 @@ on: | |
pull_request: | ||
branches: [ "main" ] | ||
|
||
concurrency: | ||
group: cmake-${{ github.ref }} | ||
cancel-in-progress: true | ||
|
||
jobs: | ||
build: | ||
runs-on: ${{ matrix.os }} | ||
|
@@ -16,29 +20,11 @@ jobs: | |
|
||
matrix: | ||
os: [ubuntu-latest, windows-latest] | ||
python-version: ['3.10', '3.11'] | ||
cuda-version: ['11.8', '12.1'] | ||
build_type: [Release] | ||
c_compiler: [gcc, cl] | ||
include: | ||
- os: windows-latest | ||
c_compiler: cl | ||
cpp_compiler: cl | ||
- os: ubuntu-latest | ||
c_compiler: gcc | ||
cpp_compiler: g++ | ||
exclude: | ||
- os: ubuntu-latest | ||
c_compiler: cl | ||
- os: windows-latest | ||
c_compiler: gcc | ||
|
||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Set up Python ${{ matrix.python-version }} | ||
uses: actions/setup-python@v5 | ||
with: | ||
python-version: ${{ matrix.python-version }} | ||
|
||
- name: Set up MSVC | ||
if: matrix.os == 'windows-latest' | ||
|
@@ -61,7 +47,7 @@ jobs: | |
environment-file: environment-bnb.yml | ||
use-only-tar-bz2: false | ||
auto-activate-base: true | ||
python-version: ${{ matrix.python-version }} | ||
python-version: "3.10" | ||
mamba-version: "*" | ||
|
||
- name: Set reusable strings | ||
|
@@ -97,8 +83,13 @@ jobs: | |
echo CUDA_PATH=$CUDA_HOME >> "$GITHUB_ENV" | ||
if [ "${{ matrix.os }}" = "windows-latest" ]; then | ||
echo CXX_COMPILER=cl >> "$GITHUB_ENV" | ||
echo C_COMPILER=cl >> "$GITHUB_ENV" | ||
# without -DCMAKE_CUDA_COMPILER=nvcc, cmake config always fail for cuda-11.8 | ||
echo DCMAKE_CUDA_COMPILER=-DCMAKE_CUDA_COMPILER=nvcc >> "$GITHUB_ENV" | ||
else | ||
echo CXX_COMPILER=g++ >> "$GITHUB_ENV" | ||
echo C_COMPILER=gcc >> "$GITHUB_ENV" | ||
fi | ||
nvcc --version | ||
|
@@ -109,26 +100,27 @@ jobs: | |
- name: Prep build | ||
run: python -m pip install cmake==3.27.9 ninja setuptools wheel | ||
|
||
- name: Configure CMake | ||
# TODO: the following steps (CUDA, NOBLASLT, CPU) could be moved to the matrix, so they're built in parallel | ||
|
||
- name: Configure CUDA | ||
run: > | ||
cmake -B ${{ steps.strings.outputs.build-output-dir }} | ||
-G Ninja ${{ env.DCMAKE_CUDA_COMPILER }} | ||
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} | ||
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }} | ||
-DCMAKE_CXX_COMPILER=${{ env.CXX_COMPILER }} | ||
-DCMAKE_C_COMPILER=${{ env.C_COMPILER }} | ||
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | ||
-DCOMPUTE_CAPABILITY="50;52;60;61;62;70;72;75;80;86;87;89;90" | ||
-S ${{ github.workspace }} | ||
- name: Build | ||
# Build your program with the given configuration. Note that --config is needed because the default Windows generator is a multi-config generator (Visual Studio generator). | ||
- name: Build CUDA | ||
run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} | ||
|
||
- name: Configure NOBLASLT | ||
run: > | ||
cmake -B ${{ steps.strings.outputs.build-output-dir }} | ||
-G Ninja ${{ env.DCMAKE_CUDA_COMPILER }} | ||
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} | ||
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }} | ||
-DCMAKE_CXX_COMPILER=${{ env.CXX_COMPILER }} | ||
-DCMAKE_C_COMPILER=${{ env.C_COMPILER }} | ||
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | ||
-DCOMPUTE_CAPABILITY="50;52;60;61;62;70;72;75;80;86;87;89;90" | ||
-DNO_CUBLASLT=ON | ||
|
@@ -141,8 +133,8 @@ jobs: | |
run: > | ||
cmake -B ${{ steps.strings.outputs.build-output-dir }} | ||
-G Ninja ${{ env.DCMAKE_CUDA_COMPILER }} | ||
-DCMAKE_CXX_COMPILER=${{ matrix.cpp_compiler }} | ||
-DCMAKE_C_COMPILER=${{ matrix.c_compiler }} | ||
-DCMAKE_CXX_COMPILER=${{ env.CXX_COMPILER }} | ||
-DCMAKE_C_COMPILER=${{ env.C_COMPILER }} | ||
-DCMAKE_BUILD_TYPE=${{ matrix.build_type }} | ||
-DNO_CUBLASLT=ON | ||
-DBUILD_CUDA=OFF | ||
|
@@ -151,12 +143,6 @@ jobs: | |
- name: Build CPU | ||
run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --config ${{ matrix.build_type }} | ||
|
||
- name: Test | ||
working-directory: ${{ steps.strings.outputs.build-output-dir }} | ||
# Execute tests defined by the CMake configuration. Note that --build-config is needed because the default Windows generator is a multi-config generator (Visual Studio generator). | ||
# See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail | ||
run: ctest --build-config ${{ matrix.build_type }} | ||
|
||
- name: Build dist | ||
shell: bash -el {0} | ||
run: | | ||
|
@@ -168,6 +154,6 @@ jobs: | |
- name: Upload Build Artifacts | ||
uses: actions/[email protected] | ||
with: | ||
name: bitsandbytes-${{ matrix.os }}-${{ matrix.python-version }}-${{ matrix.cuda-version }} | ||
name: bitsandbytes-${{ matrix.os }}-${{ matrix.cuda-version }} | ||
path: | | ||
${{ github.workspace }}/dist/ |