Subject: [bug#78102] [PATCH v2 2/3] gnu: libcxx: Fix cross-compilation build.

From: Maxim Cournoyer <[email-masked]>
Date: Fri, 02 May 2025 09:33:22 +0900

Hi Greg,

Thanks for the review.

Greg Hogan <[email-masked]> writes:

[...]

>> @@ -52,6 +52,7 @@ (define-module (gnu packages llvm)
>>    #:use-module (guix memoization)
>>    #:use-module (guix search-paths)
>>    #:use-module (guix utils)
>> +  #:use-module (guix build-system gnu)
>
> Should we keep this build-system section sorted?

Definitely!  Done.

>>    #:use-module (guix build-system cmake)
>>    #:use-module (guix build-system emacs)
>>    #:use-module (guix build-system python)
>> @@ -1905,6 +1906,7 @@ (define-public libcxx
>>      (build-system cmake-build-system)
>>      (arguments
>>       (list
>> +      #:implicit-inputs? #f             ;to avoid conflicting GCC headers
>>        #:tests? #f
>>        #:configure-flags
>>        #~(list "-DLLVM_ENABLE_RUNTIMES=libcxx;libcxxabi;libunwind"
>> @@ -1920,23 +1922,14 @@ (define-public libcxx
>>        #~(modify-phases %standard-phases
>>            (add-after 'unpack 'enter-subdirectory
>>              (lambda _
>> -              (chdir "runtimes")))
>> -          (add-after 'set-paths 'adjust-CPLUS_INCLUDE_PATH
>> -            (lambda* (#:key inputs #:allow-other-keys)
>> -              (let ((gcc (assoc-ref inputs  "gcc")))
>> -                ;; Hide GCC's C++ headers so that they do not interfere with
>> -                ;; the ones we are attempting to build.
>> -                (setenv "CPLUS_INCLUDE_PATH"
>> -                        (string-join (delete (string-append gcc "/include/c++")
>> -                                             (string-split (getenv "CPLUS_INCLUDE_PATH")
>> -                                                           #\:))
>> -                                     ":"))
>> -                (format #t
>> -                        "environment variable `CPLUS_INCLUDE_PATH' changed to ~a~%"
>> -                        (getenv "CPLUS_INCLUDE_PATH"))
>> -                #t))))))
>> +              (chdir "runtimes"))))))
>>      (native-inputs
>> -     (list clang-19 libunwind-headers llvm python))
>> +     (append (list clang-19 libunwind-headers llvm python)
>
> Does this work to combine clang-19 with llvm-13?

Good catch.  It worked, because both llvm and libunwind-headers appeared
to be extraneous inputs, which I've now removed.

>
>> +             ;; Remove GCC from the build environment, to avoid its C++
>> +             ;; headers (include/c++), which would interfere and cause build
>> +             ;; failures.
>> +             (map second
>
> With the map are we not also dropping the package output as the third
> field? So we wind up with a second "libc" but no "libc:static". It
> might not matter here but this kind of trick is often copied into
> additional packages. Can we use modify-inputs on standard-packages,
> delete "gcc", and append the list of additional packages? Or revert to
> the old-style inputs.

Good point, I've rewritten it to use modify-inputs.  I don't think we
should use old-style inputs in any case now.

>> +                  (alist-delete  "gcc" (standard-packages)))))
>
> There is an extra space after alist-delete.

Fixed!

Thanks again for the review!  I'll push shortly.

-- 
Thanks,
Maxim