mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
81 lines
2.7 KiB
Makefile
81 lines
2.7 KiB
Makefile
# Heavily inspired by Lighthouse: https://github.com/sigp/lighthouse/blob/693886b94176faa4cb450f024696cb69cda2fe58/Makefile
|
|
|
|
GIT_TAG := $(shell git describe --tags --candidates 1)
|
|
BIN_DIR = "bin"
|
|
|
|
X86_64_TAG = "x86_64-unknown-linux-gnu"
|
|
BUILD_PATH_X86_64 = "target/$(X86_64_TAG)/release"
|
|
AARCH64_TAG = "aarch64-unknown-linux-gnu"
|
|
BUILD_PATH_AARCH64 = "target/$(AARCH64_TAG)/release"
|
|
|
|
# List of features to use when building natively. Can be overriden via the environment.
|
|
# No jemalloc on Windows
|
|
ifeq ($(OS),Windows_NT)
|
|
FEATURES?=
|
|
else
|
|
FEATURES?=jemalloc
|
|
endif
|
|
|
|
# List of features to use when cross-compiling. Can be overridden via the environment.
|
|
CROSS_FEATURES ?= jemalloc
|
|
|
|
# Cargo profile for Cross builds. Default is for local builds, CI uses an override.
|
|
CROSS_PROFILE ?= release
|
|
|
|
# Cargo profile for regular builds.
|
|
PROFILE ?= release
|
|
|
|
# Extra flags for Cargo
|
|
CARGO_INSTALL_EXTRA_FLAGS ?=
|
|
|
|
# Builds the reth binary in release (optimized).
|
|
#
|
|
# Binaries will most likely be found in `./target/release`
|
|
install:
|
|
cargo install --path reth --force --locked \
|
|
--features "$(FEATURES)" \
|
|
--profile "$(PROFILE)" \
|
|
$(CARGO_INSTALL_EXTRA_FLAGS)
|
|
|
|
# The following commands use `cross` to build a cross-compile.
|
|
#
|
|
# These commands require that:
|
|
#
|
|
# - `cross` is installed (`cargo install cross`).
|
|
# - Docker is running.
|
|
# - The current user is in the `docker` group.
|
|
#
|
|
# The resulting binaries will be created in the `target/` directory.
|
|
#
|
|
# Note: The additional rustc compiler flags are for intrinsics needed by MDBX.
|
|
# See: https://github.com/cross-rs/cross/wiki/FAQ#undefined-reference-with-build-std
|
|
build-x86_64 build-aarch64: export RUSTFLAGS=-C link-arg=-lgcc -Clink-arg=-static-libgcc
|
|
|
|
build-x86_64:
|
|
cross build --bin reth --target x86_64-unknown-linux-gnu --features "$(CROSS_FEATURES)" --profile "$(CROSS_PROFILE)"
|
|
build-aarch64:
|
|
cross build --bin reth --target aarch64-unknown-linux-gnu --features "$(CROSS_FEATURES)" --profile "$(CROSS_PROFILE)"
|
|
|
|
# Create a `.tar.gz` containing a binary for a specific target.
|
|
define tarball_release_binary
|
|
cp $(1)/reth $(BIN_DIR)/reth
|
|
cd $(BIN_DIR) && \
|
|
tar -czf reth-$(GIT_TAG)-$(2)$(3).tar.gz reth && \
|
|
rm reth
|
|
endef
|
|
|
|
# Create a series of `.tar.gz` files in the BIN_DIR directory, each containing
|
|
# a `reth` binary for a different target.
|
|
#
|
|
# The current git tag will be used as the version in the output file names. You
|
|
# will likely need to use `git tag` and create a semver tag (e.g., `v0.2.3`).
|
|
build-release-tarballs:
|
|
[ -d $(BIN_DIR) ] || mkdir -p $(BIN_DIR)
|
|
$(MAKE) build-x86_64
|
|
$(call tarball_release_binary,$(BUILD_PATH_X86_64),$(X86_64_TAG),"")
|
|
$(MAKE) build-aarch64
|
|
$(call tarball_release_binary,$(BUILD_PATH_AARCH64),$(AARCH64_TAG),"")
|
|
|
|
# Performs a `cargo` clean
|
|
clean:
|
|
cargo clean
|