diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index a8507a732..48552911b 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -29,16 +29,11 @@ jobs: - uses: Swatinem/rust-cache@v2 with: cache-on-failure: true - - name: Install cross main - id: cross_main - run: | - cargo install cross --git https://github.com/cross-rs/cross - name: Log in to Docker run: | echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io --username ${DOCKER_USERNAME} --password-stdin - name: Set up Docker builder run: | - docker run --privileged --rm tonistiigi/binfmt --install arm64,amd64 - docker buildx create --use --name cross-builder + docker buildx create --use --name builder - name: Build and push nanoreth image run: make IMAGE_NAME=$IMAGE_NAME DOCKER_IMAGE_NAME=$DOCKER_IMAGE_NAME PROFILE=maxperf docker-build-push-latest \ No newline at end of file diff --git a/Cross.toml b/Cross.toml deleted file mode 100644 index db6597c56..000000000 --- a/Cross.toml +++ /dev/null @@ -1,46 +0,0 @@ -[build] -pre-build = [ - # Use HTTPS for package sources - "apt-get update && apt-get install --assume-yes --no-install-recommends ca-certificates", - # "find /etc/apt/ -type f \\( -name '*.list' -o -name '*.sources' \\) -exec sed -i 's|http://|https://|g' {} +", - - # Configure APT retries and timeouts to handle network issues - "echo 'Acquire::Retries \"3\";' > /etc/apt/apt.conf.d/80-retries", - "echo 'Acquire::http::Timeout \"60\";' >> /etc/apt/apt.conf.d/80-retries", - "echo 'Acquire::ftp::Timeout \"60\";' >> /etc/apt/apt.conf.d/80-retries", - - # rust-bindgen dependencies: llvm-dev libclang-dev (>= 10) clang (>= 10) - # See: https://github.com/cross-rs/cross/wiki/FAQ#using-clang--bindgen for - # recommended clang versions for the given cross and bindgen version. - "apt-get update && apt-get install --assume-yes --no-install-recommends llvm-dev libclang-dev clang", -] - -[target.x86_64-pc-windows-gnu] -# Why do we need a custom Dockerfile on Windows: -# 1. `reth-libmdbx` stopped working with MinGW 9.3 that cross image comes with. -# 2. To be able to update the version of MinGW, we need to also update the Ubuntu that the image is based on. -# -# Also see https://github.com/cross-rs/cross/issues/1667 -# Inspired by https://github.com/cross-rs/cross/blob/9e2298e17170655342d3248a9c8ac37ef92ba38f/docker/Dockerfile.x86_64-pc-windows-gnu#L51 -dockerfile = "./Dockerfile.x86_64-pc-windows-gnu" - -[target.riscv64gc-unknown-linux-gnu] -image = "ubuntu:24.04" -pre-build = [ - "apt update", - "apt install --yes gcc gcc-riscv64-linux-gnu libclang-dev make", -] -env.passthrough = [ - "CARGO_TARGET_RISCV64GC_UNKNOWN_LINUX_GNU_LINKER=riscv64-linux-gnu-gcc", -] - -[build.env] -passthrough = ["JEMALLOC_SYS_WITH_LG_PAGE"] - -# Use specific Docker images for Linux targets to avoid GLIBC compatibility issues -# TODO remove this when cross has more stable release -[target.x86_64-unknown-linux-gnu] -image = "ghcr.io/cross-rs/x86_64-unknown-linux-gnu:0.2.5" - -[target.aarch64-unknown-linux-gnu] -image = "ghcr.io/cross-rs/aarch64-unknown-linux-gnu:0.2.5" \ No newline at end of file diff --git a/Dockerfile.cross b/Dockerfile.cross deleted file mode 100644 index d24942f55..000000000 --- a/Dockerfile.cross +++ /dev/null @@ -1,18 +0,0 @@ -# This image is meant to enable cross-architecture builds. -# It assumes the reth binary has already been compiled for `$TARGETPLATFORM` and is -# locatable in `./dist/bin/$TARGETARCH` -FROM --platform=$TARGETPLATFORM ubuntu:22.04 - -LABEL org.opencontainers.image.source=https://github.com/hl-archive-node/nanoreth -LABEL org.opencontainers.image.licenses="MIT OR Apache-2.0" - -# Install root certificates for aws sdk to work -RUN apt-get update && apt-get install -y ca-certificates && update-ca-certificates - -# Filled by docker buildx -ARG TARGETARCH - -COPY ./dist/bin/$TARGETARCH/reth-hl /usr/local/bin/reth-hl - -EXPOSE 9001 8545 8546 -ENTRYPOINT ["/usr/local/bin/reth"] \ No newline at end of file diff --git a/Makefile b/Makefile index 7919afb73..251397e19 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,8 @@ # Modifed from reth Makefile .DEFAULT_GOAL := help +GIT_SHA ?= $(shell git rev-parse HEAD) +GIT_TAG ?= $(shell git describe --tags --abbrev=0) BIN_DIR = "dist/bin" # List of features to use when building. Can be overridden via the environment. @@ -211,32 +213,6 @@ check-features: --package reth-primitives \ --feature-powerset -# 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. - -# For aarch64, set the page size for jemalloc. -# When cross compiling, we must compile jemalloc with a large page size, -# otherwise it will use the current system's page size which may not work -# on other systems. JEMALLOC_SYS_WITH_LG_PAGE=16 tells jemalloc to use 64-KiB -# pages. See: https://github.com/paradigmxyz/reth/issues/6742 -build-aarch64-unknown-linux-gnu: export JEMALLOC_SYS_WITH_LG_PAGE=16 - -# No jemalloc on Windows -build-x86_64-pc-windows-gnu: FEATURES := $(filter-out jemalloc jemalloc-prof,$(FEATURES)) - -# 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-%: - RUSTFLAGS="-C link-arg=-lgcc -Clink-arg=-static-libgcc" \ - cross build --bin reth-hl --target $* --features "$(FEATURES)" --profile "$(PROFILE)" - ##@ Docker # Note: This requires a buildx builder with emulation support. For example: @@ -271,20 +247,15 @@ docker-build-push-latest: ## Build and push a cross-arch Docker image tagged wit docker-build-push-nightly: ## Build and push cross-arch Docker image tagged with the latest git tag with a `-nightly` suffix, and `latest-nightly`. $(call docker_build_push,nightly,nightly) -# Create a cross-arch Docker image with the given tags and push it +# Create a Docker image using the main Dockerfile define docker_build_push - $(MAKE) build-x86_64-unknown-linux-gnu - mkdir -p $(BIN_DIR)/amd64 - cp $(CARGO_TARGET_DIR)/x86_64-unknown-linux-gnu/$(PROFILE)/reth-hl $(BIN_DIR)/amd64/reth-hl - - $(MAKE) build-aarch64-unknown-linux-gnu - mkdir -p $(BIN_DIR)/arm64 - cp $(CARGO_TARGET_DIR)/aarch64-unknown-linux-gnu/$(PROFILE)/reth-hl $(BIN_DIR)/arm64/reth-hl - - docker buildx build --file ./Dockerfile.cross . \ - --platform linux/amd64,linux/arm64 \ + docker buildx build --file ./Dockerfile . \ + --platform linux/amd64 \ --tag $(DOCKER_IMAGE_NAME):$(1) \ --tag $(DOCKER_IMAGE_NAME):$(2) \ + --build-arg BUILD_PROFILE=$(PROFILE) \ + --build-arg FEATURES=$(FEATURES) \ + --build-arg RUSTFLAGS=-C target-cpu=native \ --provenance=false \ --push endef