tinycc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Tinycc-devel] Allow configuration of tcc libraries search path


From: Kirill Smelkov
Subject: Re: [Tinycc-devel] Allow configuration of tcc libraries search path
Date: Mon, 3 Oct 2011 13:09:07 +0400
User-agent: Mutt/1.5.18 (2008-05-17)

On Sat, Oct 01, 2011 at 12:36:23AM +0200, grischka wrote:
> Kirill Smelkov wrote:
>>> I have it as git branch btw. If anyone is interested I could push
>>> it on repo.or.cz.
>>
>> Yes, I'm interested. Could you please do so? Thanks.
>
> Well, now I don't want to push it into our repo, because it would
> just bloat everybody's copy.  If you want to I could push it into
> your fork as at http://repo.or.cz/w/tinycc/kirr.git :-)
>
> If so, add me as user (temporarily) or enable the mob branch.
>
> --- grischka

Done - could you please push it as-is to my mob branch. Thanks.


On Fri, Sep 30, 2011 at 01:48:53PM -0500, Rob Landley wrote:
> On 09/30/2011 10:25 AM, Kirill Smelkov wrote:
> >>> I have it as git branch btw. If anyone is interested I could push
> >>> it on repo.or.cz.
> >>
> >> I thought your current maintainer policy was zero editorial control,
> >> just let random strangers form a slush pile in the mob branch and then
> >> ship it?  (I can't say I've been reading the list very closely.)
> >>
> >> It's a little disheartening to see issues I fixed over three years ago
> >> come up over and over again.  If I recall, you refused to port things
> >> you either "didn't understand" or didn't see a need for (such as
> >> refactoring the code so it wasn't one big tcc.c without even a tcc.h)
> >> from my tree the last time I gave up and waited for you guys to just
> >> stop it.
> >>
> >> I put a lot of work into my version, but Fabrice wouldn't hand it the
> >> project to anybody who wanted to move the code out of the gnu.org CVS
> >> repository, and Linux Weekly News covered releases that went up on
> >> tinycc.org, even back when the bulk of the changes in them ported from
> >> my version.  I wouldn't mind so much if you didn't REFUSE TO TAKE
> >> OBVIOUS THINGS that you're now finding a need for all these years later.
> >>
> >> Sigh.  I'm going to go back to ignoring this list now.  I should go
> >> catch up on the pcc and llvm lists...
> >>
> >> Rob
> > 
> > 
> > Rob, thanks for the links and for sharing. Are you in principle ok to
> > relicense your changes back from GPL to LGPL so that they could be
> > included one way or another into tcc?
> 
> Years ago, in my repo, I significantly refactored the code to do things
> like put declarations in headers, put architecture-specific code in
> subdirectories with consistent names, break out the command line option
> parsing into a separate "options.c", and so on.  There were a functions
> named g() and o() which were IMPOSSIBLE to grep for (leftovers from its
> heritage in the obfuscated c code contest, I guess), which I laboriously
> replaced with sane names.  I started grouping random global variables
> into structures, I was working on splitting the preprocessor, compiler,
> and linker code into three files... Half of what I did was code CLEANUP.
> 
> Grischka had no interest in any of that.  Instead he cherry picked a few
> commits he understood:
> 
>   http://lists.gnu.org/archive/html/tinycc-devel/2007-12/msg00040.html
> 
> And then told me that I had to abandon my cleanup work and start over on
> his tree, and explain everything to his satisfaction (as a Windows guy)
> before it could go in.  I'm still kind of pissed about it:
> 
>   http://landley.net/code/tinycc
> 
> I.E. his current policy of "go ahead and commit anything you like, I
> don't care" isn't what he used to do.  It's an overraction in the other
> direction.
> 
> For the patches in question, I'm pretty sure he _specifically_ told me
> that he _didn't_ want colon separated search paths.  (Even though I
> broke down and made it configurable so it could be semicolon instead for
> his windows sensibilities.)
> 
> My initial complaint was CVS made it hard for me to work, true:
> 
>   http://lists.gnu.org/archive/html/tinycc-devel/2008-09/msg00013.html
> 
> But I changed the license because the zombie CVS tree was following me,
> and I didn't want to encourage it:
> 
>   http://lists.gnu.org/archive/html/tinycc-devel/2008-09/msg00027.html
> 
> But these days, my complaint is that I have no confidence whatsoever in
> tinycc's maintainership.  It has the tinycc.org domain, and Fabrice
> handed over the project, so it is the official final resting place of
> tcc.  But it's still stagnant, because Fabrice put a Windows developer
> in charge of the project, one who apparently does not understand open
> source development in the slightest. He's putting out a windows-only
> version of tcc as far as I can tell, one which will never build an
> unmodified Linux kernel (has made zero progress on this front in the
> past _THREE_YEARS_), thus it cannot ever act as (even an infereior) gcc
> replacement.
> 
> Thus I have no interest in it.  I check back every few months to see if
> it's _died_ yet, but it's really mostly curiosity at this point.
> 
> Someday if I get back to this topic, I want to glue either sparse or the
> tcc front end to qemu's tcg back end and produce a new compiler that A)
> supports all the targets qemu does, B) can build linux and busybox and
> uClibc and itself (thus providing a self-bootstrapping system; I'd
> upgrade busybox to have missing bits like "make").
> 
> See the attached files for some todo items on that front.  But according
> to the dates on those files, I last touched them in May 2009, so this
> isn't exactly a priority for me.  Tinycc isn't dead yet, and there's
> plenty of _other_ interesting stuff like the LLVM backend for Sparse:
> 
>   http://lwn.net/Articles/456709/
> 
> > For us, tinycc users, it's a pity to see this issue being stagnated over
> > and over again. The CVS is de-facto gone - if it was it, now there is no
> > point to block your changes being merged!
> 
> Tinycc has been stagnant since Fabrice left in 2005.  It saw surges of
> effort from me, from David Wheeler's trusting trust paper, the people
> who did the arm and x86-64 ports, and grischka's work on windows stuff
> (and on getting gcc to build under it)... but it never added _up_ to
> anything.  I started by collecting together various out of tree patches,
> and then poured hundreds of hours of my own effort into it, but nobody
> wanted to build on my work becaue it wasn't "official".
> 
> Instead a windows developer turned it into a windows-only project, and
> he has such a poor understanding of open source development that he
> doesn't even do code review or control access to the repository.
> 
> Do you have any idea how WRONG that is?  Alan Cox once told me "A
> maintainer's job is to say no".  And he's right: they're like the editor
> of a magazine, going through the slush pile to find the best bits,
> polish them up, stich them into a coherent next issue, publish, and
> repeat.  This is not a new task, this is basic editorial judgement that
> people have been doing since Gutenberg invented the printing press.
> 
> Publishing the raw slush pile is NOT INTERESTING.  Fighting off
> Sturgeon's Law is what editors _do_.  It doesn't matter if we're talking
> about the four levels of Linux developers (developer, maintainer,
> lieutenant, architect) bouncing back patches with comments, or
> Cannonical leaving 98% of sourceforge OFF their install CD, or sites
> like Slashdot and Fark publishing a tiny number of headlines from the
> thousands they get each day, or Google giving you a page of ten most
> interesting hits from an internet approaching a trillion pages of spam,
> porn, and emo blogs with cat pictures.
> 
> Grischka has not set direction for the project, let alone goals.
> Where's the list of problems that need to be solved?  Where's the "and
> now we build package X" announcements?  Where's the RELEASE SCHEDULE?
> 
>   http://video.google.com/videoplay?docid=-5503858974016723264
> 
> This project is still unmaintained, it's just unmaintained by Grischka.
>  The last release on tinycc.org was TWO AND A HALF YEARS AGO.  Even
> uClibc never got quite that bad.
> 
> > Sometimes people need time to de-cvs'ify themselves and adopt good
> > distributed vcs practices.  I agree about somewhat funny current mob
> > rules, but it would be a very pity again if that would be a blocker for
> > cooperation.
> 
> I do not trust Grischka's technical judgement, his committment to the
> project (I put way more time into my fork than he's put into the
> official version), his leadership abilities, or his organizational skills.
> 
> I spent three years of my life improving this project (not just coding
> but documentation and testing and design and so on), and the result was
> esentially discarded at the whim of somebody who DIDN'T UNDERSTAND WHAT
> I WAS DOING.  The fact the rest of you are now finally realizing that
> some of the problems I already solved years ago were, in fact, real
> issues, is mildly amusing to me in a morbid way.
> 
> If you have competent developers on this lsit you don't NEED my patches,
> you can figure out how to do it from the _idea_ in a couple hours.  If
> you need more details, I discussed the general idea somewhat at length
> at the OLS compiler BOF in 2008:
> 
> 
> http://free-electrons.com/pub/video/2008/ols/ols2008-rob-landley-linux-compiler.ogg
> 
> I doubt my patches will remotely apply to the git codebase anyway, I
> changed a _lot_.
> 
> Rob

