AOT compilation error on Julia 1.12 due to strip-metadata or filter_stdlibs

Normally I use create_app from PackageCompiler.jl and it completes successfully on Julia 1.11 with complex case (multiple dependencies). On 1.12 it fails so I decided to narrow down the example. Using PackageCompiler 2.2.3 and Julia 1.12-nightly (which is 1.12.1 basically at this point; but also 1.12.0 fails in the same way) the following command fails (both on Windows and Linux):

create_sysimage(["JSON"]; sysimage_path="ExampleSysimage.so", sysimage_build_args=–compile=all --strip-metadata --strip-ir, filter_stdlibs=true, incremental=false)

JSON here is v1.1.0. This is example case as I can find more packages that fail in the similar way (including older JSON releases, i.e. <1). Command parameters here are more common for create_app since I want to recreate that behavior with simpler code. I thought it is worth reporting and discussing as it works in v1.11, but not in v1.12.

My internal testing shows that this case fails due to strip-metadata and more packages fail due to filter_stdlibs (such as PowerModels).

Here is write out of log:

PS E:\test>julia .\setup.jl
Activating project at E:\test
Updating registry at C:\Users\karlo\.julia\registries\General.toml
Updating E:\test\Project.toml
[682c06a0] + JSON v1.1.0
[9b87118b] + PackageCompiler v2.2.3
Updating E:\test\Manifest.toml
[c27321d9] + Glob v1.3.1
[682c06a0] + JSON v1.1.0
[9b87118b] + PackageCompiler v2.2.3
[69de0a69] + Parsers v2.8.3
[aea7be01] + PrecompileTools v1.3.3
[21216c6a] + Preferences v1.5.0
[05181044] + RelocatableFolders v1.0.1
[6c6a2e73] + Scratch v1.3.0
[ec057cc2] + StructUtils v2.5.1
[0dad84c5] + ArgTools v1.1.2
[56f22d72] + Artifacts v1.11.0
[2a0f44e3] + Base64 v1.11.0
[ade2ca70] + Dates v1.11.0
[f43a241f] + Downloads v1.6.0
[7b1f6079] + FileWatching v1.11.0
[ac6e5ff7] + JuliaSyntaxHighlighting v1.12.0
[4af54fe1] + LazyArtifacts v1.11.0
[b27032c2] + LibCURL v0.6.4
[76f85450] + LibGit2 v1.11.0
[8f399da3] + Libdl v1.11.0
[56ddb016] + Logging v1.11.0
[d6f4376e] + Markdown v1.11.0
[ca575930] + NetworkOptions v1.3.0
[44cfe95a] + Pkg v1.12.0
[de0858da] + Printf v1.11.0
[9a3f8284] + Random v1.11.0
[ea8e919c] + SHA v0.7.0
[f489334b] + StyledStrings v1.11.0
[fa267f1f] + TOML v1.0.3
[a4e569a6] + Tar v1.10.0
[cf7118a7] + UUIDs v1.11.0
[4ec0a83e] + Unicode v1.11.0
[deac9b47] + LibCURL_jll v8.11.1+1
[e37daf67] + LibGit2_jll v1.9.0+0
[29816b5a] + LibSSH2_jll v1.11.3+1
[14a3606d] + MozillaCACerts_jll v2025.5.20
[458c3c95] + OpenSSL_jll v3.5.1+0
[83775a58] + Zlib_jll v1.3.1+2
[8e850ede] + nghttp2_jll v1.64.0+1
[3f19e933] + p7zip_jll v17.5.0+2
:check_mark: [02m:57s] PackageCompiler: creating compiler sysimage (incremental=false)
:check_mark: [01m:03s] PackageCompiler: compiling fresh sysimage (incremental=false)
Precompiling Pkg finished.
30 dependencies successfully precompiled in 12 seconds
✗ StructUtils
✗ JSON
Precompiling packages finished.
8 dependencies successfully precompiled in 6 seconds. 30 already precompiled.

ERROR: The following 1 direct dependency failed to precompile:

JSON

