9"""Default flavor, used for running code on desktop machines."""
15WIN_TOOLCHAIN_DIR =
't'
21DeviceDirs = collections.namedtuple(
22 'DeviceDirs', [
'bin_dir',
'dm_dir',
'perf_data_dir',
'resource_dir',
'images_dir',
'fonts_dir',
23 'lotties_dir',
'skp_dir',
'svg_dir',
'tmp_dir',
'texttraces_dir'])
42 bin_dir=self.
m.vars.build_dir,
43 dm_dir=self.
m.vars.swarming_out_dir,
44 perf_data_dir=self.
m.vars.swarming_out_dir,
45 resource_dir=self.
m.path.start_dir.join(
'skia',
'resources'),
46 images_dir=self.
m.path.start_dir.join(
'skimage'),
47 fonts_dir=self.
m.path.start_dir.join(
'googlefonts_testdata',
'data'),
48 lotties_dir=self.
m.path.start_dir.join(
'lottie-samples'),
49 skp_dir=self.
m.path.start_dir.join(
'skp'),
50 svg_dir=self.
m.path.start_dir.join(
'svg'),
51 tmp_dir=self.
m.vars.tmp_dir,
52 texttraces_dir=self.
m.path.start_dir.join(
'text_blob_traces'))
56 """Like os.path.join(), but for paths on a connected device."""
57 return self.
m.path.join(*args)
60 """Like shutil.copytree(), but for copying to a connected device."""
63 if str(host_dir) != str(device_dir):
64 raise ValueError(
'For builders who do not have attached devices, copying '
65 'from host to device is undefined and only allowed if '
66 'host_path and device_path are the same (%s vs %s).' % (
67 str(host_dir), str(device_dir)))
70 """Like shutil.copytree(), but for copying from a connected device."""
73 if str(host_dir) != str(device_dir):
74 raise ValueError(
'For builders who do not have attached devices, copying '
75 'from device to host is undefined and only allowed if '
76 'host_path and device_path are the same (%s vs %s).' % (
77 str(host_dir), str(device_dir)))
80 """Like shutil.copyfile, but for copying to a connected device."""
83 if str(host_path) != str(device_path):
84 raise ValueError(
'For builders who do not have attached devices, copying '
85 'from host to device is undefined and only allowed if '
86 'host_path and device_path are the same (%s vs %s).' % (
87 str(host_path), str(device_path)))
90 """Like shutil.rmtree() + os.makedirs(), but on a connected device."""
94 """Convenience function for creating a clean directory."""
95 self.
m.run.rmtree(path)
96 self.
m.file.ensure_directory(
97 'makedirs %s' % self.
m.path.basename(path), path)
100 """Reads the specified file."""
101 return self.
m.file.read_text(
'read %s' % path, path)
104 """Removes the specified file."""
105 return self.
m.file.remove(
'remove %s' % path, path)
108 """Run device-specific installation steps."""
112 """Run any device-specific cleanup steps."""
115 def _run(self, title, cmd, infra_step=False, **kwargs):
116 return self.m.
run(self.m.step, title, cmd=cmd,
117 infra_step=infra_step, **kwargs)
119 def _py(self, title, script, infra_step=True, args=()):
120 return self.m.
run(self.m.step, title, cmd=[
'python3', script]+args,
121 infra_step=infra_step)
123 def step(self, name, cmd, **unused_kwargs):
125 cmd = [app] + cmd[1:]
126 env = self.
m.context.env
130 workdir = self.
m.vars.workdir
131 clang_linux = workdir.join(
'clang_linux')
132 extra_tokens = self.
m.vars.extra_tokens
134 if self.
m.vars.is_linux:
135 if (self.
m.vars.builder_cfg.get(
'cpu_or_gpu',
'') ==
'GPU'
136 and 'Intel' in self.
m.vars.builder_cfg.get(
'cpu_or_gpu_value',
'')):
137 dri_path = workdir.join(
'mesa_intel_driver_linux')
138 if (
'IntelIrisXe' in self.
m.vars.builder_cfg.get(
'cpu_or_gpu_value',
'')):
139 dri_path = workdir.join(
'mesa_intel_driver_linux_22')
140 ld_library_path.append(dri_path)
141 env[
'LIBGL_DRIVERS_PATH'] = str(dri_path)
142 env[
'VK_ICD_FILENAMES'] = str(dri_path.join(
'intel_icd.x86_64.json'))
144 if 'Vulkan' in extra_tokens:
145 env[
'VULKAN_SDK'] = str(workdir.join(
'linux_vulkan_sdk'))
146 path.append(workdir.join(
'linux_vulkan_sdk',
'bin'))
147 ld_library_path.append(workdir.join(
'linux_vulkan_sdk',
'lib'))
152 if (self.
m.vars.builder_cfg.get(
'configuration',
'') !=
'Release' and
153 'ASAN' not in extra_tokens
and
154 'TSAN' not in extra_tokens):
155 env[
'VK_LAYER_PATH'] = str(workdir.join(
156 'linux_vulkan_sdk',
'etc',
'vulkan',
'explicit_layer.d'))
158 if 'SwiftShader' in extra_tokens:
159 ld_library_path.append(self.
host_dirs.bin_dir.join(
'swiftshader_out'))
162 if 'MSAN' in extra_tokens:
163 ld_library_path.append(clang_linux.join(
'msan'))
164 elif 'TSAN' in extra_tokens:
165 ld_library_path.append(clang_linux.join(
'tsan'))
167 if any(
'SAN' in t
for t
in extra_tokens):
169 path.append(clang_linux.join(
'bin'))
174 ld_library_path.append(clang_linux.join(
'lib',
'x86_64-unknown-linux-gnu'))
176 if 'ASAN' in extra_tokens:
177 os = self.
m.vars.builder_cfg.get(
'os',
'')
178 if 'Mac' in os
or 'Win' in os:
180 env[
'ASAN_OPTIONS'] =
'symbolize=1'
182 env[
'ASAN_OPTIONS'] =
'symbolize=1 detect_leaks=1'
183 env[
'ASAN_SYMBOLIZER_PATH'] = clang_linux.join(
'bin',
'llvm-symbolizer')
184 env[
'LSAN_OPTIONS'] =
'symbolize=1 print_suppressions=1'
185 env[
'UBSAN_OPTIONS'] =
'symbolize=1 print_stacktrace=1'
189 if name ==
'dm' and 'Vulkan' in extra_tokens:
190 env[
'ASAN_OPTIONS'] +=
' fast_unwind_on_malloc=0'
191 env[
'LSAN_OPTIONS'] +=
' fast_unwind_on_malloc=0'
193 if 'TSAN' in extra_tokens:
196 env[
'TSAN_OPTIONS'] =
'report_signal_unsafe=0'
198 if 'Coverage' in extra_tokens:
202 profname =
'%s.profraw' % self.
m.vars.builder_cfg.get(
'test_filter',
'o')
203 env[
'LLVM_PROFILE_FILE'] = self.
m.path.join(self.
m.vars.swarming_out_dir,
206 if 'DWriteCore' in extra_tokens:
207 path.append(workdir.join(
'dwritecore',
'bin'))
210 env[
'PATH'] = self.
m.path.pathsep.join(
211 [
'%(PATH)s'] + [
'%s' % p
for p
in path])
213 env[
'LD_LIBRARY_PATH'] = self.
m.path.pathsep.join(
214 '%s' % p
for p
in ld_library_path)
216 to_symbolize = [
'dm',
'nanobench']
217 if name
in to_symbolize
and self.
m.vars.is_linux:
220 args = [workdir] + [str(x)
for x
in cmd]
221 with self.
m.context(cwd=self.
m.path.start_dir.join(
'skia'), env=env):
222 self.
_py(
'symbolized %s' % name,
226 elif 'Win' in self.
m.vars.builder_cfg.get(
'os',
''):
227 with self.
m.context(env=env):
228 wrapped_cmd = [
'powershell',
'-ExecutionPolicy',
'Unrestricted',
231 self.
_run(name, wrapped_cmd)
233 with self.
m.context(env=env):
static SkString resource(SkPDFResourceType type, int index)
def step(self, name, cmd, **unused_kwargs)
def __init__(self, module, app_name)
def copy_file_to_device(self, host_path, device_path)
def _run(self, title, cmd, infra_step=False, **kwargs)
def create_clean_device_dir(self, path)
def read_file_on_device(self, path, **kwargs)
def copy_directory_contents_to_host(self, device_dir, host_dir)
def _py(self, title, script, infra_step=True, args=())
def copy_directory_contents_to_device(self, host_dir, device_dir)
def create_clean_host_dir(self, path)
def device_path_join(self, *args)
def remove_file_on_device(self, path)
SIT bool any(const Vec< 1, T > &x)