| # Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file | |
| # for details. All rights reserved. Use of this source code is governed by a | |
| # BSD-style license that can be found in the LICENSE file. | |
| import os | |
| import defines | |
| JDK_DIRS = os.path.join(defines.THIRD_PARTY, 'openjdk') | |
| ALL_JDKS = ['openjdk-9.0.4', 'jdk-11', 'jdk-17', 'jdk-21', 'jdk-25'] | |
| # This JDK is used for everything except the compilation of the compiler. | |
| def GetDefaultJdkHome(): | |
| return GetJdk21Home() | |
| # This JDK is used for compilation and tasks related to compilation of the compiler. | |
| def GetCompilationJdkHome(): | |
| return GetJdk11Home() | |
| def GetJdkHome(name): | |
| if name == 'jdk8': | |
| return GetJdk8Home() | |
| third_party_jdk_root = os.path.join(JDK_DIRS, name) | |
| if not os.path.exists(third_party_jdk_root): | |
| raise Exception('No JDKs found in ' + third_party_jdk_root) | |
| os_root = GetOSJavaHome(third_party_jdk_root) | |
| if not os.path.exists(os_root): | |
| raise Exception('No platform JDK found in ' + os_root) | |
| return os_root | |
| def GetOSJavaHome(root): | |
| if defines.IsLinux(): | |
| return os.path.join(root, 'linux') | |
| elif defines.IsOsX(): | |
| return os.path.join(root, 'osx', 'Contents', 'Home') | |
| elif defines.IsWindows(): | |
| return os.path.join(root, 'windows') | |
| else: | |
| raise Exception('Unsupported platform' | |
| ' (not detected as either of Linux, macOS or Windows)') | |
| def GetAllJdkDirs(): | |
| dirs = [] | |
| for jdk in ALL_JDKS: | |
| root = os.path.join(JDK_DIRS, jdk) | |
| if defines.IsLinux(): | |
| root = os.path.join(root, 'linux') | |
| elif defines.IsOsX(): | |
| root = os.path.join(root, 'osx') | |
| elif defines.IsWindows(): | |
| root = os.path.join(root, 'windows') | |
| else: | |
| raise Exception( | |
| 'Unsupported platform' | |
| ' (not detected as either of Linux, macOS or Windows)') | |
| # Some jdks are not available on windows, don't try to get these. | |
| if os.path.exists(root + '.tar.gz.sha1'): | |
| dirs.append(root) | |
| return dirs | |
| def GetJdk21Home(): | |
| return GetJdkHome('jdk-21') | |
| def GetJdk17Home(): | |
| return GetJdkHome('jdk-17') | |
| def GetJdk11Home(): | |
| return GetJdkHome('jdk-11') | |
| def GetJdk9Home(): | |
| return GetJdkHome('openjdk-9.0.4') | |
| def GetJdk8Home(): | |
| root = os.path.join(JDK_DIRS, 'jdk8') | |
| if defines.IsLinux(): | |
| return os.path.join(root, 'linux-x86') | |
| elif defines.IsOsX(): | |
| return os.path.join(root, 'darwin-x86') | |
| else: | |
| return os.environ['JAVA_HOME'] | |
| def GetJavaExecutable(jdkHome): | |
| executable = 'java.exe' if defines.IsWindows() else 'java' | |
| return os.path.join(jdkHome, 'bin', executable) | |
| def GetJavacExecutable(jdkHome): | |
| executable = 'javac.exe' if defines.IsWindows() else 'javac' | |
| return os.path.join(jdkHome, 'bin', executable) | |
| def GetJstackExecutable(jdkHome): | |
| executable = 'jstack.exe' if defines.IsWindows() else 'jstack' | |
| return os.path.join(jdkHome, 'bin', executable) |