<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Oct 30, 2024 at 7:01 PM Rob Landley <<a href="mailto:rob@landley.net">rob@landley.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 10/29/24 13:53, Brian Mayer wrote:<br>
> Hi.<br>
> <br>
> I'm trying to compile GNU make v3.79 using toybox and tcc, but it<br>
> fails on the configure part.<br>
<br>
That's odd, <a href="https://github.com/landley/toybox/issues/461" rel="noreferrer" target="_blank">https://github.com/landley/toybox/issues/461</a> managed to <br>
build gmake once I fixed the issue he was seeing? (It's still open <br>
because I need to cut a release with the fix in it...)<br>
<br>
I a lot of this sort of thing years ago as part of <br>
<a href="https://landley.net/aboriginal/about.html" rel="noreferrer" target="_blank">https://landley.net/aboriginal/about.html</a> (which is why I was <br>
maintaining busybox at the time). Generally there's a config.log down <br>
under gnu/crap/stupid/ohgod/stallman/ia/ia/ftaghn/gnu directory <br>
somewhere, do a "find . -iname config.log" and then see what's in there.<br>
<br>
Don't ask me why gnu/they don't gnu/emit the gnu/failures to stderr. <br>
That would make too much sense, they need gnu/hazing rituals to keep out <br>
the unwashed masses I guess.<br>
<br>
Doing toybox _and_ tcc at the same time seems a bit extreme, in general <br>
changing multiple variables at once makes experimental results WAY <br>
harder to parse. Hence the invention of laboratory conditions. :)<br>
<br>
Back in the aboriginal days I started from "known working" (a scripted <br>
thus reproducible Linux From Scratch 3.0 build) and swapped out one <br>
busybox command at a time, comparing the output (and log files) of each <br>
before/after run and then doing a LOT of debugging to track down each <br>
deviation. And yes, this means I hit the reproducibility issues at least <br>
5 years before the debian guys did. (Run the build twice the result is <br>
not CLOSE to binary identical... Sucks less these days but still not <br>
FIXED. The actual configure output to stdout should match though, along <br>
with the files written by ./configure, and I tracked down and explained <br>
every deviation. Along with stuff like <br>
<a href="https://landley.net/notes-2008.html#04-07-2008" rel="noreferrer" target="_blank">https://landley.net/notes-2008.html#04-07-2008</a> and so on...)<br>
<br>
Modulo glibc's dependencies (perl!) are sad enough that this time around <br>
a musl-libc gcc toolchain was my first pass to establish a baseline, but <br>
<a href="http://lists.landley.net/pipermail/toybox-landley.net/2024-September/030526.html" rel="noreferrer" target="_blank">http://lists.landley.net/pipermail/toybox-landley.net/2024-September/030526.html</a> <br>
strongly implies that it's working fine. Plus, you know, alpine existing. :)<br>
<br>
You might also want to coordinate with <br>
<a href="http://lists.landley.net/pipermail/toybox-landley.net/2024-September/030526.html" rel="noreferrer" target="_blank">http://lists.landley.net/pipermail/toybox-landley.net/2024-September/030526.html</a> <br>
(which is another reply window I have open but haven't managed to scrape <br>
up the spoons for yet).<br>
<br>
My own work in this area (<a href="https://landley.net/notes.html#22-06-2024" rel="noreferrer" target="_blank">https://landley.net/notes.html#22-06-2024</a> and <br>
<a href="https://github.com/landley/toybox/blob/master/mkroot/packages/lfs-sources" rel="noreferrer" target="_blank">https://github.com/landley/toybox/blob/master/mkroot/packages/lfs-sources</a> <br>
which is kinda a second go at <br>
<a href="https://github.com/landley/control-images/tree/master/images/lfs-bootstrap/mnt" rel="noreferrer" target="_blank">https://github.com/landley/control-images/tree/master/images/lfs-bootstrap/mnt</a> <br>
ala <a href="https://landley.net/aboriginal/control-images/" rel="noreferrer" target="_blank">https://landley.net/aboriginal/control-images/</a>) got hung up on the <br>
patches in <br>
<a href="http://ftp.osuosl.org/pub/lfs/lfs-packages/lfs-packages-12.1.tar" rel="noreferrer" target="_blank">http://ftp.osuosl.org/pub/lfs/lfs-packages/lfs-packages-12.1.tar</a> NOT <br>
BEING UNIFIED DIFFS. They're diff -c format diffs, and adding support to <br>
toybox patch for diff -c format... really shouldn't be a big lift, but <br>
I'm not firing on all cylinders these days. :(<br>
<br>
I used to maintain my own tcc fork but gave up YEARS ago <br>
(<a href="https://landley.net/code/tinycc" rel="noreferrer" target="_blank">https://landley.net/code/tinycc</a> and <a href="https://landley.net/code/qcc" rel="noreferrer" target="_blank">https://landley.net/code/qcc</a>) <br>
because Grishka is a windows developer and... Anyway, tangent.<br>
<br>
Can you build mkroot with a tcc toolchain? Kernel and<br>
<br>
(I have "writing a new make" on my toybox todo list, but hit burnout <br>
this year. Sometime between moving from TX to MN this spring, getting <br>
flooded here on the list by a well-meaning developer who just took the <br>
fun out of everything, getting covid YET AGAIN (still sucks), having yet <br>
to find a proper coffee shop setup here in minneapolis (workspace is <br>
important), and the looming return out outright fascism, I've spent the <br>
past few months kinda spinning my wheels...)<br>
<br>
> I tested the c compiler and it works,<br>
<br>
Define "works". It took years for people to build linux-kernel with <br>
llvm, there was a whole PROJECT for it, which has mostly gone the way of <br>
<a href="http://uclinux.org" rel="noreferrer" target="_blank">uclinux.org</a> (declared victory and disbanded). </blockquote><div><br></div><div>no, clang-built linux kernels are [required!] in production use on Android amongst other places, and there are still people who's job it is to make sure it keeps working ... it's just that nowadays there's no real need for "progress reports": it works, it's on a billion devices. but when someone breaks something (on either side --- especially if you're using stuff like ubsan or whatever in the kernel, an llvm-side change can easily break your kernel), there are people who's immediate priority is fixing it again.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">And I specifically mean <br>
"the kernel", <br>
<a href="https://www.cnx-software.com/2012/07/16/ellcc-multi-target-cross-compiler-based-on-clang-and-llvm-compiler-infrastructure/" rel="noreferrer" target="_blank">https://www.cnx-software.com/2012/07/16/ellcc-multi-target-cross-compiler-based-on-clang-and-llvm-compiler-infrastructure/</a> <br>
was about trying to get userspace to work...<br>
<br>
Anyway, Android started building with clang around 2015 but they <br>
deprecated gcc rather than immediately removing it because compilers <br>
aren't quite fungible...<br></blockquote><div><br></div><div>[well off-topic, but i think there are some useful lessons here that i don't think have been written down before...]</div><div><br></div><div>some of that was a lack of insight into the fact that no compiler ever produces faster/smaller code than another _for every input_ -- and things go back and forth every release anyway -- so gating your switch on those kinds of metrics is a bad idea. one day you just have to say "good enough" and switch over. and a lack of understanding at the time of just how relieved app developers were going to be when they only had to worry about one compiler for both mobile platforms, rather than having two sets of workarounds for everything and twice the testing budget just for "does the 'portable' code even build?". tbh, i don't think i personally understood that until _after_ the switch, when app developers would thank us for something we'd kind of seen as an implementation detail, even though we'd thought that the switch to llvm libc++ was a great idea for them for basically that very reason. we/i were so focused on the 10% variation of "it's never exactly the same version" that we/i missed the 90% of "wow! it's the same thing!". in retrospect, we should probably have switched sooner than we actually did. but Android [and iOS] have been all-clang for kernel/OS/apps for many years now.)</div><div><br></div><div>see also: switching the AOSP build to toybox. if we'd waited until toybox could replace _everything_ we'd still have switched nothing, and been worse off overall.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
> so it may be something related<br>
> to how GNU autotools interact with toybox or the compiler.<br>
<br>
Do you mean you built gmake with tinycc, and the rest of the $PATH being <br>
debian or similar?<br>
<br>
> The errors are hard to follow, but it seems to be related with the<br>
> confdefs.h and .c files, after a lot of sed and cat commands.<br>
> The idea is to bootstrap the build tools, i.e. compile make without<br>
> make or other tools that depend on make.<br>
<br>
Ok, I'll bite. How do you compile make without make? (Do they provide a <br>
shell script, like toybox's <a href="https://landley.net/toybox/faq.html#hermetic" rel="noreferrer" target="_blank">https://landley.net/toybox/faq.html#hermetic</a><br>
or what?)<br>
<br>
> This is the output of the command:<br>
> <br>
> # ./configure<br>
> creating cache ./config.cache<br>
> checking for a BSD compatible install... /bin/install -c<br>
> checking whether build environment is sane... yes<br>
> checking whether make sets ${MAKE}... ./configure[795]: can't create<br>
> temporary file : No such file or directory<br>
> no<br>
<br>
That "can't create temporary file" looks like the first error. Which is <br>
not a string that exists in toybox (where we'd almost certainly say <br>
"temp" to save 5 bytes :) but presumably is configure responding to a <br>
command failure? Again, check config.log.<br>
<br>
> After editing the configure script and not letting it remove temporary<br>
> test files I was able to check the conftest.c file<br>
> that is used to test the C compiler, and the file is empty. Don't know<br>
> if this is expected.<br>
> <br>
> Can someone point me in the right direction?<br>
<br>
find . -name '*.log'<br>
<br>
> Thanks.<br>
<br>
Rob<br>
_______________________________________________<br>
Toybox mailing list<br>
<a href="mailto:Toybox@lists.landley.net" target="_blank">Toybox@lists.landley.net</a><br>
<a href="http://lists.landley.net/listinfo.cgi/toybox-landley.net" rel="noreferrer" target="_blank">http://lists.landley.net/listinfo.cgi/toybox-landley.net</a><br>
</blockquote></div></div>