> Seven packages.  This is to replace binutils and gcc.
> 
> FWL needs: ar as nm cc gcc make ld
>   - Why gcc (shouldn't cc cover it?  What builds?)
>   - Need a make.  Separate issue, busybox probably.
> 
> Loot tinycc fork to provide:
> 
>   cc - front-end option parsing
>     multiplexer (swiss-army-executable ala busybox)
>       cross-prefix, so check last few chars: cc,ld,ar,as,nm
> 
>     Calls several automatically (assembler, compiler, linker) as necessary.
>       Pass on linker options via -Wl,
> 
>     Merge in FWL wrapper stuff (ccwrap.c)
>       call out again?  distcc support?
> 
>     Path logic:
>       compiler includes: ../qcc/include
>       system includes: ../include
>       compiler libraries: ../qcc/lib
>       system libraries: ../lib
>       tools: built-in (or shell out with same prefix via $PATH)
>       command line stuff: current directory
> 
>   ld - linker
>     #include <elf.h> which qemu already has.
>     Support for .o, .a, .so -> exe, .so
>     Support for linker scripts
> 
>   ar - library archiver
>     Busybox has partial support (still read-only?)
>     ranlib?
> 
>   cc1 - compiler
>     preprocessor (-E) support
>     output (.c->.o) support
> 
>   as - assembler
> 
>   nm - needed to build something?
> 
> binutils provides:
>   ar as nm ld - already covered
>   strip, ranlib, addr2line, size, objdump, objcopy - low hanging fruit
>   readelf - uClibc has one
>   strings - busybox provides one 
> 
>   Probably not worth it:
>     gprof - profiling support (optional)
>     c++filt - C++ and Java, not C.
>     windmc, dlltool - Windows only (why is it installed on Linux?)
>     nlmconv - Novell Netware only (why is this installd on Linux?)

> QCC - QEMU C Compiler.
> 
>   Use QEMU's Tiny Code Generator as a backend for a compiler based on my old
>   fork of Fabrice Bellard's tinycc project.
> 
> Why?
> 
>   QEMU's TCG provides support for many different targets (x86, x86-64, arm,
>   mips, ppc, sh4, sparc, alpha, m68k, cris).  It has an active development
>   community upgrading and optimizing it.
> 
>   QEMU application emulation also provides existing support for various ELF
>   executable and library formats, so linking logic can presumably be merged.
>   (See elf.h at the top of qemu.)  QEMU is also likely to grow coff and pxe
>   support in future.
> 
> Building a self-bootstrapping system:
> 
>   My Firmware Linux project builds the smallest self-bootstrapping system
>   I could come up with using the following existing packages:
> 
>     gcc, binutils, make, bash, busybox, uClibc, linux
> 
>   This new compiler should replace both binutils and gcc above.  (As a smoke
>   test, the new system should still be able to build all seven packages.)
> 
>   To build those packages, FWL needs the following commands from the host
>   toolchain.  (It can build everything else from source, but building these
>   without already having them is a chicken and egg problem.)
> 
>     ar as nm cc gcc make ld /bin/bash
> 
>   The reason it needs "gcc" is that the linux and uClibc packages assume
>   their host compiler is named "gcc", and call that name instead of cc even
>   when it's not there.  (You can mostly override this by specifying HOSTCC=$CC
>   on the make command line, although a few places need actual source patches.)
> 
>   Ignoring gcc, make, and bash, this leaves "ar, as, nm, cc, and ld" as
>   commands qcc needs to provide for a minimal self-bootstrapping system.
> 
>   Note that the above set of tools is specifically enough to build a fresh
>   compiler.  When building a linux kernel, creating a bzImage requires 
> objcopy,
>   building qemu requires strip, etc.
> 
> What commands does the current gcc/binutils combo provide?
> 
>   gcc 4.1 provides the commands:
>     cc/gcc - C compiler
>     cpp - C preprocessor (equivalent to cc -E)
>     gcov - coverage tester (optional debugging tool)
> 
>     Of these, cc is required, cpp is low hanging fruit, and gcov is probably
>     unnecessary.
> 
>   Binutils provides:
>     ar - archiver, creates .a files.
>     ranlib - generate index to .a archive (equivalent to ar -s)
>     as - assembler
>     ld - linker
>     strip - discard symbols from object files (equilvalent to ld -S)
>     nm - list symbols from ELF files.
>     size - show ELF section sizes
>     objdump - show contents of ELF files
>     objcopy - copy/translate ELF files
>     readelf - show contents of ELF files
>     addr2line - convert addresses to filename/line number (optional debug 
> tool)
>     strings - show printable characters from binary file
>     gprof - profiling support (optional)
>     c++filt - C++ and Java, not C.
>     windmc, dlltool - Windows only (why is it installed on Linux?)
>     nlmconv - Novell Netware only (why is this installd on Linux?)
> 
>     Of these, ar, as, ld, and nm are needed, ranlib, strip, addr2line, and
>     size are low hanging fruit, size, objdump, obcopy, and readelf are
>     variants of the same logic as nm, and gprof, c++filt, windmc, dlltool,
>     and nlmconv are probably unnecessary.
> 
> Standards:
> 
>   The following utilities have SUSv4 pages describing their operation, at
>   http://www.opengroup.org/onlinepubs/9699919799/utilities
> 
>     ar, c99, nm, strings
> 
>   This means the following don't:
> 
>     ld, cpp, as, ranlib, strip, size, readelf, objdump, objcopy, addr2line
> 
>   (There isn't a "cc" standard, but you can probably use "c99" for that.)
> 
> Existing code:
> 
>   multiplexer:
> 
>     The compiler must be provide several different names, yet the same
>     functionality must be callable from a single compiler executable,
>     assembling when it encounters embedded assembler, passing on linker
>     options via "-Wl," to the linking stage, and so on.
> 
>     The easy way to do this is for the qcc executable to be a swiss-army-knife
>     executable, like busybox.  It needs a command multiplexer which can figure
>     out which name it was called under and change behavior appropriately, to
>     act as a compiler, assembler, linker, and so on.
> 
>     This multiplexer should accept arbitrary prefixes, so cross compiler names
>     such as "i686-cc" work.  This means instead of matching entire known 
> names,
>     the multiplexer should checks that commands _end_  with recognized 
> strings.
>     (This would not only allow it to be called as both "qcc" and "cc", but
>     would have the added bonus of making "gcc" work like "cc" as well.)
> 
>     Both busybox and tinycc already handle this.  Pretty straightforward.
> 
>   cc/c99 - front-end option parsing
> 
>     Both tinycc's options.c and ccwrap.c (in FWL) handle command line option
>     parsing, in different ways.  Both take as input the same command line
>     syntax as gcc, which is more or less the c99 command line syntax from
>     SUSv4:
> 
>       http://www.opengroup.org/onlinepubs/9699919799/utilities/c99.html
> 
>     What ccwrap.c does is rewrite a gcc command line to turn "cc hello.c"
>     into a big long command line with -L and -I entries, explicitly specifying
>     header and library paths, the need to link against standard libraries
>     such as libc, and to link against crt1.o and such as appropriate.
> 
>     Such a front end option parser could perform such command line rewriting
>     and then call a "cc1" that contains no built-in knowledge about standard
>     paths or libraries.  This would neatly centralize such behavior, and
>     if the rewritten command line could actually be extracted it could be
>     tested against other compilers (such as gcc) to help debugging.
> 
>     Note that adding distcc or ccache support to such a wrapper is a fairly
>     straightforward item for future expansion.
> 
>     The option parser needs to distinguish "compiling" from "linking".
> 
>       When compiling, the option parser needs to specify two include paths;
>       one for the compiler (varargs.h, defaulting to ../qcc/include) and
>       one for the system (stdio.h, defaulting to ../include).
> 
>       When linking, the option parser needs to specify the compiler library
>       path (where libqcc.a lives, defaulting to ../qcc/lib), the system
>       library path (where libc.a lives, defaulting to ../lib), and add
>       explicit calls to link in the standard libraries and the startup/exit
>       code.  Currently, ccwrap.c does all this.
> 
>     Note that these default paths aren't relative to the current directory
>     (which can't change or files listed on the command line wouldn't be 
> found),
>     but relative to the directory where the qcc executable lives.  This allows
>     the compiler to be relocatable, and thus extracted into a user's home
>     directory and called from there.  (The user's home directory name cannot
>     be known at compile time.)  The defaults can also be specified as absolute
>     paths when the compiler is configured.
> 
>     The current ccwrap.c also modifies the $PATH (so gcc's front-end can
>     shell out to tools such as its own "cc1" and "ld"), and supports C++.
>     Although qcc doesn't need either of these, both are useful for shelling
>     out to another compiler (such as gcc).
> 
>     The wrapper can split "compiling and linking" lines into two commands,
>     either saving intermediate results in the /tmp directory or forking and
>     using pipes.  (That way cc1 doesn't need to know anything about linking.)
>     Optionally, the compiler can initialize the same structures used by the
>     linker, but is the speed/complexity tradeoff here worth it?
> 
>     Note that "-run" support is actually a property of the linker.
> 
>   cpp - preprocessor
> 
>     This performs macro substitution, like "qcc -E".
> 
>   cc1 - compiler
> 
>     This compiles C source code.  Specifically, it converts one or more .c
>     files into to a single .o file, for a specific target.
> 
>     Generating assembly output is best done by running the binary tcg output
>     through a disassembler.  Keep it orthogonal.
> 
>   ld - linker
>     This needs to be able to read .o, .a, and .so files, and produce ELF
>     executables and .so files.  It should also support linker scripts.
> 
>     This needs to "#include <elf.h>", which non-linux hosts won't always have
>     but which qemu has it's own copy of already.
> 
>   ar - library archiver
>     This is a wimpy archiver.  It creates .a files from .o files
>     (and extracts .o files from .a files).  It's a flat archive, with no
>     subdirectories.
> 
>     Busybox has partial support for this (still read-only, last I checked).
> 
>     The ranlib command indexes these archives.
> 
>     SUSv4 has a standards document for this command:
> 
>       http://www.opengroup.org/onlinepubs/9699919799/utilities/ar.html
> 
>   as - assembler
>     Tinycc has an x86 assembler.  It should be genericized.
> 
>   nm - name list
> 
>     For some reason, gcc won't build without this.
> 
>     SUSv4 has a standards document for this command:
> 
>       http://www.opengroup.org/onlinepubs/9699919799/utilities/nm.html


On Sat, Oct 01, 2011 at 12:50:47AM +0200, grischka wrote:
> Rob Landley wrote:
>> There were a functions named g() and o() which were IMPOSSIBLE to
>> grep for...
>
> Because you don't know how to use grep.
>
>> For the patches in question, I'm pretty sure he _specifically_ told me
>> that he _didn't_ want colon separated search paths.
>
> I'm pretty sure we never talked about that or anything else such
> specific.
>
>> But I changed the license because the zombie CVS tree was following me,
>> and I didn't want to encourage it:
>
> You're faking history.
>
> When I started with my first commit 2007-10-30:
>   
> http://cvs.savannah.gnu.org/viewvc/tinycc/tinycc/tccelf.c?revision=1.33&view=markup
>   
> http://repo.or.cz/w/tinycc.git/shortlog/2bcc187b1bbb6e3240400652af1a73cd799f250c
> you had already changed license (2007-10-29):
>   http://landley.net/hg/tinycc/shortlog/492
>
> In fact I watched you fighting zombies (while turning the code into a
> broken mess of a battlefield) for quite some time until I decided that
> I want to preserve a tinycc that actually works.
>
> --- grischka
>

On Sat, Oct 01, 2011 at 01:54:54PM -0500, Rob Landley wrote:
> On 09/30/2011 05:50 PM, grischka wrote:
> > Rob Landley wrote:
> >> There were a functions named g() and o() which were IMPOSSIBLE to
> >> grep for...
> > 
> > Because you don't know how to use grep.
> 
> Because I don't want to drop out of my text editor and grep from the
> command line, and doing the search as a regex isn't just "space or tab"
> before the function, you can have if(g()<o()) and z=4+g() and there are
> such things as function pointers, spaces between the function name and
> the parentheses, function declarations "cuddling" the left edge of the
> screen so you may need to match start of line...
> 
> The part I boggle at is that you honestly believe that single character
> global function names are a good idea, which scale to large codebases.
> This is one of many reasons why I think your technical judgement sucks.
>  The existence of _workarounds_ does not make something a good idea.
> 
> >> For the patches in question, I'm pretty sure he _specifically_ told me
> >> that he _didn't_ want colon separated search paths.
> > 
> > I'm pretty sure we never talked about that or anything else such
> > specific.
> 
> My email archies from that time are on another machine, so I'll assume
> you're right and it was somebody else.
> 
> >> But I changed the license because the zombie CVS tree was following me,
> >> and I didn't want to encourage it:
> > 
> > You're faking history.
> 
> The big gap between 0.9.23 (2005) and 0.9.24 (2008) was the period in
> which I started my tree.  After I stopped my tree, tcc has gone two and
> a half years without a release.  In june, this mailing list had a grand
> total of three messages, one of which was spam.
> 
> > When I started with my first commit 2007-10-30:
> >  
> > http://cvs.savannah.gnu.org/viewvc/tinycc/tinycc/tccelf.c?revision=1.33&view=markup
> > 
> > http://repo.or.cz/w/tinycc.git/shortlog/2bcc187b1bbb6e3240400652af1a73cd799f250c
> > 
> > you had already changed license (2007-10-29):
> >   http://landley.net/hg/tinycc/shortlog/492
> 
> I do a thing, you respond the next day, and you offer this as evidence
> that you _weren't_ responding to my actions?
> 
> Ok...
> 
> > In fact I watched you fighting zombies (while turning the code into a
> > broken mess of a battlefield) for quite some time until I decided that
> > I want to preserve a tinycc that actually works.
> 
> You've already established that you never understood what I was trying
> to do.  You already told me this back in 2009:
> 
> http://lists.nongnu.org/archive/html/tinycc-devel/2009-03/msg00026.html
> 
> > Fact is that there was a phase where we analyzed your fork and ripped
> > as much as we were able to understand. This phase is over now and
> > TinyCC is moving on.
> 
> This thread restarted because yet another of the bits you failed to
> understand turns out, years later, to be relevant.
> 
> Look: I don't care.  Have the last word.  Go about your business.  TCC
> is no closer to building an unmodified linux kernel/busybox/uclibc today
> than it was when tccboot came out seven years ago.  Your project, as
> "maintained" by you, will apparently never do those things, and is not
> _interested_ in doing those things, thus by my definition it is stalled
> and dead and uninteresting.
> 
> Have fun with it.
> 
> Rob

Rob,

I'm sorry I've touched your nerves so much. It's a pity there is a
disagreement here (which from outside looks like it still could be dealt
with given enough desire), but I respect your position.

Thanks for describing it and thanks for pointers.


Peace again,
Kirill



reply via email to

[Prev in Thread] Current Thread [Next in Thread]