Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

*: add workflow in CMakePresets #9304

Merged
merged 2 commits into from
Aug 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
198 changes: 197 additions & 1 deletion CMakePresets.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"version": 3,
"version": 6,
"cmakeMinimumRequired": {
"major": 3,
"minor": 23,
Expand Down Expand Up @@ -127,5 +127,201 @@
"cacheVariables": {},
"binaryDir": "${sourceDir}/cmake-build-release"
}
],
"buildPresets": [
{
"name": "dev",
"displayName": "Build tiflash binary with debug info and tests enabled",
"configurePreset": "dev",
"targets": ["tiflash"]
},
{
"name": "unit-tests",
"displayName": "Build dbms unit tests",
"configurePreset": "dev",
"targets": ["gtests_dbms"]
},
{
"name": "unit-tests-all",
"displayName": "Build all unit tests",
"configurePreset": "dev",
"targets": ["gtests_dbms, gtests_libdaemon, gtests_libcommon"]
},
{
"name": "dev-coverage",
"displayName": "Build dbms unit tests with code coverage",
"configurePreset": "dev-coverage",
"targets": ["gtests_dbms"]
},
{
"name": "dev-coverage-all",
"displayName": "Build all unit tests with code coverage",
"configurePreset": "dev-coverage",
"targets": ["gtests_dbms, gtests_libdaemon, gtests_libcommon"]
},
{
"name": "release",
"displayName": "Build tiflash binary without debug info",
"configurePreset": "release",
"targets": ["tiflash"]
},
{
"name": "asan",
"displayName": "Build dbms Address Sanitizer tests",
"configurePreset": "asan",
"targets": ["gtests_dbms"]
},
{
"name": "asan-all",
"displayName": "Build all Address Sanitizer tests",
"configurePreset": "asan",
"targets": ["gtests_dbms, gtests_libdaemon, gtests_libcommon"]
},
{
"name": "tsan",
"displayName": "Build dbms Thread Sanitizer tests",
"configurePreset": "tsan",
"targets": ["gtests_dbms"]
},
{
"name": "tsan-all",
"displayName": "Build all Thread Sanitizer tests",
"configurePreset": "tsan",
"targets": ["gtests_dbms, gtests_libdaemon, gtests_libcommon"]
},
{
"name": "benchmarks",
"displayName": "Build benchmarks",
"configurePreset": "benchmarks",
"targets": ["bench_dbms"]
}
],
"workflowPresets": [
{
"name": "dev",
"displayName": "Build debug binary workflow",
"steps": [
{
"type": "configure",
"name": "dev"
},
{
"type": "build",
"name": "dev"
}
]
},
{
"name": "unit-tests",
"displayName": "Build dbms unit tests workflow",
"steps": [
{
"type": "configure",
"name": "dev"
},
{
"type": "build",
"name": "unit-tests"
}
]
},
{
"name": "unit-tests-all",
"displayName": "Build all unit tests workflow",
"steps": [
{
"type": "configure",
"name": "dev"
},
{
"type": "build",
"name": "unit-tests-all"
}
]
},
{
"name": "benchmarks",
"displayName": "Build benchmarks workflow",
"steps": [
{
"type": "configure",
"name": "benchmarks"
},
{
"type": "build",
"name": "benchmarks"
}
]
},
{
"name": "asan-tests",
"displayName": "Build dbms Address Sanitizer tests workflow",
"steps": [
{
"type": "configure",
"name": "asan"
},
{
"type": "build",
"name": "asan"
}
]
},
{
"name": "asan-tests-all",
"displayName": "Build all Address Sanitizer tests workflow",
"steps": [
{
"type": "configure",
"name": "asan"
},
{
"type": "build",
"name": "asan-all"
}
]
},
{
"name": "tsan-tests",
"displayName": "Build dbms Thread Sanitizer tests workflow",
"steps": [
{
"type": "configure",
"name": "tsan"
},
{
"type": "build",
"name": "tsan"
}
]
},
{
"name": "tsan-tests-all",
"displayName": "Build all Thread Sanitizer tests workflow",
"steps": [
{
"type": "configure",
"name": "tsan"
},
{
"type": "build",
"name": "tsan-all"
}
]
},
{
"name": "release",
"displayName": "Build release binary workflow",
"steps": [
{
"type": "configure",
"name": "release"
},
{
"type": "build",
"name": "release"
}
]
}
]
}
37 changes: 12 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,21 +149,14 @@ To build TiFlash for development:

```shell
# In the TiFlash repository root:
mkdir cmake-build-debug # The directory name can be customized
cd cmake-build-debug

cmake .. -GNinja -DCMAKE_BUILD_TYPE=DEBUG

ninja tiflash
cmake --workflow --preset dev
```

Note: In Linux, usually you need to explicitly specify to use LLVM.

```shell
# In cmake-build-debug directory:
cmake .. -GNinja -DCMAKE_BUILD_TYPE=DEBUG \
-DCMAKE_C_COMPILER=/usr/bin/clang-17 \
-DCMAKE_CXX_COMPILER=/usr/bin/clang++-17
export CC="/usr/bin/clang-17"
export CXX="/usr/bin/clang++-17"
```

In MacOS, if you install llvm clang, you need to explicitly specify to use llvm clang.
Expand All @@ -177,7 +170,12 @@ export CXX="/opt/homebrew/opt/llvm/bin/clang++"

Or use `CMAKE_C_COMPILER` and `CMAKE_CXX_COMPILER` to specify the compiler, like this:
```shell
mkdir cmake-build-debug
cd cmake-build-debug

cmake .. -GNinja -DCMAKE_BUILD_TYPE=DEBUG -DCMAKE_C_COMPILER=/opt/homebrew/opt/llvm/bin/clang -DCMAKE_CXX_COMPILER=/opt/homebrew/opt/llvm/bin/clang++

ninja tiflash
```

After building, you can get TiFlash binary in `dbms/src/Server/tiflash` in the `cmake-build-debug` directory.
Expand Down Expand Up @@ -270,11 +268,8 @@ cmake .. -GNinja -DCMAKE_BUILD_TYPE=DEBUG -DFOO=BAR
Unit tests are automatically enabled in debug profile. To build these unit tests:

```shell
cd cmake-build-debug
cmake .. -GNinja -DCMAKE_BUILD_TYPE=DEBUG
ninja gtests_dbms # Most TiFlash unit tests
ninja gtests_libdaemon # Settings related tests
ninja gtests_libcommon
# In the TiFlash repository root:
cmake --workflow --preset unit-tests-all
```

Then, to run these unit tests:
Expand All @@ -296,12 +291,7 @@ To build unit test executables with sanitizer enabled:

```shell
# In the TiFlash repository root:
mkdir cmake-build-sanitizer
cd cmake-build-sanitizer
cmake .. -GNinja -DENABLE_TESTS=ON -DCMAKE_BUILD_TYPE=ASan # or TSan
ninja gtests_dbms
ninja gtests_libdaemon
ninja gtests_libcommon
cmake --workflow --preset asan-tests-all # or tsan-tests-all
```

There are known false positives reported from leak sanitizer (which is included in address sanitizer). To suppress these errors, set the following environment variables before running the executables:
Expand Down Expand Up @@ -359,10 +349,7 @@ To build micro benchmark tests, you need release profile and tests enabled:

```shell
# In the TiFlash repository root:
mkdir cmake-build-release
cd cmake-build-release
cmake .. -GNinja -DCMAKE_BUILD_TYPE=RELEASE -DENABLE_TESTS=ON
ninja bench_dbms
cmake --workflow --preset benchmarks
```

Then, to run these micro benchmarks:
Expand Down