blob: 8496cfabf3dafee73ec64db71fa926a41293e286 [file] [log] [blame]
Todd Fiala2c0802c2016-01-28 07:36:44 +00001import os
2import subprocess
3
4#### UTILITIES ####
5
Kate Stoneb9c1b512016-09-06 20:57:50 +00006
7def enum(*sequential, **named):
Todd Fiala2c0802c2016-01-28 07:36:44 +00008 enums = dict(zip(sequential, range(len(sequential))), **named)
9 return type('Enum', (), enums)
10
11#### SETTINGS ####
12
13#### INTERFACE TO THE XCODEPROJ ####
14
Kate Stoneb9c1b512016-09-06 20:57:50 +000015
16def lldb_source_path():
Todd Fiala2c0802c2016-01-28 07:36:44 +000017 return os.environ.get('SRCROOT')
18
Kate Stoneb9c1b512016-09-06 20:57:50 +000019
20def expected_llvm_build_path():
Todd Fiala2c0802c2016-01-28 07:36:44 +000021 if build_type() == BuildType.Xcode:
22 return package_build_path()
23 else:
Kate Stoneb9c1b512016-09-06 20:57:50 +000024 return os.path.join(
25 os.environ.get('LLDB_PATH_TO_LLVM_BUILD'),
26 package_build_dir_name("llvm"))
Todd Fiala2c0802c2016-01-28 07:36:44 +000027
Kate Stoneb9c1b512016-09-06 20:57:50 +000028
29def archives_txt():
Todd Fiala2c0802c2016-01-28 07:36:44 +000030 return os.path.join(expected_package_build_path(), "archives.txt")
31
Kate Stoneb9c1b512016-09-06 20:57:50 +000032
33def expected_package_build_path():
Todd Fiala2c0802c2016-01-28 07:36:44 +000034 return os.path.abspath(os.path.join(expected_llvm_build_path(), ".."))
35
Enrico Granata5edef422016-09-22 17:59:58 +000036def is_host_build():
Enrico Granata9a4a6b22016-09-22 17:47:33 +000037 rc_project_name = os.environ.get('RC_ProjectName')
38 if rc_project_name:
Enrico Granata5edef422016-09-22 17:59:58 +000039 if rc_project_name == 'lldb_host': return True
40 return False
41
42def rc_release_target():
43 return os.environ.get('RC_RELEASE', '')
44
Enrico Granataf8802502016-09-23 22:30:08 +000045def rc_platform_name():
46 return os.environ.get('RC_PLATFORM_NAME', 'macOS')
47
Enrico Granata5edef422016-09-22 17:59:58 +000048def architecture():
49 if is_host_build(): return 'macosx'
Todd Fiala2c0802c2016-01-28 07:36:44 +000050 platform_name = os.environ.get('RC_PLATFORM_NAME')
51 if not platform_name:
52 platform_name = os.environ.get('PLATFORM_NAME')
53 platform_arch = os.environ.get('ARCHS').split()[-1]
54 return platform_name + "-" + platform_arch
55
Kate Stoneb9c1b512016-09-06 20:57:50 +000056
57def lldb_configuration():
Todd Fiala2c0802c2016-01-28 07:36:44 +000058 return os.environ.get('CONFIGURATION')
59
Kate Stoneb9c1b512016-09-06 20:57:50 +000060
61def llvm_configuration():
Todd Fiala2c0802c2016-01-28 07:36:44 +000062 return os.environ.get('LLVM_CONFIGURATION')
63
Kate Stoneb9c1b512016-09-06 20:57:50 +000064
65def llvm_build_dirtree():
Todd Fiala2c0802c2016-01-28 07:36:44 +000066 return os.environ.get('LLVM_BUILD_DIRTREE')
67
68# Edit the code below when adding build styles.
69
70BuildType = enum('Xcode') # (Debug,DebugClang,Release)
71
Kate Stoneb9c1b512016-09-06 20:57:50 +000072
73def build_type():
Todd Fiala2c0802c2016-01-28 07:36:44 +000074 return BuildType.Xcode
75
76#### VCS UTILITIES ####
77
78VCS = enum('git',
79 'svn')
80
Kate Stoneb9c1b512016-09-06 20:57:50 +000081
Todd Fiala2c0802c2016-01-28 07:36:44 +000082def run_in_directory(args, path):
83 return subprocess.check_output(args, cwd=path)
84
Kate Stoneb9c1b512016-09-06 20:57:50 +000085
Todd Fiala2c0802c2016-01-28 07:36:44 +000086class Git:
Kate Stoneb9c1b512016-09-06 20:57:50 +000087
88 def __init__(self, spec):
Todd Fiala2c0802c2016-01-28 07:36:44 +000089 self.spec = spec
Kate Stoneb9c1b512016-09-06 20:57:50 +000090
91 def status(self):
Todd Fiala2c0802c2016-01-28 07:36:44 +000092 return run_in_directory(["git", "branch", "-v"], self.spec['root'])
Kate Stoneb9c1b512016-09-06 20:57:50 +000093
94 def diff(self):
Todd Fiala2c0802c2016-01-28 07:36:44 +000095 return run_in_directory(["git", "diff"], self.spec['root'])
Kate Stoneb9c1b512016-09-06 20:57:50 +000096
97 def check_out(self):
98 run_in_directory(["git",
99 "clone",
100 "--depth=1",
101 self.spec['url'],
102 self.spec['root']],
103 lldb_source_path())
Todd Fiala2c0802c2016-01-28 07:36:44 +0000104 run_in_directory(["git", "fetch", "--all"], self.spec['root'])
Kate Stoneb9c1b512016-09-06 20:57:50 +0000105 run_in_directory(["git", "checkout", self.spec[
106 'ref']], self.spec['root'])
107
Todd Fiala2c0802c2016-01-28 07:36:44 +0000108
109class SVN:
Kate Stoneb9c1b512016-09-06 20:57:50 +0000110
111 def __init__(self, spec):
Todd Fiala2c0802c2016-01-28 07:36:44 +0000112 self.spec = spec
Kate Stoneb9c1b512016-09-06 20:57:50 +0000113
114 def status(self):
Todd Fiala2c0802c2016-01-28 07:36:44 +0000115 return run_in_directory(["svn", "info"], self.spec['root'])
Kate Stoneb9c1b512016-09-06 20:57:50 +0000116
117 def diff(self):
Todd Fiala2c0802c2016-01-28 07:36:44 +0000118 return run_in_directory(["svn", "diff"], self.spec['root'])
119 # TODO implement check_out
120
Kate Stoneb9c1b512016-09-06 20:57:50 +0000121
122def vcs(spec):
Todd Fiala2c0802c2016-01-28 07:36:44 +0000123 if spec['vcs'] == VCS.git:
124 return Git(spec)
125 elif spec['vcs'] == VCS.svn:
126 return SVN(spec)
127 else:
128 return None
129
130#### SOURCE PATHS ####
131
Kate Stoneb9c1b512016-09-06 20:57:50 +0000132
133def llvm_source_path():
Todd Fiala2c0802c2016-01-28 07:36:44 +0000134 if build_type() == BuildType.Xcode:
135 return os.path.join(lldb_source_path(), "llvm")
136
Kate Stoneb9c1b512016-09-06 20:57:50 +0000137
138def clang_source_path():
Todd Fiala2c0802c2016-01-28 07:36:44 +0000139 if build_type() == BuildType.Xcode:
140 return os.path.join(llvm_source_path(), "tools", "clang")
141
Kate Stoneb9c1b512016-09-06 20:57:50 +0000142
143def ninja_source_path():
Todd Fiala2c0802c2016-01-28 07:36:44 +0000144 if build_type() == BuildType.Xcode:
145 return os.path.join(lldb_source_path(), "ninja")
146
147#### BUILD PATHS ####
148
Kate Stoneb9c1b512016-09-06 20:57:50 +0000149
150def packages():
Todd Fiala2c0802c2016-01-28 07:36:44 +0000151 return ["llvm"]
152
Kate Stoneb9c1b512016-09-06 20:57:50 +0000153
154def package_build_dir_name(package):
Todd Fiala2c0802c2016-01-28 07:36:44 +0000155 return package + "-" + architecture()
156
Kate Stoneb9c1b512016-09-06 20:57:50 +0000157
158def expected_package_build_path_for(package):
Todd Fiala2c0802c2016-01-28 07:36:44 +0000159 if build_type() == BuildType.Xcode:
160 if package != "llvm":
Kate Stoneb9c1b512016-09-06 20:57:50 +0000161 raise "On Xcode build, we only support the llvm package: requested {}"
Todd Fiala2c0802c2016-01-28 07:36:44 +0000162 return package_build_path()
Kate Stoneb9c1b512016-09-06 20:57:50 +0000163 return os.path.join(
164 expected_package_build_path(),
165 package_build_dir_name(package))
Todd Fiala2c0802c2016-01-28 07:36:44 +0000166
Kate Stoneb9c1b512016-09-06 20:57:50 +0000167
168def expected_package_build_paths():
Todd Fiala2c0802c2016-01-28 07:36:44 +0000169 return [expected_package_build_path_for(package) for package in packages()]
170
Kate Stoneb9c1b512016-09-06 20:57:50 +0000171
172def library_path(build_path):
Todd Fiala2c0802c2016-01-28 07:36:44 +0000173 return build_path + "/lib"
174
Kate Stoneb9c1b512016-09-06 20:57:50 +0000175
176def library_paths():
Todd Fiala2c0802c2016-01-28 07:36:44 +0000177 if build_type() == BuildType.Xcode:
178 package_build_paths = [package_build_path()]
179 else:
180 package_build_paths = expected_package_build_paths()
181 return [library_path(build_path) for build_path in package_build_paths]
182
Kate Stoneb9c1b512016-09-06 20:57:50 +0000183
184def package_build_path():
Todd Fiala2c0802c2016-01-28 07:36:44 +0000185 return os.path.join(
186 llvm_build_dirtree(),
187 os.environ["LLVM_CONFIGURATION"],
188 os.environ["CURRENT_ARCH"])