diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bcf472f96..0eb0a0550 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,8 +93,7 @@ jobs: sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get -qq update sudo apt-get -qq install -y --no-install-recommends \ - gcc-multilib \ - g++-multilib \ + g++-aarch64-linux-gnu \ ninja-build \ openjdk-11-jre-headless @@ -141,6 +140,7 @@ jobs: popd - name: Build BoringSSL 64-bit Linux + # Please keep this in sync with other "Build BoringSSL 64-bit Linux" if: runner.os == 'Linux' run: | mkdir -p "$BORINGSSL_HOME/build64" @@ -148,6 +148,22 @@ jobs: cmake -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE -DCMAKE_BUILD_TYPE=Release -GNinja .. ninja popd + + - name: Build BoringSSL AArch64 Linux + # Please keep this in sync with other "Build BoringSSL AArch64 Linux" + if: runner.os == 'Linux' + run: | + mkdir -p "$BORINGSSL_HOME/build.arm" + pushd "$BORINGSSL_HOME/build.arm" + cmake -DCMAKE_SYSTEM_NAME=Linux \ + -DCMAKE_SYSTEM_PROCESSOR=aarch64 \ + -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \ + -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_BUILD_TYPE=Release \ + -GNinja .. + ninja + popd - name: Set up MSVC paths on Windows if: runner.os == 'Windows' @@ -231,8 +247,7 @@ jobs: sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get -qq update sudo apt-get -qq install -y --no-install-recommends \ - gcc-multilib \ - g++-multilib \ + g++-aarch64-linux-gnu \ ninja-build \ openjdk-11-jre-headless @@ -255,12 +270,27 @@ jobs: git checkout --progress --force -B main - name: Build BoringSSL 64-bit Linux + # Please keep this in sync with other "Build BoringSSL 64-bit Linux" run: | mkdir -p "$BORINGSSL_HOME/build64" pushd "$BORINGSSL_HOME/build64" cmake -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE -DCMAKE_BUILD_TYPE=Release -GNinja .. ninja popd + + - name: Build BoringSSL AArch64 Linux + # Please keep this in sync with other "Build BoringSSL AArch64 Linux" + run: | + mkdir -p "$BORINGSSL_HOME/build.arm" + pushd "$BORINGSSL_HOME/build.arm" + cmake -DCMAKE_SYSTEM_NAME=Linux \ + -DCMAKE_SYSTEM_PROCESSOR=aarch64 \ + -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \ + -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \ + -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE \ + -DCMAKE_BUILD_TYPE=Release \ + -GNinja .. + ninja # TODO(prb) remove build dependency above and go back to this. # - name: Make fake BoringSSL directories @@ -313,12 +343,14 @@ jobs: strategy: fail-fast: false matrix: - platform: [ubuntu-22.04, ubuntu-latest, macos-14, macos-latest, windows-latest] + platform: [ubuntu-22.04, ubuntu-22.04-arm, ubuntu-latest, macos-14, macos-latest, windows-latest] java: [8, 11, 17, 21, 25, EA] dist: ['temurin', 'zulu'] include: - platform: ubuntu-22.04 separator: ':' + - platform: ubuntu-22.04-arm + separator: ':' - platform: ubuntu-latest separator: ':' - platform: macos-latest diff --git a/build-logic/src/main/groovy/conventions.cpp.gradle b/build-logic/src/main/groovy/conventions.cpp.gradle index 28d9eadce..7d5ed01e9 100644 --- a/build-logic/src/main/groovy/conventions.cpp.gradle +++ b/build-logic/src/main/groovy/conventions.cpp.gradle @@ -26,6 +26,11 @@ model { } } } - gcc(Gcc) + gcc(Gcc) { + target("linux_aarch64") { + cppCompiler.executable = 'aarch64-linux-gnu-g++' + linker.executable = 'aarch64-linux-gnu-g++' + } + } } -} \ No newline at end of file +} diff --git a/openjdk-uber/build.gradle b/openjdk-uber/build.gradle index beaff563d..2d9e29839 100644 --- a/openjdk-uber/build.gradle +++ b/openjdk-uber/build.gradle @@ -16,7 +16,7 @@ Directory buildTop = layout.buildDirectory.get() ext { buildUberJar = Boolean.parseBoolean(System.getProperty('org.conscrypt.openjdk.buildUberJar', 'false')) uberJarClassifiers = (System.getProperty('org.conscrypt.openjdk.uberJarClassifiers', - 'osx-x86_64,osx-aarch_64,linux-x86_64,windows-x86_64')).split(',') + 'osx-x86_64,osx-aarch_64,linux-x86_64,linux-aarch_64,windows-x86_64')).split(',') classesDir = buildTop.dir('classes') resourcesDir = buildTop.dir('resources') sourcesDir = buildTop.dir('sources') diff --git a/openjdk/build.gradle b/openjdk/build.gradle index b63b4c8de..58332623c 100644 --- a/openjdk/build.gradle +++ b/openjdk/build.gradle @@ -26,6 +26,11 @@ description = 'Conscrypt: OpenJdk' enum NativeBuildInfo { WINDOWS_X86_64("windows", "x86_64"), LINUX_X86_64("linux", "x86_64"), + LINUX_AARCH64("linux", "aarch_64") { + String libDir() { + "build.arm" + } + }, MAC_X86_64("osx", "x86_64") { String libDir() { "build.x86" @@ -529,7 +534,11 @@ model { def stripTask = binary.tasks.taskName("strip") project.tasks.register(stripTask as String, Exec) { dependsOn binary.tasks.link - executable "strip" + if (nativeBuild == NativeBuildInfo.LINUX_AARCH64) { + executable "aarch64-linux-gnu-strip" + } else { + executable "strip" + } args binary.tasks.link.linkedFile.asFile.get() } copyTask.configure {