[PATCH] gnu: llvm: fix riscv64 cross-compile.

  • Done
  • quality assurance status badge
Details
3 participants
  • Z572
  • ???
  • Ludovic Courtès
Owner
unassigned
Submitted by
Z572
Severity
normal
Z
(address . guix-patches@gnu.org)
tencent_59877F623A46E5A925ECB59E9B3CA9655908@qq.com
* gnu/packages/llvm.scm: (llvm-15 llvm-14 llvm-12): fix riscv64 cross-compile
[arguments]: <#:configure>: when target is riscv64, set -DLLVM_TARGET_ARCH=RISCV64.
---
gnu/packages/llvm.scm | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)

Toggle diff (47 lines)
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index e5bf9f5cae..f8691414d8 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -26,6 +26,7 @@
;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
;;; Copyright © 2022 Clément Lassieur <clement@lassieur.org>
;;; Copyright © 2022 Zhu Zihao <all_but_last@163.com>
+;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -598,7 +599,9 @@ (define-public llvm-15
#$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE="
(%current-target-system))
#$(string-append "-DLLVM_TARGET_ARCH="
- (system->llvm-target))
+ (if (target-riscv64?)
+ "RISCV64"
+ (system->llvm-target)))
#$(string-append "-DLLVM_TARGETS_TO_BUILD="
(system->llvm-target)))
'())
@@ -658,7 +661,9 @@ (define-public llvm-14
#$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE="
(%current-target-system))
#$(string-append "-DLLVM_TARGET_ARCH="
- (system->llvm-target))
+ (if (target-riscv64?)
+ "RISCV64"
+ (system->llvm-target)))
#$(string-append "-DLLVM_TARGETS_TO_BUILD="
(system->llvm-target)))
'())
@@ -910,7 +915,9 @@ (define-public llvm-12
#$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE="
(%current-target-system))
#$(string-append "-DLLVM_TARGET_ARCH="
- (system->llvm-target))
+ (if (target-riscv64?)
+ "RISCV64"
+ (system->llvm-target)))
#$(string-append "-DLLVM_TARGETS_TO_BUILD="
(system->llvm-target)))
#~())
--
2.39.2
?
(name . Z572)(address . 873216071@qq.com)(address . 62438@debbugs.gnu.org)
874jpxb4qa.fsf@envs.net
Z572 <873216071@qq.com> writes:


Toggle quote (19 lines)
> - (system->llvm-target))
> + (if (target-riscv64?)
> + "RISCV64"
> + (system->llvm-target)))
> #$(string-append "-DLLVM_TARGETS_TO_BUILD="
> (system->llvm-target)))
> '())
> @@ -658,7 +661,9 @@ (define-public llvm-14
> #$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE="
> (%current-target-system))
> #$(string-append "-DLLVM_TARGET_ARCH="
> - (system->llvm-target))
> + (if (target-riscv64?)
> + "RISCV64"
> + (system->llvm-target)))
> #$(string-append "-DLLVM_TARGETS_TO_BUILD="
> (system->llvm-target)))
> '())

Hello, our `system->llvm-target` has riscv => "RISCV", does it wrong
(should be changed to RISCV64) or does it right only for 32bit RISCV?
And can system->llvm-target be fixed instead of fix each its usage?

Thanks!
Z
(name . ???)(address . iyzsong@envs.net)(address . 62438@debbugs.gnu.org)
tencent_18596F7F183AADE5EA2575B5F19B1AA9F408@qq.com
??? <iyzsong@envs.net> writes:

