Skip to content

Commit 786b048

Browse files
authored
create a proper sysimage for the base sysimage (#906)
1 parent 852e9de commit 786b048

File tree

1 file changed

+20
-6
lines changed

1 file changed

+20
-6
lines changed

src/PackageCompiler.jl

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,9 @@ function create_fresh_base_sysimage(stdlibs::Vector{String}; cpu_target::String,
225225
sysimg_source_path = Base.find_source_file("sysimg.jl")
226226
base_dir = dirname(sysimg_source_path)
227227
tmp_corecompiler_ji = joinpath(tmp, "corecompiler.ji")
228-
tmp_sys_ji = joinpath(tmp, "sys.ji")
228+
tmp_sys_o = joinpath(tmp, "sys.o")
229+
tmp_sys_sl = joinpath(tmp, "sys." * Libdl.dlext)
230+
229231
compiler_source_path = joinpath(base_dir, "compiler", "compiler.jl")
230232

231233
# we can't strip the IR from the base sysimg, so we filter out this flag
@@ -234,17 +236,20 @@ function create_fresh_base_sysimage(stdlibs::Vector{String}; cpu_target::String,
234236
filter!(p -> !contains(p, "--compile") && p ̸ ("--strip-ir",), sysimage_build_args_strs)
235237
sysimage_build_args = Cmd(sysimage_build_args_strs)
236238

237-
spinner = TerminalSpinners.Spinner(msg = "PackageCompiler: compiling base system image (incremental=false)")
238-
TerminalSpinners.@spin spinner begin
239-
cd(base_dir) do
239+
cd(base_dir) do
240+
spinner = TerminalSpinners.Spinner(msg = "PackageCompiler: creating compiler .ji image (incremental=false)")
241+
TerminalSpinners.@spin spinner begin
240242
# Create corecompiler.ji
241243
cmd = `$(get_julia_cmd()) --cpu-target $cpu_target
242244
--output-ji $tmp_corecompiler_ji $sysimage_build_args
243245
$compiler_source_path`
244246
@debug "running $cmd"
245247

246248
read(cmd)
249+
end
247250

251+
spinner = TerminalSpinners.Spinner(msg = "PackageCompiler: compiling fresh sysimage (incremental=false)")
252+
TerminalSpinners.@spin spinner begin
248253
# Use that to create sys.ji
249254
new_sysimage_content = rewrite_sysimg_jl_only_needed_stdlibs(stdlibs)
250255
new_sysimage_content *= "\nempty!(Base.atexit_hooks)\n"
@@ -253,18 +258,27 @@ function create_fresh_base_sysimage(stdlibs::Vector{String}; cpu_target::String,
253258
try
254259
cmd = `$(get_julia_cmd()) --cpu-target $cpu_target
255260
--sysimage=$tmp_corecompiler_ji
256-
$sysimage_build_args --output-ji=$tmp_sys_ji
261+
$sysimage_build_args --output-o=$tmp_sys_o
257262
$new_sysimage_source_path`
258263
@debug "running $cmd"
259264

260265
read(cmd)
266+
267+
create_sysimg_from_object_file(String[tmp_sys_o],
268+
tmp_sys_sl;
269+
version=nothing,
270+
soname=nothing,
271+
compat_level="major")
272+
261273
finally
262274
rm(new_sysimage_source_path; force=true)
275+
rm(tmp_corecompiler_ji; force=true)
276+
rm(tmp_sys_o; force=true)
263277
end
264278
end
265279
end
266280

267-
return tmp_sys_ji
281+
return tmp_sys_sl
268282
end
269283

270284
function ensurecompiled(project, packages, sysimage)

0 commit comments

Comments
 (0)