#
# 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'
