Updated the README to clarify proper cleaning procedures for the build directory, emphasizing the use of 'make clean' and consequences of manual deletion. Modified the Makefile so 'clean-build' now depends on 'clean' for a more thorough cleanup. Updated docs submodule to latest commit. |
||
|---|---|---|
| .github | ||
| .idea | ||
| cmake | ||
| contrib | ||
| docs@e40a78d502 | ||
| resources | ||
| snap | ||
| src | ||
| tests | ||
| utils | ||
| .clang-format | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| .gitmodules | ||
| CMakeLists.txt | ||
| CMakePresets.json | ||
| conanfile.py | ||
| ConanPresets.json | ||
| docker-compose.yml | ||
| LICENSE.txt | ||
| Makefile | ||
| README.md | ||
Dependencies
| component / version | minimum (not recommended but may work) |
recommended | most recent of what we have ever tested |
|---|---|---|---|
| gcc (Linux) | 8.4.0 | 9.4.0 | 12.3.0 |
| llvm/clang (Linux) | UNKNOWN | 7.0.1 | 8.0.0 |
| MSVC (Windows) | 2017 (15.9.30) | 2022 (17.11.5) | 2022 (17.12.3) |
| XCode (macOS) | 12.3 | 14.3 | 15.2 |
| CMake | 3.26.3 | 3.26.3 | 3.31.6 |
Cloning
Be sure to clone the repository properly, with --recursive flag, or you'll get angry:
git clone --recursive https://github.com/letheanVPN/blockchain.git
Building
The project uses a Makefile that provides a simple and powerful interface for building. It automatically handles dependency installation with Conan and compilation with CMake.
Simple Workflow Builds (Recommended)
For most use cases, these two commands are all you need. They handle the entire build process from start to finish.
-
Build for Mainnet:
make mainnet -
Build for Testnet:
make testnet
Custom Builds
You can use the make build target with variables for more control over the final binaries.
Creating Release Packages
To create distributable packages (e.g., .zip, .msi, .pkg, .deb), run the release target. This will build the project, build the documentation, and then package everything.
make release TESTNET=1
The final packages will be located in the build/packages/ directory
Advanced Build Customization (Makefile Variables)
For advanced use cases, you can override variables in the Makefile to customize the build process.
- Build a
testnetversion:make build TESTNET=1 - Build a statically-linked version:
make build STATIC=1 - Build a Debug build with 8 compile threads:
make build BUILD_TYPE=Debug CPU_CORES=8 - Use custom CMakePresets:
make build PRESET_CONFIGURE=my-config-preset PRESET_BUILD=my-build-preset
| Variable | Description | Default Value |
|---|---|---|
BUILD_TYPE |
Sets the build configuration (e.g., Release, Debug). |
Release |
TESTNET |
Set to 1 to build for the test network. |
0 |
STATIC |
Set to 1 to link libraries statically. |
0 |
CPU_CORES |
Number of CPU cores to use for parallel compilation. | Auto-detected |
BUILD_VERSION |
The version string to embed in the binaries. | 6.0.1 |
BUILD_FOLDER |
The output directory for the build. | build/release |
PRESET_CONFIGURE |
The CMake preset to use for the configure step. |
conan-release |
PRESET_BUILD |
The CMake preset to use for the build step. |
conan-release |
CONAN_CACHE |
The path for the local Conan cache, where the dependencies are stored. | ./build/sdk |
CONAN_EXECUTABLE |
The path to the usable Conan executable. | ./build/bin/conan |
CONAN_URL |
The URL for the Conan remote repository. | artifacts.host.uk.com |
CONAN_USER |
The username for the Conan remote. | public |
CONAN_PASSWORD |
The password for the Conan remote. |
Cleaning the Build Directory
ALWAYS USE make clean to clean the build directory, manually deleting the build/release, build/SOME_FOLDER will cause you issues.
Our make clean triggers a cmake script that completely resets the build directory & dynamically added CMakePresets to its cached warm-up state,
the selective clean script can be edited here: cmake/CleanBuild.cmake or directly run from the repo root cmake -P cmake/CleanBuild.cmake
You can NUKE the build directory with make clean-build which is rm -rf build.
If you do manually delete build folders and get CMake errors (if you have compiled anything previously, you will),
the ConanPresets.json file has entries in the include property, delete them all and try again.
This happens because CMakePresets.json includes ConanPresets.json, that has the list of toolchains to use that gets populated during the CMake config step, when you manually delete a folder, the toolchain is now a broken path, and CMake throws a fatal error.