Failed to precompile JSON [682c06a0-de6a-54ab-a142-c8b1cf79cde6] to “C:\Users\karlo\.julia\compiled\v1.12\JSON\jl_1B4.tmp”.
ERROR: LoadError: UndefVarError: ##meta#60 not defined in Base.Docs
Stacktrace:
[1] meta(?::Module; ?::Bool)
@ Base.Docs .\docs\Docs.jl:84
[2] meta
@ .\docs\Docs.jl:77 [inlined]
[3] _doc(?::Base.Docs.Binding, ?::Type)
@ Base.Docs .\docs\Docs.jl:578
[4] _doc(?::Base.Docs.Binding)
@ Base.Docs .\docs\Docs.jl:572
[5] top-level scope
@ C:\Users\karlo.julia\packages\StructUtils\CvpPP\src\StructUtils.jl:151
[6] eval
@ .\none:-1 [inlined]
[7] include(?::Module, ?::String)
@ Base .\Base.jl:306
[8] include_package_for_output(?::Base.PkgId, ?::String, ?::Vector{String}, ?::Vector{String}, ?::Vector{String}, ?::Vector{Pair{Base.PkgId, UInt128}}, ?::String)
@ Base .\loading.jl:2996
[9] top-level scope
@ C:\Users\karlo.julia\juliaup\julia-1.12-nightly\share\julia\Compiler\src\stdin:5
[10] eval
@ .\none:-1 [inlined]
[11] eval(?::Module, ?::Any)
@ Core .<missing>:0
[12] include_string(?::typeof(identity), ?::Module, ?::String, ?::String)
@ Base .\loading.jl:2842
[13] include_string
@ .\loading.jl:2852 [inlined]
[14] exec_options(?::Base.JLOptions)
@ Base .\client.jl:315
[15] _start()
@ Base .\client.jl:550
in expression starting at C:\Users\karlo.julia\packages\StructUtils\CvpPP\src\StructUtils.jl:1
in expression starting at stdin:5
ERROR: LoadError: Failed to precompile StructUtils [ec057cc2-7a8d-4b58-b3b3-92acb9f63b42] to “C:\Users\karlo\.julia\compiled\v1.12\StructUtils\jl_249.tmp”.
Stacktrace:
[1] error
@ .\none:-1 [inlined]
[2] error(?::String)
@ Base .<missing>:0
[3] compilecache(?::Base.PkgId, ?::String, ?::IO, ?::IO, ?::Bool; ?::Cmd, ?::Base.CacheFlags, ?::Dict{String, Int64}, ?::Nothing)
@ Base .\loading.jl:3283
[4] compilecache (repeats 2 times)
@ .\none:-1 [inlined]
[5] (::Base.var"#__require_prelocked##0#__require_prelocked##1"{Base.PkgId, String, Dict{String, Int64}})()
@ Base .\loading.jl:2651
[6] maybe_cachefile_lock(?::Base.var"#__require_prelocked##0#__require_prelocked##1"{Base.PkgId, String, Dict{String, Int64}}, ?::Base.PkgId, ?::String; ?::Int64)
@ Base .\loading.jl:3870
[7] maybe_cachefile_lock
@ .\loading.jl:3851 [inlined]
[8] __require_prelocked(?::Base.PkgId, ?::String)
@ Base .\loading.jl:2637
[9] _require_prelocked(?::Base.PkgId, ?::String)
@ Base .\loading.jl:2465
[10] macro expansion
@ .\loading.jl:2393 [inlined]
[11] macro expansion
@ .\lock.jl:376 [inlined]
[12] __require(?::Module, ?::Symbol)
@ Base .\loading.jl:2358
[13] require(?::Module, ?::Symbol)
@ Base .\loading.jl:2334
[14] top-level scope
@ C:\Users\karlo.julia\packages\JSON\jLnej\src\JSON.jl:6
[15] eval
@ .\none:-1 [inlined]
[16] include(?::Module, ?::String)
@ Base .\Base.jl:306
[17] include_package_for_output(?::Base.PkgId, ?::String, ?::Vector{String}, ?::Vector{String}, ?::Vector{String}, ?::Vector{Pair{Base.PkgId, UInt128}}, ?::Nothing)
@ Base .\loading.jl:2996
[18] top-level scope
@ C:\Users\karlo.julia\juliaup\julia-1.12-nightly\share\julia\Compiler\src\stdin:5
[19] eval
@ .\none:-1 [inlined]
[20] eval(?::Module, ?::Any)
@ Core .<missing>:0
[21] include_string(?::typeof(identity), ?::Module, ?::String, ?::String)
@ Base .\loading.jl:2842
[22] include_string
@ .\loading.jl:2852 [inlined]
[23] exec_options(?::Base.JLOptions)
@ Base .\client.jl:315
[24] _start()
@ Base .\client.jl:550
in expression starting at C:\Users\karlo.julia\packages\JSON\jLnej\src\JSON.jl:1
in expression starting at stdin:
ERROR: LoadError: failed process: Process(setenv('C:\Users\karlo\.julia\juliaup\julia-1.12-nightly\bin\julia.exe' --color=yes --startup-file=no --pkgimages=no '--sysimage=C:\Users\karlo\AppData\Local\Temp\jl_OpreYy\sys.dll' -e 'using Pkg; Pkg.precompile()',[“WINDIR=C:\WINDOWS”, “PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\NVIDIA Corporation\NVIDIA App\NvDLISR;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;E:\HSL;C:\Program Files\Git\cmd;C:\Program Files\Wolfram Research\WolframScript\;C:\Program Files\dotnet\;C:\Program Files\Process Lasso\;C:\Program Files\Tailscale\;C:\Program Files\SafeNet\Authentication\SAC\x64;C:\Program Files\SafeNet\Authentication\SAC\x32;C:\Users\karlo\AppData\Local\Microsoft\WindowsApps;;C:\Users\karlo\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\karlo\AMPL;C:\Users\karlo\AMPL\solvers”, “USERDOMAIN_ROAMINGPROFILE=KARLO”, “WSLENV=WT_SESSION:WT_PROFILE_ID:”, “LOCALAPPDATA=C:\Users\karlo\AppData\Local”, “HOMEPATH=\Users\karlo”, “PROCESSOR_IDENTIFIER=AMD64 Family 26 Model 68 Stepping 0, AuthenticAMD”, “SCOPF_THREADS=12”, “NUMBER_OF_PROCESSORS=24”, “SCOPF_LINEAR_SOLVER=ma27” … “DRIVERDATA=C:\Windows\System32\Drivers\DriverData”, “PROCESSOR_LEVEL=26”, “JULIA_LOAD_PATH=E:\test;@stdlib”, “SYSTEMDRIVE=C:”, “=C:=C:\Users\karlo\.julia\juliaup\julia-1.12-nightly\share\julia\base”, “PROGRAMW6432=C:\Program Files”, “TEMP=C:\Users\karlo\AppData\Local\Temp”, “HOMEDRIVE=C:”, “OPENBLAS_MAIN_FREE=1”, “PROCESSOR_ARCHITECTURE=AMD64”]), ProcessExited(1)) [1]

