Skip to content

Commit b6667a6

Browse files
authored
propagate build flags into sysimg (#774)
This removes the enforced `-O` and `g` levels, and propogates the passed arguments to the entire build. We filter a few arguments from the base sysimg to prevent some failures and avoid known bugs.
1 parent 8e4c03c commit b6667a6

1 file changed

Lines changed: 14 additions & 8 deletions

File tree

src/PackageCompiler.jl

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -214,25 +214,31 @@ function rewrite_sysimg_jl_only_needed_stdlibs(stdlibs::Vector{String})
214214
r"stdlibs = \[(.*?)\]"s => string("stdlibs = [", join(":" .* stdlibs, ",\n"), "]"))
215215
end
216216

217-
function create_fresh_base_sysimage(stdlibs::Vector{String}; cpu_target::String)
217+
function create_fresh_base_sysimage(stdlibs::Vector{String}; cpu_target::String, sysimage_build_args::Cmd)
218218
tmp = mktempdir()
219219
sysimg_source_path = Base.find_source_file("sysimg.jl")
220220
base_dir = dirname(sysimg_source_path)
221221
tmp_corecompiler_ji = joinpath(tmp, "corecompiler.ji")
222222
tmp_sys_ji = joinpath(tmp, "sys.ji")
223223
compiler_source_path = joinpath(base_dir, "compiler", "compiler.jl")
224224

225+
# we can't strip the IR from the base sysimg, so we filter out this flag
226+
# also presuambly `--compile=all`` and maybe a few others we missed here...
227+
sysimage_build_args_strs = map(p -> "$(p...)", values(sysimage_build_args))
228+
filter!(p -> !contains(p, "--compile") && p ̸ ("--strip-ir",), sysimage_build_args_strs)
229+
sysimage_build_args = Cmd(sysimage_build_args_strs)
230+
225231
spinner = TerminalSpinners.Spinner(msg = "PackageCompiler: compiling base system image (incremental=false)")
226232
TerminalSpinners.@spin spinner begin
227233
cd(base_dir) do
228234
# Create corecompiler.ji
229235
cmd = if isdefined(Base, :Linking) # pkgimages feature flag
230-
cmd = `$(get_julia_cmd()) --output-ji $tmp_corecompiler_ji -g0 -O0 $compiler_source_path`
236+
cmd = `$(get_julia_cmd()) --output-ji $tmp_corecompiler_ji $sysimage_build_args $compiler_source_path`
231237
@debug "running $cmd" JULIA_CPU_TARGET = cpu_target
232238
addenv(cmd, "JULIA_CPU_TARGET" => cpu_target)
233239
else
234240
cmd = `$(get_julia_cmd()) --cpu-target $cpu_target --output-ji $tmp_corecompiler_ji
235-
-g0 -O0 $compiler_source_path`
241+
$sysimage_build_args $compiler_source_path`
236242
@debug "running $cmd"
237243
cmd
238244
end
@@ -246,13 +252,13 @@ function create_fresh_base_sysimage(stdlibs::Vector{String}; cpu_target::String)
246252
try
247253
cmd = if isdefined(Base, :Linking) # pkgimages feature flag
248254
cmd = `$(get_julia_cmd()) --sysimage=$tmp_corecompiler_ji
249-
-g1 -O0 --output-ji=$tmp_sys_ji $new_sysimage_source_path`
255+
$sysimage_build_args --output-ji=$tmp_sys_ji $new_sysimage_source_path`
250256
@debug "running $cmd" JULIA_CPU_TARGET = cpu_target
251257
addenv(cmd, "JULIA_CPU_TARGET" => cpu_target)
252258
else
253259
cmd = `$(get_julia_cmd()) --cpu-target $cpu_target
254260
--sysimage=$tmp_corecompiler_ji
255-
-g1 -O0 --output-ji=$tmp_sys_ji $new_sysimage_source_path`
261+
$sysimage_build_args --output-ji=$tmp_sys_ji $new_sysimage_source_path`
256262
@debug "running $cmd"
257263
cmd
258264
end
@@ -403,12 +409,12 @@ function create_sysimg_object_file(object_file::String,
403409
# Read the input via stdin to avoid hitting the maximum command line limit
404410

405411
cmd = if isdefined(Base, :Linking) # pkgimages feature flag
406-
cmd = `$(get_julia_cmd()) -O3 $sysimage_build_args
412+
cmd = `$(get_julia_cmd()) $sysimage_build_args
407413
--sysimage=$base_sysimage --project=$project --output-o=$(object_file) $outputo_file`
408414
@debug "running $cmd" JULIA_CPU_TARGET = cpu_target
409415
addenv(cmd, "JULIA_CPU_TARGET" => cpu_target)
410416
else
411-
cmd = `$(get_julia_cmd()) --cpu-target=$cpu_target -O3 $sysimage_build_args
417+
cmd = `$(get_julia_cmd()) --cpu-target=$cpu_target $sysimage_build_args
412418
--sysimage=$base_sysimage --project=$project --output-o=$(object_file) $outputo_file`
413419
@debug "running $cmd"
414420
cmd
@@ -519,7 +525,7 @@ function create_sysimage(packages::Union{Nothing, Symbol, Vector{String}, Vector
519525
error("cannot specify `base_sysimage` when `incremental=false`")
520526
end
521527
sysimage_stdlibs = filter_stdlibs ? gather_stdlibs_project(ctx) : stdlibs_in_sysimage()
522-
base_sysimage = create_fresh_base_sysimage(sysimage_stdlibs; cpu_target)
528+
base_sysimage = create_fresh_base_sysimage(sysimage_stdlibs; cpu_target, sysimage_build_args)
523529
else
524530
base_sysimage = something(base_sysimage, unsafe_string(Base.JLOptions().image_file))
525531
end

0 commit comments

Comments
 (0)