> running-make-to-build
how to run make correctly to get a good build, and otherwise understand the build system
curl "https://skillshub.wtf/stellar/stellar-core/running-make-to-build?format=md"Overview
The build is a recursive make structure, with several projects vendored in to
lib that use their own Makefiles and also one primary src/Makefile.am that
defines most of the build.
- ALWAYS run
make -j $(nproc)to get full parallelism - ALWAYS run from the top level directory
- ALWAYS run with
2>&1 | tail -Nto limit output - ALWAYS run
git add <somefile> && ./make-mksafter adding<somefile>to ensure it is included in the build. - NEVER run from a subdirectory
- NEVER run with
make -C <somedir>for any other directory - NEVER run
cargomanually, letmakerun it - NEVER edit
MakefileorMakefile.in, only ever editMakefile.am
Targets
The main targets are:
all-- the implicit target, buildssrc/stellar-corecheck-- buildsallthen runs unit and integration testsclean-- removes build artifactsformat-- auto-formats source code with standard rules
If anything goes wrong or is confusing in the build, start by running make clean and trying again. You should have configured with --enable-ccache which
means that rebuilding will typically be very cheap. Especially if you run with
make -j $(nproc)
Rust build
The src/Makefile.am also delegates to cargo to build the rust components
of stellar-core in src/rust as well as all the submodules in src/rust/soroban.
The integration is quite subtle. You should always let src/Makefile.am handle
invoking cargo.
Generated files
Several source files are generated. All .x files in src/protocol-{curr,next}
are turned into .cpp and .h files by the xdrpp code-generator in lib/xdrpp.
Parts of the XDR query system in src/util/xdrquery are built by flex and
bison.
Files like src/main/StellarCoreVersion.cpp bake the current version
information into a string constant in stellar-core.
And finally the rust bridge src/rust/RustBridge.{cpp,h} is generated by the
cxxbridge tool from src/rust/bridge.rs.
Editing the makefiles
Most of the time you won't need to edit Makefile.am or src/Makefile.am at all.
Files included in the build are driven by the script ./make-mks which
lists files tracked by git and defines makefile variables based on them.
As soon as you add a .cpp or .h file to git and re-run ./make-mks
it will be added to the build.
> related_skills --same-repo
> validating-a-change
comprehensive validation of a change to ensure it is correct and ready for a pull request
> regenerating a technical summary of stellar-core
Instructions for regenerating the full set of subsystem and whole-system technical summary skill documents for stellar-core
> subsystem-summary-of-work
read this skill for a token-efficient summary of the work subsystem
> subsystem-summary-of-util
read this skill for a token-efficient summary of the util subsystem