188 lines
7.1 KiB
YAML
188 lines
7.1 KiB
YAML
#
|
|
# 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
|
|
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'
|