Toggle quote (31 lines)
> Z572 <873216071@qq.com> writes:
>
>
>> - (system->llvm-target))
>> + (if (target-riscv64?)
>> + "RISCV64"
>> + (system->llvm-target)))
>> #$(string-append "-DLLVM_TARGETS_TO_BUILD="
>> (system->llvm-target)))
>> '())
>> @@ -658,7 +661,9 @@ (define-public llvm-14
>> #$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE="
>> (%current-target-system))
>> #$(string-append "-DLLVM_TARGET_ARCH="
>> - (system->llvm-target))
>> + (if (target-riscv64?)
>> + "RISCV64"
>> + (system->llvm-target)))
>> #$(string-append "-DLLVM_TARGETS_TO_BUILD="
>> (system->llvm-target)))
>> '())
>
> Hello, our `system->llvm-target` has riscv => "RISCV", does it wrong
> (should be changed to RISCV64) or does it right only for 32bit RISCV?
> And can system->llvm-target be fixed instead of fix each its usage?
>
> Thanks!
>
>
>
>
hello, system->llvm-target work for LLVM_TARGETS_TO_BUILD, but not work
for LLVM_TARGET_ARCH.
llvm.scm (system->llvm-target) also have a commit
;; See the 'lib/Target' directory of LLVM for a list of supported targets.


see
LLVM_TARGET_ARCH is work for RISCV64 and RISCV32, not RISCV.

xxx|..........cmake/config-ix.cmake..............
432| elseif (LLVM_NATIVE_ARCH MATCHES "wasm64")
433| set(LLVM_NATIVE_ARCH WebAssembly)
434| elseif (LLVM_NATIVE_ARCH MATCHES "riscv32")
435| set(LLVM_NATIVE_ARCH RISCV)
436| elseif (LLVM_NATIVE_ARCH MATCHES "riscv64")
437| set(LLVM_NATIVE_ARCH RISCV)
xxx|.................other.......................


see
RISCV is work for LLVM_TARGETS_TO_BUILD, it can find /lib/Target/RISCV
directory, if system->llvm_targets return "RISCV64", it cann't
work,because only have RISCV directory.

xxx|...............................cmake/config-ix.cmake.......................
450| list(FIND LLVM_TARGETS_TO_BUILD ${LLVM_NATIVE_ARCH} NATIVE_ARCH_IDX)
451| if (NATIVE_ARCH_IDX EQUAL -1)
452| message(STATUS
453| "Native target ${LLVM_NATIVE_ARCH} is not selected; lli will not JIT code")
454| else ()
455| message(STATUS "Native target architecture is ${LLVM_NATIVE_ARCH}")
456| set(LLVM_NATIVE_TARGET LLVMInitialize${LLVM_NATIVE_ARCH}Target)
457| set(LLVM_NATIVE_TARGETINFO LLVMInitialize${LLVM_NATIVE_ARCH}TargetInfo)
458| set(LLVM_NATIVE_TARGETMC LLVMInitialize${LLVM_NATIVE_ARCH}TargetMC)
459| set(LLVM_NATIVE_ASMPRINTER LLVMInitialize${LLVM_NATIVE_ARCH}AsmPrinter)
460|
461| # We don't have an ASM parser for all architectures yet.
462| if (EXISTS ${PROJECT_SOURCE_DIR}/lib/Target/${LLVM_NATIVE_ARCH}/AsmParser/CMakeLists.txt)
463| set(LLVM_NATIVE_ASMPARSER LLVMInitialize${LLVM_NATIVE_ARCH}AsmParser)
464| endif ()
465|
466| # We don't have an disassembler for all architectures yet.
467| if (EXISTS ${PROJECT_SOURCE_DIR}/lib/Target/${LLVM_NATIVE_ARCH}/Disassembler/CMakeLists.txt)
468| set(LLVM_NATIVE_DISASSEMBLER LLVMInitialize${LLVM_NATIVE_ARCH}Disassembler)
469| endif ()
470| endif ()
xxx|...........................................other...........................

so a other idea is add a new procedure make -DLLVM_TARGETS_TO_BUILD and
-DLLVM_DEFAULT_TARGET_TRIPLE don't use same procedure.

or not set -DLLVM_TARGET_ARCH like nixpkgs
it build success on my computer too.

Thoughts?

--
over
Z
[PATCH] gnu: llvm: Fix riscv64 cross-compilation.
(address . 62438@debbugs.gnu.org)
tencent_8D1DD8728892C6DAF14D8BD4A92CFC3F4607@qq.com
* gnu/packages/llvm.scm (system->llvm-target-arch): New procedure.
(llvm-15,llvm-14,llvm-12): Use It.
---
gnu/packages/llvm.scm | 30 +++++++++++++++++++++++++++---
1 file changed, 27 insertions(+), 3 deletions(-)

