Skip to content

Commit 3e57211

Browse files
committed
feat(gcc): add 16.1.0 (latest) and apply sandbox-fix install template
Add the GCC 16.1 series and re-point latest -> 16.1.0: ["latest"] = { ref = "16.1.0" } ["16.1.0"] = { url, sha256 = 50efb4d94c3397aff3b0d61a5abd748b4dd31d9d3f2ab7be05b171d36a510f79 } Rewrite install() to follow the cluster-A sandbox-fix template: * paths from path.directory(pkginfo.install_file()) instead of path.absolute (path.absolute is nil under xlings 0.4.9 sandbox). * download_prerequisites + configure + make + make install chained in a single `sh -c` so cwd persists (os.cd does not propagate to system.exec children). * fixed -j8 (os.cpuinfo is nil). * pkgversion tag: "xlings-fromsource". Verified end-to-end in an isolated xlings 0.4.9 environment: ✓ download_prerequisites (gmp/mpfr/mpc/isl) ok ✓ configure --disable-multilib --disable-bootstrap --enable-libsanitizer ok ✓ make -j8 (~28 min) ok ✓ make install ok ✓ produced gcc/g++/c++/cpp/gcc-ar/gcc-nm/gcc-ranlib/gcov{,-dump,-tool} ✓ `gcc --version` -> "gcc (xlings-fromsource) 16.1.0" ✓ compile + run hello.c -> __GNUC__ / __GNUC_MINOR__ / __GNUC_PATCHLEVEL__ expand to 16/1/0, exit code 0 ✓ gcc-specs-config rewrites dynamic linker + rpath into iso subos Earlier versions (9.4.0 .. 15.1.0) remain unchanged.
1 parent e22efc9 commit 3e57211

1 file changed

Lines changed: 44 additions & 58 deletions

File tree

pkgs/g/gcc.lua

Lines changed: 44 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,11 @@ package = {
4444
-- gzip dropped: no gzip xpkg in any registered indexrepo;
4545
-- system tar handles .gz extraction. TODO: package gzip later.
4646
},
47-
["latest"] = { ref = "15.1.0" },
47+
["latest"] = { ref = "16.1.0" },
48+
["16.1.0"] = {
49+
url = __gcc_url("16.1.0"),
50+
sha256 = "50efb4d94c3397aff3b0d61a5abd748b4dd31d9d3f2ab7be05b171d36a510f79",
51+
},
4852
["15.1.0"] = { url = __gcc_url("15.1.0") },
4953
["14.2.0"] = { url = __gcc_url("14.2.0") },
5054
["13.3.0"] = { url = __gcc_url("13.3.0") },
@@ -75,75 +79,57 @@ local gcc_lib = {
7579
}
7680

