| # |
| # Copyright (c) 2022, Oracle and/or its affiliates. All rights reserved. |
| # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| # |
| # This code is free software; you can redistribute it and/or modify it |
| # under the terms of the GNU General Public License version 2 only, as |
| # published by the Free Software Foundation. Oracle designates this |
| # particular file as subject to the "Classpath" exception as provided |
| # by Oracle in the LICENSE file that accompanied this code. |
| # |
| # This code is distributed in the hope that it will be useful, but WITHOUT |
| # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| # version 2 for more details (a copy is included in the LICENSE file that |
| # accompanied this code). |
| # |
| # You should have received a copy of the GNU General Public License version |
| # 2 along with this work; if not, write to the Free Software Foundation, |
| # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| # |
| # Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| # or visit www.oracle.com if you need additional information or have any |
| # questions. |
| # |
| |
| name: 'Build (cross-compile)' |
| |
| on: |
| workflow_call: |
| inputs: |
| gcc-major-version: |
| required: true |
| type: string |
| extra-conf-options: |
| required: false |
| type: string |
| configure-arguments: |
| required: false |
| type: string |
| make-arguments: |
| required: false |
| type: string |
| |
| jobs: |
| build-cross-compile: |
| name: build |
| runs-on: ubuntu-22.04 |
| |
| strategy: |
| fail-fast: false |
| matrix: |
| target-cpu: |
| - aarch64 |
| - arm |
| - s390x |
| - ppc64le |
| - riscv64 |
| include: |
| - target-cpu: aarch64 |
| gnu-arch: aarch64 |
| debian-arch: arm64 |
| debian-repository: https://httpredir.debian.org/debian/ |
| debian-version: bullseye |
| tolerate-sysroot-errors: false |
| - target-cpu: arm |
| gnu-arch: arm |
| debian-arch: armhf |
| debian-repository: https://httpredir.debian.org/debian/ |
| debian-version: bullseye |
| tolerate-sysroot-errors: false |
| gnu-abi: eabihf |
| - target-cpu: s390x |
| gnu-arch: s390x |
| debian-arch: s390x |
| debian-repository: https://httpredir.debian.org/debian/ |
| debian-version: bullseye |
| tolerate-sysroot-errors: false |
| - target-cpu: ppc64le |
| gnu-arch: powerpc64le |
| debian-arch: ppc64el |
| debian-repository: https://httpredir.debian.org/debian/ |
| debian-version: bullseye |
| tolerate-sysroot-errors: false |
| - target-cpu: riscv64 |
| gnu-arch: riscv64 |
| debian-arch: riscv64 |
| debian-repository: https://httpredir.debian.org/debian/ |
| debian-version: sid |
| tolerate-sysroot-errors: true |
| |
| steps: |
| - name: 'Checkout the JDK source' |
| uses: actions/checkout@v4 |
| |
| - name: 'Get the BootJDK' |
| id: bootjdk |
| uses: ./.github/actions/get-bootjdk |
| with: |
| platform: linux-x64 |
| |
| - name: 'Get GTest' |
| id: gtest |
| uses: ./.github/actions/get-gtest |
| |
| # Upgrading apt to solve libc6 installation bugs, see JDK-8260460. |
| - name: 'Install toolchain and dependencies' |
| run: | |
| # Install dependencies using apt-get |
| sudo apt-get update |
| sudo apt-get install --only-upgrade apt |
| sudo apt-get install \ |
| gcc-${{ inputs.gcc-major-version }} \ |
| g++-${{ inputs.gcc-major-version }} \ |
| gcc-${{ inputs.gcc-major-version }}-${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-abi}} \ |
| g++-${{ inputs.gcc-major-version }}-${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-abi}} \ |
| libxrandr-dev libxtst-dev libcups2-dev libasound2-dev |
| sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${{ inputs.gcc-major-version }} 100 --slave /usr/bin/g++ g++ /usr/bin/g++-${{ inputs.gcc-major-version }} |
| |
| - name: 'Check cache for sysroot' |
| id: get-cached-sysroot |
| uses: actions/cache@v4 |
| with: |
| path: sysroot |
| key: sysroot-${{ matrix.debian-arch }}-${{ hashFiles('./.github/workflows/build-cross-compile.yml') }} |
| |
| - name: 'Install sysroot dependencies' |
| run: sudo apt-get install debootstrap qemu-user-static |
| if: steps.get-cached-sysroot.outputs.cache-hit != 'true' |
| |
| - name: 'Create sysroot' |
| id: create-sysroot |
| run: > |
| sudo debootstrap |
| --arch=${{ matrix.debian-arch }} |
| --verbose |
| --include=fakeroot,symlinks,build-essential,libx11-dev,libxext-dev,libxrender-dev,libxrandr-dev,libxtst-dev,libxt-dev,libcups2-dev,libfontconfig1-dev,libasound2-dev,libfreetype-dev,libpng-dev |
| --resolve-deps |
| --variant=minbase |
| ${{ matrix.debian-version }} |
| sysroot |
| ${{ matrix.debian-repository }} |
| continue-on-error: ${{ matrix.tolerate-sysroot-errors }} |
| if: steps.get-cached-sysroot.outputs.cache-hit != 'true' |
| |
| - name: 'Prepare sysroot' |
| run: | |
| # Prepare sysroot and remove unused files to minimize cache |
| sudo chroot sysroot symlinks -cr . |
| sudo chown ${USER} -R sysroot |
| rm -rf sysroot/{dev,proc,run,sys,var} |
| rm -rf sysroot/usr/{sbin,bin,share} |
| rm -rf sysroot/usr/lib/{apt,gcc,udev,systemd} |
| rm -rf sysroot/usr/libexec/gcc |
| if: steps.create-sysroot.outcome == 'success' && steps.get-cached-sysroot.outputs.cache-hit != 'true' |
| |
| - name: 'Remove broken sysroot' |
| run: | |
| sudo rm -rf sysroot/ |
| if: steps.create-sysroot.outcome != 'success' && steps.get-cached-sysroot.outputs.cache-hit != 'true' |
| |
| - name: 'Configure' |
| run: > |
| bash configure |
| --with-conf-name=linux-${{ matrix.target-cpu }} |
| --with-version-opt=${GITHUB_ACTOR}-${GITHUB_SHA} |
| --with-boot-jdk=${{ steps.bootjdk.outputs.path }} |
| --with-gtest=${{ steps.gtest.outputs.path }} |
| --with-zlib=system |
| --enable-debug |
| --disable-precompiled-headers |
| --openjdk-target=${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-abi}} |
| --with-sysroot=sysroot |
| --with-jmod-compress=zip-1 |
| CC=${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-abi}}-gcc-${{ inputs.gcc-major-version }} |
| CXX=${{ matrix.gnu-arch }}-linux-gnu${{ matrix.gnu-abi}}-g++-${{ inputs.gcc-major-version }} |
| ${{ inputs.extra-conf-options }} ${{ inputs.configure-arguments }} || ( |
| echo "Dumping config.log:" && |
| cat config.log && |
| exit 1) |
| if: steps.create-sysroot.outcome == 'success' || steps.get-cached-sysroot.outputs.cache-hit == 'true' |
| |
| - name: 'Build' |
| id: build |
| uses: ./.github/actions/do-build |
| with: |
| make-target: 'hotspot ${{ inputs.make-arguments }}' |
| platform: linux-${{ matrix.target-cpu }} |
| if: steps.create-sysroot.outcome == 'success' || steps.get-cached-sysroot.outputs.cache-hit == 'true' |