Toggle diff (66 lines)
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index e5bf9f5cae..46cbd4d15a 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -101,6 +101,30 @@ (define* (system->llvm-target #:optional
("i686" => "X86")
("i586" => "X86"))))
+(define* (system->llvm-target-arch #:optional
+ (system (or (and=> (%current-target-system)
+ gnu-triplet->nix-system)
+ (%current-system))))
+ "Return the LLVM target arch name that corresponds to SYSTEM, a system type such
+as \"x86_64-linux\"."
+ ;; See the 'cmake/config-ix.cmake' file of LLVM for a list of supported targets arch.
+ ;; start with # Determine the native architecture.
+ (letrec-syntax ((matches (syntax-rules (=>)
+ ((_ (system-prefix => target) rest ...)
+ (if (string-prefix? system-prefix system)
+ target
+ (matches rest ...)))
+ ((_)
+ (error "LLVM target arch for system is unknown" system)))))
+ (matches ("aarch64" => "AArch64")
+ ("armhf" => "ARM")
+ ("mips64el" => "Mips")
+ ("powerpc" => "PowerPC")
+ ("riscv64" => "RISCV64")
+ ("x86_64" => "X86_64")
+ ("i686" => "X86")
+ ("i586" => "X86"))))
+
(define (llvm-uri component version)
;; LLVM release candidate file names are formatted 'tool-A.B.C-rcN/tool-A.B.CrcN.src.tar.xz'
;; so we specify the version as A.B.C-rcN and delete the hyphen when referencing the file name.
@@ -598,7 +622,7 @@ (define-public llvm-15
#$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE="
(%current-target-system))
#$(string-append "-DLLVM_TARGET_ARCH="
- (system->llvm-target))
+ (system->llvm-target-arch))
#$(string-append "-DLLVM_TARGETS_TO_BUILD="
(system->llvm-target)))
'())
@@ -658,7 +682,7 @@ (define-public llvm-14
#$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE="
(%current-target-system))
#$(string-append "-DLLVM_TARGET_ARCH="
- (system->llvm-target))
+ (system->llvm-target-arch))
#$(string-append "-DLLVM_TARGETS_TO_BUILD="
(system->llvm-target)))
'())
@@ -910,7 +934,7 @@ (define-public llvm-12
#$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE="
(%current-target-system))
#$(string-append "-DLLVM_TARGET_ARCH="
- (system->llvm-target))
+ (system->llvm-target-arch))
#$(string-append "-DLLVM_TARGETS_TO_BUILD="
(system->llvm-target)))
#~())

base-commit: 6311493d7a6271bfbc51f4693857f9a12fe9965d
--
2.39.2
L
L
Ludovic Courtès wrote on 9 Jun 2023 23:12
Re: bug#62438: [PATCH] gnu: llvm: fix riscv64 cross-compile.
(name . Z572)(address . 873216071@qq.com)
87legstk5f.fsf_-_@gnu.org
Hi,

Z572 <873216071@qq.com> skribis:

Toggle quote (24 lines)
> +(define* (system->llvm-target-arch #:optional
> + (system (or (and=> (%current-target-system)
> + gnu-triplet->nix-system)
> + (%current-system))))
> + "Return the LLVM target arch name that corresponds to SYSTEM, a system type such
> +as \"x86_64-linux\"."
> + ;; See the 'cmake/config-ix.cmake' file of LLVM for a list of supported targets arch.
> + ;; start with # Determine the native architecture.
> + (letrec-syntax ((matches (syntax-rules (=>)
> + ((_ (system-prefix => target) rest ...)
> + (if (string-prefix? system-prefix system)
> + target
> + (matches rest ...)))
> + ((_)
> + (error "LLVM target arch for system is unknown" system)))))
> + (matches ("aarch64" => "AArch64")
> + ("armhf" => "ARM")
> + ("mips64el" => "Mips")
> + ("powerpc" => "PowerPC")
> + ("riscv64" => "RISCV64")
> + ("x86_64" => "X86_64")
> + ("i686" => "X86")
> + ("i586" => "X86"))))

