|  | #!/usr/bin/env python3 | 
|  | # 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 sys | 
|  |  | 
|  | import defines | 
|  |  | 
|  | JDK_DIRS = os.path.join(defines.THIRD_PARTY, 'openjdk') | 
|  |  | 
|  | ALL_JDKS = ['openjdk-9.0.4', 'jdk-11', 'jdk-17', 'jdk-21', 'jdk-24'] | 
|  |  | 
|  |  | 
|  | def GetDefaultJdkHome(): | 
|  | 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 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=None): | 
|  | jdkHome = jdkHome if jdkHome else GetDefaultJdkHome() | 
|  | executable = 'java.exe' if defines.IsWindows() else 'java' | 
|  | return os.path.join(jdkHome, 'bin', executable) if jdkHome else executable | 
|  |  | 
|  |  | 
|  | def GetJavacExecutable(jdkHome=None): | 
|  | jdkHome = jdkHome if jdkHome else GetDefaultJdkHome() | 
|  | executable = 'javac.exe' if defines.IsWindows() else 'javac' | 
|  | return os.path.join(jdkHome, 'bin', executable) if jdkHome else executable | 
|  |  | 
|  |  | 
|  | def Main(): | 
|  | print(GetDefaultJdkHome()) | 
|  |  | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | sys.exit(Main()) |