diff --git a/.github/actions/dockerfiles/Dockerfile.alpine-binary b/.github/actions/dockerfiles/Dockerfile.alpine-binary index 2388ffa031..eae3a123bf 100644 --- a/.github/actions/dockerfiles/Dockerfile.alpine-binary +++ b/.github/actions/dockerfiles/Dockerfile.alpine-binary @@ -7,16 +7,19 @@ ARG TARGETPLATFORM ARG BUILDPLATFORM ARG TARGETARCH ARG TARGETVARIANT -ARG REPO=stacks-network/stacks-core +ARG REPO -RUN case ${TARGETARCH} in \ - "amd64") BIN_ARCH=linux-musl-x64 ;; \ - "arm64") BIN_ARCH=linux-musl-arm64 ;; \ - "arm") BIN_ARCH=linux-musl-armv7 ;; \ - "*") exit 1 ;; \ +RUN case ${TARGETPLATFORM} in \ + linux/amd64/v2) BIN_ARCH=linux-glibc-x64-v2 ;; \ + linux/amd64*) BIN_ARCH=linux-glibc-x64 ;; \ + linux/arm64*) BIN_ARCH=linux-glibc-arm64 ;; \ + linux/arm/v7) BIN_ARCH=linux-glibc-armv7 ;; \ + *) exit 1 ;; \ esac \ - && echo "wget -q https://github.com/${REPO}/releases/download/${TAG}/${BIN_ARCH}.zip -O /${BIN_ARCH}.zip" \ - && wget -q https://github.com/${REPO}/releases/download/${TAG}/${BIN_ARCH}.zip -O /${BIN_ARCH}.zip \ + && echo "TARGETPLATFORM: $TARGETPLATFORM" \ + && echo "BIN_ARCH: $BIN_ARCH" \ + && echo "wget -q https://github.com/${REPO}/releases/download/${TAG}/${BIN_ARCH}.zip -O /${BIN_ARCH}.zip" \ + && wget -q https://github.com/${REPO}/releases/download/${TAG}/${BIN_ARCH}.zip -O /${BIN_ARCH}.zip \ && unzip ${BIN_ARCH}.zip -d /out FROM --platform=${TARGETPLATFORM} alpine diff --git a/.github/actions/dockerfiles/Dockerfile.debian-binary b/.github/actions/dockerfiles/Dockerfile.debian-binary index 4cec3c4391..f446190853 100644 --- a/.github/actions/dockerfiles/Dockerfile.debian-binary +++ b/.github/actions/dockerfiles/Dockerfile.debian-binary @@ -7,16 +7,19 @@ ARG TARGETPLATFORM ARG BUILDPLATFORM ARG TARGETARCH ARG TARGETVARIANT -ARG REPO=stacks-network/stacks-core +ARG REPO -RUN case ${TARGETARCH} in \ - "amd64") BIN_ARCH=linux-musl-x64 ;; \ - "arm64") BIN_ARCH=linux-musl-arm64 ;; \ - "arm") BIN_ARCH=linux-musl-armv7 ;; \ - "*") exit 1 ;; \ +RUN case ${TARGETPLATFORM} in \ + linux/amd64/v2) BIN_ARCH=linux-glibc-x64-v2 ;; \ + linux/amd64*) BIN_ARCH=linux-glibc-x64 ;; \ + linux/arm64*) BIN_ARCH=linux-glibc-arm64 ;; \ + linux/arm/v7) BIN_ARCH=linux-glibc-armv7 ;; \ + *) exit 1 ;; \ esac \ - && echo "wget -q https://github.com/${REPO}/releases/download/${TAG}/${BIN_ARCH}.zip -O /${BIN_ARCH}.zip" \ - && wget -q https://github.com/${REPO}/releases/download/${TAG}/${BIN_ARCH}.zip -O /${BIN_ARCH}.zip \ + && echo "TARGETPLATFORM: $TARGETPLATFORM" \ + && echo "BIN_ARCH: $BIN_ARCH" \ + && echo "wget -q https://github.com/${REPO}/releases/download/${TAG}/${BIN_ARCH}.zip -O /${BIN_ARCH}.zip" \ + && wget -q https://github.com/${REPO}/releases/download/${TAG}/${BIN_ARCH}.zip -O /${BIN_ARCH}.zip \ && unzip ${BIN_ARCH}.zip -d /out FROM --platform=${TARGETPLATFORM} debian:bookworm diff --git a/.github/actions/dockerfiles/Dockerfile.debian-source b/.github/actions/dockerfiles/Dockerfile.debian-source index 13f4553613..c2b6df7e9b 100644 --- a/.github/actions/dockerfiles/Dockerfile.debian-source +++ b/.github/actions/dockerfiles/Dockerfile.debian-source @@ -1,10 +1,13 @@ -FROM rust:bullseye as build +FROM rust:bookworm as build ARG STACKS_NODE_VERSION="No Version Info" ARG GIT_BRANCH='No Branch Info' ARG GIT_COMMIT='No Commit Info' ARG BUILD_DIR=/build ARG TARGET=x86_64-unknown-linux-gnu +# Allow us to override the default `--target-cpu` for the given target triplet +ARG TARGET_CPU +ENV RUSTFLAGS="${TARGET_CPU:+${RUSTFLAGS} -Ctarget-cpu=${TARGET_CPU}}" WORKDIR /src COPY . . diff --git a/.github/workflows/create-source-binary-x64.yml b/.github/workflows/create-source-binary-x64.yml deleted file mode 100644 index a1b435aa5f..0000000000 --- a/.github/workflows/create-source-binary-x64.yml +++ /dev/null @@ -1,78 +0,0 @@ -## Github workflow to create multiarch binaries from source - -name: Create Binaries for x86_64 - -on: - workflow_call: - inputs: - tag: - description: "Tag name of this release (x.y.z)" - required: true - type: string - arch: - description: "Stringified JSON object listing of platform matrix" - required: false - type: string - default: >- - ["linux-glibc-x64", "linux-musl-x64", "macos-x64", "windows-x64"] - cpu: - description: "Stringified JSON object listing of target CPU matrix" - required: false - type: string - default: >- - ["x86-64", "x86-64-v3"] - -## change the display name to the tag being built -run-name: ${{ inputs.tag }} - -concurrency: - group: create-binary-${{ github.head_ref || github.ref || github.run_id}} - ## Only cancel in progress if this is for a PR - cancel-in-progress: ${{ github.event_name == 'pull_request' }} - -jobs: - ## Runs when the following is true: - ## - tag is provided - ## - workflow is building default branch (master) - artifact: - if: | - inputs.tag != '' && - github.ref == format('refs/heads/{0}', github.event.repository.default_branch) - name: Build Binaries - runs-on: ubuntu-latest - strategy: - ## Run a maximum of 10 builds concurrently, using the matrix defined in inputs.arch - max-parallel: 10 - matrix: - platform: ${{ fromJson(inputs.arch) }} - cpu: ${{ fromJson(inputs.cpu) }} - steps: - ## Setup Docker for the builds - - name: Docker setup - uses: stacks-network/actions/docker@main - - ## Build the binaries using defined dockerfiles - - name: Build Binary (${{ matrix.platform }}_${{ matrix.cpu }}) - id: build_binaries - uses: docker/build-push-action@0565240e2d4ab88bba5387d719585280857ece09 # 5.0.0 - with: - file: build-scripts/Dockerfile.${{ matrix.platform }} - outputs: type=local,dest=./release/${{ matrix.platform }} - build-args: | - STACKS_NODE_VERSION=${{ inputs.tag || env.GITHUB_SHA_SHORT }} - OS_ARCH=${{ matrix.platform }} - TARGET_CPU=${{ matrix.cpu }} - GIT_BRANCH=${{ env.GITHUB_REF_SHORT }} - GIT_COMMIT=${{ env.GITHUB_SHA_SHORT }} - - ## Compress the binary artifact - - name: Compress artifact - id: compress_artifact - run: zip --junk-paths ${{ matrix.platform }}_${{ matrix.cpu }} ./release/${{ matrix.platform }}/* - - ## Upload the binary artifact to the github action (used in `github-release.yml` to create a release) - - name: Upload artifact - id: upload_artifact - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3 - with: - path: ${{ matrix.platform }}_${{ matrix.cpu }}.zip diff --git a/.github/workflows/create-source-binary.yml b/.github/workflows/create-source-binary.yml index 068170efc5..0848cf2eb4 100644 --- a/.github/workflows/create-source-binary.yml +++ b/.github/workflows/create-source-binary.yml @@ -9,12 +9,6 @@ on: description: "Tag name of this release (x.y.z)" required: true type: string - arch: - description: "Stringified JSON object listing of platform matrix" - required: false - type: string - default: >- - ["linux-glibc-arm64", "linux-glibc-armv7", "linux-musl-arm64", "linux-musl-armv7"] ## change the display name to the tag being built run-name: ${{ inputs.tag }} @@ -30,7 +24,7 @@ jobs: ## - workflow is building default branch (master) artifact: if: | - inputs.tag != '' && + inputs.tag != '' && github.ref == format('refs/heads/{0}', github.event.repository.default_branch) name: Build Binaries runs-on: ubuntu-latest @@ -38,33 +32,92 @@ jobs: ## Run a maximum of 10 builds concurrently, using the matrix defined in inputs.arch max-parallel: 10 matrix: - platform: ${{ fromJson(inputs.arch) }} + arch: + - linux-musl + - linux-glibc + - macos + - windows + cpu: + - arm64 + - armv7 + - x86-64 ## defaults to x86-64-v3 variant - intel haswell (2013) and newer + # - x86-64-v2 ## intel nehalem (2008) and newer + # - x86-64-v3 ## intel haswell (2013) and newer + # - x86-64-v4 ## intel skylake (2017) and newer + exclude: + - arch: windows # excludes windows-arm64 + cpu: arm64 + - arch: windows # excludes windows-armv7 + cpu: armv7 + - arch: macos # excludes macos-armv7 + cpu: armv7 + steps: ## Setup Docker for the builds - name: Docker setup + id: docker_setup uses: stacks-network/actions/docker@main + - name: Set Local env vars + id: set_env + run: | + case ${{ matrix.cpu }} in + x86-64) + ## default x64 builds to use v3 variant. TARGET_CPU is required to build for v3 via RUSTFLAGS + TARGET_CPU="${{ matrix.cpu }}-v3" + DOCKERFILE_CPU="x64" + ARCHIVE_NAME="x64" + ;; + x86-64-v2) + ## intel nehalem (2008) and newer + TARGET_CPU="${{ matrix.cpu }}" + DOCKERFILE_CPU="x64" + ARCHIVE_NAME="x64-v2" + ;; + x86-64-v3) + ## intel haswell (2013) and newer + TARGET_CPU="${{ matrix.cpu }}" + DOCKERFILE_CPU="x64" + ARCHIVE_NAME="x64-v3" + ;; + x86-64-v4) + ## intel skylake (2017) and newer + TARGET_CPU="${{ matrix.cpu }}" + DOCKERFILE_CPU="x64" + ARCHIVE_NAME="x64-v4" + ;; + *) + TARGET_CPU="" + DOCKERFILE_CPU="${{ matrix.cpu }}" + ARCHIVE_NAME="${{ matrix.cpu }}" + ;; + esac + echo "DOCKERFILE=Dockerfile.${{ matrix.arch }}-${DOCKERFILE_CPU}" >> "$GITHUB_ENV" + echo "ZIPFILE=${{ matrix.arch }}-${ARCHIVE_NAME}" >> "$GITHUB_ENV" + echo "TARGET_CPU=${TARGET_CPU}" >> "$GITHUB_ENV" + ## Build the binaries using defined dockerfiles - - name: Build Binary (${{ matrix.platform }}) + - name: Build Binary (${{ matrix.arch }}_${{ matrix.cpu }}) id: build_binaries uses: docker/build-push-action@0565240e2d4ab88bba5387d719585280857ece09 # 5.0.0 with: - file: build-scripts/Dockerfile.${{ matrix.platform }} - outputs: type=local,dest=./release/${{ matrix.platform }} + file: build-scripts/${{ env.DOCKERFILE }} + outputs: type=local,dest=./release/${{ matrix.arch }} build-args: | STACKS_NODE_VERSION=${{ inputs.tag || env.GITHUB_SHA_SHORT }} - OS_ARCH=${{ matrix.platform }} + OS_ARCH=${{ matrix.arch }} + TARGET_CPU=${{ env.TARGET_CPU }} GIT_BRANCH=${{ env.GITHUB_REF_SHORT }} GIT_COMMIT=${{ env.GITHUB_SHA_SHORT }} ## Compress the binary artifact - name: Compress artifact id: compress_artifact - run: zip --junk-paths ${{ matrix.platform }} ./release/${{ matrix.platform }}/* + run: zip --junk-paths ${{ env.ZIPFILE }} ./release/${{ matrix.arch }}/* ## Upload the binary artifact to the github action (used in `github-release.yml` to create a release) - name: Upload artifact id: upload_artifact uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3 with: - path: ${{ matrix.platform }}.zip + path: ${{ env.ZIPFILE }}.zip diff --git a/.github/workflows/github-release.yml b/.github/workflows/github-release.yml index 17d75b2d0e..14e7117a95 100644 --- a/.github/workflows/github-release.yml +++ b/.github/workflows/github-release.yml @@ -36,21 +36,6 @@ jobs: tag: ${{ inputs.tag }} secrets: inherit - ## Build x86_64 binaries from source - ## - ## Runs when the following is true: - ## - tag is provided - ## - workflow is building default branch (master) - build-binaries-x64: - if: | - inputs.tag != '' && - github.ref == format('refs/heads/{0}', github.event.repository.default_branch) - name: Build Binaries (x64_64) - uses: ./.github/workflows/create-source-binary-x64.yml - with: - tag: ${{ inputs.tag }} - secrets: inherit - ## Runs when the following is true: ## - tag is provided ## - workflow is building default branch (master) @@ -62,7 +47,6 @@ jobs: runs-on: ubuntu-latest needs: - build-binaries - - build-binaries-x64 steps: ## Downloads the artifacts built in `create-source-binary.yml` - name: Download Artifacts @@ -111,7 +95,6 @@ jobs: uses: ./.github/workflows/image-build-binary.yml needs: - build-binaries - - build-binaries-x64 - create-release with: tag: ${{ inputs.tag }} diff --git a/.github/workflows/image-build-binary.yml b/.github/workflows/image-build-binary.yml index cab5ff162b..b804ae3be6 100644 --- a/.github/workflows/image-build-binary.yml +++ b/.github/workflows/image-build-binary.yml @@ -8,16 +8,11 @@ on: tag: required: true type: string - description: "Version tag for alpine images" - docker-org: - required: false - type: string - description: "Docker repo org for uploading images (defaults to github org)" - default: "${GITHUB_REPOSITORY_OWNER}" + description: "Version tag for docker images" ## Define which docker arch to build for env: - docker_platforms: "linux/arm64, linux/arm/v7, linux/amd64, linux/amd64/v2, linux/amd64/v3" + docker_platforms: "linux/arm64, linux/arm/v7, linux/amd64, linux/amd64/v3" docker-org: blockstack concurrency: @@ -48,28 +43,39 @@ jobs: steps: ## Setup Docker for the builds - name: Docker setup + id: docker_setup uses: stacks-network/actions/docker@main with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} + ## if the repo owner is not `stacks-network`, default to a docker-org of the repo owner (i.e. github user id) + ## this allows forks to run the docker push workflows without having to hardcode a dockerhub org (but it does require docker hub user to match github username) + - name: Set Local env vars + id: set_env + if: | + github.repository_owner != 'stacks-network' + run: | + echo "docker-org=${{ github.repository_owner }}" >> "$GITHUB_ENV" + ## Set docker metatdata ## - depending on the matrix.dist, different tags will be enabled - ## ex. alpine will have this tag: `type=ref,event=tag,enable=${{ matrix.dist == 'alpine' }}` + ## ex. debian will have this tag: `type=ref,event=tag,enable=${{ matrix.dist == 'debian' }}` - name: Docker Metadata ( ${{matrix.dist}} ) id: docker_metadata uses: docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 #v5.0.0 with: + ## tag images with current repo name `stacks-core` as well as legacy `stacks-blockchain` images: | ${{env.docker-org}}/${{ github.event.repository.name }} ${{env.docker-org}}/stacks-blockchain tags: | - type=raw,value=latest,enable=${{ inputs.tag != '' && (github.ref == format('refs/heads/{0}', github.event.repository.default_branch) ) && matrix.dist == 'alpine' }} - type=raw,value=${{ inputs.tag }}-${{ matrix.dist }},enable=${{ inputs.tag != '' && matrix.dist == 'alpine'}} - type=raw,value=${{ inputs.tag }},enable=${{ inputs.tag != '' && matrix.dist == 'alpine' }} - type=ref,event=tag,enable=${{ matrix.dist == 'alpine' }} - type=raw,value=latest-${{ matrix.dist }},enable=${{ inputs.tag != '' && (github.ref == format('refs/heads/{0}', github.event.repository.default_branch) ) && matrix.dist == 'debian' }} - type=raw,value=${{ inputs.tag }}-${{ matrix.dist }},enable=${{ inputs.tag != '' && matrix.dist == 'debian' }} + type=raw,value=latest,enable=${{ inputs.tag != '' && (github.ref == format('refs/heads/{0}', github.event.repository.default_branch) ) && matrix.dist == 'debian' }} + type=raw,value=${{ inputs.tag }}-${{ matrix.dist }},enable=${{ inputs.tag != '' && matrix.dist == 'debian'}} + type=raw,value=${{ inputs.tag }},enable=${{ inputs.tag != '' && matrix.dist == 'debian' }} + type=ref,event=tag,enable=${{ matrix.dist == 'debian' }} + type=raw,value=latest-${{ matrix.dist }},enable=${{ inputs.tag != '' && (github.ref == format('refs/heads/{0}', github.event.repository.default_branch) ) && matrix.dist == 'alpine' }} + type=raw,value=${{ inputs.tag }}-${{ matrix.dist }},enable=${{ inputs.tag != '' && matrix.dist == 'alpine' }} ## Build docker image for release - name: Build and Push ( ${{matrix.dist}} ) diff --git a/.github/workflows/image-build-source.yml b/.github/workflows/image-build-source.yml index 1936999b27..ebb9afc679 100644 --- a/.github/workflows/image-build-source.yml +++ b/.github/workflows/image-build-source.yml @@ -8,7 +8,7 @@ on: ## Define which docker arch to build for env: - docker_platforms: linux/amd64 + docker_platforms: "linux/amd64" docker-org: blockstack concurrency: @@ -31,11 +31,21 @@ jobs: steps: ## Setup Docker for the builds - name: Docker setup + id: docker_setup uses: stacks-network/actions/docker@main with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} + ## if the repo owner is not `stacks-network`, default to a docker-org of the repo owner (i.e. github user id) + ## this allows forks to run the docker push workflows without having to hardcode a dockerhub org (but it does require docker hub user to match github username) + - name: Set Local env vars + id: set_env + if: | + github.repository_owner != 'stacks-network' + run: | + echo "docker-org=${{ github.repository_owner }}" >> "$GITHUB_ENV" + ## Set docker metatdata - name: Docker Metadata ( ${{matrix.dist}} ) id: docker_metadata @@ -58,8 +68,8 @@ jobs: tags: ${{ steps.docker_metadata.outputs.tags }} labels: ${{ steps.docker_metadata.outputs.labels }} build-args: | - REPO=${{ github.repository_owner }}/${{ github.event.repository.name }} STACKS_NODE_VERSION=${{ env.GITHUB_SHA_SHORT }} GIT_BRANCH=${{ env.GITHUB_REF_SHORT }} GIT_COMMIT=${{ env.GITHUB_SHA_SHORT }} + TARGET_CPU=x86-64-v3 push: ${{ env.DOCKER_PUSH }} diff --git a/.github/workflows/stacks-core-tests.yml b/.github/workflows/stacks-core-tests.yml index 5105c6535e..f737729562 100644 --- a/.github/workflows/stacks-core-tests.yml +++ b/.github/workflows/stacks-core-tests.yml @@ -168,7 +168,6 @@ jobs: # Core contract tests on Clarinet v1 # Check for false positives/negatives - # https://github.com/stacks-network/stacks-blockchain/pull/4031#pullrequestreview-1713341208 core-contracts-clarinet-test-clarinet-v1: name: Core Contracts Test Clarinet V1 runs-on: ubuntu-latest diff --git a/Dockerfile.debian b/Dockerfile.debian index 4b9a56b8c5..8b6759527e 100644 --- a/Dockerfile.debian +++ b/Dockerfile.debian @@ -1,4 +1,4 @@ -FROM rust:bullseye as build +FROM rust:bookworm as build ARG STACKS_NODE_VERSION="No Version Info" ARG GIT_BRANCH='No Branch Info' @@ -14,9 +14,8 @@ RUN cd testnet/stacks-node && cargo build --features monitoring_prom,slog_json - RUN cp target/release/stacks-node /out -FROM debian:bullseye-slim +FROM debian:bookworm-slim -RUN apt update && apt install -y netcat COPY --from=build /out/ /bin/ CMD ["stacks-node", "mainnet"] diff --git a/build-scripts/Dockerfile.linux-glibc-arm64 b/build-scripts/Dockerfile.linux-glibc-arm64 index 11e38f8804..0d13237878 100644 --- a/build-scripts/Dockerfile.linux-glibc-arm64 +++ b/build-scripts/Dockerfile.linux-glibc-arm64 @@ -1,4 +1,4 @@ -FROM rust:bullseye as build +FROM rust:bookworm as build ARG STACKS_NODE_VERSION="No Version Info" ARG GIT_BRANCH='No Branch Info' diff --git a/build-scripts/Dockerfile.linux-glibc-armv7 b/build-scripts/Dockerfile.linux-glibc-armv7 index cc05298dfe..8192067449 100644 --- a/build-scripts/Dockerfile.linux-glibc-armv7 +++ b/build-scripts/Dockerfile.linux-glibc-armv7 @@ -1,4 +1,4 @@ -FROM rust:bullseye as build +FROM rust:bookworm as build ARG STACKS_NODE_VERSION="No Version Info" ARG GIT_BRANCH='No Branch Info' diff --git a/build-scripts/Dockerfile.linux-glibc-x64 b/build-scripts/Dockerfile.linux-glibc-x64 index 0e2bbdd9be..60bd20d6d8 100644 --- a/build-scripts/Dockerfile.linux-glibc-x64 +++ b/build-scripts/Dockerfile.linux-glibc-x64 @@ -1,4 +1,4 @@ -FROM rust:bullseye as build +FROM rust:bookworm as build ARG STACKS_NODE_VERSION="No Version Info" ARG GIT_BRANCH='No Branch Info' @@ -7,6 +7,7 @@ ARG BUILD_DIR=/build ARG TARGET=x86_64-unknown-linux-gnu # Allow us to override the default `--target-cpu` for the given target triplet ARG TARGET_CPU +ENV RUSTFLAGS="${TARGET_CPU:+${RUSTFLAGS} -Ctarget-cpu=${TARGET_CPU}}" WORKDIR /src COPY . . @@ -17,8 +18,7 @@ RUN apt-get update && apt-get install -y git RUN --mount=type=tmpfs,target=${BUILD_DIR} cp -R /src/. ${BUILD_DIR}/ \ && cd ${BUILD_DIR} \ && rustup target add ${TARGET} \ - ${TARGET_CPU:+RUSTFLAGS="$RUSTFLAGS $TARGET_CPU"} \ - cargo build --features monitoring_prom,slog_json --release --workspace --target ${TARGET} --bin stacks-node --bin stacks-inspect --bin clarity-cli --bin blockstack-cli \ + && cargo build --features monitoring_prom,slog_json --release --workspace --target ${TARGET} --bin stacks-node --bin stacks-inspect --bin clarity-cli --bin blockstack-cli \ && mkdir -p /out \ && cp -R ${BUILD_DIR}/target/${TARGET}/release/. /out diff --git a/build-scripts/Dockerfile.linux-musl-arm64 b/build-scripts/Dockerfile.linux-musl-arm64 index 24a07f018a..e126a1407a 100644 --- a/build-scripts/Dockerfile.linux-musl-arm64 +++ b/build-scripts/Dockerfile.linux-musl-arm64 @@ -19,4 +19,3 @@ RUN --mount=type=tmpfs,target=${BUILD_DIR} cp -R /src/. ${BUILD_DIR}/ \ FROM scratch AS export-stage COPY --from=build /out/stacks-inspect /out/blockstack-cli /out/clarity-cli /out/stacks-node / - diff --git a/build-scripts/Dockerfile.linux-musl-x64 b/build-scripts/Dockerfile.linux-musl-x64 index d954708a0a..6765c4fdb1 100644 --- a/build-scripts/Dockerfile.linux-musl-x64 +++ b/build-scripts/Dockerfile.linux-musl-x64 @@ -5,20 +5,19 @@ ARG GIT_BRANCH='No Branch Info' ARG GIT_COMMIT='No Commit Info' ARG BUILD_DIR=/build ARG TARGET=x86_64-unknown-linux-musl -# Allow us to override the default `--target-cpu` for the given target triplet ARG TARGET_CPU +ENV RUSTFLAGS="${TARGET_CPU:+${RUSTFLAGS} -Ctarget-cpu=${TARGET_CPU}}" WORKDIR /src COPY . . -RUN apk update && apk add git musl-dev +RUN apk update && apk add git musl-dev make # Run all the build steps in ramdisk in an attempt to speed things up RUN --mount=type=tmpfs,target=${BUILD_DIR} cp -R /src/. ${BUILD_DIR}/ \ && cd ${BUILD_DIR} \ && rustup target add ${TARGET} \ - ${TARGET_CPU:+RUSTFLAGS="$RUSTFLAGS $TARGET_CPU"} \ - cargo build --features monitoring_prom,slog_json --release --workspace --target ${TARGET} --bin stacks-node --bin stacks-inspect --bin clarity-cli --bin blockstack-cli \ + && cargo build --features monitoring_prom,slog_json --release --workspace --target ${TARGET} --bin stacks-node --bin stacks-inspect --bin clarity-cli --bin blockstack-cli \ && mkdir -p /out \ && cp -R ${BUILD_DIR}/target/${TARGET}/release/. /out diff --git a/build-scripts/Dockerfile.macos-arm64 b/build-scripts/Dockerfile.macos-arm64 index 0fd8a1e4c3..c754f05a08 100644 --- a/build-scripts/Dockerfile.macos-arm64 +++ b/build-scripts/Dockerfile.macos-arm64 @@ -27,4 +27,3 @@ RUN --mount=type=tmpfs,target=${BUILD_DIR} cp -R /src/. ${BUILD_DIR}/ \ FROM scratch AS export-stage COPY --from=build /out/stacks-inspect /out/blockstack-cli /out/clarity-cli /out/stacks-node / - diff --git a/build-scripts/Dockerfile.macos-x64 b/build-scripts/Dockerfile.macos-x64 index f61d0574e9..5a33621fa6 100644 --- a/build-scripts/Dockerfile.macos-x64 +++ b/build-scripts/Dockerfile.macos-x64 @@ -7,6 +7,7 @@ ARG BUILD_DIR=/build ARG OSXCROSS="https://github.com/hirosystems/docker-osxcross-rust/releases/download/MacOSX12.0.sdk/osxcross-d904031_MacOSX12.0.sdk.tar.zst" ARG TARGET=x86_64-apple-darwin ARG TARGET_CPU +ENV RUSTFLAGS="${TARGET_CPU:+${RUSTFLAGS} -Ctarget-cpu=${TARGET_CPU}}" WORKDIR /src COPY . . @@ -22,11 +23,9 @@ RUN --mount=type=tmpfs,target=${BUILD_DIR} cp -R /src/. ${BUILD_DIR}/ \ && cd ${BUILD_DIR} \ && rustup target add ${TARGET} \ && . /opt/osxcross/env-macos-x86_64 \ - ${TARGET_CPU:+RUSTFLAGS="$RUSTFLAGS $TARGET_CPU"} \ - cargo build --features monitoring_prom,slog_json --release --workspace --target ${TARGET} --bin stacks-node --bin stacks-inspect --bin clarity-cli --bin blockstack-cli \ + && cargo build --features monitoring_prom,slog_json --release --workspace --target ${TARGET} --bin stacks-node --bin stacks-inspect --bin clarity-cli --bin blockstack-cli \ && mkdir -p /out \ && cp -R ${BUILD_DIR}/target/${TARGET}/release/. /out FROM scratch AS export-stage COPY --from=build /out/stacks-inspect /out/blockstack-cli /out/clarity-cli /out/stacks-node / - diff --git a/build-scripts/Dockerfile.windows-x64 b/build-scripts/Dockerfile.windows-x64 index 3265c05b5c..502add30bc 100644 --- a/build-scripts/Dockerfile.windows-x64 +++ b/build-scripts/Dockerfile.windows-x64 @@ -1,4 +1,4 @@ -FROM rust:bullseye as build +FROM rust:bookworm as build ARG STACKS_NODE_VERSION="No Version Info" ARG GIT_BRANCH='No Branch Info' @@ -6,11 +6,12 @@ ARG GIT_COMMIT='No Commit Info' ARG BUILD_DIR=/build ARG TARGET=x86_64-pc-windows-gnu ARG TARGET_CPU +ENV RUSTFLAGS="${TARGET_CPU:+${RUSTFLAGS} -Ctarget-cpu=${TARGET_CPU}}" WORKDIR /src COPY . . -RUN apt-get update && apt-get install -y git gcc-mingw-w64-x86-64 +RUN apt-get update && apt-get install -y git gcc-mingw-w64-x86-64 libclang-dev # Run all the build steps in ramdisk in an attempt to speed things up RUN --mount=type=tmpfs,target=${BUILD_DIR} cp -R /src/. ${BUILD_DIR}/ \ @@ -18,7 +19,6 @@ RUN --mount=type=tmpfs,target=${BUILD_DIR} cp -R /src/. ${BUILD_DIR}/ \ && rustup target add ${TARGET} \ && CC_x86_64_pc_windows_gnu=x86_64-w64-mingw32-gcc \ CARGO_TARGET_X86_64_PC_WINDOWS_GNU_LINKER=x86_64-w64-mingw32-gcc \ - ${TARGET_CPU:+RUSTFLAGS="$RUSTFLAGS $TARGET_CPU"} \ cargo build --features monitoring_prom,slog_json --release --workspace --target ${TARGET} --bin stacks-node --bin stacks-inspect --bin clarity-cli --bin blockstack-cli \ && mkdir -p /out \ && cp -R ${BUILD_DIR}/target/${TARGET}/release/. /out diff --git a/libsigner/Cargo.toml b/libsigner/Cargo.toml index 4b1f21eef7..e04dcbbdc1 100644 --- a/libsigner/Cargo.toml +++ b/libsigner/Cargo.toml @@ -44,8 +44,8 @@ features = ["arbitrary_precision", "unbounded_depth"] version = "0.24.3" features = ["serde", "recovery"] -[target.'cfg(all(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64"), not(target_env = "msvc")))'.dependencies] +[target.'cfg(all(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64"), not(any(target_os="windows"))))'.dependencies] sha2 = { version = "0.10", features = ["asm"] } -[target.'cfg(any(not(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64")), target_env = "msvc"))'.dependencies] +[target.'cfg(any(not(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64")), any(target_os = "windows")))'.dependencies] sha2 = { version = "0.10" } diff --git a/libstackerdb/Cargo.toml b/libstackerdb/Cargo.toml index 53cf128edc..0d54de5428 100644 --- a/libstackerdb/Cargo.toml +++ b/libstackerdb/Cargo.toml @@ -26,8 +26,8 @@ clarity = { path = "../clarity" } version = "0.24.3" features = ["serde", "recovery"] -[target.'cfg(all(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64"), not(target_env = "msvc")))'.dependencies] +[target.'cfg(all(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64"), not(any(target_os="windows"))))'.dependencies] sha2 = { version = "0.10", features = ["asm"] } -[target.'cfg(any(not(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64")), target_env = "msvc"))'.dependencies] +[target.'cfg(any(not(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64")), any(target_os = "windows")))'.dependencies] sha2 = { version = "0.10" } diff --git a/stacks-common/Cargo.toml b/stacks-common/Cargo.toml index 50eadfb85d..d9f987f574 100644 --- a/stacks-common/Cargo.toml +++ b/stacks-common/Cargo.toml @@ -78,8 +78,8 @@ developer-mode = [] slog_json = ["slog-json"] testing = [] -[target.'cfg(all(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64"), not(target_env = "msvc")))'.dependencies] +[target.'cfg(all(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64"), not(any(target_os="windows"))))'.dependencies] sha2 = { version = "0.10", features = ["asm"] } -[target.'cfg(any(not(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64")), target_env = "msvc"))'.dependencies] +[target.'cfg(any(not(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64")), any(target_os="windows")))'.dependencies] sha2 = { version = "0.10" } diff --git a/stackslib/Cargo.toml b/stackslib/Cargo.toml index 8e2c483017..be75337115 100644 --- a/stackslib/Cargo.toml +++ b/stackslib/Cargo.toml @@ -59,7 +59,7 @@ siphasher = "0.3.7" wsts = { workspace = true } hashbrown = { workspace = true } -[target.'cfg(not(target_env = "msvc"))'.dependencies] +[target.'cfg(not(any(target_os = "macos",target_os="windows", target_arch = "arm" )))'.dependencies] tikv-jemallocator = {workspace = true} [target.'cfg(unix)'.dependencies] @@ -114,8 +114,8 @@ monitoring_prom = ["prometheus"] slog_json = ["slog-json", "stacks-common/slog_json", "clarity/slog_json", "pox-locking/slog_json"] testing = [] -[target.'cfg(all(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64"), not(target_env = "msvc")))'.dependencies] +[target.'cfg(all(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64"), not(any(target_os="windows"))))'.dependencies] sha2 = { version = "0.10", features = ["asm"] } -[target.'cfg(any(not(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64")), target_env = "msvc"))'.dependencies] +[target.'cfg(any(not(any(target_arch = "x86_64", target_arch = "x86", target_arch = "aarch64")), any(target_os="windows")))'.dependencies] sha2 = { version = "0.10" } diff --git a/stackslib/src/main.rs b/stackslib/src/main.rs index 3d9029281f..f3ca5a6751 100644 --- a/stackslib/src/main.rs +++ b/stackslib/src/main.rs @@ -26,10 +26,10 @@ extern crate stacks_common; #[macro_use(o, slog_log, slog_trace, slog_debug, slog_info, slog_warn, slog_error)] extern crate slog; -#[cfg(not(target_env = "msvc"))] +#[cfg(not(any(target_os = "macos", target_os = "windows", target_arch = "arm")))] use tikv_jemallocator::Jemalloc; -#[cfg(not(target_env = "msvc"))] +#[cfg(not(any(target_os = "macos", target_os = "windows", target_arch = "arm")))] #[global_allocator] static GLOBAL: Jemalloc = Jemalloc; diff --git a/testnet/stacks-node/Cargo.toml b/testnet/stacks-node/Cargo.toml index ca88a36189..f7160a1591 100644 --- a/testnet/stacks-node/Cargo.toml +++ b/testnet/stacks-node/Cargo.toml @@ -32,7 +32,7 @@ rand = { workspace = true } rand_core = { workspace = true } hashbrown = { workspace = true } -[target.'cfg(not(target_env = "msvc"))'.dependencies] +[target.'cfg(not(any(target_os = "macos", target_os="windows", target_arch = "arm")))'.dependencies] tikv-jemallocator = {workspace = true} [dev-dependencies] diff --git a/testnet/stacks-node/src/main.rs b/testnet/stacks-node/src/main.rs index bf54c1601d..3ac46557bc 100644 --- a/testnet/stacks-node/src/main.rs +++ b/testnet/stacks-node/src/main.rs @@ -41,7 +41,7 @@ use stacks::chainstate::coordinator::{get_next_recipients, OnChainRewardSetProvi use stacks::chainstate::stacks::address::PoxAddress; use stacks::chainstate::stacks::db::blocks::DummyEventDispatcher; use stacks::chainstate::stacks::db::StacksChainState; -#[cfg(not(target_env = "msvc"))] +#[cfg(not(any(target_os = "macos", target_os = "windows", target_arch = "arm")))] use tikv_jemallocator::Jemalloc; pub use self::burnchains::{ @@ -57,7 +57,7 @@ use crate::chain_data::MinerStats; use crate::neon_node::{BlockMinerThread, TipCandidate}; use crate::run_loop::boot_nakamoto; -#[cfg(not(target_env = "msvc"))] +#[cfg(not(any(target_os = "macos", target_os = "windows", target_arch = "arm")))] #[global_allocator] static GLOBAL: Jemalloc = Jemalloc;