Skip to content

Commit bf0fddf

Browse files
author
KristofferC
committed
bundle Windows linking libraries
1 parent 34edf31 commit bf0fddf

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed

src/PackageCompiler.jl

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -953,6 +953,7 @@ function create_app(package_dir::String,
953953
stdlibs = unique(vcat(stdlibs, map(pkg -> pkg.name, stdlibs_in_default_sysimage())))
954954
end
955955
bundle_julia_libraries(app_dir, stdlibs)
956+
bundle_windows_import_libraries(app_dir)
956957
bundle_julia_libexec(ctx, app_dir)
957958
bundle_julia_executable(app_dir)
958959
bundle_artifacts(ctx, app_dir; include_lazy_artifacts)
@@ -1039,6 +1040,7 @@ function create_distribution(project_dir::String,
10391040
# For distributions, we need to bundle libraries for ALL stdlibs from the running Julia
10401041
all_stdlibs = readdir(Sys.STDLIB)
10411042
bundle_julia_libraries(dist_dir, all_stdlibs)
1043+
bundle_windows_import_libraries(dist_dir)
10421044

10431045
manifest_pkg_entries = gather_dependency_entries(ctx)
10441046
bundle_default_stdlibs(dist_dir)
@@ -1256,6 +1258,7 @@ function create_library(package_or_project::String,
12561258
stdlibs = unique(vcat(stdlibs, map(pkg -> pkg.name, stdlibs_in_default_sysimage())))
12571259
end
12581260
bundle_julia_libraries(dest_dir, stdlibs)
1261+
bundle_windows_import_libraries(dest_dir)
12591262
bundle_julia_libexec(ctx, dest_dir)
12601263
bundle_artifacts(ctx, dest_dir; include_lazy_artifacts)
12611264
bundle_headers(dest_dir, header_files)
@@ -1812,6 +1815,39 @@ function bundle_julia_libraries(dest_dir, stdlibs)
18121815
return
18131816
end
18141817

1818+
# On Windows, bundle import libraries (.a files) needed for linking during package precompilation
1819+
function bundle_windows_import_libraries(dest_dir)
1820+
Sys.iswindows() || return
1821+
1822+
# Import libraries are in lib/ and lib/julia/
1823+
src_lib_dir = julia_libdir()
1824+
src_libjulia_dir = julia_private_libdir()
1825+
1826+
# Destination mirrors the source structure
1827+
dest_lib_dir = joinpath(dest_dir, "lib")
1828+
dest_libjulia_dir = joinpath(dest_lib_dir, "julia")
1829+
mkpath(dest_lib_dir)
1830+
mkpath(dest_libjulia_dir)
1831+
1832+
# Import libraries in lib/ (libjulia.dll.a, libjulia-internal.dll.a, libopenlibm.dll.a, libssp.dll.a)
1833+
for file in readdir(src_lib_dir)
1834+
endswith(file, ".dll.a") || continue
1835+
src = joinpath(src_lib_dir, file)
1836+
dest = joinpath(dest_lib_dir, file)
1837+
isfile(dest) && continue
1838+
cp(src, dest; force=true)
1839+
end
1840+
1841+
# Import/static libraries in lib/julia/ (libgcc_s.a, libgcc.a, libmsvcrt.a, libssp.dll.a)
1842+
for file in readdir(src_libjulia_dir)
1843+
endswith(file, ".a") || continue
1844+
src = joinpath(src_libjulia_dir, file)
1845+
dest = joinpath(dest_libjulia_dir, file)
1846+
isfile(dest) && continue
1847+
cp(src, dest; force=true)
1848+
end
1849+
end
1850+
18151851
function bundle_julia_libexec(ctx, dest_dir)
18161852
# Use Julia-private `libexec` folder if it exists
18171853
# (normpath is required in case `bin` does not exist in `dest_dir`)

0 commit comments

Comments
 (0)