Hi, On Fri, 18 Oct 2019 14:02:33 +0000 Carl Dong 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 :)