The only different compared to ‘system->llvm-target’ is “riscv64”
instead of “riscv”. Why not add that line to ‘system->llvm-target’
instead of duplicating it?

Thanks,
Ludo’.
Z
Re: [bug#62438] [PATCH] gnu: llvm: fix riscv64 cross-compile.
(name . Ludovic Courtès)(address . ludo@gnu.org)
tencent_812531B51E9BDEA97C59387FEE3AF2E55108@qq.com
Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (33 lines)
> Hi,
>
> Z572 <873216071@qq.com> skribis:
>
>> +(define* (system->llvm-target-arch #:optional
>> + (system (or (and=> (%current-target-system)
>> + gnu-triplet->nix-system)
>> + (%current-system))))
>> + "Return the LLVM target arch name that corresponds to SYSTEM, a system type such
>> +as \"x86_64-linux\"."
>> + ;; See the 'cmake/config-ix.cmake' file of LLVM for a list of supported targets arch.
>> + ;; start with # Determine the native architecture.
>> + (letrec-syntax ((matches (syntax-rules (=>)
>> + ((_ (system-prefix => target) rest ...)
>> + (if (string-prefix? system-prefix system)
>> + target
>> + (matches rest ...)))
>> + ((_)
>> + (error "LLVM target arch for system is unknown" system)))))
>> + (matches ("aarch64" => "AArch64")
>> + ("armhf" => "ARM")
>> + ("mips64el" => "Mips")
>> + ("powerpc" => "PowerPC")
>> + ("riscv64" => "RISCV64")
>> + ("x86_64" => "X86_64")
>> + ("i686" => "X86")
>> + ("i586" => "X86"))))
>
> The only different compared to ‘system->llvm-target’ is “riscv64”
> instead of “riscv”. Why not add that line to ‘system->llvm-target’
> instead of duplicating it?


```
-- Performing Test HAS_MAYBE_UNINITIALIZED
-- Performing Test HAS_MAYBE_UNINITIALIZED - Success
CMake Error at cmake/config-ix.cmake:502 (message):
Unknown architecture riscv
Call Stack (most recent call first):
CMakeLists.txt:776 (include)
```

because `LLVM_TARGETS_TO_BUILD' and `LLVM_TARGET_ARCH' is two
option. The parameters of expectation are different.
but for now, use same procedure `system->llvm-target'.


for llvm 15.0.7

LLVM_TARGETS_TO_BUILD: allow `AArch64 AMDGPU ARC ARM AVR BPF CSKY
DirectX Hexagon Lanai LoongArch M68k MSP430 Mips NVPTX PowerPC RISCV
SPIRV Sparc SystemZ VE WebAssembly X86 XCore`


LLVM_TARGET_ARCH: allow `i[2-6]86 x86 amd64 x86_64 sparc powerrpc ppc64le
aarch64 arm64 arm avr mips xcore msp430 hexagon s390x wasm32 wasm64
riscv32 riscv64 m68k`


if use same procedure, some target will fail.


Toggle quote (5 lines)
>
> Thanks,
> Ludo’.


--
over
I
I
iyzsong wrote on 7 Sep 2023 12:42
[PATCH v2] gnu: llvm: Fix riscv64 cross-compilation.
(address . 62438@debbugs.gnu.org)
60563288b330dca2f53335fe7e385420666fb04f.1694083301.git.iyzsong@member.fsf.org
From: Z572 <873216071@qq.com>

* gnu/packages/llvm.scm (system->llvm-target-arch): New procedure.
(llvm-15,llvm-14,llvm-12): Use It.
(system->llvm-target): Rewrite in terms of 'system->llvm-target-arch'.

Co-authored-by: ??? <iyzsong@member.fsf.org>
---
gnu/packages/llvm.scm | 25 +++++++++++++++++++------
1 file changed, 19 insertions(+), 6 deletions(-)

Toggle diff (71 lines)
diff --git a/gnu/packages/llvm.scm b/gnu/packages/llvm.scm
index daff67f7f2..cd551f4e02 100644
--- a/gnu/packages/llvm.scm
+++ b/gnu/packages/llvm.scm
@@ -85,19 +85,32 @@ (define* (system->llvm-target #:optional
"Return the LLVM target name that corresponds to SYSTEM, a system type such
as \"x86_64-linux\"."
;; See the 'lib/Target' directory of LLVM for a list of supported targets.
+ (match (system->llvm-target-arch system)
+ ("RISCV64" "RISCV")
+ ("X86_64" "X86")
+ (x x)))
+
+(define* (system->llvm-target-arch #:optional
+ (system (or (and=> (%current-target-system)
+ gnu-triplet->nix-system)
+ (%current-system))))
+ "Return the LLVM target arch name that corresponds to SYSTEM, a system type such
+as \"x86_64-linux\"."
+ ;; See the 'cmake/config-ix.cmake' file of LLVM for a list of supported targets arch.
+ ;; start with # Determine the native architecture.
(letrec-syntax ((matches (syntax-rules (=>)
((_ (system-prefix => target) rest ...)
(if (string-prefix? system-prefix system)
target
(matches rest ...)))
((_)
- (error "LLVM target for system is unknown" system)))))
+ (error "LLVM target arch for system is unknown" system)))))
(matches ("aarch64" => "AArch64")
("armhf" => "ARM")
("mips64el" => "Mips")
("powerpc" => "PowerPC")
- ("riscv" => "RISCV")
- ("x86_64" => "X86")
+ ("riscv64" => "RISCV64")
+ ("x86_64" => "X86_64")
("i686" => "X86")
("i586" => "X86"))))
@@ -598,7 +611,7 @@ (define-public llvm-15
#$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE="
(%current-target-system))
#$(string-append "-DLLVM_TARGET_ARCH="
- (system->llvm-target))
+ (system->llvm-target-arch))
#$(string-append "-DLLVM_TARGETS_TO_BUILD="
(system->llvm-target)))
'())
@@ -658,7 +671,7 @@ (define-public llvm-14
#$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE="
(%current-target-system))
#$(string-append "-DLLVM_TARGET_ARCH="
- (system->llvm-target))
+ (system->llvm-target-arch))
#$(string-append "-DLLVM_TARGETS_TO_BUILD="
(system->llvm-target)))
'())
@@ -901,7 +914,7 @@ (define-public llvm-12
#$(string-append "-DLLVM_DEFAULT_TARGET_TRIPLE="
(%current-target-system))
#$(string-append "-DLLVM_TARGET_ARCH="
- (system->llvm-target))
+ (system->llvm-target-arch))
#$(string-append "-DLLVM_TARGETS_TO_BUILD="
(system->llvm-target)))
#~())

base-commit: 5ef28595e9dff8b88ec3fcb4d887fbc380c9a8b8
--
2.41.0
L
L
Ludovic Courtès wrote on 19 Oct 2023 21:55
(address . iyzsong@envs.net)
87ttqmz8sn.fsf@gnu.org
Hi,

iyzsong@envs.net skribis:

Toggle quote (8 lines)
> From: Z572 <873216071@qq.com>
>
> * gnu/packages/llvm.scm (system->llvm-target-arch): New procedure.
> (llvm-15,llvm-14,llvm-12): Use It.
> (system->llvm-target): Rewrite in terms of 'system->llvm-target-arch'.
>
> Co-authored-by: ??? <iyzsong@member.fsf.org>

I guess you can go ahead and apply it (sorry for dropping the ball
earlier!).

Thanks,
Ludo’.
?
(name . Ludovic Courtès)(address . ludo@gnu.org)
8734y5aa3o.fsf@envs.net
Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (16 lines)
> Hi,
>
> iyzsong@envs.net skribis:
>
>> From: Z572 <873216071@qq.com>
>>
>> * gnu/packages/llvm.scm (system->llvm-target-arch): New procedure.
>> (llvm-15,llvm-14,llvm-12): Use It.
>> (system->llvm-target): Rewrite in terms of 'system->llvm-target-arch'.
>>
>> Co-authored-by: ??? <iyzsong@member.fsf.org>
>
> I guess you can go ahead and apply it (sorry for dropping the ball
> earlier!).
>

Pushed, thank you!
Closed
?
Your comment

This issue is archived.

To comment on this conversation send an email to 62438@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 62438
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch