blob: f37d272ac3ca4ad75c3f029a3cc2b98546c6efec [file] [log] [blame]
Ian Zernydcb172e2022-02-22 15:36:45 +01001#!/usr/bin/env python3
Ian Zerny5fffb0a2019-02-11 13:54:22 +01002# Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
3# for details. All rights reserved. Use of this source code is governed by a
4# BSD-style license that can be found in the LICENSE file.
5
6import os
7import sys
Ian Zerny5fffb0a2019-02-11 13:54:22 +01008
Ian Zernya8b7d422022-03-31 11:20:49 +02009import defines
10
Ian Zerny3f54e222019-02-12 10:51:17 +010011JDK_DIR = os.path.join(defines.THIRD_PARTY, 'openjdk')
Ian Zerny5fffb0a2019-02-11 13:54:22 +010012
Rico Wind80af6202023-08-29 12:41:01 +020013ALL_JDKS = ['openjdk-9.0.4', 'jdk-11', 'jdk-15', 'jdk-16', 'jdk-17',
14 'jdk-18', 'jdk-20']
15
16
Ian Zerny5fffb0a2019-02-11 13:54:22 +010017def GetJdkHome():
Ian Zerny2670afd2022-04-07 12:45:30 +020018 return GetJdk11Home()
Ian Zernya8b7d422022-03-31 11:20:49 +020019
Rico Winda12d1cf2022-04-22 07:37:00 +000020def GetJdkRoot():
21 return GetJdk11Root()
22
23def GetJdk11Root():
Ian Zernya8b7d422022-03-31 11:20:49 +020024 root = os.path.join(JDK_DIR, 'jdk-11')
Rico Wind80af6202023-08-29 12:41:01 +020025 os_root = GetOSPath(root)
26 return os_root if os_root else os.environ['JAVA_HOME']
27
28def GetOSPath(root):
Ian Zerny3f54e222019-02-12 10:51:17 +010029 if defines.IsLinux():
Ian Zerny5fffb0a2019-02-11 13:54:22 +010030 return os.path.join(root, 'linux')
Ian Zerny3f54e222019-02-12 10:51:17 +010031 elif defines.IsOsX():
Ian Zerny5fffb0a2019-02-11 13:54:22 +010032 return os.path.join(root, 'osx')
Ian Zerny3f54e222019-02-12 10:51:17 +010033 elif defines.IsWindows():
Ian Zerny5fffb0a2019-02-11 13:54:22 +010034 return os.path.join(root, 'windows')
35 else:
Rico Wind80af6202023-08-29 12:41:01 +020036 return None
37
38def GetAllJdkDirs():
39 dirs = []
40 for jdk in ALL_JDKS:
41 root = GetOSPath(os.path.join(JDK_DIR, jdk))
42 # Some jdks are not available on windows, don't try to get these.
43 if os.path.exists(root + '.tar.gz.sha1'):
44 dirs.append(root)
45 return dirs
Ian Zerny5fffb0a2019-02-11 13:54:22 +010046
Rico Winda12d1cf2022-04-22 07:37:00 +000047def GetJdk11Home():
48 root = GetJdk11Root()
49 # osx has the home inside Contents/Home in the bundle
50 if defines.IsOsX():
51 return os.path.join(root,'Contents', 'Home')
52 else:
53 return root
54
Ian Zernya8b7d422022-03-31 11:20:49 +020055def GetJdk9Home():
56 root = os.path.join(JDK_DIR, 'openjdk-9.0.4')
Clément Béra54696f72021-11-16 09:27:22 +000057 if defines.IsLinux():
58 return os.path.join(root, 'linux')
59 elif defines.IsOsX():
60 return os.path.join(root, 'osx')
61 elif defines.IsWindows():
62 return os.path.join(root, 'windows')
63 else:
64 return os.environ['JAVA_HOME']
65
Morten Krogh-Jespersenf2f98e12020-03-23 09:02:30 +010066def GetJdk8Home():
67 root = os.path.join(JDK_DIR, 'jdk8')
68 if defines.IsLinux():
69 return os.path.join(root, 'linux-x86')
70 elif defines.IsOsX():
71 return os.path.join(root, 'darwin-x86')
72 else:
73 return os.environ['JAVA_HOME']
74
Ian Zerny5fffb0a2019-02-11 13:54:22 +010075def GetJavaExecutable(jdkHome=None):
76 jdkHome = jdkHome if jdkHome else GetJdkHome()
Ian Zerny3f54e222019-02-12 10:51:17 +010077 executable = 'java.exe' if defines.IsWindows() else 'java'
Ian Zerny5fffb0a2019-02-11 13:54:22 +010078 return os.path.join(jdkHome, 'bin', executable) if jdkHome else executable
79
80def GetJavacExecutable(jdkHome=None):
81 jdkHome = jdkHome if jdkHome else GetJdkHome()
Ian Zerny3f54e222019-02-12 10:51:17 +010082 executable = 'javac.exe' if defines.IsWindows() else 'javac'
Ian Zerny5fffb0a2019-02-11 13:54:22 +010083 return os.path.join(jdkHome, 'bin', executable) if jdkHome else executable
84
Ian Zerny5fffb0a2019-02-11 13:54:22 +010085def Main():
Rico Wind3d369b42021-01-12 10:26:24 +010086 print(GetJdkHome())
Ian Zerny5fffb0a2019-02-11 13:54:22 +010087
88if __name__ == '__main__':
89 sys.exit(Main())