如何为Apple M1建立LLVM(clang,clang ++)? [英] How to build LLVM (clang,clang++) for Apple M1?
问题描述
我正在尝试构建LLVM编译器,以便可以在Apple M1上启用OpenMP.我正在使用LLVM开发树(因为最近我看到一些OpenMP运行时用于此).
I am trying to build LLVM compilers so that I can enable OpenMP on the Apple M1. I am using the LLVM development tree, (since I saw some OpenMP runtime go into that for this recently).
我最终使用了该脚本来调用cmake:
I have ended up with this script to invoke cmake:
# Xcode, Ninja
BUILD_SYSTEM=Ninja
BUILD_TAG=Ninja
cmake ../llvm \
-G$BUILD_SYSTEM -B ${BUILD_TAG}_build \
-DCMAKE_OSX_ARCHITECTURES='arm64' \
-DCMAKE_C_COMPILER=`which clang` \
-DCMAKE_CXX_COMPILER=`which clang++` \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_BUILD_WITH_INSTALL_RPATH=1 \
-DCMAKE_INSTALL_PREFIX=$HOME/software/clang-12.0.0/arm64 \
-DLLVM_ENABLE_WERROR=FALSE \
-DLLVM_TARGETS_TO_BUILD='AArch64' \
-DLLVM_ENABLE_PROJECTS='clang;openmp,polly' \
-DLLVM_DEFAULT_TARGET_TRIPLE='aarch64-apple-darwin20.1.0'
这里使用的编译器是
$ /usr/bin/clang --version
Apple clang version 12.0.0 (clang-1200.0.32.27)
Target: arm64-apple-darwin20.1.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
ninja然后可以成功构建clang,clang ++和OpenMp运行时并安装它们.(简单来说,以Arms64为目标的Arm64图像)
ninja can then successfully build clang, clang++ and the OpenMp runtime and install them. (As simple, Arm64 images targeting Arms64)
$ file ~/software/clang-12.0.0/arm64/bin/clang
/Users/jcownie/software/clang-12.0.0/arm64/bin/clang: Mach-O 64-bit executable arm64
$ ~/software/clang-12.0.0/arm64/bin/clang --version
clang version 12.0.0 (https://github.com/llvm/llvm-project.git 879c15e890b4d25d28ea904e92497f091f796019)
Target: aarch64-apple-darwin20.1.0
Thread model: posix
InstalledDir: /Users/jcownie/software/clang-12.0.0/arm64/bin
除了我尝试用它们编译任何东西时,它们看上去都很理智.
Which all looks sane, except that when I try to compile anything with them they are missing the include path to get system headers.
$ ~/software/clang-12.0.0/arm64/bin/clang hello.c
hello.c:1:10: fatal error: 'stdio.h' file not found
#include <stdio.h>
^~~~~~~~~
1 error generated.
毕竟,
- 有人知道如何解决包含路径问题吗?
- 有人知道如何为编译器(和库)配置和构建胖二进制文件,以便x86_64嵌入式编译器的目标是x86_64和aarch64二进制文件aarch64吗?(这就是Xcode clang和clang ++的功能...)我的尝试最终以一个编译器胖二进制文件结束,其中两种体系结构都针对x86_64:-(
谢谢
推荐答案
您可以在构建时设置 -DDEFAULT_SYSROOT =/path/to/MacOSX11.1.sdk
或执行 export SDKROOT=/path/to/MacOSX11.1.sdk
在运行时.
You can set -DDEFAULT_SYSROOT=/path/to/MacOSX11.1.sdk
at build time or do export SDKROOT=/path/to/MacOSX11.1.sdk
at runtime.
您需要使用 clang -arch arm64 -arch x86_64
进行编译,以从clang中获取大量二进制文件.您还需要对Apple clang执行此操作.
You need to compile with clang -arch arm64 -arch x86_64
to get a fat binary out of clang. You need to do this for Apple clang as well.
这篇关于如何为Apple M1建立LLVM(clang,clang ++)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!