@@ -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
18131816end
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+
18151851function 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