Skip to content

Commit

Permalink
Only modernize the infrastructure
Browse files Browse the repository at this point in the history
  • Loading branch information
vchuravy committed Mar 22, 2023
1 parent 2c82964 commit a1a9194
Show file tree
Hide file tree
Showing 2 changed files with 123 additions and 35 deletions.
81 changes: 80 additions & 1 deletion base/sysimg.jl
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,84 @@ let
task.rngState2 = 0x503e1d32781c2608
task.rngState3 = 0x3a77f7189200c20b

# Stdlibs sorted in dependency, then alphabetical, order by contrib/print_sorted_stdlibs.jl
# Run with the `--exclude-jlls` option to filter out all JLL packages
stdlibs = [
# No dependencies
:ArgTools,
:Artifacts,
:Base64,
:CRC32c,
:FileWatching,
:Libdl,
:Logging,
:Mmap,
:NetworkOptions,
:SHA,
:Serialization,
:Sockets,
:Unicode,

# 1-depth packages
:LinearAlgebra,
:Markdown,
:Printf,
:Random,
:Tar,

# 2-depth packages
:Dates,
:Distributed,
:Future,
:InteractiveUtils,
:LibGit2,
:Profile,
:UUIDs,

# 3-depth packages
:REPL,
:SharedArrays,
:TOML,
:Test,

# 4-depth packages
:LibCURL,

# 5-depth packages
:Downloads,

# 6-depth packages
:Pkg,

# 7-depth packages
:LazyArtifacts,
]
# PackageCompiler can filter out stdlibs so it can be empty
maxlen = maximum(textwidth.(string.(stdlibs)); init=0)

tot_time_stdlib = 0.0
# use a temp module to avoid leaving the type of this closure in Main
m = Module()
GC.@preserve m begin
print_time = @eval m (mod, t) -> (print(rpad(string(mod) * " ", $maxlen + 3, ""));
Base.time_print(t * 10^9); println())
print_time(Base, (Base.end_base_include - Base.start_base_include) * 10^(-9))

Base._track_dependencies[] = true
tot_time_stdlib = @elapsed for stdlib in stdlibs
tt = @elapsed Base.require(Base, stdlib)
print_time(stdlib, tt)
end
for dep in Base._require_dependencies
dep[3] == 0.0 && continue
push!(Base._included_files, dep[1:2])
end
empty!(Base._require_dependencies)
Base._track_dependencies[] = false

print_time("Stdlibs total", tot_time_stdlib)
end

# Clear global state
empty!(Core.ARGS)
empty!(Base.ARGS)
Expand All @@ -39,10 +117,11 @@ let
tot_time_userimg = @elapsed (isfile("userimg.jl") && Base.include(Main, "userimg.jl"))

tot_time_base = (Base.end_base_include - Base.start_base_include) * 10.0^(-9)
tot_time = tot_time_base + tot_time_userimg
tot_time = tot_time_base + tot_time_stdlib + tot_time_userimg

println("Sysimage built. Summary:")
print("Base ──────── "); Base.time_print(tot_time_base * 10^9); print(" "); show(IOContext(stdout, :compact=>true), (tot_time_base / tot_time) * 100); println("%")
print("Stdlibs ───── "); Base.time_print(tot_time_stdlib * 10^9); print(" "); show(IOContext(stdout, :compact=>true), (tot_time_stdlib / tot_time) * 100); println("%")
if isfile("userimg.jl")
print("Userimg ───── "); Base.time_print(tot_time_userimg * 10^9); print(" "); show(IOContext(stdout, :compact=>true), (tot_time_userimg / tot_time) * 100); println("%")
end
Expand Down
77 changes: 43 additions & 34 deletions pkgimage.mk
Original file line number Diff line number Diff line change
Expand Up @@ -35,21 +35,31 @@ cache-debug-$1: $$(BUILDDIR)/stdlib/$1.debug.image
.SECONDARY: $$(BUILDDIR)/stdlib/$1.release.image $$(BUILDDIR)/stdlib/$1.debug.image
endef

# Used to just define them in the dependency graph
# reside in the system image
define sysimg_builder
$$(BUILDDIR)/stdlib/$1.release.image:
touch $$@
$$(BUILDDIR)/stdlib/$1.debug.image:
touch $$@
.SECONDARY: $$(BUILDDIR)/stdlib/$1.release.image $$(BUILDDIR)/stdlib/$1.debug.image
endef

# no dependencies
$(eval $(call pkgimg_builder,MozillaCACerts_jll,))
$(eval $(call pkgimg_builder,ArgTools,))
$(eval $(call pkgimg_builder,Artifacts,))
$(eval $(call pkgimg_builder,Base64,))
$(eval $(call pkgimg_builder,CRC32c,))
$(eval $(call pkgimg_builder,FileWatching,))
$(eval $(call pkgimg_builder,Libdl,))
$(eval $(call pkgimg_builder,Logging,))
$(eval $(call pkgimg_builder,Mmap,))
$(eval $(call pkgimg_builder,NetworkOptions,))
$(eval $(call pkgimg_builder,SHA,))
$(eval $(call pkgimg_builder,Serialization,))
$(eval $(call pkgimg_builder,Sockets,))
$(eval $(call pkgimg_builder,Unicode,))
$(eval $(call sysimg_builder,ArgTools,))
$(eval $(call sysimg_builder,Artifacts,))
$(eval $(call sysimg_builder,Base64,))
$(eval $(call sysimg_builder,CRC32c,))
$(eval $(call sysimg_builder,FileWatching,))
$(eval $(call sysimg_builder,Libdl,))
$(eval $(call sysimg_builder,Logging,))
$(eval $(call sysimg_builder,Mmap,))
$(eval $(call sysimg_builder,NetworkOptions,))
$(eval $(call sysimg_builder,SHA,))
$(eval $(call sysimg_builder,Serialization,))
$(eval $(call sysimg_builder,Sockets,))
$(eval $(call sysimg_builder,Unicode,))

