Build 在Linux下构建llvm6

Build 在Linux下构建llvm6,build,clang,llvm,alpine,libc++,Build,Clang,Llvm,Alpine,Libc++,我正在尝试在LinuxAlpineDocker容器上构建LLVM6 以下是我所做的工作: apk添加构建基础 apk添加python apk添加zlib svn公司http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_600/final/ llvm svn公司http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_600/final/ 叮当声 svn公司http://llvm.org/svn/llvm-

我正在尝试在
LinuxAlpine
Docker容器上构建
LLVM6

以下是我所做的工作:

  • apk添加构建基础
  • apk添加python
  • apk添加zlib
  • svn公司http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_600/final/ llvm
  • svn公司http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_600/final/ 叮当声
  • svn公司http://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_600/final/ libcxx
(显然,所有
svn
调用都在适当的文件夹中)

  • 然后我创建我的
    build
    文件夹并执行
    cmake-G“Unix Makefiles”。/llvm
然而,当我进入
make
,一段时间后,它会随着以下内容消失:

    [ 11%] Building CXX object projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/algorithm.cpp.o
In file included from /root/llvm/projects/libcxx/include/ostream:140:0,
                 from /root/llvm/projects/libcxx/include/istream:163,
                 from /root/llvm/projects/libcxx/include/random:1646,
                 from /root/llvm/projects/libcxx/src/algorithm.cpp:11:
/root/llvm/projects/libcxx/include/locale: In function '_Tp std::__1::__num_get_signed_integral(const char*, const char*, std::__1::ios_base::iostate&, int)':
/root/llvm/projects/libcxx/include/locale:739:76: error: there are no arguments to 'strtoll_l' that depend on a template parameter, so a declaration of 'strtoll_l' must be available [-fpermissive]
         long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
                                                                            ^
/root/llvm/projects/libcxx/include/locale:739:76: note: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
/root/llvm/projects/libcxx/include/locale: In function '_Tp std::__1::__num_get_unsigned_integral(const char*, const char*, std::__1::ios_base::iostate&, int)':
/root/llvm/projects/libcxx/include/locale:779:86: error: there are no arguments to 'strtoull_l' that depend on a template parameter, so a declaration of 'strtoull_l' must be available [-fpermissive]
         unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE);
                                                                                      ^
At global scope:
cc1plus: warning: unrecognized command line option '-Wno-noexcept-type'
make[2]: *** [projects/libcxx/lib/CMakeFiles/cxx_objects.dir/build.make:63: projects/libcxx/lib/CMakeFiles/cxx_objects.dir/__/src/algorithm.cpp.o] Error 1

我是不是错过了什么,比如依赖?或者这是一个需要修复的已知错误?我应该怎么做才能在Linux Alpine上获得一个工作的、最近的
llvm
++
clang
++
libc++

在撰写本文时,需要将llvm6添加到APORT中。因为它有很多的补丁和调整,从阿尔卑斯山的源头上建造似乎不容易弄清楚

所以,我们有充分的理由相信,很快就会有一个,但在它出现之前,您可以使用该PR中的APKBUILD从源代码自己构建llvm

安装依赖项

是Alpine用于编译其包的实用程序

apk add alpine-sdk
abuild将自动安装您需要的大多数依赖项,但PR中的依赖项列表中缺少它
diffutils

apk add diffutils
停止成为root用户

ABILD拒绝以root用户身份运行,因此如果您还没有,请创建一个用户帐户。我正在使用用户名apk:

克隆PR并编译

git clone --depth=1 -b pr-llvm-6 https://github.com/xentec/aports
cd aports/main/llvm6
abuild -r
abuild-r
确实需要很长的时间,所以如果你一直跟着,现在可能是你午休的好时机

安装生成的软件包

git clone --depth=1 -b pr-llvm-6 https://github.com/xentec/aports
cd aports/main/llvm6
abuild -r
如果一切都成功,abuild将在$HOME/packages/main中放置一堆.apk文件。再次假设用户帐户名为apk,其主文件夹为/home/apk,则为root

cp /home/apk/.abuild/*.rsa.pub /etc/apk/keys
apk add /home/apk/packages/main/$(uname -m)/*.apk
感谢并赞扬PR的作者:


编辑:Dockerfile片段

由于您的问题提到Docker,这里有一个
RUN
命令,您可以插入:

# Temporary workaround for there not being an llvm6 apk yet
# Open PR for llvm6 package: https://github.com/alpinelinux/aports/pull/3583
# See https://stackoverflow.com/questions/50258121/building-llvm-6-under-linux-alpine
RUN export BUILD_DEPS='alpine-sdk git diffutils' \
 && apk update \
 && apk add $BUILD_DEPS \
 && adduser -D apk \
 && adduser apk abuild \
 && sudo -iu apk abuild-keygen -a \
 && sudo -iu apk git clone --depth=1 -b pr-llvm-6 https://github.com/xentec/aports \
 && sudo -iu apk sh -xec 'cd aports/main/llvm6; abuild -r' \
 && cp /home/apk/.abuild/*.rsa.pub /etc/apk/keys \
 && apk add /home/apk/packages/main/$(uname -m)/*.apk \
 && deluser --remove-home apk \
 && rm -rf /var/cache/apk/APKINDEX* \
 && apk del --no-cache $BUILD_DEPS

我使用了丹的代码并将其推送到DockerHub。
由于本地构建需要一段时间,因此预构建映像可能对某些人有用:)

从外观上看,我想可能是主机编译器和/或stdlibOk的问题,请稍等。我试着运行你的dockerfile,结果一尘不染。但是,clang是否与其他设备一起安装?我还需要clang和libc++,它们是否包含在apk中?如果是,在哪里?不是在APK中生成的我的指令,而是PR上存在
clang
lld
APKBuild。您可以向dockerfile添加更多的ABILD行以获得这些包。(注意,复制
&&sudo-iu apk sh-xec'cd aports/main/llvm6;abuild-r'`行并更改
cd`路径抱歉,我认为我仍然缺少一些内容。我尝试了cd,例如,在
aports/main/clang
中运行
abuild-r
,但我收到以下错误消息:
>>clang:分析依赖项…错误:无法满足的约束:.MakeDependes-clang-0:在:缓存中屏蔽满足:world[.MakeDependes-clang]>>>错误:clang:all failed
。它缺少什么样的依赖项?如何安装它们?抱歉…!!如果我能让它正常工作,我很乐意为这个问题添加一个悬赏!clang的makeDependes行已经定义;看起来要获得clang,您需要做的是首先使用此技巧安装
llvm的版本6-dev
llvm static
,和
llvmtestutils
,然后执行clang的ABILD。