# Copyright 2024 The Bazel Authors. All rights reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Helper functions to register remote jdk repos""" visibility(["//test"]) _RELEASE_CONFIGS = { "8": { "zulu": { "release": "8.78.0.19-ca-jdk8.0.412", "platforms": { "linux": ["aarch64", "x86_64"], "macos": ["aarch64", "x86_64"], "windows": ["x86_64"], }, }, "adoptopenjdk": { "release": "8u292-b10", "platforms": { "linux": ["s390x"], }, }, }, "11": { "zulu": { "release": "11.72.19-ca-jdk11.0.23", "platforms": { "linux": ["aarch64", "x86_64"], "macos": ["aarch64", "x86_64"], "windows": ["x86_64"], }, }, "adoptium": { "release": "11.0.15+10", "platforms": { "linux": ["ppc", "s390x"], }, }, "microsoft": { "release": "11.0.13.8.1", "platforms": { "windows": ["arm64"], }, }, }, "17": { "zulu": { "release": "17.50.19-ca-jdk17.0.11", "platforms": { "linux": ["aarch64", "x86_64"], "macos": ["aarch64", "x86_64"], "windows": ["arm64", "x86_64"], }, }, "adoptium": { "release": "17.0.8.1+1", "platforms": { "linux": ["ppc", "s390x"], }, }, }, "21": { "zulu": { "release": "21.36.17-ca-jdk21.0.4", "platforms": { "linux": ["aarch64", "x86_64"], "macos": ["aarch64", "x86_64"], "windows": ["arm64", "x86_64"], }, }, "adoptium": { "release": "21.0.4+7", "platforms": { "linux": ["ppc", "s390x"], }, }, }, } _STRIP_PREFIX_OVERRIDES = { "remotejdk11_win_arm64": "jdk-11.0.13+8", } def _name_for_remote_jdk(version, os, cpu): prefix = "remote_jdk" if version == "8" else "remotejdk" os_part = "win" if (os == "windows" and version != "8") else os if cpu == "x86_64": suffix = "" elif cpu == "ppc": suffix = "_ppc64le" else: suffix = "_" + cpu return prefix + version + "_" + os_part + suffix def _zulu_remote_jdk_repo(os, cpu, release): arch = cpu if cpu == "x86_64": arch = "x64" platform = os ext = ".tar.gz" if os == "macos": platform = "macosx" elif os == "windows": ext = ".zip" platform = "win" arch = "aarch64" if arch == "arm64" else arch archive_name = "zulu" + release + "-" + platform + "_" + arch primary_url = "cdn.azul.com/zulu/bin/" + archive_name + ext urls = [ "https://" + primary_url, "https://mirror.bazel.build/" + primary_url, ] return urls, archive_name def _adoptium_linux_remote_jdk_repo(version, cpu, release): os = "linux" arch = cpu if cpu == "ppc": arch = "ppc64le" archive_name = "OpenJDK" + version + "U-jdk_" + arch + "_" + os + "_hotspot_" + release.replace("+", "_") + ".tar.gz" primary_url = "github.com/adoptium/temurin" + version + "-binaries/releases/download/jdk-" + release + "/" + archive_name urls = [ "https://" + primary_url, "https://mirror.bazel.build/" + primary_url, ] return urls, "jdk-" + release def _microsoft_windows_arm64_remote_jdk_repo(release): primary_url = "aka.ms/download-jdk/microsoft-jdk-" + release + "-windows-aarch64.zip" urls = [ "https://" + primary_url, "https://mirror.bazel.build/" + primary_url, ] return urls, "" def _adoptopenjdk_remote_jdk_repo(version, os, cpu, release): archive = "OpenJDK" + version + "U-jdk_" + cpu + "_" + os + "_hotspot_" + release.replace("-", "") + ".tar.gz" primary_url = "github.com/AdoptOpenJDK/openjdk" + version + "-binaries/releases/download/jdk" + release + "/" + archive urls = [ "https://" + primary_url, "https://mirror.bazel.build/" + primary_url, ] return urls, "jdk" + release def _flatten_configs(): result = [] for version, all_for_version in _RELEASE_CONFIGS.items(): for distrib, distrib_cfg in all_for_version.items(): release = distrib_cfg["release"] for os, cpus in distrib_cfg["platforms"].items(): for cpu in cpus: name = _name_for_remote_jdk(version, os, cpu) if distrib == "zulu": urls, strip_prefix = _zulu_remote_jdk_repo(os, cpu, release) elif distrib == "adoptium": if os != "linux": fail("adoptium jdk configured but not linux") urls, strip_prefix = _adoptium_linux_remote_jdk_repo(version, cpu, release) elif distrib == "microsoft": if os != "windows" or cpu != "arm64": fail("only windows_arm64 config for microsoft is expected") urls, strip_prefix = _microsoft_windows_arm64_remote_jdk_repo(release) elif distrib == "adoptopenjdk": urls, strip_prefix = _adoptopenjdk_remote_jdk_repo(version, os, cpu, release) else: fail("unexpected distribution:", distrib) result.append(struct( name = name, version = version, urls = urls, strip_prefix = _STRIP_PREFIX_OVERRIDES.get(name, strip_prefix), target_compatible_with = ["@platforms//os:" + os, "@platforms//cpu:" + cpu], )) return result FLAT_CONFIGS = _flatten_configs()