在Linux Alpine下构建llvm 6

马特奥·蒙蒂(Matteo Monti)

我正在尝试llvm 6Linux AlpineDocker容器上构建

请按照以下说明进行以下操作

  • apk add build-base
  • apk add python
  • apk add zlib
  • svn co http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_600/final/ llvm
  • svn co http://llvm.org/svn/llvm-project/cfe/tags/RELEASE_600/final/ clang
  • svn co 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

我是否缺少某些东西,例如依赖项?还是这是一个需要修复的已知错误?那我该怎么做才能得到一个工作,最近llvm+ clang+libc++在Linux上高山?

在撰写本文时,有一个打开请求请求将llvm6添加到端口。因为它涉及许多补丁和调整,所以似乎很难从高山上从源代码进行构建。

因此,我们有充分的理由相信很快就会有一个官方的llvm6软件包,但是直到一个正式的llvm6软件包出现为止,您可以使用该PR中的APKBUILD自行从源中构建llvm。

安装依赖项

abuild是Alpine用来编译其软件包的实用程序。

apk add alpine-sdk

abuild将自动安装您需要的大多数依赖项,但是diffutilsPR的依赖项列表中缺少

apk add diffutils

不再是

abuild拒绝以root身份运行,因此,如果尚未创建,请创建一个用户帐户。我正在使用用户名apk

adduser apk
adduser apk abuild
su - apk
abuild-keygen -a

克隆PR并编译

git clone --depth=1 -b pr-llvm-6 https://github.com/xentec/aports
cd aports/main/llvm6
abuild -r

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的作者:https : //github.com/xentec


编辑: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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章