jolt 0.9.123__py3-none-any.whl → 0.9.435__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- jolt/__init__.py +80 -7
- jolt/__main__.py +9 -1
- jolt/bin/fstree-darwin-x86_64 +0 -0
- jolt/bin/fstree-linux-x86_64 +0 -0
- jolt/cache.py +832 -362
- jolt/chroot.py +156 -0
- jolt/cli.py +281 -162
- jolt/common_pb2.py +63 -0
- jolt/common_pb2_grpc.py +4 -0
- jolt/config.py +98 -41
- jolt/error.py +19 -4
- jolt/filesystem.py +2 -6
- jolt/graph.py +705 -117
- jolt/hooks.py +43 -0
- jolt/influence.py +122 -3
- jolt/loader.py +369 -121
- jolt/log.py +225 -63
- jolt/manifest.py +28 -38
- jolt/options.py +35 -10
- jolt/pkgs/abseil.py +42 -0
- jolt/pkgs/asio.py +25 -0
- jolt/pkgs/autoconf.py +41 -0
- jolt/pkgs/automake.py +41 -0
- jolt/pkgs/b2.py +31 -0
- jolt/pkgs/boost.py +111 -0
- jolt/pkgs/boringssl.py +32 -0
- jolt/pkgs/busybox.py +39 -0
- jolt/pkgs/bzip2.py +43 -0
- jolt/pkgs/cares.py +29 -0
- jolt/pkgs/catch2.py +36 -0
- jolt/pkgs/cbindgen.py +17 -0
- jolt/pkgs/cista.py +19 -0
- jolt/pkgs/clang.py +44 -0
- jolt/pkgs/cli11.py +24 -0
- jolt/pkgs/cmake.py +48 -0
- jolt/pkgs/cpython.py +196 -0
- jolt/pkgs/crun.py +29 -0
- jolt/pkgs/curl.py +38 -0
- jolt/pkgs/dbus.py +18 -0
- jolt/pkgs/double_conversion.py +24 -0
- jolt/pkgs/fastfloat.py +21 -0
- jolt/pkgs/ffmpeg.py +28 -0
- jolt/pkgs/flatbuffers.py +29 -0
- jolt/pkgs/fmt.py +27 -0
- jolt/pkgs/fstree.py +20 -0
- jolt/pkgs/gflags.py +18 -0
- jolt/pkgs/glib.py +18 -0
- jolt/pkgs/glog.py +25 -0
- jolt/pkgs/glslang.py +21 -0
- jolt/pkgs/golang.py +16 -11
- jolt/pkgs/googlebenchmark.py +18 -0
- jolt/pkgs/googletest.py +46 -0
- jolt/pkgs/gperf.py +15 -0
- jolt/pkgs/grpc.py +73 -0
- jolt/pkgs/hdf5.py +19 -0
- jolt/pkgs/help2man.py +14 -0
- jolt/pkgs/inja.py +28 -0
- jolt/pkgs/jsoncpp.py +31 -0
- jolt/pkgs/libarchive.py +43 -0
- jolt/pkgs/libcap.py +44 -0
- jolt/pkgs/libdrm.py +44 -0
- jolt/pkgs/libedit.py +42 -0
- jolt/pkgs/libevent.py +31 -0
- jolt/pkgs/libexpat.py +27 -0
- jolt/pkgs/libfastjson.py +21 -0
- jolt/pkgs/libffi.py +16 -0
- jolt/pkgs/libglvnd.py +30 -0
- jolt/pkgs/libogg.py +28 -0
- jolt/pkgs/libpciaccess.py +18 -0
- jolt/pkgs/libseccomp.py +21 -0
- jolt/pkgs/libtirpc.py +24 -0
- jolt/pkgs/libtool.py +42 -0
- jolt/pkgs/libunwind.py +35 -0
- jolt/pkgs/libva.py +18 -0
- jolt/pkgs/libvorbis.py +33 -0
- jolt/pkgs/libxml2.py +35 -0
- jolt/pkgs/libxslt.py +17 -0
- jolt/pkgs/libyajl.py +16 -0
- jolt/pkgs/llvm.py +81 -0
- jolt/pkgs/lua.py +54 -0
- jolt/pkgs/lz4.py +26 -0
- jolt/pkgs/m4.py +14 -0
- jolt/pkgs/make.py +17 -0
- jolt/pkgs/mesa.py +81 -0
- jolt/pkgs/meson.py +17 -0
- jolt/pkgs/mstch.py +28 -0
- jolt/pkgs/mysql.py +60 -0
- jolt/pkgs/nasm.py +49 -0
- jolt/pkgs/ncurses.py +30 -0
- jolt/pkgs/ng_log.py +25 -0
- jolt/pkgs/ninja.py +45 -0
- jolt/pkgs/nlohmann_json.py +25 -0
- jolt/pkgs/nodejs.py +19 -11
- jolt/pkgs/opencv.py +24 -0
- jolt/pkgs/openjdk.py +26 -0
- jolt/pkgs/openssl.py +103 -0
- jolt/pkgs/paho.py +76 -0
- jolt/pkgs/patchelf.py +16 -0
- jolt/pkgs/perl.py +42 -0
- jolt/pkgs/pkgconfig.py +64 -0
- jolt/pkgs/poco.py +39 -0
- jolt/pkgs/protobuf.py +77 -0
- jolt/pkgs/pugixml.py +27 -0
- jolt/pkgs/python.py +19 -0
- jolt/pkgs/qt.py +35 -0
- jolt/pkgs/rapidjson.py +26 -0
- jolt/pkgs/rapidyaml.py +28 -0
- jolt/pkgs/re2.py +30 -0
- jolt/pkgs/re2c.py +17 -0
- jolt/pkgs/readline.py +15 -0
- jolt/pkgs/rust.py +41 -0
- jolt/pkgs/sdl.py +28 -0
- jolt/pkgs/simdjson.py +27 -0
- jolt/pkgs/soci.py +46 -0
- jolt/pkgs/spdlog.py +29 -0
- jolt/pkgs/spirv_llvm.py +21 -0
- jolt/pkgs/spirv_tools.py +24 -0
- jolt/pkgs/sqlite.py +83 -0
- jolt/pkgs/ssl.py +12 -0
- jolt/pkgs/texinfo.py +15 -0
- jolt/pkgs/tomlplusplus.py +22 -0
- jolt/pkgs/wayland.py +26 -0
- jolt/pkgs/x11.py +58 -0
- jolt/pkgs/xerces_c.py +20 -0
- jolt/pkgs/xorg.py +360 -0
- jolt/pkgs/xz.py +29 -0
- jolt/pkgs/yamlcpp.py +30 -0
- jolt/pkgs/zeromq.py +47 -0
- jolt/pkgs/zlib.py +87 -0
- jolt/pkgs/zstd.py +33 -0
- jolt/plugins/alias.py +3 -0
- jolt/plugins/allure.py +5 -2
- jolt/plugins/autotools.py +66 -0
- jolt/plugins/cache.py +133 -0
- jolt/plugins/cmake.py +74 -6
- jolt/plugins/conan.py +238 -0
- jolt/plugins/cxx.py +698 -0
- jolt/plugins/cxxinfo.py +7 -0
- jolt/plugins/dashboard.py +1 -1
- jolt/plugins/docker.py +80 -23
- jolt/plugins/email.py +2 -2
- jolt/plugins/email.xslt +144 -101
- jolt/plugins/environ.py +11 -0
- jolt/plugins/fetch.py +141 -0
- jolt/plugins/gdb.py +39 -19
- jolt/plugins/gerrit.py +1 -14
- jolt/plugins/git.py +283 -85
- jolt/plugins/googletest.py +2 -1
- jolt/plugins/http.py +36 -38
- jolt/plugins/libtool.py +63 -0
- jolt/plugins/linux.py +990 -0
- jolt/plugins/logstash.py +4 -4
- jolt/plugins/meson.py +61 -0
- jolt/plugins/ninja-compdb.py +99 -30
- jolt/plugins/ninja.py +468 -166
- jolt/plugins/paths.py +11 -1
- jolt/plugins/pkgconfig.py +219 -0
- jolt/plugins/podman.py +136 -92
- jolt/plugins/python.py +137 -0
- jolt/plugins/remote_execution/__init__.py +0 -0
- jolt/plugins/remote_execution/administration_pb2.py +46 -0
- jolt/plugins/remote_execution/administration_pb2_grpc.py +170 -0
- jolt/plugins/remote_execution/log_pb2.py +32 -0
- jolt/plugins/remote_execution/log_pb2_grpc.py +68 -0
- jolt/plugins/remote_execution/scheduler_pb2.py +41 -0
- jolt/plugins/remote_execution/scheduler_pb2_grpc.py +141 -0
- jolt/plugins/remote_execution/worker_pb2.py +38 -0
- jolt/plugins/remote_execution/worker_pb2_grpc.py +112 -0
- jolt/plugins/report.py +12 -2
- jolt/plugins/rust.py +25 -0
- jolt/plugins/scheduler.py +710 -0
- jolt/plugins/selfdeploy/setup.py +8 -4
- jolt/plugins/selfdeploy.py +138 -88
- jolt/plugins/strings.py +35 -22
- jolt/plugins/symlinks.py +26 -11
- jolt/plugins/telemetry.py +5 -2
- jolt/plugins/timeline.py +13 -3
- jolt/plugins/volume.py +46 -48
- jolt/scheduler.py +589 -192
- jolt/tasks.py +625 -121
- jolt/templates/timeline.html.template +44 -47
- jolt/timer.py +22 -0
- jolt/tools.py +638 -282
- jolt/utils.py +211 -7
- jolt/version.py +1 -1
- jolt/xmldom.py +12 -2
- {jolt-0.9.123.dist-info → jolt-0.9.435.dist-info}/METADATA +97 -38
- jolt-0.9.435.dist-info/RECORD +207 -0
- {jolt-0.9.123.dist-info → jolt-0.9.435.dist-info}/WHEEL +1 -1
- jolt/plugins/amqp.py +0 -834
- jolt/plugins/debian.py +0 -338
- jolt/plugins/ftp.py +0 -181
- jolt/plugins/repo.py +0 -253
- jolt-0.9.123.dist-info/RECORD +0 -77
- {jolt-0.9.123.dist-info → jolt-0.9.435.dist-info}/entry_points.txt +0 -0
- {jolt-0.9.123.dist-info → jolt-0.9.435.dist-info}/top_level.txt +0 -0
jolt/plugins/logstash.py
CHANGED
|
@@ -13,9 +13,9 @@ log.verbose("[LogStash] Loaded")
|
|
|
13
13
|
|
|
14
14
|
class LogStashHooks(TaskHook):
|
|
15
15
|
def __init__(self):
|
|
16
|
-
self._uri = config.get("logstash", "http.uri")
|
|
16
|
+
self._uri = config.get("logstash", "http.uri", "http://logstash")
|
|
17
17
|
self._failed_enabled = config.getboolean("logstash", "failed", False)
|
|
18
|
-
self._finished_enabled = config.getboolean("logstash", "finished", False)
|
|
18
|
+
self._finished_enabled = config.getboolean("logstash", "passed", config.getboolean("logstash", "finished", False))
|
|
19
19
|
raise_error_if(not self._uri, "logstash.http.uri not configured")
|
|
20
20
|
|
|
21
21
|
def _get_uri(self, task):
|
|
@@ -25,8 +25,8 @@ class LogStashHooks(TaskHook):
|
|
|
25
25
|
task.canonical_name)
|
|
26
26
|
|
|
27
27
|
def _stash_log(self, task, logbuffer):
|
|
28
|
-
with task.tools.tmpdir("logstash") as
|
|
29
|
-
filepath = fs.path.join(
|
|
28
|
+
with task.tools.tmpdir("logstash") as tmp:
|
|
29
|
+
filepath = fs.path.join(tmp, "log")
|
|
30
30
|
with open(filepath, "w") as f:
|
|
31
31
|
f.write(logbuffer)
|
|
32
32
|
task.logstash = self._get_uri(task)
|
jolt/plugins/meson.py
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
from jolt import Task, attributes
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
@attributes.common_metadata()
|
|
5
|
+
class Meson(Task):
|
|
6
|
+
""" Base class for Meson-based build tasks. """
|
|
7
|
+
|
|
8
|
+
abstract = True
|
|
9
|
+
""" This is an abstract base class that should be inherited by concrete tasks. """
|
|
10
|
+
|
|
11
|
+
incremental = True
|
|
12
|
+
"""
|
|
13
|
+
Whether to use incremental builds.
|
|
14
|
+
If True, the build directories are preserved between runs.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
options = []
|
|
18
|
+
"""
|
|
19
|
+
Additional options to pass to the `meson` command.
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
srcdir = None
|
|
23
|
+
"""
|
|
24
|
+
Source directory for the Meson project.
|
|
25
|
+
|
|
26
|
+
If None, defaults to the task work directory (joltdir).
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
def clean(self, tools):
|
|
30
|
+
at = tools.meson(incremental=self.incremental)
|
|
31
|
+
at.clean()
|
|
32
|
+
|
|
33
|
+
def run(self, deps, tools):
|
|
34
|
+
self.deps = deps
|
|
35
|
+
options = tools.expand(self.options)
|
|
36
|
+
at = tools.meson(deps, incremental=self.incremental)
|
|
37
|
+
at.configure(self.srcdir or self.joltdir, *options)
|
|
38
|
+
at.build()
|
|
39
|
+
at.install()
|
|
40
|
+
|
|
41
|
+
def publish(self, artifact, tools):
|
|
42
|
+
at = tools.meson(incremental=self.incremental)
|
|
43
|
+
at.publish(artifact)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def requires(meson=True, ninja=True):
|
|
47
|
+
""" Decorator to add Meson and Ninja requirements to a task. """
|
|
48
|
+
|
|
49
|
+
import jolt.pkgs.meson
|
|
50
|
+
import jolt.pkgs.ninja
|
|
51
|
+
|
|
52
|
+
def decorate(cls):
|
|
53
|
+
if meson:
|
|
54
|
+
cls = attributes.requires("requires_meson")(cls)
|
|
55
|
+
cls.requires_meson = ["meson"]
|
|
56
|
+
if ninja:
|
|
57
|
+
cls = attributes.requires("requires_ninja")(cls)
|
|
58
|
+
cls.requires_ninja = ["ninja"]
|
|
59
|
+
return cls
|
|
60
|
+
|
|
61
|
+
return decorate
|
jolt/plugins/ninja-compdb.py
CHANGED
|
@@ -30,7 +30,7 @@ def patch(command, attrib, search, replace):
|
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
class CompDB(object):
|
|
33
|
-
def __init__(self, path="compile_commands.json", artifact=None):
|
|
33
|
+
def __init__(self, path="compdb/compile_commands.json", artifact=None):
|
|
34
34
|
self.commands = []
|
|
35
35
|
self.attribs = {}
|
|
36
36
|
if artifact:
|
|
@@ -89,29 +89,66 @@ def has_incpaths(artifact):
|
|
|
89
89
|
|
|
90
90
|
def stage_artifacts(artifacts, tools):
|
|
91
91
|
for artifact in filter(has_incpaths, artifacts):
|
|
92
|
-
tools.sandbox(artifact, incremental=True
|
|
92
|
+
tools.sandbox(artifact, incremental=True)
|
|
93
|
+
if fs.has_symlinks:
|
|
94
|
+
tools.sandbox(artifact, incremental=True, reflect=True)
|
|
93
95
|
|
|
94
96
|
|
|
95
|
-
def
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
def get_compdb_artifacts(task):
|
|
98
|
+
artifacts = []
|
|
99
|
+
|
|
100
|
+
def select_compdb(artifacts):
|
|
101
|
+
return list(filter(lambda a: a.name == "compdb", artifacts))
|
|
102
|
+
|
|
103
|
+
for dep in task.children:
|
|
104
|
+
artifacts.extend(dep.artifacts)
|
|
105
|
+
return select_compdb(task.artifacts)[0], select_compdb(artifacts)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def get_task_artifacts(task):
|
|
109
|
+
compdb_artifact = task.get_artifact("compdb")
|
|
110
|
+
artifacts = [a for a in task.artifacts]
|
|
111
|
+
for dep in task.children:
|
|
112
|
+
artifacts.extend(dep.artifacts)
|
|
113
|
+
return compdb_artifact, artifacts
|
|
99
114
|
|
|
100
115
|
|
|
101
116
|
class CompDBHooks(TaskHook):
|
|
117
|
+
def __init__(self):
|
|
118
|
+
self._depfiles = config.getboolean("ninja-compdb", "depfiles", False)
|
|
119
|
+
|
|
120
|
+
def publish_compdb(self, artifact, tools):
|
|
121
|
+
with tools.cwd(self.outdir):
|
|
122
|
+
artifact.collect("**/*compile_commands.json", "compdb/")
|
|
123
|
+
|
|
124
|
+
def publish_depfiles(self, artifact, tools):
|
|
125
|
+
with tools.cwd(self.outdir):
|
|
126
|
+
artifact.collect("**/*.d", "depfiles/")
|
|
127
|
+
|
|
102
128
|
def task_created(self, task):
|
|
103
129
|
task.task.influence.append(StringInfluence("NinjaCompDB: v3"))
|
|
130
|
+
if isinstance(task.task, ninja.CXXProject):
|
|
131
|
+
compdb_artifact = task.cache.get_artifact(task, "compdb")
|
|
132
|
+
task.add_artifact(compdb_artifact)
|
|
133
|
+
publish_compdb = getattr(task.task, "publish_compdb", None)
|
|
134
|
+
if not publish_compdb:
|
|
135
|
+
setattr(task.task, "publish_compdb", CompDBHooks.publish_compdb.__get__(task.task, task.task.__class__))
|
|
136
|
+
if self._depfiles:
|
|
137
|
+
depfile_artifact = task.cache.get_artifact(task, "depfiles")
|
|
138
|
+
task.add_artifact(depfile_artifact)
|
|
139
|
+
publish_depfiles = getattr(task.task, "publish_depfiles", None)
|
|
140
|
+
if not publish_depfiles:
|
|
141
|
+
setattr(task.task, "publish_depfiles", CompDBHooks.publish_depfiles.__get__(task.task, task.task.__class__))
|
|
104
142
|
|
|
105
143
|
def task_postrun(self, task, deps, tools):
|
|
106
144
|
if not isinstance(task.task, ninja.CXXProject):
|
|
107
145
|
return
|
|
108
|
-
with tools.cwd(
|
|
109
|
-
utils.call_and_catch(tools.run, "ninja -f build.ninja -t compdb > compile_commands.json")
|
|
146
|
+
with tools.cwd(tools.wsroot):
|
|
147
|
+
utils.call_and_catch(tools.run, "ninja -f {outdir}/build.ninja -t compdb > {outdir}/compile_commands.json")
|
|
110
148
|
|
|
111
149
|
def task_postpublish(self, task, artifact, tools):
|
|
112
|
-
if
|
|
113
|
-
|
|
114
|
-
artifact.collect("*compile_commands.json")
|
|
150
|
+
if artifact.name != "compdb":
|
|
151
|
+
return
|
|
115
152
|
|
|
116
153
|
# Add information about the workspace and cachedir roots
|
|
117
154
|
db = CompDB(artifact=artifact)
|
|
@@ -122,30 +159,40 @@ class CompDBHooks(TaskHook):
|
|
|
122
159
|
|
|
123
160
|
if isinstance(task.task, ninja.CXXProject):
|
|
124
161
|
dbpath = fs.path.join(task.task.outdir, "all_compile_commands.json")
|
|
125
|
-
_, deps =
|
|
162
|
+
_, deps = get_compdb_artifacts(task)
|
|
126
163
|
db = CompDB(dbpath)
|
|
127
164
|
for dep in [artifact] + deps:
|
|
128
165
|
depdb = CompDB(artifact=dep)
|
|
129
166
|
depdb.read()
|
|
130
|
-
depdb.relocate(task)
|
|
167
|
+
depdb.relocate(task, sandboxes=fs.has_symlinks())
|
|
131
168
|
db.merge(depdb)
|
|
132
169
|
db.write()
|
|
133
|
-
artifact.collect(dbpath, flatten=True)
|
|
170
|
+
artifact.collect(dbpath, "compdb/", flatten=True)
|
|
134
171
|
|
|
135
|
-
def task_finished_execution(self, task):
|
|
172
|
+
def task_finished_execution(self, task: graph.TaskProxy):
|
|
136
173
|
if task.options.network or task.options.worker:
|
|
137
174
|
return
|
|
138
175
|
if not task.is_goal():
|
|
139
176
|
return
|
|
140
177
|
if isinstance(task.task, ninja.CXXProject):
|
|
141
|
-
artifact, deps =
|
|
142
|
-
db = CompDB("all_compile_commands.json", artifact)
|
|
178
|
+
artifact, deps = get_compdb_artifacts(task)
|
|
179
|
+
db = CompDB("compdb/all_compile_commands.json", artifact)
|
|
143
180
|
db.read()
|
|
144
|
-
db.relocate(task)
|
|
181
|
+
db.relocate(task, sandboxes=fs.has_symlinks())
|
|
145
182
|
outdir = task.tools.builddir("compdb", incremental=True)
|
|
146
183
|
dbpath = fs.path.join(outdir, "all_compile_commands.json")
|
|
147
184
|
db.write(dbpath, force=True)
|
|
148
|
-
|
|
185
|
+
|
|
186
|
+
# Save the compilation database to the configured path
|
|
187
|
+
if task.is_goal():
|
|
188
|
+
last_path = config.get("ninja-compdb", "path")
|
|
189
|
+
if last_path:
|
|
190
|
+
last_path = os.path.join(task.tools.wsroot, last_path)
|
|
191
|
+
task.tools.mkdirname(last_path)
|
|
192
|
+
db.write(last_path, force=True)
|
|
193
|
+
|
|
194
|
+
artifact, deps = get_task_artifacts(task)
|
|
195
|
+
stage_artifacts(deps, task.tools)
|
|
149
196
|
|
|
150
197
|
def task_finished_download(self, task):
|
|
151
198
|
self.task_finished_execution(task)
|
|
@@ -179,54 +226,76 @@ def compdb(ctx, task, default):
|
|
|
179
226
|
|
|
180
227
|
"""
|
|
181
228
|
|
|
182
|
-
manifest = ctx.obj["manifest"]
|
|
183
229
|
options = JoltOptions(default=default)
|
|
184
230
|
acache = cache.ArtifactCache.get(options)
|
|
185
231
|
TaskHookRegistry.get(options)
|
|
186
232
|
executors = scheduler.ExecutorRegistry.get(options)
|
|
187
233
|
registry = TaskRegistry.get()
|
|
188
234
|
strategy = scheduler.DownloadStrategy(executors, acache)
|
|
189
|
-
queue = scheduler.TaskQueue(
|
|
235
|
+
queue = scheduler.TaskQueue()
|
|
190
236
|
|
|
191
237
|
for params in default:
|
|
192
238
|
registry.set_default_parameters(params)
|
|
193
239
|
|
|
194
|
-
gb = graph.GraphBuilder(registry,
|
|
240
|
+
gb = graph.GraphBuilder(registry, acache, options, progress=True)
|
|
195
241
|
dag = gb.build(task)
|
|
196
242
|
|
|
197
243
|
try:
|
|
198
|
-
with log.progress("Progress", dag.number_of_tasks(), " tasks", estimates=False, debug=False) as
|
|
244
|
+
with log.progress("Progress", dag.number_of_tasks(), " tasks", estimates=False, debug=False) as progress:
|
|
245
|
+
in_progress = set()
|
|
246
|
+
|
|
199
247
|
while dag.has_tasks() or not queue.empty():
|
|
200
|
-
leafs = dag.select(lambda graph, task: task.is_ready())
|
|
248
|
+
leafs = dag.select(lambda graph, task: task.is_ready() and task not in in_progress)
|
|
201
249
|
|
|
202
250
|
# Order the tasks by their weights to improve build times
|
|
203
251
|
leafs.sort(key=lambda x: x.weight)
|
|
204
252
|
|
|
205
253
|
while leafs:
|
|
206
254
|
task = leafs.pop()
|
|
207
|
-
|
|
255
|
+
executor = strategy.create_executor({}, task)
|
|
256
|
+
queue.submit(executor)
|
|
257
|
+
in_progress.add(task)
|
|
208
258
|
|
|
209
|
-
task,
|
|
210
|
-
|
|
259
|
+
task, _ = queue.wait()
|
|
260
|
+
|
|
261
|
+
# Materialize workspace resources so that
|
|
262
|
+
# source code is available to the debugger.
|
|
263
|
+
if task.is_workspace_resource():
|
|
264
|
+
task.task.acquire_ws(force=True)
|
|
265
|
+
|
|
266
|
+
# Unpack the task if it is not a resource task and has a custom unpack method
|
|
267
|
+
if not task.is_resource():
|
|
268
|
+
if task.is_unpackable():
|
|
269
|
+
task.unpack()
|
|
270
|
+
|
|
271
|
+
progress.update(1)
|
|
211
272
|
|
|
212
273
|
except KeyboardInterrupt:
|
|
213
274
|
print()
|
|
214
275
|
log.warning("Interrupted by user")
|
|
215
276
|
try:
|
|
216
277
|
queue.abort()
|
|
278
|
+
executors.shutdown()
|
|
217
279
|
sys.exit(1)
|
|
218
280
|
except KeyboardInterrupt:
|
|
219
281
|
print()
|
|
220
282
|
log.warning("Interrupted again, exiting")
|
|
221
283
|
os._exit(1)
|
|
222
284
|
|
|
285
|
+
finally:
|
|
286
|
+
queue.shutdown()
|
|
287
|
+
|
|
223
288
|
for goal in dag.goals:
|
|
224
|
-
|
|
225
|
-
|
|
289
|
+
if goal.is_resource():
|
|
290
|
+
continue
|
|
291
|
+
if goal.is_alias():
|
|
292
|
+
continue
|
|
293
|
+
compdb_artifact, artifacts = get_task_artifacts(goal)
|
|
294
|
+
db = CompDB("compdb/all_compile_commands.json", compdb_artifact)
|
|
226
295
|
db.read()
|
|
227
296
|
db.relocate(goal, sandboxes=fs.has_symlinks())
|
|
228
297
|
outdir = goal.tools.builddir("compdb", incremental=True)
|
|
229
298
|
dbpath = fs.path.join(outdir, "all_compile_commands.json")
|
|
230
299
|
db.write(dbpath, force=True)
|
|
231
|
-
stage_artifacts(
|
|
300
|
+
stage_artifacts(artifacts, goal.tools)
|
|
232
301
|
log.info("Compilation DB: {}", dbpath)
|