guix-devel
[Top][All Lists]
Advanced

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

Re: GCC front-ends


From: Ludovic Courtès
Subject: Re: GCC front-ends
Date: Sat, 26 Oct 2013 22:08:04 +0200
User-agent: Gnus/5.130007 (Ma Gnus v0.7) Emacs/24.3 (gnu/linux)

Nikita Karetnikov <address@hidden> skribis:

>> I guess this triggers a complete rebuild, right?  (That means it would
>> go in ‘core-updates’.)
>
>> Using the ‘substitute-keyword-arguments’ hack as in base.scm would allow
>> you to avoid that.
>
>> Also, the ‘origin’ thing should be factorized:
>
>>   (define (gcc-source version)
>>     (origin ...))
>
>> It’s good that you’re tackling this!  Then we can also build the
>> Objective-C front-end, and then start GNUstepping.
>
> What do you think about the attached diff?  Is there a way to avoid
> multiple ‘map’s?

See below.

> What about the names of the packages?  For example, ‘gcc-fortran’ is
> usually called ‘gfortran’, ‘gcc-go’ is called ‘gccgo’, etc.  Should we
> use these names?  How should we call ‘gcc-objc’, then?

I’d say ‘gfortran’ and ‘gccgo’, and perhaps ‘gcc-objective-c’?

> If you want to test any of the front-ends, don’t forget to set
> LIBRARY_PATH and LD_LIBRARY_PATH, like so:
>
> $ export 
> LIBRARY_PATH=/nix/store/wmaxqx3p658v2yqjv00mss2shvn23h7a-glibc-2.18/lib
> $ export 
> LD_LIBRARY_PATH=/nix/store/kvhg0fszagsx5y80sq79bkmb7yqvjfmd-gcc-go-4.8.1/lib

I guess that’s unnecessary when using ‘ld-wrapper’.

> Notes:
>
> 1. The Go front-end requires ‘-g’ (see [1]).

That’s a bug, which may have been fixed in 4.8.2 no?  I’d rather not
workaround that if it’s been/being fixed.

> 4. The Ada front-end requires GNAT [3] (see [4]).
>
> 5. Not sure why the Java front-end fails:

GNAT and GCJ are definitely trickier, so I’d suggest to leave them for now.

> +(define (custom-gcc gcc name languages)
> +  (package (inherit gcc)
> +    (name name)
> +    (arguments
> +     (substitute-keyword-arguments (package-arguments gcc)
> +       ((#:configure-flags flags)
> +        (map (lambda (x)
> +               (if (list? x)
> +                   (map (lambda (y)
> +                          (if (equal? "--enable-languages=c,c++" y)
> +                              (string-append "--enable-languages="
> +                                             languages)
> +                              y))
> +                        x)
> +                   x))
> +             flags))))))

That’s unreliable because FLAGS is actually a quoted expression, like

  '(cons "--with-foo" (list "--with-bar"))

So the mapping has to be done in builder-side code, not in host-side
code, like ‘gcc-cross-boot0’ does.

Something like:

  `(cons "--enable-languages=" ,(string-join languages ",")
         (remove (cut string-match "--enable-languages.*" <>) ,flags))

(Note that “c,c++” can be omitted since it’s always enabled.)

Thanks,
Ludo’.



reply via email to

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