# 1-depth packages
$(eval $(call pkgimg_builder,GMP_jll,Artifacts Libdl))
Expand All @@ -65,46 +75,45 @@ $(eval $(call pkgimg_builder,dSFMT_jll,Artifacts Libdl))
$(eval $(call pkgimg_builder,libLLVM_jll,Artifacts Libdl))
$(eval $(call pkgimg_builder,libblastrampoline_jll,Artifacts Libdl))
$(eval $(call pkgimg_builder,OpenBLAS_jll,Artifacts Libdl))
$(eval $(call pkgimg_builder,Markdown,Base64))
$(eval $(call pkgimg_builder,Printf,Unicode))
$(eval $(call pkgimg_builder,Random,Serialization SHA))
$(eval $(call pkgimg_builder,Tar,ArgTools,SHA))
$(eval $(call sysimg_builder,Markdown,Base64))
$(eval $(call sysimg_builder,Printf,Unicode))
$(eval $(call sysimg_builder,Random,Serialization SHA))
$(eval $(call sysimg_builder,Tar,ArgTools,SHA))
$(eval $(call pkgimg_builder,DelimitedFiles,Mmap))

# 2-depth packages
$(eval $(call pkgimg_builder,LLD_jll,Zlib_jll libLLVM_jll Artifacts Libdl))
$(eval $(call pkgimg_builder,LibSSH2_jll,Artifacts Libdl MbedTLS_jll))
$(eval $(call pkgimg_builder,MPFR_jll,Artifacts Libdl GMP_jll))
$(eval $(call pkgimg_builder,LinearAlgebra,Libdl libblastrampoline_jll OpenBLAS_jll))
$(eval $(call pkgimg_builder,Dates,Printf))
$(eval $(call pkgimg_builder,Distributed,Random Serialization Sockets))
$(eval $(call pkgimg_builder,Future,Random))
$(eval $(call pkgimg_builder,InteractiveUtils,Markdown))
$(eval $(call pkgimg_builder,LibGit2,NetworkOptions Printf SHA Base64))
$(eval $(call pkgimg_builder,Profile,Printf))
$(eval $(call pkgimg_builder,SparseArrays,LinearAlgebra Random))
$(eval $(call pkgimg_builder,UUIDs,Random SHA))
$(eval $(call sysimg_builder,LinearAlgebra,Libdl libblastrampoline_jll OpenBLAS_jll))
$(eval $(call sysimg_builder,Dates,Printf))
$(eval $(call sysimg_builder,Distributed,Random Serialization Sockets))
$(eval $(call sysimg_builder,Future,Random))
$(eval $(call sysimg_builder,InteractiveUtils,Markdown))
$(eval $(call sysimg_builder,LibGit2,NetworkOptions Printf SHA Base64))
$(eval $(call sysimg_builder,Profile,Printf))
$(eval $(call sysimg_builder,UUIDs,Random SHA))


# 3-depth packages
# LibGit2_jll
$(eval $(call pkgimg_builder,LibCURL_jll,LibSSH2_jll nghttp2_jll MbedTLS_jll Zlib_jll Artifacts Libdl))
$(eval $(call pkgimg_builder,REPL,InteractiveUtils Markdown Sockets Unicode))
$(eval $(call pkgimg_builder,SharedArrays,Distributed Mmap Random Serialization))
$(eval $(call pkgimg_builder,TOML,Dates))
$(eval $(call pkgimg_builder,Test,Logging Random Serialization InteractiveUtils))
$(eval $(call sysimg_builder,REPL,InteractiveUtils Markdown Sockets Unicode))
$(eval $(call sysimg_builder,SharedArrays,Distributed Mmap Random Serialization))
$(eval $(call sysimg_builder,TOML,Dates))
$(eval $(call sysimg_builder,Test,Logging Random Serialization InteractiveUtils))

# 4-depth packages
$(eval $(call pkgimg_builder,LibCURL,LibCURL_jll MozillaCACerts_jll))
$(eval $(call sysimg_builder,LibCURL,LibCURL_jll MozillaCACerts_jll))

# 5-depth packages
$(eval $(call pkgimg_builder,Downloads,ArgTools FileWatching LibCURL NetworkOptions))
$(eval $(call sysimg_builder,Downloads,ArgTools FileWatching LibCURL NetworkOptions))

# 6-depth packages
$(eval $(call pkgimg_builder,Pkg,Dates LibGit2 Libdl Logging Printf Random SHA UUIDs)) # Markdown REPL
$(eval $(call sysimg_builder,Pkg,Dates LibGit2 Libdl Logging Printf Random SHA UUIDs)) # Markdown REPL

# 7-depth packages
$(eval $(call pkgimg_builder,LazyArtifacts,Artifacts Pkg))
$(eval $(call sysimg_builder,LazyArtifacts,Artifacts Pkg))

$(eval $(call pkgimg_builder,SparseArrays,Libdl LinearAlgebra Random Serialization))
# SuiteSparse_jll
Expand Down

0 comments on commit a1a9194

Please sign in to comment.