[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[bug#62438] [PATCH] gnu: llvm: fix riscv64 cross-compile.
From: |
Z572 |
Subject: |
[bug#62438] [PATCH] gnu: llvm: fix riscv64 cross-compile. |
Date: |
Mon, 03 Apr 2023 23:10:24 +0800 |
User-agent: |
Gnus/5.13 (Gnus v5.13) |
宋文武 <iyzsong@envs.net> writes:
> 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
https://github.com/llvm/llvm-project/blob/1fdec59bffc11ae37eb51a1b9869f0696bfd5312/llvm/cmake/config-ix.cmake#L393-#L441,
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
https://github.com/llvm/llvm-project/blob/1fdec59bffc11ae37eb51a1b9869f0696bfd5312/llvm/cmake/config-ix.cmake#L450-#L470,
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
https://github.com/NixOS/nixpkgs/blob/2766f77c32e171a04d59b636a91083bae862274e/pkgs/development/compilers/llvm/11/llvm/default.nix
it build success on my computer too.
Thoughts?
--
over