Сборка llvm 6 под Linux Alpine - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь собрать llvm 6 на Linux Alpine контейнере Docker.

Вот что я сделал, следуя этим инструкциям :

(все 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 Alpine?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Я использовал код Дэна и отправил его в DockerHub.
Поскольку для локальной сборки требуется некоторое время, для некоторых может быть полезно предварительно подготовленное изображение:)
py36-альпийский llvm6 (DockerHub)

0 голосов
/ 11 мая 2018

На момент написания, есть открытый запрос на извлечение для добавления llvm6 в порты. Поскольку включает в себя множество патчей и настроек, кажется, что сборку из исходного кода на Alpine не так просто понять.

Итак, у нас есть все основания полагать, что скоро будет официальный пакет llvm6 , но пока он не появится, вы можете использовать APKBUILD из этого пиара для самостоятельного создания llvm из исходного кода.

Установочные зависимости

abuild - это утилита, которую Alpine использует для компиляции своих пакетов.

apk add alpine-sdk

abuild автоматически установит большинство зависимостей, которые вам нужны, но diffutils отсутствует в списке зависимостей в PR.

apk add diffutils

Перестань быть root

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

* * * * * * * * * * * * * * * * * * * 1048 'действительно займет очень много времени, поэтому, если вы следуете за ним, сейчас самое время взять обеденный перерыв.

Установить полученный пакет

Если все прошло успешно, abuild поместит кучу файлов .apk в $ HOME / packages / main. Предположим еще раз, что учетная запись пользователя называется 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 /10702550/sborka-llvm-6-pod-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
...