Subject: bug#37801: Possible insight into issue #30756 #include_next bug

From: Danny Milosavljevic <[email-masked]>
Date: Sat, 19 Oct 2019 14:53:36 +0200

Hi,

On Fri, 18 Oct 2019 14:02:33 +0000
Carl Dong <[email-masked]> wrote:

> Perhaps Ludovic can confirm this, but I believe the reason why Guix is not
> setting up CROSS_CPATH is because it doesn't _know_ it's cross-compiling. 

Ah, that makes a lot of sense!  But the "cross-gcc" returns a cross compiler
that should know that we're cross-compiling (but it sets up SEARCH-PATHS
with CROSS_LIBRARY_PATH and CROSS_CPATH, but not NATIVE-SEARCH-PATHS.  Hmm).

But the fundamental problem remains that guix host-side can't know whether
we are cross compiling from this.  It has its own cross-compiling support
at the toplevel, at the guix command line.

The following is only tangentially related to your issue, so maybe not so
useful to you:

I've also tried

(define (xcross base-package)
  (package
    (inherit base-package)
    (search-paths '())
    (native-search-paths (list
                       (search-path-specification
                         (variable "CROSS_LIBRARY_PATH")
                         (files '("lib" "lib64")))
                       (search-path-specification
                         (variable "CROSS_CPATH")
                         (files '("lib" "lib64")))))))

and 

    (native-inputs
     `(("pkg-config" ,pkg-config)
       ("cross-gcc" , (xcross (cross-gcc "arm-linux-gnueabihf"
                                #:xbinutils (cross-binutils "arm-linux-gnueabihf")
                                #:libc (xcross (cross-libc "arm-linux-gnueabihf")))))))
      ;("cross-libc" ,(xcross (cross-libc "arm-linux-gnueabihf"))) ; header files
       ("cross-libc-static" ,(xcross (cross-libc "arm-linux-gnueabihf")) "static")
       ("libusb" ,libusb)))

for sunxi-tools.

But that didn't work correctly either.

What I'm trying to do is a little different from what you are trying to do.

sunxi-tools has some parts that are supposed to be run on the embedded system in
question and some that are supposed to run on the host (both are GNU systems).
For convenience, I'm (and upstream are) trying to provide both in the
derivation--I think because the tools can send a program via USB to the embedded
system.

So if you compile sunxi-tools on x86_64, you get host tools for x86_64 and target
tools for ARM.

If you compile sunxi-tools on x86_64 for RISC-V, you get host tools for
RISC-V and target tools for ARM.

So it basically has to override the "which cross compiler" setting later in
the compilation process.

The more I think about it the more I'm getting the feeling that I should stop
trying to fit a square peg into a round hole and just add an extra package
for the target tools.

So I did the latter.
See guix-patches patch# 37823 which is now very nice.

Thanks for bringing the cross compilation topic up :)