如何为Apple M1建立LLVM(clang,clang ++)? [英] How to build LLVM (clang,clang++) for Apple M1?

查看:801
本文介绍了如何为Apple M1建立LLVM(clang,clang ++)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试构建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.

毕竟,

  1. 有人知道如何解决包含路径问题吗?
  2. 有人知道如何为编译器(和库)配置和构建胖二进制文件,以便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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