* [PATCH] libc/prebuilt-glibc: add support for a pre-built GLIBC @ 2011-11-14 2:43 Michael Hope 2011-11-14 22:52 ` Yann E. MORIN 0 siblings, 1 reply; 3+ messages in thread From: Michael Hope @ 2011-11-14 2:43 UTC (permalink / raw) To: Yann E. MORIN; +Cc: crossgcc # HG changeset patch # User Michael Hope <michael.hope@linaro.org> # Date 1321238468 -46800 # Branch prebuilt-sysroot # Node ID ebfc38601b7351231f742d5dbc4db71c878a3a5d # Parent 20bc56e72ca1559279b3c9c9b191d41061757653 libc/prebuilt-glibc: add support for a pre-built GLIBC Used to build a cross compiler against an existing sysroot such as Debian or Ubuntu. Adds Ubuntu Maverick (the last before Ubuntu added multiarch) as an example. Can be extended to support Debian 6 and Fedora but left as an exercise to the reader :) Warts: * Still builds the intermediate stage compilers even though they're not needed * Still pulls in the linux headers even though they're incompletely overwritten * Includes arch -> Debian arch conversion for ARM only. Others should be added as they're tested Signed-off-by: Michael Hope <michael.hope@linaro.org> diff -r 20bc56e72ca1 -r ebfc38601b73 config/libc/prebuilt-glibc.in --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config/libc/prebuilt-glibc.in Mon Nov 14 15:41:08 2011 +1300 @@ -0,0 +1,29 @@ +# Prebuilt GLIBC options + +## depends on ! MINGW32 && ! BARE_METAL && ARCH_USE_MMU +## +## select LIBC_SUPPORT_NPTL +## +## help Use a pre-built GLIBC or EGLIBC instead of building from +## help source. Used when building a cross compiler for a existing +## help target such as a particular Debian or Ubuntu release. +## + +choice + bool + prompt "Distribution version" +# Don't remove next line +# CT_INSERT_VERSION_BELOW + +config LIBC_PREBUILTGLIBC_UBUNTU_10_10 + bool + prompt "Ubuntu 10.10 (Maverick)" + depends on EXPERIMENTAL + +endchoice + +config LIBC_VERSION + string +# Don't remove next line +# CT_INSERT_VERSION_STRING_BELOW + default "ubuntu_10_10" if LIBC_PREBUILTGLIBC_UBUNTU_10_10 diff -r 20bc56e72ca1 -r ebfc38601b73 scripts/build/libc/prebuilt-glibc.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/build/libc/prebuilt-glibc.sh Mon Nov 14 15:41:08 2011 +1300 @@ -0,0 +1,110 @@ +# This file adds functions to fetch and use a prebuilt GLIBC such as +# Debian or Ubuntu. +# Copyright 2011 Linaro Limited +# Licensed under the GPL v2. See COPYING in the root of this package + +# Convert a crosstool-NG architecture into the Debian form +do_libc_to_debian_arch() { + local arch + local endian="${CT_ARCH_BE},${CT_ARCH_LE}" + local abi="${CT_ARCH_FLOAT_SW},${CT_ARCH_FLOAT_HW}" + + case "${CT_ARCH},${endian},${abi}" in + arm,,y,y,) arch=armel;; + arm,y,,y,) arch=armeb;; + arm,,y,,y) arch=armhf;; + *) CT_Abort "Unhandled architecture \"${CT_ARCH}\"";; + esac + + echo "${arch}" +} + +# Generate the list of files to fetch for the particular distro and +# arch +do_libc_file_list() { + local arch + local libc + local linux + local files + + case "${CT_LIBC_VERSION}" in + ubuntu_10_10) + arch=$( do_libc_to_debian_arch ) + libc="2.12.1-0ubuntu6" + linux="2.6.35-1022.33" + files="libc6_${libc}_${arch}" + files="${files} libc6-dev_${libc}_${arch}" + files="${files} linux-libc-dev_${linux}_${arch}" + ;; + *) CT_Abort "Unhandled libc version ${CT_LIBC_VERSION}" + esac + + echo "${files}" +} + +do_libc_get() { + local pool + local ext + + # Where to pull packages from + case "${CT_LIBC_VERSION}" in + ubuntu_*) + pool="http://ports.ubuntu.com/pool" + ext=".deb" + ;; + esac + + files=$( do_libc_file_list ) + + for file in ${files}; do + CT_DoLog DEBUG "Fetching ${file}" + CT_GetFile "${file}" "${ext}" \ + "${pool}/main/{e/eglibc,l/linux}" + done + + return 0 +} + +do_libc_extract() { + for file in $( do_libc_file_list ); do + CT_Extract "${file}" + done +} + +do_libc_check_config() { + : +} + +do_libc_start_files() { + # do_kernel_headers has already run + CT_DoLog EXTRA "Installing the pre-built libc" + + for file in $( do_libc_file_list ); do + CT_DoExecLog ALL cp -av "${CT_SRC_DIR}/${file}"/* "${CT_SYSROOT_DIR}" + done + + # Some packages include absolute links in sysroot/usr/lib. + # Convert to relative links instead + for lib in "${CT_SYSROOT_DIR}/usr/lib"/*; do \ + if [ -L "${lib}" ] && (readlink "${lib}" | grep -q ^/); then + target=$( readlink "${lib}" ) + base=$( basename "${target}" ) + rm "${lib}" + + CT_DoLog DEBUG "Fixing up the absolute link to ${target}" + + case $( dirname "${target}" ) in + /lib) CT_DoExecLog ALL ln -s "../../lib/${base}" "${lib}";; + *) CT_Abort "Unhandled absolute path ${target}";; + esac + fi + done +} + +do_libc() { + : +} + +do_libc_finish() { + : +} -- For unsubscribe information see http://sourceware.org/lists.html#faq ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] libc/prebuilt-glibc: add support for a pre-built GLIBC 2011-11-14 2:43 [PATCH] libc/prebuilt-glibc: add support for a pre-built GLIBC Michael Hope @ 2011-11-14 22:52 ` Yann E. MORIN 2011-11-15 1:45 ` Michael Hope 0 siblings, 1 reply; 3+ messages in thread From: Yann E. MORIN @ 2011-11-14 22:52 UTC (permalink / raw) To: crossgcc; +Cc: Michael Hope Michael, All, On Monday 14 November 2011 03:43:31 Michael Hope wrote: > # HG changeset patch > # User Michael Hope <michael.hope@linaro.org> > # Date 1321238468 -46800 > # Branch prebuilt-sysroot > # Node ID ebfc38601b7351231f742d5dbc4db71c878a3a5d > # Parent 20bc56e72ca1559279b3c9c9b191d41061757653 > libc/prebuilt-glibc: add support for a pre-built GLIBC I don't like using pre-build components. crosstool-NG is from the beginning a way to build stand-alone and reproducible toolchains using the sources, and only the sources. I understand there could be a need for using a pre-built sysroot, though. But then, it has to be much more generic than this. Next time someone needs another base as sysroot, I do not want to add yet another config+script, and yet another every time... What if: - we add an option in the toolchain sub-menu, like: config SYSROOT_PREBUILT bool prompt "Use an existing sysroot" config SYSROOT_PREBUILT_PATH string depends on SYSROOT_PREBUILT prompt "Path to that sysroot" - make the kernel and C library selections depend on ! SYSROOT_PREBUILT but then, we'd still need to know the C library kind (glibc/uClibc) so we can contruct the tuple... - copy that custom sysroot to its final place in the toolchain Of course, that would need preparing the prebuilt sysroot beforehand, and not from inside crosstool-NG. But on the whole, that does not sound very much like something I would like to see in crosstool-NG anyway... You can try to trick^Wconvince me otherwise, though! ;-) > Used to build a cross compiler against an existing sysroot such as > Debian or Ubuntu. Adds Ubuntu Maverick (the last before Ubuntu added > multiarch) as an example. Can be extended to support Debian 6 and > Fedora but left as an exercise to the reader :) > > Warts: > * Still builds the intermediate stage compilers even though they're > not needed Could be pretty easy not to build them if not required: - in config/cc.in: config CC_CORE_NEEDED bool depends on ! SYSROOT_PREBUILT default y - then in scripts/build/cc/gcc.sh: if [ "${CT_CC_CORE_NEEDED}" != "y" ]; then return 0 fi > * Still pulls in the linux headers even though they're incompletely > overwritten That indeed is bad. Some review below, just for the sake of reviewing. ;-) > Signed-off-by: Michael Hope <michael.hope@linaro.org> > > diff -r 20bc56e72ca1 -r ebfc38601b73 config/libc/prebuilt-glibc.in > --- /dev/null Thu Jan 01 00:00:00 1970 +0000 > +++ b/config/libc/prebuilt-glibc.in Mon Nov 14 15:41:08 2011 +1300 > @@ -0,0 +1,29 @@ > +# Prebuilt GLIBC options > + > +## depends on ! MINGW32 && ! BARE_METAL && ARCH_USE_MMU As this is valid only for ARM, maybe: depends on ARCH_arm [--SNIP--] > diff -r 20bc56e72ca1 -r ebfc38601b73 scripts/build/libc/prebuilt-glibc.sh > --- /dev/null Thu Jan 01 00:00:00 1970 +0000 > +++ b/scripts/build/libc/prebuilt-glibc.sh Mon Nov 14 15:41:08 2011 +1300 > @@ -0,0 +1,110 @@ > +# This file adds functions to fetch and use a prebuilt GLIBC such as > +# Debian or Ubuntu. > +# Copyright 2011 Linaro Limited > +# Licensed under the GPL v2. See COPYING in the root of this package > + > +# Convert a crosstool-NG architecture into the Debian form > +do_libc_to_debian_arch() { > + local arch > + local endian="${CT_ARCH_BE},${CT_ARCH_LE}" Hmm. looks like an endian string is needed, same as the float string. > + local abi="${CT_ARCH_FLOAT_SW},${CT_ARCH_FLOAT_HW}" There is this brand new ${CT_ARCH_FLOAT} string that makes it so much easier to test floating point! ;-) > + case "${CT_ARCH},${endian},${abi}" in > + arm,,y,y,) arch=armel;; Spaces, no tabs. > + arm,y,,y,) arch=armeb;; > + arm,,y,,y) arch=armhf;; <off-topic> - IIRC, this was introduced by Debian to differentiate their softfloat armv5 (or v4?) port from their hardfloat armv7(?) port. Right? - So, is 'armhf' the definitive canonical way to describe a little endian, hard-FP ARM target? - How does it plays with config.sub and config.guess? - Maybe we need to add this support in the arm.sh script, too, no? </off-topic> > + *) CT_Abort "Unhandled architecture \"${CT_ARCH}\"";; > + esac > + > + echo "${arch}" > +} > + > +# Generate the list of files to fetch for the particular distro and > +# arch > +do_libc_file_list() { > + local arch > + local libc > + local linux > + local files Use an array variable: local -a files files+=( value1 ) files+=( value2 ) echo "${files[@]}" > + case "${CT_LIBC_VERSION}" in > + ubuntu_10_10) > + arch=$( do_libc_to_debian_arch ) > + libc="2.12.1-0ubuntu6" > + linux="2.6.35-1022.33" > + files="libc6_${libc}_${arch}" > + files="${files} libc6-dev_${libc}_${arch}" > + files="${files} linux-libc-dev_${linux}_${arch}" That's another reason I do not like that: hidding a component (here: the Linux kernel headers) inside a second component (here: the C library). Let's do it just right: we need an separate way to specify a place where to get a pre-populated sysroot. > + ;; > + *) CT_Abort "Unhandled libc version ${CT_LIBC_VERSION}" > + esac > + > + echo "${files}" > +} > + > +do_libc_get() { > + local pool > + local ext > + > + # Where to pull packages from > + case "${CT_LIBC_VERSION}" in > + ubuntu_*) > + pool="http://ports.ubuntu.com/pool" > + ext=".deb" > + ;; > + esac > + > + files=$( do_libc_file_list ) > + > + for file in ${files}; do > + CT_DoLog DEBUG "Fetching ${file}" > + CT_GetFile "${file}" "${ext}" \ > + "${pool}/main/{e/eglibc,l/linux}" This does not expands properly for me: $ echo "/main/{e/eglibc,l/linux}" /main/{e/eglibc,l/linux} > + done > + > + return 0 > +} > + > +do_libc_extract() { > + for file in $( do_libc_file_list ); do > + CT_Extract "${file}" > + done > +} > + > +do_libc_check_config() { > + : If the test for the supported architectures were to be done at runtime, they should be done here, as this is the very first (build-)step that is executed, so it bails early in the build process. > +} > + > +do_libc_start_files() { > + # do_kernel_headers has already run > + CT_DoLog EXTRA "Installing the pre-built libc" > + > + for file in $( do_libc_file_list ); do > + CT_DoExecLog ALL cp -av "${CT_SRC_DIR}/${file}"/* "${CT_SYSROOT_DIR}" > + done And this is where all goes amiss: the kernel headers are already installed by the previous step, and the new ones will overwrite them, possibly leaving unwanted headers. And you get a probably-broken sysroot. > + # Some packages include absolute links in sysroot/usr/lib. > + # Convert to relative links instead > + for lib in "${CT_SYSROOT_DIR}/usr/lib"/*; do \ > + if [ -L "${lib}" ] && (readlink "${lib}" | grep -q ^/); then grep -q is not portable, use: ${grep} blabla >/dev/null 2>&1 Also, (single- or double-) quote strings, even constants: '^/' This is un-needed for scripts, I know, but this makes for some homogeneity: "a string is a string, so it is quoted". :-) Regards, Yann E. MORIN. -- .-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------' -- For unsubscribe information see http://sourceware.org/lists.html#faq ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] libc/prebuilt-glibc: add support for a pre-built GLIBC 2011-11-14 22:52 ` Yann E. MORIN @ 2011-11-15 1:45 ` Michael Hope 0 siblings, 0 replies; 3+ messages in thread From: Michael Hope @ 2011-11-15 1:45 UTC (permalink / raw) To: Yann E. MORIN; +Cc: crossgcc On Tue, Nov 15, 2011 at 11:51 AM, Yann E. MORIN <yann.morin.1998@anciens.enib.fr> wrote: > Michael, All, > > On Monday 14 November 2011 03:43:31 Michael Hope wrote: >> # HG changeset patch >> # User Michael Hope <michael.hope@linaro.org> >> # Date 1321238468 -46800 >> # Branch prebuilt-sysroot >> # Node ID ebfc38601b7351231f742d5dbc4db71c878a3a5d >> # Parent 20bc56e72ca1559279b3c9c9b191d41061757653 >> libc/prebuilt-glibc: add support for a pre-built GLIBC > > I don't like using pre-build components. crosstool-NG is from the > beginning a way to build stand-alone and reproducible toolchains > using the sources, and only the sources. > > I understand there could be a need for using a pre-built sysroot, > though. But then, it has to be much more generic than this. > > Next time someone needs another base as sysroot, I do not want to add > yet another config+script, and yet another every time... Sounds fine. I thought that sending some concrete code was better than a RFC. The prebuilt glibc is supposed to be distribution independent and can be extended to Fedora or simlar but it still pollutes crosstool-NG with distro specific knowledge. > What if: > - we add an option in the toolchain sub-menu, like: > config SYSROOT_PREBUILT > bool > prompt "Use an existing sysroot" > config SYSROOT_PREBUILT_PATH > string > depends on SYSROOT_PREBUILT > prompt "Path to that sysroot" > - make the kernel and C library selections depend on ! SYSROOT_PREBUILT > but then, we'd still need to know the C library kind (glibc/uClibc) so > we can contruct the tuple... That's fine. As part of the prebuilt sysroot configuration you can tell crosstool-NG about the sysroot capabilities. > - copy that custom sysroot to its final place in the toolchain > > Of course, that would need preparing the prebuilt sysroot beforehand, > and not from inside crosstool-NG. Debian's multstrap does this. I'm planning to use it to make a mega sysroot for cross building large programs like KDE. > But on the whole, that does not sound very much like something I would > like to see in crosstool-NG anyway... You can try to trick^Wconvince me > otherwise, though! ;-) Ah, it's always worth sending a patch. It might be useful to others and at least it will show up in the archive, even if it's not a good match for mainline. >> Used to build a cross compiler against an existing sysroot such as >> Debian or Ubuntu. Adds Ubuntu Maverick (the last before Ubuntu added >> multiarch) as an example. Can be extended to support Debian 6 and >> Fedora but left as an exercise to the reader :) >> >> Warts: >> * Still builds the intermediate stage compilers even though they're >> not needed > > Could be pretty easy not to build them if not required: > - in config/cc.in: > config CC_CORE_NEEDED > bool > depends on ! SYSROOT_PREBUILT > default y > > - then in scripts/build/cc/gcc.sh: > if [ "${CT_CC_CORE_NEEDED}" != "y" ]; then > return 0 > fi Yip. Canadian cross could use similar things. >> * Still pulls in the linux headers even though they're incompletely >> overwritten > > That indeed is bad. Yeah. It needs fixing. > Some review below, just for the sake of reviewing. ;-) > >> Signed-off-by: Michael Hope <michael.hope@linaro.org> >> >> diff -r 20bc56e72ca1 -r ebfc38601b73 config/libc/prebuilt-glibc.in >> --- /dev/null Thu Jan 01 00:00:00 1970 +0000 >> +++ b/config/libc/prebuilt-glibc.in Mon Nov 14 15:41:08 2011 +1300 >> @@ -0,0 +1,29 @@ >> +# Prebuilt GLIBC options >> + >> +## depends on ! MINGW32 && ! BARE_METAL && ARCH_USE_MMU > > As this is valid only for ARM, maybe: depends on ARCH_arm It's valid on all architectures that Debian support. The backend doesn't implement the other architectures as I haven't tested them, but it does fail with a helpful hint on where to add support. > [--SNIP--] >> diff -r 20bc56e72ca1 -r ebfc38601b73 scripts/build/libc/prebuilt-glibc.sh >> --- /dev/null Thu Jan 01 00:00:00 1970 +0000 >> +++ b/scripts/build/libc/prebuilt-glibc.sh Mon Nov 14 15:41:08 2011 +1300 >> @@ -0,0 +1,110 @@ >> +# This file adds functions to fetch and use a prebuilt GLIBC such as >> +# Debian or Ubuntu. >> +# Copyright 2011 Linaro Limited >> +# Licensed under the GPL v2. See COPYING in the root of this package >> + >> +# Convert a crosstool-NG architecture into the Debian form >> +do_libc_to_debian_arch() { >> + local arch >> + local endian="${CT_ARCH_BE},${CT_ARCH_LE}" > > Hmm. looks like an endian string is needed, same as the float string. > >> + local abi="${CT_ARCH_FLOAT_SW},${CT_ARCH_FLOAT_HW}" > > There is this brand new ${CT_ARCH_FLOAT} string that makes it so much > easier to test floating point! ;-) Ta. >> + case "${CT_ARCH},${endian},${abi}" in >> + arm,,y,y,) arch=armel;; > > Spaces, no tabs. Yeah. I finally added a (setq-default indent-tabs-mode nil) to my .emacs today. whitespace-mode is cool as well... >> + arm,y,,y,) arch=armeb;; >> + arm,,y,,y) arch=armhf;; > > <off-topic> > > - IIRC, this was introduced by Debian to differentiate their softfloat > armv5 (or v4?) port from their hardfloat armv7(?) port. Right? It's to tell the different ABIs apart. All shipping Cortex-A processors have a VFP so they've taken the opportunity with the new ARMv7 port to switch to hard float as well. Ubuntu are planning the same. > - So, is 'armhf' the definitive canonical way to describe a little > endian, hard-FP ARM target? > - How does it plays with config.sub and config.guess? > - Maybe we need to add this support in the arm.sh script, too, no? I've lost track. The discussion keeps on concluding and then flaring up again. The last I heard was adding a _ as a delimiter to the architecture to delimit the ISA from the ABI. I'll keep an ear out. >> + *) CT_Abort "Unhandled architecture \"${CT_ARCH}\"";; >> + esac >> + >> + echo "${arch}" >> +} >> + >> +# Generate the list of files to fetch for the particular distro and >> +# arch >> +do_libc_file_list() { >> + local arch >> + local libc >> + local linux >> + local files > > Use an array variable: > local -a files > files+=( value1 ) > files+=( value2 ) > echo "${files[@]}" OK. >> + case "${CT_LIBC_VERSION}" in >> + ubuntu_10_10) >> + arch=$( do_libc_to_debian_arch ) >> + libc="2.12.1-0ubuntu6" >> + linux="2.6.35-1022.33" >> + files="libc6_${libc}_${arch}" >> + files="${files} libc6-dev_${libc}_${arch}" >> + files="${files} linux-libc-dev_${linux}_${arch}" > > That's another reason I do not like that: hidding a component (here: the > Linux kernel headers) inside a second component (here: the C library). > > Let's do it just right: we need an separate way to specify a place where > to get a pre-populated sysroot. > >> + ;; >> + *) CT_Abort "Unhandled libc version ${CT_LIBC_VERSION}" >> + esac >> + >> + echo "${files}" >> +} >> + >> +do_libc_get() { >> + local pool >> + local ext >> + >> + # Where to pull packages from >> + case "${CT_LIBC_VERSION}" in >> + ubuntu_*) >> + pool="http://ports.ubuntu.com/pool" >> + ext=".deb" >> + ;; >> + esac >> + >> + files=$( do_libc_file_list ) >> + >> + for file in ${files}; do >> + CT_DoLog DEBUG "Fetching ${file}" >> + CT_GetFile "${file}" "${ext}" \ >> + "${pool}/main/{e/eglibc,l/linux}" > > This does not expands properly for me: > $ echo "/main/{e/eglibc,l/linux}" > /main/{e/eglibc,l/linux} Huh. It does expand without the quotes: michaelh@crucis:~$ echo "/main/{e/eglibc,l/linux}" /main/{e/eglibc,l/linux} michaelh@crucis:~$ echo /main/{e/eglibc,l/linux} /main/e/eglibc /main/l/linux and, for some reason, also works when fetching. The line itself is a hack to work around how CT_GetFile strips the directory off the URL. I really want: pool="http://ports.ubuntu.com/pool/" files="main/e/eglibc/libc6-foo.deb main/l/linux/linux-libc-foo.deb" for file in files: CT_GetFile $file $pool >> + done >> + >> + return 0 >> +} >> + >> +do_libc_extract() { >> + for file in $( do_libc_file_list ); do >> + CT_Extract "${file}" >> + done >> +} >> + >> +do_libc_check_config() { >> + : > > If the test for the supported architectures were to be done at runtime, > they should be done here, as this is the very first (build-)step that > is executed, so it bails early in the build process. OK. There could be a dummy call to do_libc_file_list() which CT_Aborts on unrecognised. >> +do_libc_start_files() { >> + # do_kernel_headers has already run >> + CT_DoLog EXTRA "Installing the pre-built libc" >> + >> + for file in $( do_libc_file_list ); do >> + CT_DoExecLog ALL cp -av "${CT_SRC_DIR}/${file}"/* "${CT_SYSROOT_DIR}" >> + done > > And this is where all goes amiss: the kernel headers are already installed > by the previous step, and the new ones will overwrite them, possibly > leaving unwanted headers. And you get a probably-broken sysroot. Yes. Will fix. >> + # Some packages include absolute links in sysroot/usr/lib. >> + # Convert to relative links instead >> + for lib in "${CT_SYSROOT_DIR}/usr/lib"/*; do \ >> + if [ -L "${lib}" ] && (readlink "${lib}" | grep -q ^/); then > > grep -q is not portable, use: ${grep} blabla >/dev/null 2>&1 > > Also, (single- or double-) quote strings, even constants: '^/' > This is un-needed for scripts, I know, but this makes for some > homogeneity: "a string is a string, so it is quoted". :-) Consistency is good. -- Michael -- For unsubscribe information see http://sourceware.org/lists.html#faq ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2011-11-15 1:45 UTC | newest] Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2011-11-14 2:43 [PATCH] libc/prebuilt-glibc: add support for a pre-built GLIBC Michael Hope 2011-11-14 22:52 ` Yann E. MORIN 2011-11-15 1:45 ` Michael Hope
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).