为RISCV目标编译LLVM compiler-rt遇浮点指令错误求助
解决RISCV目标编译compiler-rt时汇编指令集参数缺失问题
编译compiler-rt for RISC-V64时,汇编文件xray_trampoline_riscv_common.S因未获取到-march=rv64gc参数,导致浮点指令fsd报错(要求D扩展)——该参数已在CMAKE_C_FLAGS/CMAKE_CXX_FLAGS中设置,但未传递给汇编编译流程。
问题根源
CMake中CMAKE_C_FLAGS和CMAKE_CXX_FLAGS仅作用于C/C++源文件,汇编文件(.S/.s)的编译参数由CMAKE_ASM_FLAGS单独控制,必须显式设置才能传递给汇编编译环节。
修正方案
- 添加汇编编译参数:在CMake命令中新增
CMAKE_ASM_FLAGS,指定目标架构和指令集参数 - 修正引号问题:将命令中的中文引号替换为英文引号,避免CMake解析错误
- 清理重复配置:移除重复的
CMAKE_SYSTEM_NAME设置
修正后的完整CMake命令
PATH="${LLVM_PROJECT}/riscv-build/bin/:$PATH" CC=clang CXX=clang++ /opt/cmake-4.2.1-linux-x86_64/bin/cmake \ -DCMAKE_LINKER_TYPE=LLD \ -DCMAKE_LINKER=${LLVM_PROJECT}/riscv-build/bin/lld \ -DCMAKE_SYSTEM_NAME=Linux \ -DCMAKE_EXE_LINKER_FLAGS_INIT=-fuse-ld=lld \ -DCMAKE_C_FLAGS="-target riscv64-unknown-linux-gnu -march=rv64gc" \ -DCMAKE_CXX_FLAGS="-target riscv64-unknown-linux-gnu -march=rv64gc" \ -DCMAKE_ASM_FLAGS="-target riscv64-unknown-linux-gnu -march=rv64gc" \ -DLLVM_CONFIG_PATH=${LLVM_PROJECT}/riscv-build/bin/llvm-config \ -DCMAKE_INSTALL_PREFIX=${INSTALL_LLVM}/lib/clang/22/ \ ../compiler-rt/
后续验证步骤
- 删除原构建目录下所有文件(
rm -rf *),清理CMake缓存 - 重新执行上述修正后的CMake命令
- 运行
make VERBOSE=1,确认汇编文件的编译命令已携带-march=rv64gc参数
内容的提问来源于stack exchange,提问作者CERG-YU
相关产品推荐
相关产品推荐