Stacktrace:
[1] pipeline_error
@ .\process.jl:598 [inlined]
[2] run(::Cmd; wait::Bool)
@ Base .\process.jl:513
[3] run
@ .\process.jl:510 [inlined]
[4] ensurecompiled(project::String, packages::Vector{String}, sysimage::String)
@ PackageCompiler C:\Users\karlo.julia\packages\PackageCompiler\FE8YQ\src\PackageCompiler.jl:309
[5] create_sysimage(packages::Vector{String}; sysimage_path::String, project::String, precompile_execution_file::Vector{String}, precompile_statements_file::Vector{String}, incremental::Bool, filter_stdlibs::Bool, cpu_target::String, script::Nothing, sysimage_build_args::Cmd, include_transitive_dependencies::Bool, base_sysimage::Nothing, julia_init_c_file::Nothing, julia_init_h_file::Nothing, version::Nothing, soname::Nothing, compat_level::String, extra_precompiles::String, import_into_main::Bool)
@ PackageCompiler C:\Users\karlo.julia\packages\PackageCompiler\FE8YQ\src\PackageCompiler.jl:604
[6] top-level scope
@ E:\test\setup.jl:9
[7] include(mod::Module, _path::String)
@ Base .\Base.jl:306
[8] exec_options(opts::Base.JLOptions)
@ Base .\client.jl:317
[9] _start()
@ Base .\client.jl:550
in expression starting at E:\test\setup.jl:9