7781
function install()
78-
local prerequisites_dir = path.absolute("comm-prerequisites")
79-
local sourcedir = path.absolute("gcc-" .. pkginfo.version())
80-
local builddir = path.absolute("gcc-build")
82+
-- Sandbox template (PR #49 bzip2):
83+
-- * `path.absolute` is nil → derive from `pkginfo.install_file()`
84+
-- (the absolute tarball path xlings already gives us in runtimedir).
85+
-- * `os.cd` doesn't propagate to system.exec children → chain
86+
-- download_prerequisites + configure + make + make install in
87+
-- a single sh -c so cwd persists.
88+
-- * `os.cpuinfo` is nil → fixed `-j8`.
89+
local runtime_dir = path.directory(pkginfo.install_file())
90+
local prerequisites_dir = path.join(runtime_dir, "comm-prerequisites")
91+
local sourcedir = path.join(runtime_dir, "gcc-" .. pkginfo.version())
92+
local builddir = path.join(runtime_dir, "gcc-build")
93+
local prefix = pkginfo.install_dir()
94+
local sysroot_dir = system.subos_sysrootdir()
8195

8296
log.info("0.clean build cache...")
8397
os.tryrm(prerequisites_dir)
8498
os.mkdir(prerequisites_dir)
8599
os.tryrm(builddir)
100+
os.mkdir(builddir)
86101

87-
log.info("1.download prerequisites...")
88-
os.cd(sourcedir)
89-
-- readfile - contrib/download_prerequisites
90-
local filecontent = io.readfile("contrib/download_prerequisites")
102+
log.info("1.patching contrib/download_prerequisites (--no-verbose, ftp→https)...")
103+
-- This part runs inside the lua sandbox (no system.exec) so it's fine.
104+
local prereq_script = path.join(sourcedir, "contrib/download_prerequisites")
105+
local filecontent = io.readfile(prereq_script)
91106
filecontent = filecontent:replace("--no-verbose", " ", { plain = true })
92107
filecontent = filecontent:replace("ftp://gcc.gnu.org", "https://gcc.gnu.org", { plain = true })
93-
io.writefile("contrib/download_prerequisites", filecontent)
94-
system.exec("contrib/download_prerequisites --directory=" .. prerequisites_dir)
95-
96-
--log.info("2.create linux sysroot...")
97-
--local sysroot_dir = path.join(builddir, "sysroot")
98-
99-
os.mkdir(builddir)
100-
os.cd(builddir)
101-
--__create_sysroot(sysroot_dir)
102-
103-
log.info("3.build config...")
108+
io.writefile(prereq_script, filecontent)
104109

105110
-- TODO: use workspace to build
106111
local old_glibc_info = xvm.info("glibc", "")
107-
local sysroot_dir = system.subos_sysrootdir()
108-
109-
-- config gcc (enable gcc-self run in xlings subos by gcc (xlings subos version))
110-
--[[
111-
local linker_path = path.join(sysroot_dir, "lib/ld-linux-x86-64.so.2")
112-
local libdir = path.join(sysroot_dir, "lib")
113-
local gcc_config = string.format(
114-
-- CFLAGS="--sysroot=%s" CXXFLAGS="--sysroot=%s" -- by --with-build-sysroot
115-
LDFLAGS="--dynamic-linker %s" , -- self
116-
--.. --with-extra-ldflags="--dynamic-linker %s --enable-new-dtags -rpath %s" , -- gcc target
117-
linker_path
118-
]]
119-
120-
-- create workspace for build - todo
121-
122112
xvm.use("glibc", "2.39")
123-
system.exec(string.format("%s"
124-
--.. gcc_config -- pass sysroot to gcc compile/link flags(for gcc)
125-
.. [[ --with-pkgversion="XPKG: xlings install fromsource:gcc"]]
126-
.. " --with-build-sysroot=" .. sysroot_dir -- glibc headers
127-
--.. " --with-native-system-header-dir=/include"
128-
.. " --with-sysroot=" .. sysroot_dir
129-
.. " --prefix=%s"
130-
.. " --enable-languages=c,c++"
131-
.. " --disable-multilib"
132-
.. " --disable-bootstrap"
133-
.. " --disable-werror"
134-
.. " --disable-lto" -- (--enable-lto) TODO: liblto_plugin.so -> libc.so.6 version mismatch
135-
.. " --enable-threads=posix"
136-
.. " --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu"
137-
.. " --enable-libsanitizer"
138-
--.. " --disable-libsanitizer" -- sanitizer_platform_limits_posix.cc multiple definition of ‘enum fsconfig_command’
139-
, path.join(sourcedir, "configure"), pkginfo.install_dir()))
140-
141-
142-
log.info("4.build gcc...")
143-
system.exec("time " .. string.format("make -j%d", os.cpuinfo("ncpu") or 4), { retry = 3 })
144-
145-
log.info("5.install gcc...")
146-
system.exec("make install")
113+
114+
log.info("2.download prerequisites + configure + build + install gcc...")
115+
-- Single sh -c: download_prerequisites runs from sourcedir; configure
116+
-- runs from builddir. `time make -j8` may exceed default xlings retry
117+
-- timeout; retry=3 left in place so transient mirror flakes don't kill
118+
-- a 30-minute build.
119+
system.exec(string.format(
120+
"sh -c 'cd %s && contrib/download_prerequisites --directory=%s "
121+
.. "&& cd %s && %s/configure "
122+
.. "--with-pkgversion=xlings-fromsource "
123+
.. "--with-build-sysroot=%s --with-sysroot=%s --prefix=%s "
124+
.. "--enable-languages=c,c++ --disable-multilib --disable-bootstrap "
125+
.. "--disable-werror --disable-lto --enable-threads=posix "
126+
.. "--build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu "
127+
.. "--enable-libsanitizer "
128+
.. "&& time make -j8 && make install'",
129+
sourcedir, prerequisites_dir,
130+
builddir, sourcedir,
131+
sysroot_dir, sysroot_dir, prefix
132+
), { retry = 3 })
147133

148134
xvm.use("glibc", old_glibc_info["Version"])
149135
return true

0 commit comments

Comments
 (0)