From c1009144b10e71df184e0d933fa25bdd43908e55 Mon Sep 17 00:00:00 2001 From: Sasha Gerrand Date: Mon, 24 Jun 2024 16:59:48 +0100 Subject: [PATCH 1/2] Experiment with specifying Arm resource class There are a few different ways to cross compile glibc, this way uses CircleCI's resource classes which are available for using Arm with "Remote Docker": https://circleci.com/docs/using-docker/#arm --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index bacd853..c24ac6f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -5,7 +5,7 @@ executors: - image: docker:git environment: GLIBC_VERSION: 2.39 - resource_class: large + resource_class: arm.large working_directory: ~/docker-glibc-builder artefact-uploader: docker: From cefd00538f487c25c09aeafaf9a8f3add134c0a3 Mon Sep 17 00:00:00 2001 From: Sasha Gerrand Date: Mon, 24 Jun 2024 17:27:19 +0100 Subject: [PATCH 2/2] Build GNU C library for Arm and x86 in parallel --- .circleci/config.yml | 58 +++++++++++++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 19 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index c24ac6f..d06e1c7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,37 +1,55 @@ version: 2.1 +commands: + build-glibc: + description: Compiles GNU C library against a given architecture. + steps: + - run: + command: mkdir -p artefacts + name: Create directory for storing artefacts + - run: + command: docker build . --tag sgerrand/glibc-builder:$CIRCLE_SHA1 + name: Create Docker image + - run: + command: docker run --rm --env GLIBC_VERSION --env STDOUT=1 sgerrand/glibc-builder:$CIRCLE_SHA1 > artefacts/glibc-bin-$GLIBC_VERSION-0-$(uname -m).tar.gz + name: Build glibc package + - persist_to_workspace: + root: . + paths: artefacts + - store_artifacts: + path: artefacts executors: - builder: + builder-arm: docker: - image: docker:git environment: GLIBC_VERSION: 2.39 resource_class: arm.large working_directory: ~/docker-glibc-builder + builder-x86: + docker: + - image: docker:git + environment: + GLIBC_VERSION: 2.39 + resource_class: large + working_directory: ~/docker-glibc-builder artefact-uploader: docker: - image: golang:alpine resource_class: small working_directory: ~/docker-glibc-builder jobs: - build: - executor: builder + build-aarch64: + executor: builder-arm steps: - checkout - setup_remote_docker - - run: - command: mkdir -p artefacts - name: Create directory for storing artefacts - - run: - command: docker build . --tag sgerrand/glibc-builder:$CIRCLE_SHA1 - name: Create Docker image - - run: - command: docker run --rm --env GLIBC_VERSION --env STDOUT=1 sgerrand/glibc-builder:$CIRCLE_SHA1 > artefacts/glibc-bin-$GLIBC_VERSION-0-$(uname -m).tar.gz - name: Build glibc package - - persist_to_workspace: - root: . - paths: artefacts - - store_artifacts: - path: artefacts + - build-glibc + build-x86_64: + executor: builder-x86 + steps: + - checkout + - setup_remote_docker + - build-glibc upload-main: executor: artefact-uploader steps: @@ -49,7 +67,8 @@ jobs: workflows: build-compile-upload: jobs: - - build + - build-aarch64 + - build-x86_64 - upload-main: filters: branches: @@ -57,4 +76,5 @@ workflows: tags: ignore: /.*/ requires: - - build + - build-aarch64 + - build-x86_64