From a197f92158fd3f9073d25690aa538c3418918e8a Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Sun, 22 Mar 2020 01:03:39 +0300 Subject: [PATCH 01/27] clang based image --- .github/workflows/dockerimage.yml | 4 +- dockerfiles/Docker.clang | 23 + dockerfiles/build.sh | 41 ++ dockerfiles/configure.sh | 63 +++ dockerfiles/install.sh | 54 +++ .../compiler-rt-01-sanitizer-nongnu.patch | 415 ++++++++++++++++++ .../patch/compiler-rt-02-ngtc-specific.patch | 13 + ...piler-rt-03-link-against-libexecinfo.patch | 12 + .../patch/libcxx-01-musl-hardfix.patch | 22 + .../patch/libcxx-02-enable-libgcc-link.patch | 13 + dockerfiles/sync.sh | 79 ++++ 11 files changed, 737 insertions(+), 2 deletions(-) create mode 100644 dockerfiles/Docker.clang create mode 100755 dockerfiles/build.sh create mode 100755 dockerfiles/configure.sh create mode 100755 dockerfiles/install.sh create mode 100644 dockerfiles/patch/compiler-rt-01-sanitizer-nongnu.patch create mode 100644 dockerfiles/patch/compiler-rt-02-ngtc-specific.patch create mode 100644 dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch create mode 100644 dockerfiles/patch/libcxx-01-musl-hardfix.patch create mode 100644 dockerfiles/patch/libcxx-02-enable-libgcc-link.patch create mode 100755 dockerfiles/sync.sh diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 779dcc0..fbc4358 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -15,10 +15,10 @@ jobs: - name: Checkout sources uses: actions/checkout@v2 - name: Build the Docker image - run: docker build . --file dockerfiles/Dockerfile.x86_64-unknown-linux-musl --tag generalbeck/docker-cross-rust:x86_64-unknown-linux-musl + run: docker build . --file dockerfiles/Dockerfile.clang --tag generalbeck/docker-cross-rust:clang - name: Push the Docker image run: | docker login -u ${{ secrets.REGISTRY_USERNAME }} -p ${{ secrets.REGISTRY_PASSWORD }} - docker push generalbeck/docker-cross-rust:x86_64-unknown-linux-musl + docker push generalbeck/docker-cross-rust:clang - name: Docker logout run: docker logout diff --git a/dockerfiles/Docker.clang b/dockerfiles/Docker.clang new file mode 100644 index 0000000..9d14775 --- /dev/null +++ b/dockerfiles/Docker.clang @@ -0,0 +1,23 @@ +FROM ubuntu:focal + +# install tools and dependencies +RUN set -eux; \ + apt update; \ + apt install linux-headers-$(uname -r) + apt install -y --no-install-recommends \ + ca-certificates cmake file g++ git \ + clang libclang-dev patch make curl ninja-build python mc; +WORKDIR /builds +RUN mkdir ngtc +COPY sync.sh /builds/ngtc/ +COPY configure.sh /builds/ngtc/ +COPY build.sh /builds/ngtc/ +COPY install.sh /builds/ngtc/ +RUN cd ngtc;\ + ./sync.sh +RUN cd ngtc;\ + ./configure.sh +RUN cd ngtc;\ + ./build.sh +RUN cd ngtc;\ + ./install.sh diff --git a/dockerfiles/build.sh b/dockerfiles/build.sh new file mode 100755 index 0000000..8a91406 --- /dev/null +++ b/dockerfiles/build.sh @@ -0,0 +1,41 @@ +#!/bin/sh + +TOOLS='clang lld' +PROJECTS='libunwind compiler-rt libcxx libcxxabi' +ARCH="$(uname -m)" +TARGETS='X86' +ROOT=$(dirname $(readlink -f "$0")) + +PATH=/"$ARCH"-pc-linux-musl/bin:"$PATH" +LD_LIBRARY_PATH=/"$ARCH"-pc-linux-musl/lib + +if [ ! -d $ROOT/src ]; then + echo no sources found, run sync + exit 1 +fi + +if [ ! -d $ROOT/build ]; then + mkdir $ROOT/build || $(echo 'failed to create directory' && exit 1) +fi + +cd $ROOT/build || $(echo 'failed to change directory' && exit 1) + +for TOOL in $TOOLS; do + if [ ! -e $ROOT/src/llvm/tools/$TOOL ]; then + ln -s $ROOT/src/$TOOL $ROOT/src/llvm/tools/$TOOL + fi +done + +for PRJ in $PROJECTS; do + if [ ! -e $ROOT/src/llvm/projects/$PRJ ]; then + ln -s $ROOT/src/$PRJ $ROOT/src/llvm/projects/$PRJ + fi +done + +if [ ! -d $ROOT/build/llvm ]; then + mkdir $ROOT/build/llvm || $(echo 'failed to create directory' && exit 1) +fi + +cd $ROOT/build/llvm || $(echo 'failed to change directory' && exit 1) + +ninja || exit 41 diff --git a/dockerfiles/configure.sh b/dockerfiles/configure.sh new file mode 100755 index 0000000..dd44c62 --- /dev/null +++ b/dockerfiles/configure.sh @@ -0,0 +1,63 @@ +#!/bin/sh + +TOOLS='clang lld' +PROJECTS='libunwind compiler-rt libcxx libcxxabi' +ARCH="$(uname -m)" +TARGETS='X86' +ROOT=$(dirname $(readlink -f "$0")) + +PATH=/"$ARCH"-pc-linux-musl/bin:"$PATH" +LD_LIBRARY_PATH=/"$ARCH"-pc-linux-musl/lib + +if [ ! -d $ROOT/src ]; then + echo no sources found, run sync + exit 1 +fi + +if [ ! -d $ROOT/build ]; then + mkdir $ROOT/build || $(echo 'failed to create directory' && exit 1) +fi + +cd $ROOT/build || $(echo 'failed to change directory' && exit 1) + +for TOOL in $TOOLS; do + if [ ! -e $ROOT/src/llvm/tools/$TOOL ]; then + ln -s $ROOT/src/$TOOL $ROOT/src/llvm/tools/$TOOL + fi +done + +for PRJ in $PROJECTS; do + if [ ! -e $ROOT/src/llvm/projects/$PRJ ]; then + ln -s $ROOT/src/$PRJ $ROOT/src/llvm/projects/$PRJ + fi +done + +if [ ! -d $ROOT/build/llvm ]; then + mkdir $ROOT/build/llvm || $(echo 'failed to create directory' && exit 1) +fi + +cd $ROOT/build/llvm || $(echo 'failed to change directory' && exit 1) + +cmake \ + -DCMAKE_C_COMPILER=clang \ + -DCMAKE_CXX_COMPILER=clang++ \ + -DLIBCXXABI_LIBCXX_PATH=$ROOT/src/libcxx \ + -DLIBCXXABI_LIBCXX_INCLUDES=$ROOT/src/libcxx/include \ + -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \ + -DLIBCXXABI_USE_LLVM_UNWINDER=ON \ + -DLIBCXX_LIBCXXABI_INCLUDES_INTERNAL=$ROOT/src/libcxxabi/include \ + -DLIBCXX_HAS_MUSL_LIBC=ON \ + -DLIBCXX_HAS_GCC_S_LIB=OFF \ + -DLIBCXX_ENABLE_STATIC_ABI_LIBRARY=ON \ + -DLIBUNWIND_ENABLE_SHARED=OFF \ + -DCLANG_DEFAULT_CXX_STDLIB=libc++ \ + -DCLANG_DEFAULT_LINKER=lld \ + -DCLANG_DEFAULT_RTLIB=compiler-rt \ + -DLLVM_DEFAULT_TARGET_TRIPLE="$ARCH"-pc-linux-musl \ + -DDEFAULT_SYSROOT=/"$ARCH"-pc-linux-musl \ + -DCMAKE_INSTALL_PREFIX=/"$ARCH"-pc-linux-musl \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_TARGET_ARCH="$ARCH" \ + -DLLVM_TARGETS_TO_BUILD="$TARGETS" \ + -G Ninja \ + $ROOT/src/llvm || exit 40 diff --git a/dockerfiles/install.sh b/dockerfiles/install.sh new file mode 100755 index 0000000..c037d0b --- /dev/null +++ b/dockerfiles/install.sh @@ -0,0 +1,54 @@ +#!/bin/sh + +TOOLS='clang lld' +PROJECTS='libunwind compiler-rt libcxx libcxxabi' +ARCH="$(uname -m)" +TARGETS='X86' +ROOT=$(dirname $(readlink -f "$0")) + +PATH=/"$ARCH"-pc-linux-musl/bin:"$PATH" +LD_LIBRARY_PATH=/"$ARCH"-pc-linux-musl/lib + +if [ ! -d $ROOT/src ]; then + echo no sources found, run sync + exit 1 +fi + +if [ ! -d $ROOT/build ]; then + mkdir $ROOT/build || $(echo 'failed to create directory' && exit 1) +fi + +cd $ROOT/build || $(echo 'failed to change directory' && exit 1) + +for TOOL in $TOOLS; do + if [ ! -e $ROOT/src/llvm/tools/$TOOL ]; then + ln -s $ROOT/src/$TOOL $ROOT/src/llvm/tools/$TOOL + fi +done + +for PRJ in $PROJECTS; do + if [ ! -e $ROOT/src/llvm/projects/$PRJ ]; then + ln -s $ROOT/src/$PRJ $ROOT/src/llvm/projects/$PRJ + fi +done + +if [ ! -d $ROOT/build/llvm ]; then + mkdir $ROOT/build/llvm || $(echo 'failed to create directory' && exit 1) +fi + +cd $ROOT/build/llvm || $(echo 'failed to change directory' && exit 1) + +ninja install || exit 42 + +cd /"$ARCH"-pc-linux-musl/bin || $(echo 'failed to change directory' && exit 1) +ln -s llvm-ar ar +ln -s llvm-ranlib ranlib +ln -s llvm-objcopy objcopy +ln -s llvm-objcopy strip +ln -s llvm-objdump objdump +ln -s llvm-nm nm +ln -s clang cc +ln -s clang++ c++ +ln -s ld.lld ld +cd / || $(echo 'failed to change directory' && exit 1) +tar cvfz "$ARCH"-pc-linux-musl.tar.gz "$ARCH"-pc-linux-musl || exit 46 diff --git a/dockerfiles/patch/compiler-rt-01-sanitizer-nongnu.patch b/dockerfiles/patch/compiler-rt-01-sanitizer-nongnu.patch new file mode 100644 index 0000000..439873c --- /dev/null +++ b/dockerfiles/patch/compiler-rt-01-sanitizer-nongnu.patch @@ -0,0 +1,415 @@ +diff --git a/lib/asan/asan_linux.cpp b/lib/asan/asan_linux.cpp +index ce5e873..a68f3f4 100644 +--- a/lib/asan/asan_linux.cpp ++++ b/lib/asan/asan_linux.cpp +@@ -45,7 +45,7 @@ + #include + #endif + +-#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS ++#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS || SANITIZER_NONGNU + #include + extern "C" void* _DYNAMIC; + #elif SANITIZER_NETBSD +@@ -138,7 +138,7 @@ void AsanApplyToGlobals(globals_op_fptr op, const void *needle) { + UNIMPLEMENTED(); + } + +-#if SANITIZER_ANDROID ++#if SANITIZER_ANDROID || SANITIZER_NONGNU + // FIXME: should we do anything for Android? + void AsanCheckDynamicRTPrereqs() {} + void AsanCheckIncompatibleRT() {} +@@ -229,7 +229,7 @@ void AsanCheckIncompatibleRT() { + } + } + } +-#endif // SANITIZER_ANDROID ++#endif // SANITIZER_ANDROID || SANITIZER_NONGNU + + #if !SANITIZER_ANDROID + void ReadContextStack(void *context, uptr *stack, uptr *ssize) { +diff --git a/lib/interception/interception_linux.cpp b/lib/interception/interception_linux.cpp +index 950cd51..8beffd2 100644 +--- a/lib/interception/interception_linux.cpp ++++ b/lib/interception/interception_linux.cpp +@@ -63,8 +63,8 @@ bool InterceptFunction(const char *name, uptr *ptr_to_real, uptr func, + return addr && (func == wrapper); + } + +-// Android and Solaris do not have dlvsym +-#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD ++// Android, Solaris, OpenBSD and musl do not have dlvsym ++#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD && !SANITIZER_NONGNU + static void *GetFuncAddr(const char *name, const char *ver) { + return dlvsym(RTLD_NEXT, name, ver); + } +@@ -75,7 +75,7 @@ bool InterceptFunction(const char *name, const char *ver, uptr *ptr_to_real, + *ptr_to_real = (uptr)addr; + return addr && (func == wrapper); + } +-#endif // !SANITIZER_ANDROID ++#endif // !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD && !SANITIZER_NONGNU + + } // namespace __interception + +diff --git a/lib/interception/interception_linux.h b/lib/interception/interception_linux.h +index e578da0..626f961 100644 +--- a/lib/interception/interception_linux.h ++++ b/lib/interception/interception_linux.h +@@ -35,8 +35,8 @@ bool InterceptFunction(const char *name, const char *ver, uptr *ptr_to_real, + (::__interception::uptr) & (func), \ + (::__interception::uptr) & WRAP(func)) + +-// Android, Solaris and OpenBSD do not have dlvsym +-#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD ++// Android, Solaris, OpenBSD and musl do not have dlvsym ++#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD && !SANITIZER_NONGNU + #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \ + ::__interception::InterceptFunction( \ + #func, symver, \ +@@ -46,7 +46,7 @@ bool InterceptFunction(const char *name, const char *ver, uptr *ptr_to_real, + #else + #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \ + INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func) +-#endif // !SANITIZER_ANDROID && !SANITIZER_SOLARIS ++#endif // !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD && !SANITIZER_NONGNU + + #endif // INTERCEPTION_LINUX_H + #endif // SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || +diff --git a/lib/msan/msan_interceptors.cpp b/lib/msan/msan_interceptors.cpp +index 1d9d9f7..45aeb98 100644 +--- a/lib/msan/msan_interceptors.cpp ++++ b/lib/msan/msan_interceptors.cpp +@@ -57,6 +57,9 @@ DECLARE_REAL(SIZE_T, strlen, const char *s) + DECLARE_REAL(SIZE_T, strnlen, const char *s, SIZE_T maxlen) + DECLARE_REAL(void *, memcpy, void *dest, const void *src, uptr n) + DECLARE_REAL(void *, memset, void *dest, int c, uptr n) ++#if SANITIZER_NONGNU ++DECLARE_REAL(int, shmctl, int shmid, int cmd, void *buf) ++#endif + + // True if this is a nested interceptor. + static THREADLOCAL int in_interceptor_scope; +diff --git a/lib/msan/msan_linux.cpp b/lib/msan/msan_linux.cpp +index d61e9de..0978751 100644 +--- a/lib/msan/msan_linux.cpp ++++ b/lib/msan/msan_linux.cpp +@@ -12,7 +12,7 @@ + //===----------------------------------------------------------------------===// + + #include "sanitizer_common/sanitizer_platform.h" +-#if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD ++#if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD && !SANITIZER_NONGNU + + #include "msan.h" + #include "msan_report.h" +@@ -26,7 +26,6 @@ + #include + #include + #include +-#include + #include + #include + +@@ -259,4 +258,4 @@ void MsanTSDDtor(void *tsd) { + + } // namespace __msan + +-#endif // SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD ++#endif // SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD && !SANITIZER_NONGNU +diff --git a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +index 490a04b..6e860b4 100644 +--- a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc ++++ b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +@@ -103,7 +103,7 @@ static void ioctl_table_fill() { + _(SIOCGETVIFCNT, WRITE, struct_sioc_vif_req_sz); + #endif + +-#if SANITIZER_LINUX ++#if SANITIZER_LINUX && !SANITIZER_NONGNU + // Conflicting request ids. + // _(CDROMAUDIOBUFSIZ, NONE, 0); + // _(SNDCTL_TMR_CONTINUE, NONE, 0); +@@ -364,7 +364,7 @@ static void ioctl_table_fill() { + _(VT_WAITACTIVE, NONE, 0); + #endif + +-#if SANITIZER_LINUX && !SANITIZER_ANDROID ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU + // _(SIOCDEVPLIP, WRITE, struct_ifreq_sz); // the same as EQL_ENSLAVE + _(CYGETDEFTHRESH, WRITE, sizeof(int)); + _(CYGETDEFTIMEOUT, WRITE, sizeof(int)); +diff --git a/lib/sanitizer_common/sanitizer_common_syscalls.inc b/lib/sanitizer_common/sanitizer_common_syscalls.inc +index 31ff48c..6686db1 100644 +--- a/lib/sanitizer_common/sanitizer_common_syscalls.inc ++++ b/lib/sanitizer_common/sanitizer_common_syscalls.inc +@@ -2037,7 +2037,7 @@ POST_SYSCALL(setrlimit)(long res, long resource, void *rlim) { + } + } + +-#if !SANITIZER_ANDROID ++#if !SANITIZER_ANDROID && !SANITIZER_NONGNU + PRE_SYSCALL(prlimit64)(long pid, long resource, const void *new_rlim, + void *old_rlim) { + if (new_rlim) PRE_READ(new_rlim, struct_rlimit64_sz); +diff --git a/lib/sanitizer_common/sanitizer_linux_libcdep.cpp b/lib/sanitizer_common/sanitizer_linux_libcdep.cpp +index cd50371..69ae810 100644 +--- a/lib/sanitizer_common/sanitizer_linux_libcdep.cpp ++++ b/lib/sanitizer_common/sanitizer_linux_libcdep.cpp +@@ -14,7 +14,7 @@ + #include "sanitizer_platform.h" + + #if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD || \ +- SANITIZER_OPENBSD || SANITIZER_SOLARIS ++ SANITIZER_OPENBSD || SANITIZER_SOLARIS || SANITIZER_NONGNU + + #include "sanitizer_allocator_internal.h" + #include "sanitizer_atomic.h" +@@ -185,7 +185,7 @@ __attribute__((unused)) static bool GetLibcVersion(int *major, int *minor, + } + + #if !SANITIZER_FREEBSD && !SANITIZER_ANDROID && !SANITIZER_GO && \ +- !SANITIZER_NETBSD && !SANITIZER_OPENBSD && !SANITIZER_SOLARIS ++ !SANITIZER_NETBSD && !SANITIZER_OPENBSD && !SANITIZER_SOLARIS && !SANITIZER_NONGNU + static uptr g_tls_size; + + #ifdef __i386__ +@@ -258,12 +258,12 @@ void InitTlsSize() { + #else + void InitTlsSize() { } + #endif // !SANITIZER_FREEBSD && !SANITIZER_ANDROID && !SANITIZER_GO && +- // !SANITIZER_NETBSD && !SANITIZER_SOLARIS ++ // !SANITIZER_NETBSD && !SANITIZER_SOLARIS && !SANITIZER_NONGNU + + #if (defined(__x86_64__) || defined(__i386__) || defined(__mips__) || \ + defined(__aarch64__) || defined(__powerpc64__) || defined(__s390__) || \ + defined(__arm__)) && \ +- SANITIZER_LINUX && !SANITIZER_ANDROID ++ SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU + // sizeof(struct pthread) from glibc. + static atomic_uintptr_t thread_descriptor_size; + +@@ -428,7 +428,7 @@ int GetSizeFromHdr(struct dl_phdr_info *info, size_t size, void *data) { + + #if !SANITIZER_GO + static void GetTls(uptr *addr, uptr *size) { +-#if SANITIZER_LINUX && !SANITIZER_ANDROID ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU + # if defined(__x86_64__) || defined(__i386__) || defined(__s390__) + *addr = ThreadSelf(); + *size = GetTlsSize(); +@@ -472,7 +472,7 @@ static void GetTls(uptr *addr, uptr *size) { + #elif SANITIZER_OPENBSD + *addr = 0; + *size = 0; +-#elif SANITIZER_ANDROID ++#elif SANITIZER_ANDROID || SANITIZER_NONGNU + *addr = 0; + *size = 0; + #elif SANITIZER_SOLARIS +@@ -488,7 +488,7 @@ static void GetTls(uptr *addr, uptr *size) { + #if !SANITIZER_GO + uptr GetTlsSize() { + #if SANITIZER_FREEBSD || SANITIZER_ANDROID || SANITIZER_NETBSD || \ +- SANITIZER_OPENBSD || SANITIZER_SOLARIS ++ SANITIZER_OPENBSD || SANITIZER_SOLARIS || SANITIZER_NONGNU + uptr addr, size; + GetTls(&addr, &size); + return size; +diff --git a/lib/sanitizer_common/sanitizer_platform.h b/lib/sanitizer_common/sanitizer_platform.h +index b45c975..6825b5d 100644 +--- a/lib/sanitizer_common/sanitizer_platform.h ++++ b/lib/sanitizer_common/sanitizer_platform.h +@@ -213,6 +213,13 @@ + # define SANITIZER_MYRIAD2 0 + #endif + ++ ++#if defined(__linux__) && !defined(__GLIBC__) ++# define SANITIZER_NONGNU 1 ++#else ++# define SANITIZER_NONGNU 0 ++#endif ++ + // By default we allow to use SizeClassAllocator64 on 64-bit platform. + // But in some cases (e.g. AArch64's 39-bit address space) SizeClassAllocator64 + // does not work well and we need to fallback to SizeClassAllocator32. +diff --git a/lib/sanitizer_common/sanitizer_platform_interceptors.h b/lib/sanitizer_common/sanitizer_platform_interceptors.h +index 61a6b82..60e8e5d 100644 +--- a/lib/sanitizer_common/sanitizer_platform_interceptors.h ++++ b/lib/sanitizer_common/sanitizer_platform_interceptors.h +@@ -40,7 +40,7 @@ + # include "sanitizer_platform_limits_solaris.h" + #endif + +-#if SANITIZER_LINUX && !SANITIZER_ANDROID ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU + # define SI_LINUX_NOT_ANDROID 1 + #else + # define SI_LINUX_NOT_ANDROID 0 +diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp b/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp +index 9852e6b..3a31112 100644 +--- a/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp ++++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp +@@ -26,6 +26,10 @@ + // Must go after undef _FILE_OFFSET_BITS. + #include "sanitizer_glibc_version.h" + ++#ifdef SANITIZER_NONGNU ++#include ++#endif ++ + #include + #include + #include +@@ -58,7 +62,9 @@ + #endif + + #if !SANITIZER_ANDROID ++#if !SANITIZER_NONGNU + #include ++#endif + #include + #include + #include +@@ -111,12 +117,14 @@ typedef struct user_fpregs elf_fpregset_t; + + #if SANITIZER_LINUX && !SANITIZER_ANDROID + #include +-#include ++# if !SANITIZER_NONGNU ++# include ++# endif + #include +-#include +-#include +-#include +-#include ++#include ++#include ++#include ++#include + #if HAVE_RPC_XDR_H + # include + #endif +@@ -201,7 +209,9 @@ namespace __sanitizer { + #endif // SANITIZER_MAC && !SANITIZER_IOS + + #if !SANITIZER_ANDROID ++#if !SANITIZER_NONGNU + unsigned struct_fstab_sz = sizeof(struct fstab); ++#endif + unsigned struct_statfs_sz = sizeof(struct statfs); + unsigned struct_sockaddr_sz = sizeof(struct sockaddr); + unsigned ucontext_t_sz = sizeof(ucontext_t); +@@ -297,7 +307,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(ElfW(Phdr)); + unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); + #endif + +-#if SANITIZER_LINUX && !SANITIZER_ANDROID ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU + int glob_nomatch = GLOB_NOMATCH; + int glob_altdirfunc = GLOB_ALTDIRFUNC; + #endif +@@ -391,7 +401,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); + unsigned struct_termios_sz = sizeof(struct termios); + unsigned struct_winsize_sz = sizeof(struct winsize); + +-#if SANITIZER_LINUX ++#if SANITIZER_LINUX && !SANITIZER_NONGNU + unsigned struct_arpreq_sz = sizeof(struct arpreq); + unsigned struct_cdrom_msf_sz = sizeof(struct cdrom_msf); + unsigned struct_cdrom_multisession_sz = sizeof(struct cdrom_multisession); +@@ -441,7 +451,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); + unsigned struct_vt_mode_sz = sizeof(struct vt_mode); + #endif // SANITIZER_LINUX + +-#if SANITIZER_LINUX && !SANITIZER_ANDROID ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU + unsigned struct_ax25_parms_struct_sz = sizeof(struct ax25_parms_struct); + unsigned struct_cyclades_monitor_sz = sizeof(struct cyclades_monitor); + #if EV_VERSION > (0x010000) +@@ -808,7 +818,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); + unsigned IOCTL_VT_WAITACTIVE = VT_WAITACTIVE; + #endif // SANITIZER_LINUX + +-#if SANITIZER_LINUX && !SANITIZER_ANDROID ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU + unsigned IOCTL_CYGETDEFTHRESH = CYGETDEFTHRESH; + unsigned IOCTL_CYGETDEFTIMEOUT = CYGETDEFTIMEOUT; + unsigned IOCTL_CYGETMON = CYGETMON; +@@ -963,7 +973,7 @@ CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phdr); + CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phnum); + #endif // SANITIZER_LINUX || SANITIZER_FREEBSD + +-#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID ++#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU + CHECK_TYPE_SIZE(glob_t); + CHECK_SIZE_AND_OFFSET(glob_t, gl_pathc); + CHECK_SIZE_AND_OFFSET(glob_t, gl_pathv); +@@ -997,6 +1007,7 @@ CHECK_TYPE_SIZE(iovec); + CHECK_SIZE_AND_OFFSET(iovec, iov_base); + CHECK_SIZE_AND_OFFSET(iovec, iov_len); + ++#if !SANITIZER_NONGNU + CHECK_TYPE_SIZE(msghdr); + CHECK_SIZE_AND_OFFSET(msghdr, msg_name); + CHECK_SIZE_AND_OFFSET(msghdr, msg_namelen); +@@ -1010,6 +1021,7 @@ CHECK_TYPE_SIZE(cmsghdr); + CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_len); + CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_level); + CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_type); ++#endif + + #if SANITIZER_LINUX && (__ANDROID_API__ >= 21 || __GLIBC_PREREQ (2, 14)) + CHECK_TYPE_SIZE(mmsghdr); +@@ -1115,7 +1127,7 @@ CHECK_SIZE_AND_OFFSET(mntent, mnt_passno); + + CHECK_TYPE_SIZE(ether_addr); + +-#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID ++#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU + CHECK_TYPE_SIZE(ipc_perm); + # if SANITIZER_FREEBSD + CHECK_SIZE_AND_OFFSET(ipc_perm, key); +@@ -1179,7 +1191,7 @@ CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_dstaddr); + CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_data); + #endif + +-#if SANITIZER_LINUX ++#if SANITIZER_LINUX && !SANITIZER_NONGNU + COMPILER_CHECK(sizeof(__sanitizer_struct_mallinfo) == sizeof(struct mallinfo)); + #endif + +@@ -1229,7 +1241,7 @@ COMPILER_CHECK(__sanitizer_XDR_DECODE == XDR_DECODE); + COMPILER_CHECK(__sanitizer_XDR_FREE == XDR_FREE); + #endif + +-#if SANITIZER_LINUX && !SANITIZER_ANDROID ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU + COMPILER_CHECK(sizeof(__sanitizer_FILE) <= sizeof(FILE)); + CHECK_SIZE_AND_OFFSET(FILE, _flags); + CHECK_SIZE_AND_OFFSET(FILE, _IO_read_ptr); +@@ -1248,7 +1260,7 @@ CHECK_SIZE_AND_OFFSET(FILE, _chain); + CHECK_SIZE_AND_OFFSET(FILE, _fileno); + #endif + +-#if SANITIZER_LINUX && !SANITIZER_ANDROID ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU + COMPILER_CHECK(sizeof(__sanitizer__obstack_chunk) <= sizeof(_obstack_chunk)); + CHECK_SIZE_AND_OFFSET(_obstack_chunk, limit); + CHECK_SIZE_AND_OFFSET(_obstack_chunk, prev); +diff --git a/lib/tsan/rtl/tsan_platform_linux.cpp b/lib/tsan/rtl/tsan_platform_linux.cpp +index 33fa586..1f56556 100644 +--- a/lib/tsan/rtl/tsan_platform_linux.cpp ++++ b/lib/tsan/rtl/tsan_platform_linux.cpp +@@ -314,7 +314,7 @@ void InitializePlatform() { + // This is required to properly "close" the fds, because we do not see internal + // closes within glibc. The code is a pure hack. + int ExtractResolvFDs(void *state, int *fds, int nfd) { +-#if SANITIZER_LINUX && !SANITIZER_ANDROID ++#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU + int cnt = 0; + struct __res_state *statp = (struct __res_state*)state; + for (int i = 0; i < MAXNS && cnt < nfd; i++) { diff --git a/dockerfiles/patch/compiler-rt-02-ngtc-specific.patch b/dockerfiles/patch/compiler-rt-02-ngtc-specific.patch new file mode 100644 index 0000000..cda100a --- /dev/null +++ b/dockerfiles/patch/compiler-rt-02-ngtc-specific.patch @@ -0,0 +1,13 @@ +diff --git a/cmake/Modules/AddCompilerRT.cmake b/cmake/Modules/AddCompilerRT.cmake +index c464a2c..04e6f90 100644 +--- a/cmake/Modules/AddCompilerRT.cmake ++++ b/cmake/Modules/AddCompilerRT.cmake +@@ -600,6 +601,8 @@ macro(add_custom_libcxx name prefix) + -DLLVM_LIBRARY_OUTPUT_INTDIR=${prefix}/lib + -DCOMPILER_RT_LIBCXX_PATH=${COMPILER_RT_LIBCXX_PATH} + -DCOMPILER_RT_LIBCXXABI_PATH=${COMPILER_RT_LIBCXXABI_PATH} ++ -DLIBCXX_HAS_MUSL_LIBC=ON ++ -DLIBCXX_HAS_GCC_S_LIB=OFF + ${LIBCXX_CMAKE_ARGS} + INSTALL_COMMAND "" + STEP_TARGETS configure build diff --git a/dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch b/dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch new file mode 100644 index 0000000..aab6818 --- /dev/null +++ b/dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch @@ -0,0 +1,12 @@ +diff --git a/lib/scudo/CMakeLists.txt b/lib/scudo/CMakeLists.txt +index 9ee615c..5fcb27e 100644 +--- a/lib/scudo/CMakeLists.txt ++++ b/lib/scudo/CMakeLists.txt +@@ -8,6 +8,7 @@ list(APPEND SCUDO_CFLAGS -fbuiltin) + append_rtti_flag(OFF SCUDO_CFLAGS) + + set(SCUDO_MINIMAL_DYNAMIC_LIBS ${SANITIZER_COMMON_LINK_LIBS}) ++list(APPEND SCUDO_MINIMAL_DYNAMIC_LIBS -lexecinfo) + append_list_if(COMPILER_RT_HAS_LIBDL dl SCUDO_MINIMAL_DYNAMIC_LIBS) + append_list_if(COMPILER_RT_HAS_LIBRT rt SCUDO_MINIMAL_DYNAMIC_LIBS) + append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread SCUDO_MINIMAL_DYNAMIC_LIBS) diff --git a/dockerfiles/patch/libcxx-01-musl-hardfix.patch b/dockerfiles/patch/libcxx-01-musl-hardfix.patch new file mode 100644 index 0000000..0f9cae4 --- /dev/null +++ b/dockerfiles/patch/libcxx-01-musl-hardfix.patch @@ -0,0 +1,22 @@ +diff --git a/include/locale b/include/locale +index a86645d..2efcd82 100644 +--- a/include/locale ++++ b/include/locale +@@ -736,7 +736,7 @@ __num_get_signed_integral(const char* __a, const char* __a_end, + typename remove_reference::type __save_errno = errno; + errno = 0; + char *__p2; +- long long __ll = strtoll_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE); ++ long long __ll = strtoll(__a, &__p2, __base); + typename remove_reference::type __current_errno = errno; + if (__current_errno == 0) + errno = __save_errno; +@@ -776,7 +776,7 @@ __num_get_unsigned_integral(const char* __a, const char* __a_end, + typename remove_reference::type __save_errno = errno; + errno = 0; + char *__p2; +- unsigned long long __ll = strtoull_l(__a, &__p2, __base, _LIBCPP_GET_C_LOCALE); ++ unsigned long long __ll = strtoull(__a, &__p2, __base); + typename remove_reference::type __current_errno = errno; + if (__current_errno == 0) + errno = __save_errno; diff --git a/dockerfiles/patch/libcxx-02-enable-libgcc-link.patch b/dockerfiles/patch/libcxx-02-enable-libgcc-link.patch new file mode 100644 index 0000000..8500cbe --- /dev/null +++ b/dockerfiles/patch/libcxx-02-enable-libgcc-link.patch @@ -0,0 +1,13 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 21d0c92..3a137aa 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -446,7 +446,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LIBCXX_LIBRARY_DIR}) + # LIBCXX_LIBRARIES: libraries libc++ is linked to. + set(LIBCXX_COMPILE_FLAGS "") + set(LIBCXX_LINK_FLAGS "") +-set(LIBCXX_LIBRARIES "") ++set(LIBCXX_LIBRARIES "-lgcc") + + # Include macros for adding and removing libc++ flags. + include(HandleLibcxxFlags) diff --git a/dockerfiles/sync.sh b/dockerfiles/sync.sh new file mode 100755 index 0000000..c463188 --- /dev/null +++ b/dockerfiles/sync.sh @@ -0,0 +1,79 @@ +#!/bin/sh + +LLVMREPO='https://git.llvm.org/git' +REPOS='llvm clang lld libunwind compiler-rt libcxx libcxxabi' +ROOT=$(dirname $(readlink -f "$0")) + +clonerepo () { + echo -n "cloning $1... "; + + REPO="$LLVMREPO/$1/" + + if ! git clone --depth 1 $REPO &>/dev/null; then + echo fail + rm -rf $1 + exit 2 + else + echo success + fi +} + +pullrepo () { + echo -n "updating $1... " + + REPO="$LLVMREPO/$1/" + + if ! git -C $1 pull &>/dev/null; then + echo fail + rm -rf $1 + clonerepo $1 + else + echo success + fi +} + +if [ ! -d $ROOT/src ]; then + mkdir $ROOT/src || $(echo 'failed to create directory' && exit 1) +else + for REPO in $REPOS; do + PATCHES="$(ls -r -1 $ROOT/patch/$REPO-*.patch 2>/dev/null)" + NUMPATCHES="$(ls -r -1 $ROOT/patch/$REPO-*.patch 2>/dev/null | wc -l)" + NUMPATCH=0 + for PATCH in $PATCHES; do + NUMPATCH=$(($NUMPATCH+1)) + echo -n "unpatching $REPO ($NUMPATCH/$NUMPATCHES)... " + if ! patch -R -p1 --dry-run -s -f -d $ROOT/src/$REPO -i $PATCH >/dev/null; then + echo fail + else + patch -R -p1 -s -f -d $ROOT/src/$REPO -i $PATCH >/dev/null + echo success + fi + done + done +fi + +cd $ROOT/src || $(echo 'failed to change directory' && exit 1) + +for REPO in $REPOS; do + if [ -d $REPO ]; then + pullrepo $REPO + else + clonerepo $REPO + fi +done + +for REPO in $REPOS; do + PATCHES="$(ls -1 $ROOT/patch/$REPO-*.patch 2>/dev/null)" + NUMPATCHES="$(ls -1 $ROOT/patch/$REPO-*.patch 2>/dev/null | wc -l)" + NUMPATCH=0 + for PATCH in $PATCHES; do + NUMPATCH=$(($NUMPATCH+1)) + echo -n "patching $REPO ($NUMPATCH/$NUMPATCHES)... " + if ! patch -p1 --dry-run -s -f -d $ROOT/src/$REPO -i $PATCH >/dev/null; then + echo fail + else + patch -p1 -s -f -d $ROOT/src/$REPO -i $PATCH >/dev/null + echo success + fi + done +done From 1d1c28703ce9c62091dda6dd8240e80c1ec7bff4 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Sun, 22 Mar 2020 01:06:21 +0300 Subject: [PATCH 02/27] Dockerfile --- dockerfiles/{Docker.clang => Dockerfile.clang} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename dockerfiles/{Docker.clang => Dockerfile.clang} (100%) diff --git a/dockerfiles/Docker.clang b/dockerfiles/Dockerfile.clang similarity index 100% rename from dockerfiles/Docker.clang rename to dockerfiles/Dockerfile.clang From 484e98e86c65a373870b2523d1c0e9c779474d97 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Sun, 22 Mar 2020 01:07:30 +0300 Subject: [PATCH 03/27] typo --- dockerfiles/Dockerfile.clang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dockerfiles/Dockerfile.clang b/dockerfiles/Dockerfile.clang index 9d14775..3484e8a 100644 --- a/dockerfiles/Dockerfile.clang +++ b/dockerfiles/Dockerfile.clang @@ -3,7 +3,7 @@ FROM ubuntu:focal # install tools and dependencies RUN set -eux; \ apt update; \ - apt install linux-headers-$(uname -r) + apt install linux-headers-$(uname -r); \ apt install -y --no-install-recommends \ ca-certificates cmake file g++ git \ clang libclang-dev patch make curl ninja-build python mc; From 2d5bb7dd9bbdd410605aaff1d504a89fb419eb0f Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Sun, 22 Mar 2020 01:12:40 +0300 Subject: [PATCH 04/27] remove headers --- dockerfiles/Dockerfile.clang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dockerfiles/Dockerfile.clang b/dockerfiles/Dockerfile.clang index 3484e8a..a6a5a38 100644 --- a/dockerfiles/Dockerfile.clang +++ b/dockerfiles/Dockerfile.clang @@ -3,7 +3,7 @@ FROM ubuntu:focal # install tools and dependencies RUN set -eux; \ apt update; \ - apt install linux-headers-$(uname -r); \ + #apt install linux-headers-$(uname -r); \ apt install -y --no-install-recommends \ ca-certificates cmake file g++ git \ clang libclang-dev patch make curl ninja-build python mc; From bc555a7231f64140f3e8c9bf93cffb3b84c8bee2 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Sun, 22 Mar 2020 01:14:34 +0300 Subject: [PATCH 05/27] linux-headers-generic --- dockerfiles/Dockerfile.clang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dockerfiles/Dockerfile.clang b/dockerfiles/Dockerfile.clang index a6a5a38..5e0cd00 100644 --- a/dockerfiles/Dockerfile.clang +++ b/dockerfiles/Dockerfile.clang @@ -3,7 +3,7 @@ FROM ubuntu:focal # install tools and dependencies RUN set -eux; \ apt update; \ - #apt install linux-headers-$(uname -r); \ + apt install linux-headers-generic; \ apt install -y --no-install-recommends \ ca-certificates cmake file g++ git \ clang libclang-dev patch make curl ninja-build python mc; From cb8c2480cfd9a95492e9a565d115e4e28f4cddb1 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Sun, 22 Mar 2020 01:16:34 +0300 Subject: [PATCH 06/27] up --- dockerfiles/Dockerfile.clang | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dockerfiles/Dockerfile.clang b/dockerfiles/Dockerfile.clang index 5e0cd00..fc6d8e8 100644 --- a/dockerfiles/Dockerfile.clang +++ b/dockerfiles/Dockerfile.clang @@ -3,10 +3,9 @@ FROM ubuntu:focal # install tools and dependencies RUN set -eux; \ apt update; \ - apt install linux-headers-generic; \ apt install -y --no-install-recommends \ ca-certificates cmake file g++ git \ - clang libclang-dev patch make curl ninja-build python mc; + clang libclang-dev patch make curl ninja-build python mc linux-headers-generic; WORKDIR /builds RUN mkdir ngtc COPY sync.sh /builds/ngtc/ From fe0f351958fcd3a3ac89ba46b5270816643e3ef5 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Sun, 22 Mar 2020 01:17:53 +0300 Subject: [PATCH 07/27] python2 --- dockerfiles/Dockerfile.clang | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dockerfiles/Dockerfile.clang b/dockerfiles/Dockerfile.clang index fc6d8e8..a258f78 100644 --- a/dockerfiles/Dockerfile.clang +++ b/dockerfiles/Dockerfile.clang @@ -5,7 +5,7 @@ RUN set -eux; \ apt update; \ apt install -y --no-install-recommends \ ca-certificates cmake file g++ git \ - clang libclang-dev patch make curl ninja-build python mc linux-headers-generic; + clang libclang-dev patch make curl ninja-build python2 mc linux-headers-generic; WORKDIR /builds RUN mkdir ngtc COPY sync.sh /builds/ngtc/ From 2483b451e1328ae373e3ff53ca1b73e9384c8187 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Sun, 22 Mar 2020 01:23:19 +0300 Subject: [PATCH 08/27] copy --- dockerfiles/Dockerfile.clang | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dockerfiles/Dockerfile.clang b/dockerfiles/Dockerfile.clang index a258f78..a793b7e 100644 --- a/dockerfiles/Dockerfile.clang +++ b/dockerfiles/Dockerfile.clang @@ -8,10 +8,10 @@ RUN set -eux; \ clang libclang-dev patch make curl ninja-build python2 mc linux-headers-generic; WORKDIR /builds RUN mkdir ngtc -COPY sync.sh /builds/ngtc/ -COPY configure.sh /builds/ngtc/ -COPY build.sh /builds/ngtc/ -COPY install.sh /builds/ngtc/ +COPY dockerfiles/sync.sh /builds/ngtc/ +COPY dockerfiles/configure.sh /builds/ngtc/ +COPY dockerfiles/build.sh /builds/ngtc/ +COPY dockerfiles/install.sh /builds/ngtc/ RUN cd ngtc;\ ./sync.sh RUN cd ngtc;\ From ec35c7762d5e61ee3d458b1c7400733e95f3269c Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Sun, 22 Mar 2020 01:49:07 +0300 Subject: [PATCH 09/27] update links and sync --- dockerfiles/Dockerfile.clang | 2 +- dockerfiles/sync.sh | 34 +++------------------------------- 2 files changed, 4 insertions(+), 32 deletions(-) diff --git a/dockerfiles/Dockerfile.clang b/dockerfiles/Dockerfile.clang index a793b7e..c7ff20e 100644 --- a/dockerfiles/Dockerfile.clang +++ b/dockerfiles/Dockerfile.clang @@ -13,7 +13,7 @@ COPY dockerfiles/configure.sh /builds/ngtc/ COPY dockerfiles/build.sh /builds/ngtc/ COPY dockerfiles/install.sh /builds/ngtc/ RUN cd ngtc;\ - ./sync.sh + ./sync.sh release/9.x RUN cd ngtc;\ ./configure.sh RUN cd ngtc;\ diff --git a/dockerfiles/sync.sh b/dockerfiles/sync.sh index c463188..6ea3eb0 100755 --- a/dockerfiles/sync.sh +++ b/dockerfiles/sync.sh @@ -1,36 +1,15 @@ #!/bin/sh -LLVMREPO='https://git.llvm.org/git' +LLVMREPO='https://github.com/llvm/llvm-project.git' REPOS='llvm clang lld libunwind compiler-rt libcxx libcxxabi' ROOT=$(dirname $(readlink -f "$0")) -clonerepo () { - echo -n "cloning $1... "; +git clone --depth 1 --branch $1 https://github.com/llvm/llvm-project.git src - REPO="$LLVMREPO/$1/" +cd src/ - if ! git clone --depth 1 $REPO &>/dev/null; then - echo fail - rm -rf $1 - exit 2 - else - echo success - fi -} -pullrepo () { - echo -n "updating $1... " - REPO="$LLVMREPO/$1/" - - if ! git -C $1 pull &>/dev/null; then - echo fail - rm -rf $1 - clonerepo $1 - else - echo success - fi -} if [ ! -d $ROOT/src ]; then mkdir $ROOT/src || $(echo 'failed to create directory' && exit 1) @@ -54,13 +33,6 @@ fi cd $ROOT/src || $(echo 'failed to change directory' && exit 1) -for REPO in $REPOS; do - if [ -d $REPO ]; then - pullrepo $REPO - else - clonerepo $REPO - fi -done for REPO in $REPOS; do PATCHES="$(ls -1 $ROOT/patch/$REPO-*.patch 2>/dev/null)" From eb7419ac17e7aab36959f1649d46ea7f88b9b646 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Mon, 23 Mar 2020 23:33:50 +0300 Subject: [PATCH 10/27] build clang --- dockerfiles/Dockerfile.clang | 7 + dockerfiles/build.sh | 4 +- dockerfiles/configure.sh | 10 +- dockerfiles/install.sh | 8 +- .../compiler-rt-01-sanitizer-nongnu.patch | 268 ++++++++---------- .../patch/compiler-rt-02-ngtc-specific.patch | 10 +- ...piler-rt-03-link-against-libexecinfo.patch | 12 +- ...ompiler-rt-04-sanitizer-nongnu-linux.patch | 19 ++ .../patch/libcxx-01-musl-hardfix.patch | 8 +- .../patch/libcxx-02-enable-libgcc-link.patch | 16 +- 10 files changed, 186 insertions(+), 176 deletions(-) create mode 100644 dockerfiles/patch/compiler-rt-04-sanitizer-nongnu-linux.patch diff --git a/dockerfiles/Dockerfile.clang b/dockerfiles/Dockerfile.clang index c7ff20e..27a551a 100644 --- a/dockerfiles/Dockerfile.clang +++ b/dockerfiles/Dockerfile.clang @@ -7,6 +7,13 @@ RUN set -eux; \ ca-certificates cmake file g++ git \ clang libclang-dev patch make curl ninja-build python2 mc linux-headers-generic; WORKDIR /builds +RUN SCCACHE_LATEST_URL=`curl -sL https://api.github.com/repos/mozilla/sccache/releases/latest | jq -r '.assets[2].browser_download_url'`; \ + curl -L $SCCACHE_LATEST_URL | tar zxf - --overwrite --strip-components=1 -C /usr/bin ;\ + sccache --version +ENV CC="sccache /usr/bin/clang"\ + CXX="sccache /usr/bin/clang++"\ + SCCACHE_REDIS=redis://172.17.0.1/0 \ + SCCACHE_IDLE_TIMEOUT=0 RUN mkdir ngtc COPY dockerfiles/sync.sh /builds/ngtc/ COPY dockerfiles/configure.sh /builds/ngtc/ diff --git a/dockerfiles/build.sh b/dockerfiles/build.sh index 8a91406..7c9c48c 100755 --- a/dockerfiles/build.sh +++ b/dockerfiles/build.sh @@ -6,8 +6,8 @@ ARCH="$(uname -m)" TARGETS='X86' ROOT=$(dirname $(readlink -f "$0")) -PATH=/"$ARCH"-pc-linux-musl/bin:"$PATH" -LD_LIBRARY_PATH=/"$ARCH"-pc-linux-musl/lib +PATH=/"$ARCH"-unknown-linux-musl/bin:"$PATH" +LD_LIBRARY_PATH=/"$ARCH"-unknown-linux-musl/lib if [ ! -d $ROOT/src ]; then echo no sources found, run sync diff --git a/dockerfiles/configure.sh b/dockerfiles/configure.sh index dd44c62..06cb420 100755 --- a/dockerfiles/configure.sh +++ b/dockerfiles/configure.sh @@ -6,8 +6,8 @@ ARCH="$(uname -m)" TARGETS='X86' ROOT=$(dirname $(readlink -f "$0")) -PATH=/"$ARCH"-pc-linux-musl/bin:"$PATH" -LD_LIBRARY_PATH=/"$ARCH"-pc-linux-musl/lib +PATH=/"$ARCH"-unknown-linux-musl/bin:"$PATH" +LD_LIBRARY_PATH=/"$ARCH"-unknown-linux-musl/lib if [ ! -d $ROOT/src ]; then echo no sources found, run sync @@ -53,9 +53,9 @@ cmake \ -DCLANG_DEFAULT_CXX_STDLIB=libc++ \ -DCLANG_DEFAULT_LINKER=lld \ -DCLANG_DEFAULT_RTLIB=compiler-rt \ - -DLLVM_DEFAULT_TARGET_TRIPLE="$ARCH"-pc-linux-musl \ - -DDEFAULT_SYSROOT=/"$ARCH"-pc-linux-musl \ - -DCMAKE_INSTALL_PREFIX=/"$ARCH"-pc-linux-musl \ + -DLLVM_DEFAULT_TARGET_TRIPLE="$ARCH"-unknown-linux-musl \ + -DDEFAULT_SYSROOT=/"$ARCH"-unknown-linux-musl \ + -DCMAKE_INSTALL_PREFIX=/"$ARCH"-unknown-linux-musl \ -DCMAKE_BUILD_TYPE=Release \ -DLLVM_TARGET_ARCH="$ARCH" \ -DLLVM_TARGETS_TO_BUILD="$TARGETS" \ diff --git a/dockerfiles/install.sh b/dockerfiles/install.sh index c037d0b..33c58dd 100755 --- a/dockerfiles/install.sh +++ b/dockerfiles/install.sh @@ -6,8 +6,8 @@ ARCH="$(uname -m)" TARGETS='X86' ROOT=$(dirname $(readlink -f "$0")) -PATH=/"$ARCH"-pc-linux-musl/bin:"$PATH" -LD_LIBRARY_PATH=/"$ARCH"-pc-linux-musl/lib +PATH=/"$ARCH"-unknown-linux-musl/bin:"$PATH" +LD_LIBRARY_PATH=/"$ARCH"-unknown-linux-musl/lib if [ ! -d $ROOT/src ]; then echo no sources found, run sync @@ -40,7 +40,7 @@ cd $ROOT/build/llvm || $(echo 'failed to change directory' && exit 1) ninja install || exit 42 -cd /"$ARCH"-pc-linux-musl/bin || $(echo 'failed to change directory' && exit 1) +cd /"$ARCH"-unknown-linux-musl/bin || $(echo 'failed to change directory' && exit 1) ln -s llvm-ar ar ln -s llvm-ranlib ranlib ln -s llvm-objcopy objcopy @@ -51,4 +51,4 @@ ln -s clang cc ln -s clang++ c++ ln -s ld.lld ld cd / || $(echo 'failed to change directory' && exit 1) -tar cvfz "$ARCH"-pc-linux-musl.tar.gz "$ARCH"-pc-linux-musl || exit 46 +tar cvfz "$ARCH"-unknown-linux-musl.tar.gz "$ARCH"-unknown-linux-musl || exit 46 diff --git a/dockerfiles/patch/compiler-rt-01-sanitizer-nongnu.patch b/dockerfiles/patch/compiler-rt-01-sanitizer-nongnu.patch index 439873c..139a32f 100644 --- a/dockerfiles/patch/compiler-rt-01-sanitizer-nongnu.patch +++ b/dockerfiles/patch/compiler-rt-01-sanitizer-nongnu.patch @@ -1,20 +1,20 @@ -diff --git a/lib/asan/asan_linux.cpp b/lib/asan/asan_linux.cpp -index ce5e873..a68f3f4 100644 ---- a/lib/asan/asan_linux.cpp -+++ b/lib/asan/asan_linux.cpp +diff --git a/compiler-rt/lib/asan/asan_linux.cc b/compiler-rt/lib/asan/asan_linux.cc +index f91823289..f8c9421da 100644 +--- a/compiler-rt/lib/asan/asan_linux.cc ++++ b/compiler-rt/lib/asan/asan_linux.cc @@ -45,7 +45,7 @@ #include #endif - + -#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS -+#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS || SANITIZER_NONGNU ++#if SANITIZER_ANDROID || SANITIZER_FREEBSD || SANITIZER_SOLARIS || SANITIZER_NONGNU #include extern "C" void* _DYNAMIC; #elif SANITIZER_NETBSD @@ -138,7 +138,7 @@ void AsanApplyToGlobals(globals_op_fptr op, const void *needle) { UNIMPLEMENTED(); } - + -#if SANITIZER_ANDROID +#if SANITIZER_ANDROID || SANITIZER_NONGNU // FIXME: should we do anything for Android? @@ -26,44 +26,44 @@ index ce5e873..a68f3f4 100644 } -#endif // SANITIZER_ANDROID +#endif // SANITIZER_ANDROID || SANITIZER_NONGNU - + #if !SANITIZER_ANDROID void ReadContextStack(void *context, uptr *stack, uptr *ssize) { -diff --git a/lib/interception/interception_linux.cpp b/lib/interception/interception_linux.cpp -index 950cd51..8beffd2 100644 ---- a/lib/interception/interception_linux.cpp -+++ b/lib/interception/interception_linux.cpp -@@ -63,8 +63,8 @@ bool InterceptFunction(const char *name, uptr *ptr_to_real, uptr func, +diff --git a/compiler-rt/lib/interception/interception_linux.cc b/compiler-rt/lib/interception/interception_linux.cc +index d07f060b5..dee283cbf 100644 +--- a/compiler-rt/lib/interception/interception_linux.cc ++++ b/compiler-rt/lib/interception/interception_linux.cc +@@ -58,8 +58,8 @@ bool InterceptFunction(const char *name, uptr *ptr_to_real, uptr func, return addr && (func == wrapper); } - + -// Android and Solaris do not have dlvsym -#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD -+// Android, Solaris, OpenBSD and musl do not have dlvsym ++// Android, Solaris, OpenBSD and MUSL do not have dlvsym +#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD && !SANITIZER_NONGNU static void *GetFuncAddr(const char *name, const char *ver) { return dlvsym(RTLD_NEXT, name, ver); } -@@ -75,7 +75,7 @@ bool InterceptFunction(const char *name, const char *ver, uptr *ptr_to_real, +@@ -70,7 +70,7 @@ bool InterceptFunction(const char *name, const char *ver, uptr *ptr_to_real, *ptr_to_real = (uptr)addr; return addr && (func == wrapper); } -#endif // !SANITIZER_ANDROID +#endif // !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD && !SANITIZER_NONGNU - + } // namespace __interception - -diff --git a/lib/interception/interception_linux.h b/lib/interception/interception_linux.h -index e578da0..626f961 100644 ---- a/lib/interception/interception_linux.h -+++ b/lib/interception/interception_linux.h + +diff --git a/compiler-rt/lib/interception/interception_linux.h b/compiler-rt/lib/interception/interception_linux.h +index e578da0cf..01f919aea 100644 +--- a/compiler-rt/lib/interception/interception_linux.h ++++ b/compiler-rt/lib/interception/interception_linux.h @@ -35,8 +35,8 @@ bool InterceptFunction(const char *name, const char *ver, uptr *ptr_to_real, (::__interception::uptr) & (func), \ (::__interception::uptr) & WRAP(func)) - + -// Android, Solaris and OpenBSD do not have dlvsym -#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD -+// Android, Solaris, OpenBSD and musl do not have dlvsym ++// Android, Solaris, OpenBSD and MUSL do not have dlvsym +#if !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD && !SANITIZER_NONGNU #define INTERCEPT_FUNCTION_VER_LINUX_OR_FREEBSD(func, symver) \ ::__interception::InterceptFunction( \ @@ -74,34 +74,35 @@ index e578da0..626f961 100644 INTERCEPT_FUNCTION_LINUX_OR_FREEBSD(func) -#endif // !SANITIZER_ANDROID && !SANITIZER_SOLARIS +#endif // !SANITIZER_ANDROID && !SANITIZER_SOLARIS && !SANITIZER_OPENBSD && !SANITIZER_NONGNU - + #endif // INTERCEPTION_LINUX_H #endif // SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || -diff --git a/lib/msan/msan_interceptors.cpp b/lib/msan/msan_interceptors.cpp -index 1d9d9f7..45aeb98 100644 ---- a/lib/msan/msan_interceptors.cpp -+++ b/lib/msan/msan_interceptors.cpp -@@ -57,6 +57,9 @@ DECLARE_REAL(SIZE_T, strlen, const char *s) +diff --git a/compiler-rt/lib/msan/msan_interceptors.cc b/compiler-rt/lib/msan/msan_interceptors.cc +index b055bb749..0fc1f564e 100644 +--- a/compiler-rt/lib/msan/msan_interceptors.cc ++++ b/compiler-rt/lib/msan/msan_interceptors.cc +@@ -57,7 +57,9 @@ DECLARE_REAL(SIZE_T, strlen, const char *s) DECLARE_REAL(SIZE_T, strnlen, const char *s, SIZE_T maxlen) DECLARE_REAL(void *, memcpy, void *dest, const void *src, uptr n) DECLARE_REAL(void *, memset, void *dest, int c, uptr n) +- +#if SANITIZER_NONGNU +DECLARE_REAL(int, shmctl, int shmid, int cmd, void *buf) +#endif - // True if this is a nested interceptor. static THREADLOCAL int in_interceptor_scope; -diff --git a/lib/msan/msan_linux.cpp b/lib/msan/msan_linux.cpp -index d61e9de..0978751 100644 ---- a/lib/msan/msan_linux.cpp -+++ b/lib/msan/msan_linux.cpp + +diff --git a/compiler-rt/lib/msan/msan_linux.cc b/compiler-rt/lib/msan/msan_linux.cc +index 056783088..e06171803 100644 +--- a/compiler-rt/lib/msan/msan_linux.cc ++++ b/compiler-rt/lib/msan/msan_linux.cc @@ -12,7 +12,7 @@ //===----------------------------------------------------------------------===// - + #include "sanitizer_common/sanitizer_platform.h" -#if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD +#if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD && !SANITIZER_NONGNU - + #include "msan.h" #include "msan_report.h" @@ -26,7 +26,6 @@ @@ -111,21 +112,21 @@ index d61e9de..0978751 100644 -#include #include #include - + @@ -259,4 +258,4 @@ void MsanTSDDtor(void *tsd) { - + } // namespace __msan - + -#endif // SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD +#endif // SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD && !SANITIZER_NONGNU -diff --git a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc -index 490a04b..6e860b4 100644 ---- a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc -+++ b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +index 490a04b21..6e860b4ff 100644 +--- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc @@ -103,7 +103,7 @@ static void ioctl_table_fill() { _(SIOCGETVIFCNT, WRITE, struct_sioc_vif_req_sz); #endif - + -#if SANITIZER_LINUX +#if SANITIZER_LINUX && !SANITIZER_NONGNU // Conflicting request ids. @@ -134,64 +135,58 @@ index 490a04b..6e860b4 100644 @@ -364,7 +364,7 @@ static void ioctl_table_fill() { _(VT_WAITACTIVE, NONE, 0); #endif - + -#if SANITIZER_LINUX && !SANITIZER_ANDROID +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU // _(SIOCDEVPLIP, WRITE, struct_ifreq_sz); // the same as EQL_ENSLAVE _(CYGETDEFTHRESH, WRITE, sizeof(int)); _(CYGETDEFTIMEOUT, WRITE, sizeof(int)); -diff --git a/lib/sanitizer_common/sanitizer_common_syscalls.inc b/lib/sanitizer_common/sanitizer_common_syscalls.inc -index 31ff48c..6686db1 100644 ---- a/lib/sanitizer_common/sanitizer_common_syscalls.inc -+++ b/lib/sanitizer_common/sanitizer_common_syscalls.inc +diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc +index 00bb2aeef..2c6aba5c6 100644 +--- a/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc @@ -2037,7 +2037,7 @@ POST_SYSCALL(setrlimit)(long res, long resource, void *rlim) { } } - + -#if !SANITIZER_ANDROID +#if !SANITIZER_ANDROID && !SANITIZER_NONGNU PRE_SYSCALL(prlimit64)(long pid, long resource, const void *new_rlim, void *old_rlim) { if (new_rlim) PRE_READ(new_rlim, struct_rlimit64_sz); -diff --git a/lib/sanitizer_common/sanitizer_linux_libcdep.cpp b/lib/sanitizer_common/sanitizer_linux_libcdep.cpp -index cd50371..69ae810 100644 ---- a/lib/sanitizer_common/sanitizer_linux_libcdep.cpp -+++ b/lib/sanitizer_common/sanitizer_linux_libcdep.cpp +diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc b/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc +index 0608898a1..7eae4db62 100644 +--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc @@ -14,7 +14,7 @@ #include "sanitizer_platform.h" - + #if SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD || \ - SANITIZER_OPENBSD || SANITIZER_SOLARIS + SANITIZER_OPENBSD || SANITIZER_SOLARIS || SANITIZER_NONGNU - + #include "sanitizer_allocator_internal.h" #include "sanitizer_atomic.h" -@@ -185,7 +185,7 @@ __attribute__((unused)) static bool GetLibcVersion(int *major, int *minor, +@@ -184,7 +184,7 @@ __attribute__((unused)) static bool GetLibcVersion(int *major, int *minor, } - + #if !SANITIZER_FREEBSD && !SANITIZER_ANDROID && !SANITIZER_GO && \ - !SANITIZER_NETBSD && !SANITIZER_OPENBSD && !SANITIZER_SOLARIS + !SANITIZER_NETBSD && !SANITIZER_OPENBSD && !SANITIZER_SOLARIS && !SANITIZER_NONGNU static uptr g_tls_size; - + #ifdef __i386__ -@@ -258,12 +258,12 @@ void InitTlsSize() { +@@ -261,7 +261,7 @@ void InitTlsSize() { #else void InitTlsSize() { } #endif // !SANITIZER_FREEBSD && !SANITIZER_ANDROID && !SANITIZER_GO && - // !SANITIZER_NETBSD && !SANITIZER_SOLARIS + // !SANITIZER_NETBSD && !SANITIZER_SOLARIS && !SANITIZER_NONGNU - + #if (defined(__x86_64__) || defined(__i386__) || defined(__mips__) || \ defined(__aarch64__) || defined(__powerpc64__) || defined(__s390__) || \ - defined(__arm__)) && \ -- SANITIZER_LINUX && !SANITIZER_ANDROID -+ SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU - // sizeof(struct pthread) from glibc. - static atomic_uintptr_t thread_descriptor_size; - -@@ -428,7 +428,7 @@ int GetSizeFromHdr(struct dl_phdr_info *info, size_t size, void *data) { - +@@ -431,7 +431,7 @@ int GetSizeFromHdr(struct dl_phdr_info *info, size_t size, void *data) { + #if !SANITIZER_GO static void GetTls(uptr *addr, uptr *size) { -#if SANITIZER_LINUX && !SANITIZER_ANDROID @@ -199,7 +194,7 @@ index cd50371..69ae810 100644 # if defined(__x86_64__) || defined(__i386__) || defined(__s390__) *addr = ThreadSelf(); *size = GetTlsSize(); -@@ -472,7 +472,7 @@ static void GetTls(uptr *addr, uptr *size) { +@@ -475,7 +475,7 @@ static void GetTls(uptr *addr, uptr *size) { #elif SANITIZER_OPENBSD *addr = 0; *size = 0; @@ -208,7 +203,7 @@ index cd50371..69ae810 100644 *addr = 0; *size = 0; #elif SANITIZER_SOLARIS -@@ -488,7 +488,7 @@ static void GetTls(uptr *addr, uptr *size) { +@@ -491,7 +491,7 @@ static void GetTls(uptr *addr, uptr *size) { #if !SANITIZER_GO uptr GetTlsSize() { #if SANITIZER_FREEBSD || SANITIZER_ANDROID || SANITIZER_NETBSD || \ @@ -217,15 +212,14 @@ index cd50371..69ae810 100644 uptr addr, size; GetTls(&addr, &size); return size; -diff --git a/lib/sanitizer_common/sanitizer_platform.h b/lib/sanitizer_common/sanitizer_platform.h -index b45c975..6825b5d 100644 ---- a/lib/sanitizer_common/sanitizer_platform.h -+++ b/lib/sanitizer_common/sanitizer_platform.h -@@ -213,6 +213,13 @@ +diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h +index b45c97535..673b60d23 100644 +--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h +@@ -213,6 +213,12 @@ # define SANITIZER_MYRIAD2 0 #endif - -+ + +#if defined(__linux__) && !defined(__GLIBC__) +# define SANITIZER_NONGNU 1 +#else @@ -235,37 +229,36 @@ index b45c975..6825b5d 100644 // By default we allow to use SizeClassAllocator64 on 64-bit platform. // But in some cases (e.g. AArch64's 39-bit address space) SizeClassAllocator64 // does not work well and we need to fallback to SizeClassAllocator32. -diff --git a/lib/sanitizer_common/sanitizer_platform_interceptors.h b/lib/sanitizer_common/sanitizer_platform_interceptors.h -index 61a6b82..60e8e5d 100644 ---- a/lib/sanitizer_common/sanitizer_platform_interceptors.h -+++ b/lib/sanitizer_common/sanitizer_platform_interceptors.h -@@ -40,7 +40,7 @@ +diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h +index 817d24b34..1320a8b1a 100644 +--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h +@@ -39,7 +39,7 @@ # include "sanitizer_platform_limits_solaris.h" #endif - + -#if SANITIZER_LINUX && !SANITIZER_ANDROID +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU # define SI_LINUX_NOT_ANDROID 1 #else # define SI_LINUX_NOT_ANDROID 0 -diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp b/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp -index 9852e6b..3a31112 100644 ---- a/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp -+++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.cpp -@@ -26,6 +26,10 @@ - // Must go after undef _FILE_OFFSET_BITS. - #include "sanitizer_glibc_version.h" - +diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc +index b7fa6e8f7..d273d3736 100644 +--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc +@@ -22,6 +22,9 @@ + #ifdef _FILE_OFFSET_BITS + #undef _FILE_OFFSET_BITS + #endif +#ifdef SANITIZER_NONGNU +#include +#endif -+ #include #include #include -@@ -58,7 +62,9 @@ +@@ -54,7 +57,9 @@ #endif - + #if !SANITIZER_ANDROID +#if !SANITIZER_NONGNU #include @@ -273,8 +266,8 @@ index 9852e6b..3a31112 100644 #include #include #include -@@ -111,12 +117,14 @@ typedef struct user_fpregs elf_fpregset_t; - +@@ -107,7 +112,9 @@ typedef struct user_fpregs elf_fpregset_t; + #if SANITIZER_LINUX && !SANITIZER_ANDROID #include -#include @@ -282,20 +275,11 @@ index 9852e6b..3a31112 100644 +# include +# endif #include --#include --#include --#include --#include -+#include -+#include -+#include -+#include - #if HAVE_RPC_XDR_H - # include - #endif -@@ -201,7 +209,9 @@ namespace __sanitizer { + #include + #include +@@ -196,7 +203,9 @@ namespace __sanitizer { #endif // SANITIZER_MAC && !SANITIZER_IOS - + #if !SANITIZER_ANDROID +#if !SANITIZER_NONGNU unsigned struct_fstab_sz = sizeof(struct fstab); @@ -303,107 +287,107 @@ index 9852e6b..3a31112 100644 unsigned struct_statfs_sz = sizeof(struct statfs); unsigned struct_sockaddr_sz = sizeof(struct sockaddr); unsigned ucontext_t_sz = sizeof(ucontext_t); -@@ -297,7 +307,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(ElfW(Phdr)); +@@ -291,7 +300,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(ElfW(Phdr)); unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); #endif - + -#if SANITIZER_LINUX && !SANITIZER_ANDROID +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU int glob_nomatch = GLOB_NOMATCH; int glob_altdirfunc = GLOB_ALTDIRFUNC; #endif -@@ -391,7 +401,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); +@@ -385,7 +394,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); unsigned struct_termios_sz = sizeof(struct termios); unsigned struct_winsize_sz = sizeof(struct winsize); - + -#if SANITIZER_LINUX -+#if SANITIZER_LINUX && !SANITIZER_NONGNU ++#if SANITIZER_LINUX && !SANITIZER_NONGNU unsigned struct_arpreq_sz = sizeof(struct arpreq); unsigned struct_cdrom_msf_sz = sizeof(struct cdrom_msf); unsigned struct_cdrom_multisession_sz = sizeof(struct cdrom_multisession); -@@ -441,7 +451,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); +@@ -435,7 +444,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); unsigned struct_vt_mode_sz = sizeof(struct vt_mode); #endif // SANITIZER_LINUX - + -#if SANITIZER_LINUX && !SANITIZER_ANDROID +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU unsigned struct_ax25_parms_struct_sz = sizeof(struct ax25_parms_struct); unsigned struct_cyclades_monitor_sz = sizeof(struct cyclades_monitor); #if EV_VERSION > (0x010000) -@@ -808,7 +818,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); +@@ -802,7 +811,7 @@ unsigned struct_ElfW_Phdr_sz = sizeof(Elf_Phdr); unsigned IOCTL_VT_WAITACTIVE = VT_WAITACTIVE; #endif // SANITIZER_LINUX - + -#if SANITIZER_LINUX && !SANITIZER_ANDROID +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU unsigned IOCTL_CYGETDEFTHRESH = CYGETDEFTHRESH; unsigned IOCTL_CYGETDEFTIMEOUT = CYGETDEFTIMEOUT; unsigned IOCTL_CYGETMON = CYGETMON; -@@ -963,7 +973,7 @@ CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phdr); +@@ -957,7 +966,7 @@ CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phdr); CHECK_SIZE_AND_OFFSET(dl_phdr_info, dlpi_phnum); #endif // SANITIZER_LINUX || SANITIZER_FREEBSD - + -#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID +#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU CHECK_TYPE_SIZE(glob_t); CHECK_SIZE_AND_OFFSET(glob_t, gl_pathc); CHECK_SIZE_AND_OFFSET(glob_t, gl_pathv); -@@ -997,6 +1007,7 @@ CHECK_TYPE_SIZE(iovec); +@@ -991,6 +1000,7 @@ CHECK_TYPE_SIZE(iovec); CHECK_SIZE_AND_OFFSET(iovec, iov_base); CHECK_SIZE_AND_OFFSET(iovec, iov_len); - + +#if !SANITIZER_NONGNU CHECK_TYPE_SIZE(msghdr); CHECK_SIZE_AND_OFFSET(msghdr, msg_name); CHECK_SIZE_AND_OFFSET(msghdr, msg_namelen); -@@ -1010,6 +1021,7 @@ CHECK_TYPE_SIZE(cmsghdr); +@@ -1004,6 +1014,7 @@ CHECK_TYPE_SIZE(cmsghdr); CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_len); CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_level); CHECK_SIZE_AND_OFFSET(cmsghdr, cmsg_type); +#endif - - #if SANITIZER_LINUX && (__ANDROID_API__ >= 21 || __GLIBC_PREREQ (2, 14)) - CHECK_TYPE_SIZE(mmsghdr); -@@ -1115,7 +1127,7 @@ CHECK_SIZE_AND_OFFSET(mntent, mnt_passno); - + + #ifndef __GLIBC_PREREQ + #define __GLIBC_PREREQ(x, y) 0 +@@ -1113,7 +1124,7 @@ CHECK_SIZE_AND_OFFSET(mntent, mnt_passno); + CHECK_TYPE_SIZE(ether_addr); - + -#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID +#if (SANITIZER_LINUX || SANITIZER_FREEBSD) && !SANITIZER_ANDROID && !SANITIZER_NONGNU CHECK_TYPE_SIZE(ipc_perm); # if SANITIZER_FREEBSD CHECK_SIZE_AND_OFFSET(ipc_perm, key); -@@ -1179,7 +1191,7 @@ CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_dstaddr); +@@ -1174,7 +1185,7 @@ CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_dstaddr); CHECK_SIZE_AND_OFFSET(ifaddrs, ifa_data); #endif - + -#if SANITIZER_LINUX +#if SANITIZER_LINUX && !SANITIZER_NONGNU COMPILER_CHECK(sizeof(__sanitizer_struct_mallinfo) == sizeof(struct mallinfo)); #endif - -@@ -1229,7 +1241,7 @@ COMPILER_CHECK(__sanitizer_XDR_DECODE == XDR_DECODE); + +@@ -1224,7 +1235,7 @@ COMPILER_CHECK(__sanitizer_XDR_DECODE == XDR_DECODE); COMPILER_CHECK(__sanitizer_XDR_FREE == XDR_FREE); #endif - + -#if SANITIZER_LINUX && !SANITIZER_ANDROID +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU COMPILER_CHECK(sizeof(__sanitizer_FILE) <= sizeof(FILE)); CHECK_SIZE_AND_OFFSET(FILE, _flags); CHECK_SIZE_AND_OFFSET(FILE, _IO_read_ptr); -@@ -1248,7 +1260,7 @@ CHECK_SIZE_AND_OFFSET(FILE, _chain); +@@ -1243,7 +1254,7 @@ CHECK_SIZE_AND_OFFSET(FILE, _chain); CHECK_SIZE_AND_OFFSET(FILE, _fileno); #endif - + -#if SANITIZER_LINUX && !SANITIZER_ANDROID +#if SANITIZER_LINUX && !SANITIZER_ANDROID && !SANITIZER_NONGNU COMPILER_CHECK(sizeof(__sanitizer__obstack_chunk) <= sizeof(_obstack_chunk)); CHECK_SIZE_AND_OFFSET(_obstack_chunk, limit); CHECK_SIZE_AND_OFFSET(_obstack_chunk, prev); -diff --git a/lib/tsan/rtl/tsan_platform_linux.cpp b/lib/tsan/rtl/tsan_platform_linux.cpp -index 33fa586..1f56556 100644 ---- a/lib/tsan/rtl/tsan_platform_linux.cpp -+++ b/lib/tsan/rtl/tsan_platform_linux.cpp +diff --git a/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc b/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc +index ec8606f65..e4e676e46 100644 +--- a/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc ++++ b/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc @@ -314,7 +314,7 @@ void InitializePlatform() { // This is required to properly "close" the fds, because we do not see internal // closes within glibc. The code is a pure hack. diff --git a/dockerfiles/patch/compiler-rt-02-ngtc-specific.patch b/dockerfiles/patch/compiler-rt-02-ngtc-specific.patch index cda100a..42304d9 100644 --- a/dockerfiles/patch/compiler-rt-02-ngtc-specific.patch +++ b/dockerfiles/patch/compiler-rt-02-ngtc-specific.patch @@ -1,8 +1,8 @@ -diff --git a/cmake/Modules/AddCompilerRT.cmake b/cmake/Modules/AddCompilerRT.cmake -index c464a2c..04e6f90 100644 ---- a/cmake/Modules/AddCompilerRT.cmake -+++ b/cmake/Modules/AddCompilerRT.cmake -@@ -600,6 +601,8 @@ macro(add_custom_libcxx name prefix) +diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake b/compiler-rt/cmake/Modules/AddCompilerRT.cmake +index f7ee932f2..de9159c49 100644 +--- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake ++++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake +@@ -610,6 +610,8 @@ macro(add_custom_libcxx name prefix) -DLLVM_LIBRARY_OUTPUT_INTDIR=${prefix}/lib -DCOMPILER_RT_LIBCXX_PATH=${COMPILER_RT_LIBCXX_PATH} -DCOMPILER_RT_LIBCXXABI_PATH=${COMPILER_RT_LIBCXXABI_PATH} diff --git a/dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch b/dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch index aab6818..e60bb48 100644 --- a/dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch +++ b/dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch @@ -1,12 +1,12 @@ -diff --git a/lib/scudo/CMakeLists.txt b/lib/scudo/CMakeLists.txt -index 9ee615c..5fcb27e 100644 ---- a/lib/scudo/CMakeLists.txt -+++ b/lib/scudo/CMakeLists.txt +diff --git a/compiler-rt/lib/scudo/CMakeLists.txt b/compiler-rt/lib/scudo/CMakeLists.txt +index 2a560b8fc..c657679bb 100644 +--- a/compiler-rt/lib/scudo/CMakeLists.txt ++++ b/compiler-rt/lib/scudo/CMakeLists.txt @@ -8,6 +8,7 @@ list(APPEND SCUDO_CFLAGS -fbuiltin) append_rtti_flag(OFF SCUDO_CFLAGS) - + set(SCUDO_MINIMAL_DYNAMIC_LIBS ${SANITIZER_COMMON_LINK_LIBS}) -+list(APPEND SCUDO_MINIMAL_DYNAMIC_LIBS -lexecinfo) +++list(APPEND SCUDO_MINIMAL_DYNAMIC_LIBS -lexecinfo) append_list_if(COMPILER_RT_HAS_LIBDL dl SCUDO_MINIMAL_DYNAMIC_LIBS) append_list_if(COMPILER_RT_HAS_LIBRT rt SCUDO_MINIMAL_DYNAMIC_LIBS) append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread SCUDO_MINIMAL_DYNAMIC_LIBS) diff --git a/dockerfiles/patch/compiler-rt-04-sanitizer-nongnu-linux.patch b/dockerfiles/patch/compiler-rt-04-sanitizer-nongnu-linux.patch new file mode 100644 index 0000000..5644833 --- /dev/null +++ b/dockerfiles/patch/compiler-rt-04-sanitizer-nongnu-linux.patch @@ -0,0 +1,19 @@ +diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc +index d273d3736..f772e8754 100644 +--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc ++++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc +@@ -116,10 +116,10 @@ typedef struct user_fpregs elf_fpregset_t; + # include + # endif + #include +-#include +-#include +-#include +-#include ++#include ++#include ++#include ++#include + #if HAVE_RPC_XDR_H + # include + #endif diff --git a/dockerfiles/patch/libcxx-01-musl-hardfix.patch b/dockerfiles/patch/libcxx-01-musl-hardfix.patch index 0f9cae4..c8e1b83 100644 --- a/dockerfiles/patch/libcxx-01-musl-hardfix.patch +++ b/dockerfiles/patch/libcxx-01-musl-hardfix.patch @@ -1,7 +1,7 @@ -diff --git a/include/locale b/include/locale -index a86645d..2efcd82 100644 ---- a/include/locale -+++ b/include/locale +diff --git a/libcxx/include/locale b/libcxx/include/locale +index 3fe443002..390fd898a 100644 +--- a/libcxx/include/locale ++++ b/libcxx/include/locale @@ -736,7 +736,7 @@ __num_get_signed_integral(const char* __a, const char* __a_end, typename remove_reference::type __save_errno = errno; errno = 0; diff --git a/dockerfiles/patch/libcxx-02-enable-libgcc-link.patch b/dockerfiles/patch/libcxx-02-enable-libgcc-link.patch index 8500cbe..e949741 100644 --- a/dockerfiles/patch/libcxx-02-enable-libgcc-link.patch +++ b/dockerfiles/patch/libcxx-02-enable-libgcc-link.patch @@ -1,13 +1,13 @@ -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 21d0c92..3a137aa 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -446,7 +446,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LIBCXX_LIBRARY_DIR}) - # LIBCXX_LIBRARIES: libraries libc++ is linked to. +diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt +index ec1869ddc..d64def6c2 100644 +--- a/libcxx/CMakeLists.txt ++++ b/libcxx/CMakeLists.txt +@@ -449,7 +449,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LIBCXX_LIBRARY_DIR}) + # These libraries are exposed in the linker script. set(LIBCXX_COMPILE_FLAGS "") set(LIBCXX_LINK_FLAGS "") -set(LIBCXX_LIBRARIES "") +set(LIBCXX_LIBRARIES "-lgcc") - + set(LIBCXX_INTERFACE_LIBRARIES "") + # Include macros for adding and removing libc++ flags. - include(HandleLibcxxFlags) From 605695db87297f2f679a4d1b28ff03f54263eacc Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Mon, 23 Mar 2020 23:55:17 +0300 Subject: [PATCH 11/27] actions build clang --- .github/workflows/build-clang-toolchain.yml | 23 ++++++ dockerfiles/Dockerfile.clang | 43 +++++------ dockerfiles/configure.sh | 2 + .../compiler-rt-01-sanitizer-nongnu.patch | 72 +++++++++---------- .../patch/compiler-rt-02-ngtc-specific.patch | 6 +- ...piler-rt-03-link-against-libexecinfo.patch | 6 +- ...ompiler-rt-04-sanitizer-nongnu-linux.patch | 6 +- .../patch/libcxx-01-musl-hardfix.patch | 6 +- .../patch/libcxx-02-enable-libgcc-link.patch | 6 +- 9 files changed, 95 insertions(+), 75 deletions(-) create mode 100644 .github/workflows/build-clang-toolchain.yml diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml new file mode 100644 index 0000000..2fce7ce --- /dev/null +++ b/.github/workflows/build-clang-toolchain.yml @@ -0,0 +1,23 @@ +name: Build Clang + +on: + push: + branches: [ master ] + pull_request: + +jobs: + + build: + + runs-on: ubuntu-latest + steps: + - name: Checkout sources + uses: actions/checkout@v2 + - name: Build Clang MUSL toolchain + run: | + docker run generalbeck/docker-cross-rust:alpine-sccache /bin/sh -c \ + 'git clone https://github.com/General-Beck/docker-cross-rust.git && \ + cd docker-cross-rust\ && git checkout ngtc && cd dockerfiles && \ + sync.sh && configure.sh && build.sh && install.sh' \ + ls -a + diff --git a/dockerfiles/Dockerfile.clang b/dockerfiles/Dockerfile.clang index 27a551a..5c4ecd6 100644 --- a/dockerfiles/Dockerfile.clang +++ b/dockerfiles/Dockerfile.clang @@ -1,29 +1,24 @@ -FROM ubuntu:focal +FROM alpine:latest + +RUN apk add --no-cache \ + clang-dev \ + clang-static \ + cmake \ + g++ \ + git \ + libexecinfo-dev \ + linux-headers \ + make \ + ninja \ + patch \ + python \ + curl \ + jq \ + mc + -# install tools and dependencies -RUN set -eux; \ - apt update; \ - apt install -y --no-install-recommends \ - ca-certificates cmake file g++ git \ - clang libclang-dev patch make curl ninja-build python2 mc linux-headers-generic; -WORKDIR /builds RUN SCCACHE_LATEST_URL=`curl -sL https://api.github.com/repos/mozilla/sccache/releases/latest | jq -r '.assets[2].browser_download_url'`; \ curl -L $SCCACHE_LATEST_URL | tar zxf - --overwrite --strip-components=1 -C /usr/bin ;\ sccache --version -ENV CC="sccache /usr/bin/clang"\ - CXX="sccache /usr/bin/clang++"\ - SCCACHE_REDIS=redis://172.17.0.1/0 \ +ENV SCCACHE_REDIS=redis://172.17.0.1/0 \ SCCACHE_IDLE_TIMEOUT=0 -RUN mkdir ngtc -COPY dockerfiles/sync.sh /builds/ngtc/ -COPY dockerfiles/configure.sh /builds/ngtc/ -COPY dockerfiles/build.sh /builds/ngtc/ -COPY dockerfiles/install.sh /builds/ngtc/ -RUN cd ngtc;\ - ./sync.sh release/9.x -RUN cd ngtc;\ - ./configure.sh -RUN cd ngtc;\ - ./build.sh -RUN cd ngtc;\ - ./install.sh diff --git a/dockerfiles/configure.sh b/dockerfiles/configure.sh index 06cb420..80026d4 100755 --- a/dockerfiles/configure.sh +++ b/dockerfiles/configure.sh @@ -41,6 +41,8 @@ cd $ROOT/build/llvm || $(echo 'failed to change directory' && exit 1) cmake \ -DCMAKE_C_COMPILER=clang \ -DCMAKE_CXX_COMPILER=clang++ \ + -DCMAKE_C_COMPILER_LAUNCHER=sccache \ + -DCMAKE_CXX_COMPILER_LAUNCHER=sccache \ -DLIBCXXABI_LIBCXX_PATH=$ROOT/src/libcxx \ -DLIBCXXABI_LIBCXX_INCLUDES=$ROOT/src/libcxx/include \ -DLIBCXXABI_ENABLE_STATIC_UNWINDER=ON \ diff --git a/dockerfiles/patch/compiler-rt-01-sanitizer-nongnu.patch b/dockerfiles/patch/compiler-rt-01-sanitizer-nongnu.patch index 139a32f..4c97262 100644 --- a/dockerfiles/patch/compiler-rt-01-sanitizer-nongnu.patch +++ b/dockerfiles/patch/compiler-rt-01-sanitizer-nongnu.patch @@ -1,7 +1,7 @@ -diff --git a/compiler-rt/lib/asan/asan_linux.cc b/compiler-rt/lib/asan/asan_linux.cc +diff --git a/lib/asan/asan_linux.cc b/lib/asan/asan_linux.cc index f91823289..f8c9421da 100644 ---- a/compiler-rt/lib/asan/asan_linux.cc -+++ b/compiler-rt/lib/asan/asan_linux.cc +--- a/lib/asan/asan_linux.cc ++++ b/lib/asan/asan_linux.cc @@ -45,7 +45,7 @@ #include #endif @@ -29,10 +29,10 @@ index f91823289..f8c9421da 100644 #if !SANITIZER_ANDROID void ReadContextStack(void *context, uptr *stack, uptr *ssize) { -diff --git a/compiler-rt/lib/interception/interception_linux.cc b/compiler-rt/lib/interception/interception_linux.cc +diff --git a/lib/interception/interception_linux.cc b/lib/interception/interception_linux.cc index d07f060b5..dee283cbf 100644 ---- a/compiler-rt/lib/interception/interception_linux.cc -+++ b/compiler-rt/lib/interception/interception_linux.cc +--- a/lib/interception/interception_linux.cc ++++ b/lib/interception/interception_linux.cc @@ -58,8 +58,8 @@ bool InterceptFunction(const char *name, uptr *ptr_to_real, uptr func, return addr && (func == wrapper); } @@ -53,10 +53,10 @@ index d07f060b5..dee283cbf 100644 } // namespace __interception -diff --git a/compiler-rt/lib/interception/interception_linux.h b/compiler-rt/lib/interception/interception_linux.h +diff --git a/lib/interception/interception_linux.h b/lib/interception/interception_linux.h index e578da0cf..01f919aea 100644 ---- a/compiler-rt/lib/interception/interception_linux.h -+++ b/compiler-rt/lib/interception/interception_linux.h +--- a/lib/interception/interception_linux.h ++++ b/lib/interception/interception_linux.h @@ -35,8 +35,8 @@ bool InterceptFunction(const char *name, const char *ver, uptr *ptr_to_real, (::__interception::uptr) & (func), \ (::__interception::uptr) & WRAP(func)) @@ -77,10 +77,10 @@ index e578da0cf..01f919aea 100644 #endif // INTERCEPTION_LINUX_H #endif // SANITIZER_LINUX || SANITIZER_FREEBSD || SANITIZER_NETBSD || -diff --git a/compiler-rt/lib/msan/msan_interceptors.cc b/compiler-rt/lib/msan/msan_interceptors.cc +diff --git a/lib/msan/msan_interceptors.cc b/lib/msan/msan_interceptors.cc index b055bb749..0fc1f564e 100644 ---- a/compiler-rt/lib/msan/msan_interceptors.cc -+++ b/compiler-rt/lib/msan/msan_interceptors.cc +--- a/lib/msan/msan_interceptors.cc ++++ b/lib/msan/msan_interceptors.cc @@ -57,7 +57,9 @@ DECLARE_REAL(SIZE_T, strlen, const char *s) DECLARE_REAL(SIZE_T, strnlen, const char *s, SIZE_T maxlen) DECLARE_REAL(void *, memcpy, void *dest, const void *src, uptr n) @@ -92,10 +92,10 @@ index b055bb749..0fc1f564e 100644 // True if this is a nested interceptor. static THREADLOCAL int in_interceptor_scope; -diff --git a/compiler-rt/lib/msan/msan_linux.cc b/compiler-rt/lib/msan/msan_linux.cc +diff --git a/lib/msan/msan_linux.cc b/lib/msan/msan_linux.cc index 056783088..e06171803 100644 ---- a/compiler-rt/lib/msan/msan_linux.cc -+++ b/compiler-rt/lib/msan/msan_linux.cc +--- a/lib/msan/msan_linux.cc ++++ b/lib/msan/msan_linux.cc @@ -12,7 +12,7 @@ //===----------------------------------------------------------------------===// @@ -119,10 +119,10 @@ index 056783088..e06171803 100644 -#endif // SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD +#endif // SANITIZER_FREEBSD || SANITIZER_LINUX || SANITIZER_NETBSD && !SANITIZER_NONGNU -diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +diff --git a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc index 490a04b21..6e860b4ff 100644 ---- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc -+++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +--- a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc ++++ b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc @@ -103,7 +103,7 @@ static void ioctl_table_fill() { _(SIOCGETVIFCNT, WRITE, struct_sioc_vif_req_sz); #endif @@ -141,10 +141,10 @@ index 490a04b21..6e860b4ff 100644 // _(SIOCDEVPLIP, WRITE, struct_ifreq_sz); // the same as EQL_ENSLAVE _(CYGETDEFTHRESH, WRITE, sizeof(int)); _(CYGETDEFTIMEOUT, WRITE, sizeof(int)); -diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc +diff --git a/lib/sanitizer_common/sanitizer_common_syscalls.inc b/lib/sanitizer_common/sanitizer_common_syscalls.inc index 00bb2aeef..2c6aba5c6 100644 ---- a/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc -+++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_syscalls.inc +--- a/lib/sanitizer_common/sanitizer_common_syscalls.inc ++++ b/lib/sanitizer_common/sanitizer_common_syscalls.inc @@ -2037,7 +2037,7 @@ POST_SYSCALL(setrlimit)(long res, long resource, void *rlim) { } } @@ -154,10 +154,10 @@ index 00bb2aeef..2c6aba5c6 100644 PRE_SYSCALL(prlimit64)(long pid, long resource, const void *new_rlim, void *old_rlim) { if (new_rlim) PRE_READ(new_rlim, struct_rlimit64_sz); -diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc b/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc +diff --git a/lib/sanitizer_common/sanitizer_linux_libcdep.cc b/lib/sanitizer_common/sanitizer_linux_libcdep.cc index 0608898a1..7eae4db62 100644 ---- a/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc -+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc +--- a/lib/sanitizer_common/sanitizer_linux_libcdep.cc ++++ b/lib/sanitizer_common/sanitizer_linux_libcdep.cc @@ -14,7 +14,7 @@ #include "sanitizer_platform.h" @@ -212,10 +212,10 @@ index 0608898a1..7eae4db62 100644 uptr addr, size; GetTls(&addr, &size); return size; -diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h +diff --git a/lib/sanitizer_common/sanitizer_platform.h b/lib/sanitizer_common/sanitizer_platform.h index b45c97535..673b60d23 100644 ---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h -+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h +--- a/lib/sanitizer_common/sanitizer_platform.h ++++ b/lib/sanitizer_common/sanitizer_platform.h @@ -213,6 +213,12 @@ # define SANITIZER_MYRIAD2 0 #endif @@ -229,10 +229,10 @@ index b45c97535..673b60d23 100644 // By default we allow to use SizeClassAllocator64 on 64-bit platform. // But in some cases (e.g. AArch64's 39-bit address space) SizeClassAllocator64 // does not work well and we need to fallback to SizeClassAllocator32. -diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h +diff --git a/lib/sanitizer_common/sanitizer_platform_interceptors.h b/lib/sanitizer_common/sanitizer_platform_interceptors.h index 817d24b34..1320a8b1a 100644 ---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h -+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h +--- a/lib/sanitizer_common/sanitizer_platform_interceptors.h ++++ b/lib/sanitizer_common/sanitizer_platform_interceptors.h @@ -39,7 +39,7 @@ # include "sanitizer_platform_limits_solaris.h" #endif @@ -242,10 +242,10 @@ index 817d24b34..1320a8b1a 100644 # define SI_LINUX_NOT_ANDROID 1 #else # define SI_LINUX_NOT_ANDROID 0 -diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc +diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc index b7fa6e8f7..d273d3736 100644 ---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc -+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc +--- a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc ++++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc @@ -22,6 +22,9 @@ #ifdef _FILE_OFFSET_BITS #undef _FILE_OFFSET_BITS @@ -384,10 +384,10 @@ index b7fa6e8f7..d273d3736 100644 COMPILER_CHECK(sizeof(__sanitizer__obstack_chunk) <= sizeof(_obstack_chunk)); CHECK_SIZE_AND_OFFSET(_obstack_chunk, limit); CHECK_SIZE_AND_OFFSET(_obstack_chunk, prev); -diff --git a/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc b/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc +diff --git a/lib/tsan/rtl/tsan_platform_linux.cc b/lib/tsan/rtl/tsan_platform_linux.cc index ec8606f65..e4e676e46 100644 ---- a/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc -+++ b/compiler-rt/lib/tsan/rtl/tsan_platform_linux.cc +--- a/lib/tsan/rtl/tsan_platform_linux.cc ++++ b/lib/tsan/rtl/tsan_platform_linux.cc @@ -314,7 +314,7 @@ void InitializePlatform() { // This is required to properly "close" the fds, because we do not see internal // closes within glibc. The code is a pure hack. diff --git a/dockerfiles/patch/compiler-rt-02-ngtc-specific.patch b/dockerfiles/patch/compiler-rt-02-ngtc-specific.patch index 42304d9..2499529 100644 --- a/dockerfiles/patch/compiler-rt-02-ngtc-specific.patch +++ b/dockerfiles/patch/compiler-rt-02-ngtc-specific.patch @@ -1,7 +1,7 @@ -diff --git a/compiler-rt/cmake/Modules/AddCompilerRT.cmake b/compiler-rt/cmake/Modules/AddCompilerRT.cmake +diff --git a/cmake/Modules/AddCompilerRT.cmake b/cmake/Modules/AddCompilerRT.cmake index f7ee932f2..de9159c49 100644 ---- a/compiler-rt/cmake/Modules/AddCompilerRT.cmake -+++ b/compiler-rt/cmake/Modules/AddCompilerRT.cmake +--- a/cmake/Modules/AddCompilerRT.cmake ++++ b/cmake/Modules/AddCompilerRT.cmake @@ -610,6 +610,8 @@ macro(add_custom_libcxx name prefix) -DLLVM_LIBRARY_OUTPUT_INTDIR=${prefix}/lib -DCOMPILER_RT_LIBCXX_PATH=${COMPILER_RT_LIBCXX_PATH} diff --git a/dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch b/dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch index e60bb48..33059a3 100644 --- a/dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch +++ b/dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch @@ -1,7 +1,7 @@ -diff --git a/compiler-rt/lib/scudo/CMakeLists.txt b/compiler-rt/lib/scudo/CMakeLists.txt +diff --git a/lib/scudo/CMakeLists.txt b/lib/scudo/CMakeLists.txt index 2a560b8fc..c657679bb 100644 ---- a/compiler-rt/lib/scudo/CMakeLists.txt -+++ b/compiler-rt/lib/scudo/CMakeLists.txt +--- a/lib/scudo/CMakeLists.txt ++++ b/lib/scudo/CMakeLists.txt @@ -8,6 +8,7 @@ list(APPEND SCUDO_CFLAGS -fbuiltin) append_rtti_flag(OFF SCUDO_CFLAGS) diff --git a/dockerfiles/patch/compiler-rt-04-sanitizer-nongnu-linux.patch b/dockerfiles/patch/compiler-rt-04-sanitizer-nongnu-linux.patch index 5644833..04461ec 100644 --- a/dockerfiles/patch/compiler-rt-04-sanitizer-nongnu-linux.patch +++ b/dockerfiles/patch/compiler-rt-04-sanitizer-nongnu-linux.patch @@ -1,7 +1,7 @@ -diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc +diff --git a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc index d273d3736..f772e8754 100644 ---- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc -+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.cc +--- a/lib/sanitizer_common/sanitizer_platform_limits_posix.cc ++++ b/lib/sanitizer_common/sanitizer_platform_limits_posix.cc @@ -116,10 +116,10 @@ typedef struct user_fpregs elf_fpregset_t; # include # endif diff --git a/dockerfiles/patch/libcxx-01-musl-hardfix.patch b/dockerfiles/patch/libcxx-01-musl-hardfix.patch index c8e1b83..ba3e23f 100644 --- a/dockerfiles/patch/libcxx-01-musl-hardfix.patch +++ b/dockerfiles/patch/libcxx-01-musl-hardfix.patch @@ -1,7 +1,7 @@ -diff --git a/libcxx/include/locale b/libcxx/include/locale +diff --git a/include/locale b/include/locale index 3fe443002..390fd898a 100644 ---- a/libcxx/include/locale -+++ b/libcxx/include/locale +--- a/include/locale ++++ b/include/locale @@ -736,7 +736,7 @@ __num_get_signed_integral(const char* __a, const char* __a_end, typename remove_reference::type __save_errno = errno; errno = 0; diff --git a/dockerfiles/patch/libcxx-02-enable-libgcc-link.patch b/dockerfiles/patch/libcxx-02-enable-libgcc-link.patch index e949741..bc13348 100644 --- a/dockerfiles/patch/libcxx-02-enable-libgcc-link.patch +++ b/dockerfiles/patch/libcxx-02-enable-libgcc-link.patch @@ -1,7 +1,7 @@ -diff --git a/libcxx/CMakeLists.txt b/libcxx/CMakeLists.txt +diff --git a/CMakeLists.txt b/CMakeLists.txt index ec1869ddc..d64def6c2 100644 ---- a/libcxx/CMakeLists.txt -+++ b/libcxx/CMakeLists.txt +--- a/CMakeLists.txt ++++ b/CMakeLists.txt @@ -449,7 +449,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${LIBCXX_LIBRARY_DIR}) # These libraries are exposed in the linker script. set(LIBCXX_COMPILE_FLAGS "") From 258d7f7767e888233d8ceaa48d1039bfbff49684 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Mon, 23 Mar 2020 23:58:29 +0300 Subject: [PATCH 12/27] fix path --- .github/workflows/build-clang-toolchain.yml | 7 ++----- .github/workflows/dockerimage.yml | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml index 2fce7ce..357ff4c 100644 --- a/.github/workflows/build-clang-toolchain.yml +++ b/.github/workflows/build-clang-toolchain.yml @@ -11,13 +11,10 @@ jobs: runs-on: ubuntu-latest steps: - - name: Checkout sources - uses: actions/checkout@v2 - name: Build Clang MUSL toolchain run: | docker run generalbeck/docker-cross-rust:alpine-sccache /bin/sh -c \ - 'git clone https://github.com/General-Beck/docker-cross-rust.git && \ - cd docker-cross-rust\ && git checkout ngtc && cd dockerfiles && \ + 'git clone https://github.com/General-Beck/docker-cross-rust.git clang&& \ + cd clang && git checkout ngtc && cd dockerfiles && \ sync.sh && configure.sh && build.sh && install.sh' \ ls -a - diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index fbc4358..173d8a7 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -4,7 +4,7 @@ on: push: branches: [ master ] pull_request: - + branches: [ master ] jobs: build: From 35f3b4431a46be9d2b20f6fbaa5d72578398cc2d Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Tue, 24 Mar 2020 00:03:20 +0300 Subject: [PATCH 13/27] ls --- .github/workflows/build-clang-toolchain.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml index 357ff4c..91e1479 100644 --- a/.github/workflows/build-clang-toolchain.yml +++ b/.github/workflows/build-clang-toolchain.yml @@ -15,6 +15,6 @@ jobs: run: | docker run generalbeck/docker-cross-rust:alpine-sccache /bin/sh -c \ 'git clone https://github.com/General-Beck/docker-cross-rust.git clang&& \ - cd clang && git checkout ngtc && cd dockerfiles && \ + cd clang && git checkout ngtc && cd dockerfiles && ls -a && \ sync.sh && configure.sh && build.sh && install.sh' \ ls -a From 70fa0bd2e3160692056c8a801fba8368e6da11e9 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Tue, 24 Mar 2020 00:09:06 +0300 Subject: [PATCH 14/27] sh --- .github/workflows/build-clang-toolchain.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml index 91e1479..c3decd8 100644 --- a/.github/workflows/build-clang-toolchain.yml +++ b/.github/workflows/build-clang-toolchain.yml @@ -16,5 +16,5 @@ jobs: docker run generalbeck/docker-cross-rust:alpine-sccache /bin/sh -c \ 'git clone https://github.com/General-Beck/docker-cross-rust.git clang&& \ cd clang && git checkout ngtc && cd dockerfiles && ls -a && \ - sync.sh && configure.sh && build.sh && install.sh' \ + sh sync.sh && sh configure.sh && sh build.sh && sh install.sh' \ ls -a From 052ae53bda98a1861d5e2bd43fef1c879da3a52d Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Tue, 24 Mar 2020 00:15:53 +0300 Subject: [PATCH 15/27] release 9.x --- .github/workflows/build-clang-toolchain.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml index c3decd8..845523d 100644 --- a/.github/workflows/build-clang-toolchain.yml +++ b/.github/workflows/build-clang-toolchain.yml @@ -16,5 +16,5 @@ jobs: docker run generalbeck/docker-cross-rust:alpine-sccache /bin/sh -c \ 'git clone https://github.com/General-Beck/docker-cross-rust.git clang&& \ cd clang && git checkout ngtc && cd dockerfiles && ls -a && \ - sh sync.sh && sh configure.sh && sh build.sh && sh install.sh' \ + sh sync.sh release/9.x && sh configure.sh && sh build.sh && sh install.sh' \ ls -a From 1da581109d09c0085e08dee0eb42f8d8d7880b58 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Tue, 24 Mar 2020 00:24:56 +0300 Subject: [PATCH 16/27] container --- .github/workflows/build-clang-toolchain.yml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml index 845523d..9bac072 100644 --- a/.github/workflows/build-clang-toolchain.yml +++ b/.github/workflows/build-clang-toolchain.yml @@ -10,11 +10,16 @@ jobs: build: runs-on: ubuntu-latest + container: generalbeck/docker-cross-rust:alpine-sccache steps: + - name: Checkout sources + uses: actions/checkout@v2 - name: Build Clang MUSL toolchain run: | - docker run generalbeck/docker-cross-rust:alpine-sccache /bin/sh -c \ - 'git clone https://github.com/General-Beck/docker-cross-rust.git clang&& \ - cd clang && git checkout ngtc && cd dockerfiles && ls -a && \ - sh sync.sh release/9.x && sh configure.sh && sh build.sh && sh install.sh' \ + cd dockerfilesls -a + sync.sh release/9.x + configure.sh + build.sh + install.sh ls -a + shell: sh From aad4da0b0fe92450f5b3d5dfbbfb38477bbecdd7 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Tue, 24 Mar 2020 00:26:20 +0300 Subject: [PATCH 17/27] typo --- .github/workflows/build-clang-toolchain.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml index 9bac072..3f51c98 100644 --- a/.github/workflows/build-clang-toolchain.yml +++ b/.github/workflows/build-clang-toolchain.yml @@ -16,7 +16,8 @@ jobs: uses: actions/checkout@v2 - name: Build Clang MUSL toolchain run: | - cd dockerfilesls -a + cd dockerfiles + ls -a sync.sh release/9.x configure.sh build.sh From 6467b111176fa7394c17193cc44f5d211edb98d5 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Tue, 24 Mar 2020 00:28:27 +0300 Subject: [PATCH 18/27] sh --- .github/workflows/build-clang-toolchain.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml index 3f51c98..0d74e12 100644 --- a/.github/workflows/build-clang-toolchain.yml +++ b/.github/workflows/build-clang-toolchain.yml @@ -18,9 +18,9 @@ jobs: run: | cd dockerfiles ls -a - sync.sh release/9.x - configure.sh - build.sh - install.sh + sh sync.sh release/9.x + sh configure.sh + sh build.sh + sh install.sh ls -a shell: sh From 6c108b7ad9704caeee7a04571bb4c7a8e91949f8 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Tue, 24 Mar 2020 00:44:12 +0300 Subject: [PATCH 19/27] fix patch --- dockerfiles/Dockerfile.clang | 2 +- dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dockerfiles/Dockerfile.clang b/dockerfiles/Dockerfile.clang index 5c4ecd6..b699d45 100644 --- a/dockerfiles/Dockerfile.clang +++ b/dockerfiles/Dockerfile.clang @@ -1,4 +1,4 @@ -FROM alpine:latest +FROM alpine:edge RUN apk add --no-cache \ clang-dev \ diff --git a/dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch b/dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch index 33059a3..c6323a8 100644 --- a/dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch +++ b/dockerfiles/patch/compiler-rt-03-link-against-libexecinfo.patch @@ -6,7 +6,7 @@ index 2a560b8fc..c657679bb 100644 append_rtti_flag(OFF SCUDO_CFLAGS) set(SCUDO_MINIMAL_DYNAMIC_LIBS ${SANITIZER_COMMON_LINK_LIBS}) -++list(APPEND SCUDO_MINIMAL_DYNAMIC_LIBS -lexecinfo) ++list(APPEND SCUDO_MINIMAL_DYNAMIC_LIBS -lexecinfo) append_list_if(COMPILER_RT_HAS_LIBDL dl SCUDO_MINIMAL_DYNAMIC_LIBS) append_list_if(COMPILER_RT_HAS_LIBRT rt SCUDO_MINIMAL_DYNAMIC_LIBS) append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread SCUDO_MINIMAL_DYNAMIC_LIBS) From b21b7a003d7d00e3c5b054190de08ddf2ef88b37 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Tue, 24 Mar 2020 11:09:03 +0300 Subject: [PATCH 20/27] upload artifact --- .github/workflows/build-clang-toolchain.yml | 5 +++++ dockerfiles/install.sh | 2 ++ 2 files changed, 7 insertions(+) diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml index 0d74e12..44a70e5 100644 --- a/.github/workflows/build-clang-toolchain.yml +++ b/.github/workflows/build-clang-toolchain.yml @@ -24,3 +24,8 @@ jobs: sh install.sh ls -a shell: sh + - name: Upload artifact's + uses: actions/upload-artifact@v1 + with: + name: x86_64-unknown-linux-musl + path: artifacts/ diff --git a/dockerfiles/install.sh b/dockerfiles/install.sh index 33c58dd..46107d5 100755 --- a/dockerfiles/install.sh +++ b/dockerfiles/install.sh @@ -52,3 +52,5 @@ ln -s clang++ c++ ln -s ld.lld ld cd / || $(echo 'failed to change directory' && exit 1) tar cvfz "$ARCH"-unknown-linux-musl.tar.gz "$ARCH"-unknown-linux-musl || exit 46 +mkdir -p /artifact || $(echo 'failed to change directory' && exit 1) +mv -v "$ARCH"-unknown-linux-musl.tar.gz /artifact From 80588a6ee0e75245a2d2881ef41418931cfda713 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Tue, 24 Mar 2020 14:48:52 +0300 Subject: [PATCH 21/27] fix path to artifact --- .github/workflows/build-clang-toolchain.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml index 44a70e5..99fd9f3 100644 --- a/.github/workflows/build-clang-toolchain.yml +++ b/.github/workflows/build-clang-toolchain.yml @@ -28,4 +28,4 @@ jobs: uses: actions/upload-artifact@v1 with: name: x86_64-unknown-linux-musl - path: artifacts/ + path: /artifact/ From c9618dbdf4fe6901160709a908eb434f2cf43888 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Tue, 24 Mar 2020 18:42:36 +0300 Subject: [PATCH 22/27] .zip --- .github/workflows/build-clang-toolchain.yml | 4 ++-- dockerfiles/install.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml index 99fd9f3..ea7fc3c 100644 --- a/.github/workflows/build-clang-toolchain.yml +++ b/.github/workflows/build-clang-toolchain.yml @@ -27,5 +27,5 @@ jobs: - name: Upload artifact's uses: actions/upload-artifact@v1 with: - name: x86_64-unknown-linux-musl - path: /artifact/ + name: x86_64-unknown-linux-musl.zip + path: artifact/ diff --git a/dockerfiles/install.sh b/dockerfiles/install.sh index 46107d5..0f25cfa 100755 --- a/dockerfiles/install.sh +++ b/dockerfiles/install.sh @@ -52,5 +52,5 @@ ln -s clang++ c++ ln -s ld.lld ld cd / || $(echo 'failed to change directory' && exit 1) tar cvfz "$ARCH"-unknown-linux-musl.tar.gz "$ARCH"-unknown-linux-musl || exit 46 -mkdir -p /artifact || $(echo 'failed to change directory' && exit 1) -mv -v "$ARCH"-unknown-linux-musl.tar.gz /artifact +mkdir -p artifact || $(echo 'failed to change directory' && exit 1) +mv -v "$ARCH"-unknown-linux-musl.tar.gz artifact/ From 156a8100b02be349efdbac973a33ba0f992280aa Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Tue, 24 Mar 2020 21:49:04 +0300 Subject: [PATCH 23/27] self-hosted --- .github/workflows/build-clang-toolchain.yml | 2 +- dockerfiles/install.sh | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml index ea7fc3c..11b7ec2 100644 --- a/.github/workflows/build-clang-toolchain.yml +++ b/.github/workflows/build-clang-toolchain.yml @@ -9,7 +9,7 @@ jobs: build: - runs-on: ubuntu-latest + runs-on: self-hosted container: generalbeck/docker-cross-rust:alpine-sccache steps: - name: Checkout sources diff --git a/dockerfiles/install.sh b/dockerfiles/install.sh index 0f25cfa..2ea8708 100755 --- a/dockerfiles/install.sh +++ b/dockerfiles/install.sh @@ -52,5 +52,5 @@ ln -s clang++ c++ ln -s ld.lld ld cd / || $(echo 'failed to change directory' && exit 1) tar cvfz "$ARCH"-unknown-linux-musl.tar.gz "$ARCH"-unknown-linux-musl || exit 46 -mkdir -p artifact || $(echo 'failed to change directory' && exit 1) -mv -v "$ARCH"-unknown-linux-musl.tar.gz artifact/ +mkdir -p $ROOT/artifact || $(echo 'failed to change directory' && exit 1) +mv -v "$ARCH"-unknown-linux-musl.tar.gz $ROOT/artifact/ From 8bef7e0703194834b81fe110c192d95a95186b74 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Tue, 24 Mar 2020 22:00:55 +0300 Subject: [PATCH 24/27] update yml --- .github/workflows/build-clang-toolchain.yml | 2 +- .github/workflows/dockerimage.yml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml index 11b7ec2..2c5dba8 100644 --- a/.github/workflows/build-clang-toolchain.yml +++ b/.github/workflows/build-clang-toolchain.yml @@ -7,7 +7,7 @@ on: jobs: - build: + build-clang-musl-toolchain: runs-on: self-hosted container: generalbeck/docker-cross-rust:alpine-sccache diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 173d8a7..49f990e 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -7,18 +7,18 @@ on: branches: [ master ] jobs: - build: + build-x86_64-unknown-linux-musl: - runs-on: ubuntu-latest + runs-on: self-hosted steps: - name: Checkout sources uses: actions/checkout@v2 - name: Build the Docker image - run: docker build . --file dockerfiles/Dockerfile.clang --tag generalbeck/docker-cross-rust:clang + run: docker build . --file dockerfiles/Dockerfile.x86_64-unknown-linux-musl --tag docker.pkg.github.com/general-beck/docker-cross-rust/docker-cross-rust:x86_64-unknown-linux-musl + - name: Docker login + run: docker login docker.pkg.github.com -u General-Beck -p ${{ secrets.GITHUB_TOKEN }} - name: Push the Docker image - run: | - docker login -u ${{ secrets.REGISTRY_USERNAME }} -p ${{ secrets.REGISTRY_PASSWORD }} - docker push generalbeck/docker-cross-rust:clang + run: docker push docker.pkg.github.com/general-beck/docker-cross-rust/docker-cross-rust:x86_64-unknown-linux-musl - name: Docker logout run: docker logout From 9878dc86b3339ab0ae71199d69a100db54f7e41a Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Tue, 24 Mar 2020 23:17:09 +0300 Subject: [PATCH 25/27] up --- .github/workflows/build-clang-toolchain.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml index 2c5dba8..81a72ad 100644 --- a/.github/workflows/build-clang-toolchain.yml +++ b/.github/workflows/build-clang-toolchain.yml @@ -28,4 +28,4 @@ jobs: uses: actions/upload-artifact@v1 with: name: x86_64-unknown-linux-musl.zip - path: artifact/ + path: dockerfiles/artifact/ From d7f537cb3cb2147a082f1bc7ede7d39e1c84481b Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Tue, 24 Mar 2020 23:50:46 +0300 Subject: [PATCH 26/27] ubuntu-latest --- .github/workflows/build-clang-toolchain.yml | 2 +- .github/workflows/dockerimage.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml index 81a72ad..da23173 100644 --- a/.github/workflows/build-clang-toolchain.yml +++ b/.github/workflows/build-clang-toolchain.yml @@ -3,7 +3,7 @@ name: Build Clang on: push: branches: [ master ] - pull_request: + #pull_request: jobs: diff --git a/.github/workflows/dockerimage.yml b/.github/workflows/dockerimage.yml index 49f990e..af23b83 100644 --- a/.github/workflows/dockerimage.yml +++ b/.github/workflows/dockerimage.yml @@ -9,7 +9,7 @@ jobs: build-x86_64-unknown-linux-musl: - runs-on: self-hosted + runs-on: ubuntu-latest steps: - name: Checkout sources From 222632be9fb10db57bda705844dfacf967c24443 Mon Sep 17 00:00:00 2001 From: "Denis S. Soldatov aka General-Beck" Date: Mon, 30 Mar 2020 21:01:19 +0300 Subject: [PATCH 27/27] release all clang targets --- .github/workflows/build-clang-toolchain.yml | 7 + .../Dockerfile.aarch64-unknown-linux-musl | 126 +++++++++++++++++ .../Dockerfile.armv7-unknown-linux-musleabihf | 125 +++++++++++++++++ .../Dockerfile.x86_64-unknown-linux-musl | 130 ++++++++---------- dockerfiles/build.sh | 2 +- .../config/aarch64-unknown-linux-musl.config | 5 + .../armv7-unknown-linux-musleabihf.config | 4 + .../config/x86_64-unknown-linux-musl.config | 5 + dockerfiles/configure.sh | 2 +- dockerfiles/install.sh | 3 +- 10 files changed, 334 insertions(+), 75 deletions(-) create mode 100644 dockerfiles/Dockerfile.aarch64-unknown-linux-musl create mode 100644 dockerfiles/Dockerfile.armv7-unknown-linux-musleabihf create mode 100644 dockerfiles/config/aarch64-unknown-linux-musl.config create mode 100644 dockerfiles/config/armv7-unknown-linux-musleabihf.config create mode 100644 dockerfiles/config/x86_64-unknown-linux-musl.config diff --git a/.github/workflows/build-clang-toolchain.yml b/.github/workflows/build-clang-toolchain.yml index da23173..39a21ad 100644 --- a/.github/workflows/build-clang-toolchain.yml +++ b/.github/workflows/build-clang-toolchain.yml @@ -29,3 +29,10 @@ jobs: with: name: x86_64-unknown-linux-musl.zip path: dockerfiles/artifact/ + - name: Upload release + uses: yakuhzi/action-release@v1 + with: + file: dockerfiles/artifact/x86_64-unknown-linux-musl.zip + #changelog: /path/to/CHANGELOG.txt + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/dockerfiles/Dockerfile.aarch64-unknown-linux-musl b/dockerfiles/Dockerfile.aarch64-unknown-linux-musl new file mode 100644 index 0000000..9efe117 --- /dev/null +++ b/dockerfiles/Dockerfile.aarch64-unknown-linux-musl @@ -0,0 +1,126 @@ +FROM ubuntu:focal + +# metadata +ARG TARGET=aarch64-unknown-linux-musl +ARG OPENSSL_ARCH=linux-aarch64 +ARG MUSL_TARGET=aarch64-linux-musl + + +ENV RUST_MUSL_CROSS_TARGET=$TARGET \ + TARGET_HOST=$TARGET +ENV DEBIAN_FRONTEND=noninteractive +WORKDIR /builds + +# install tools and dependencies +RUN set -eux; \ + apt update; \ + apt install -qq -y --no-install-recommends \ + autoconf automake binutils ca-certificates cmake file gcc g++ git jq \ + libc6-dev libtool m4 make pkg-config curl libssl-dev zlib1g-dev mc \ + qemu binfmt-support qemu-user-static; + +# install musl + +RUN curl -sLO https://musl.cc/$MUSL_TARGET-cross.tgz&& \ + tar xzf $MUSL_TARGET-cross.tgz&& \ + cd $MUSL_TARGET-cross&& \ + cp -fR * ../../usr/local/&& \ + cd ..&& rm -rf $MUSL_TARGET-cross* + +ENV CC=$MUSL_TARGET-gcc \ + CXX=$MUSL_TARGET-g++ \ + CC_aarch64_unknown_linux_musl=$MUSL_TARGET-gcc \ + CXX_aarch64_unknown_linux_musl=$MUSL_TARGET-g++\ + CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=$MUSL_TARGET-gcc \ + CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_RUNNER=qemu-user-static \ + TARGET_CC=$MUSL_TARGET-gcc\ + TARGET_CXX=$MUSL_TARGET-g++\ + TARGET_AR=$MUSL_TARGET-ar\ + TARGET_C_INCLUDE_PATH=/usr/local/$MUSL_TARGET/include/\ + CXX_LIB_PATH_aarch64_unknown_linux_musl=/usr/local/$MUSL_TARGET/lib/ \ + C_LIB_PATH_aarch64_unknown_linux_musl=/usr/local/$MUSL_TARGET/lib/\ + CXXSTDLIB=stdc++ \ + TARGET_CXXSTDLIB=stdc++ \ + CXXSTDLIB_aarch64_unknown_linux_musl=stdc++ \ + LDFLAGS_aarch64_unknown_linux_musl=" -static -static-libstdc++ -static-libgcc -L/usr/local/lib -L/usr/local/$MUSL_TARGET/lib" \ + LDFLAGS=" -static -static-libstdc++ -static-libgcc -L/usr/local/lib -L/usr/local/$MUSL_TARGET/lib" \ + CFLAGS_aarch64_unknown_linux_musl=" -fPIC -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \ + CXXFLAGS_aarch64_unknown_linux_musl=" -fPIC -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \ + CFLAGS=" -fPIC -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \ + CXXFLAGS=" -fPIC -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \ + LD_LIBRARY_PATH=/usr/local/lib:/usr/local/$MUSL_TARGET/lib:$LD_LIBRARY_PATH \ + PKG_CONFIG_ALLOW_CROSS=1 \ + PKG_CONFIG_ALL_STATIC=1 \ + OPENSSL_STATIC=1 \ + LIBZ_SYS_STATIC=1 \ + PATH=/usr/local/$MUSL_TARGET/bin:$PATH + +# ZLib & OpenSSL +RUN set -eux; \ + echo "Building zlib" && \ + VERS=1.2.11 && \ + curl -sLO https://zlib.net/zlib-$VERS.tar.gz && \ + tar xzf zlib-$VERS.tar.gz && cd zlib-$VERS && \ + $CC -v&&\ + CHOST=$TARGET CC=$TARGET_CC ./configure --static --prefix=/usr/local/$MUSL_TARGET && \ + make --silent && make --silent install && \ + cd .. && rm -rf zlib-$VERS.tar.gz zlib-$VERS checksums.txt +RUN set -eux; \ + echo "Building OpenSSL" && \ + VERS=1.1.1d && \ + curl -sLO https://www.openssl.org/source/openssl-$VERS.tar.gz && \ + tar xzf openssl-$VERS.tar.gz && cd openssl-$VERS && \ + ./Configure $OPENSSL_ARCH no-async no-afalgeng no-shared --static --prefix=/usr/local/$MUSL_TARGET && \ + make depend && \ + make --silent && make --silent install && \ + cd .. && rm -rf openssl-$VERS.tar.gz openssl-$VERS checksums.txt /usr/local/$MUSL_TARGET/share + +#Install QEMU +RUN curl -s https://api.github.com/repos/multiarch/qemu-user-static/releases/latest \ + | grep 'browser_download_url.*qemu-aarch64_be-static.tar.gz"' \ + | cut -d : -f 2,3 | xargs -n 1 curl -sSL | tar -xzC /usr/local/bin/ + +# Allows qemu run dynamic linked binaries +RUN ln -sf \ + /usr/local/$MUSL_TARGET/lib/libc.so \ + /usr/local/$MUSL_TARGET/lib/ld-musl-aarch64.so.1 +ENV QEMU_LD_PREFIX=/usr/local/$MUSL_TARGET + +# download rustup +ADD "https://static.rust-lang.org/rustup/dist/x86_64-unknown-linux-gnu/rustup-init" rustup-init + +# rustup directory +ENV RUSTUP_HOME=/usr/local/rustup \ + CARGO_HOME=/usr/local/cargo \ + PATH=/usr/local/cargo/bin:$PATH + +RUN chmod +x rustup-init; \ + ./rustup-init -y --no-modify-path --default-toolchain stable; \ + rm rustup-init; \ + chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \ + rustup install nightly; \ +# install x86_64_unknown_linux_musl toolchain + rustup target add $TARGET; \ + rustup target add $TARGET --toolchain nightly; \ + SCCACHE_LATEST_URL=`curl -sL https://api.github.com/repos/mozilla/sccache/releases/latest | jq -r '.assets[2].browser_download_url'`; \ + curl -L $SCCACHE_LATEST_URL | tar zxf - --overwrite --strip-components=1 -C /usr/local/cargo/bin ; \ + rm -rf /usr/local/rustup/toolchains/*/share; \ +# apt clean up + apt autoremove -y; \ + apt clean; \ + rm -rf /var/lib/apt/lists/*; + +COPY dockerfiles/config/$TARGET.config /root/.cargo/config + +ENV OPENSSL_DIR=/usr/local/$MUSL_TARGET/ \ + OPENSSL_INCLUDE_DIR=/usr/local/$MUSL_TARGET/include/ \ + DEP_OPENSSL_INCLUDE=/usr/local/$MUSL_TARGET/include/ \ + OPENSSL_LIB_DIR=/usr/local/$MUSL_TARGET/lib/ + +#Prepare sccache ENV +RUN mkdir $HOME/sccache +ENV RUST_BACKTRACE=full\ + RUST_TEST_THREADS=1 \ + RUSTC_WRAPPER=sccache \ + SCCACHE_DIR=$HOME/sccache \ + SCCACHE_CACHE_SIZE=1G diff --git a/dockerfiles/Dockerfile.armv7-unknown-linux-musleabihf b/dockerfiles/Dockerfile.armv7-unknown-linux-musleabihf new file mode 100644 index 0000000..1bd60d3 --- /dev/null +++ b/dockerfiles/Dockerfile.armv7-unknown-linux-musleabihf @@ -0,0 +1,125 @@ +FROM ubuntu:focal + +# metadata +ARG TARGET=armv7-unknown-linux-musleabihf +ARG OPENSSL_ARCH=linux-armv4 +ARG MUSL_TARGET=armeb-linux-musleabihf + +ENV RUST_MUSL_CROSS_TARGET=$TARGET \ + TARGET_HOST=$TARGET +ENV DEBIAN_FRONTEND=noninteractive +WORKDIR /builds + +# install tools and dependencies +RUN set -eux; \ + apt update; \ + apt install -qq -y --no-install-recommends \ + autoconf automake binutils ca-certificates cmake file gcc g++ git jq \ + libc6-dev libtool m4 make pkg-config curl libssl-dev zlib1g-dev mc \ + qemu binfmt-support qemu-user-static; + +# install musl + + +RUN curl -sLO https://musl.cc/$MUSL_TARGET-cross.tgz&& \ + tar xzf $MUSL_TARGET-cross.tgz&& \ + cd $MUSL_TARGET-cross&& \ + cp -fR * ../../usr/local/&& \ + cd ..&& rm -rf $MUSL_TARGET-cross* + +ENV CC=$MUSL_TARGET-gcc \ + CXX=$MUSL_TARGET-g++ \ + CC_armv7_unknown_linux_musleabihf=$MUSL_TARGET-gcc \ + CXX_armv7_unknown_linux_musleabihf=$MUSL_TARGET-g++\ + CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER=$MUSL_TARGET-gcc \ + CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_RUNNER=qemu-user-static \ + TARGET_CC=$MUSL_TARGET-gcc\ + TARGET_CXX=$MUSL_TARGET-g++\ + TARGET_AR=$MUSL_TARGET-ar\ + TARGET_C_INCLUDE_PATH=/usr/local/$MUSL_TARGET/include/\ + CXX_LIB_PATH_armv7_unknown_linux_musleabihf=/usr/local/$MUSL_TARGET/lib/ \ + C_LIB_PATH_armv7_unknown_linux_musleabihf=/usr/local/$MUSL_TARGET/lib/\ + CXXSTDLIB=stdc++ \ + TARGET_CXXSTDLIB=stdc++ \ + CXXSTDLIB_armv7_unknown_linux_musleabihf=stdc++ \ + LDFLAGS_armv7_unknown_linux_musleabihf=" -static -static-libstdc++ -static-libgcc -L/usr/local/lib -L/usr/local/$MUSL_TARGET/lib" \ + LDFLAGS=" -static -static-libstdc++ -static-libgcc -L/usr/local/lib -L/usr/local/$MUSL_TARGET/lib" \ + CFLAGS_armv7_unknown_linux_musleabihf=" -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \ + CXXFLAGS_armv7_unknown_linux_musleabihf=" -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \ + CFLAGS=" -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \ + CXXFLAGS=" -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \ + LD_LIBRARY_PATH=/usr/local/lib:/usr/local/$MUSL_TARGET/lib:$LD_LIBRARY_PATH \ + PKG_CONFIG_ALLOW_CROSS=1 \ + PKG_CONFIG_ALL_STATIC=1 \ + OPENSSL_STATIC=1 \ + LIBZ_SYS_STATIC=1 \ + PATH=/usr/local/$MUSL_TARGET/bin:$PATH + +# ZLib & OpenSSL +RUN set -eux; \ + echo "Building zlib" && \ + VERS=1.2.11 && \ + curl -sLO https://zlib.net/zlib-$VERS.tar.gz && \ + tar xzf zlib-$VERS.tar.gz && cd zlib-$VERS && \ + $CC -v&&\ + CHOST=$TARGET CC=$TARGET_CC ./configure --static --prefix=/usr/local/$MUSL_TARGET && \ + make --silent && make --silent install && \ + cd .. && rm -rf zlib-$VERS.tar.gz zlib-$VERS checksums.txt +RUN set -eux; \ + echo "Building OpenSSL" && \ + VERS=1.1.1d && \ + curl -sLO https://www.openssl.org/source/openssl-$VERS.tar.gz && \ + tar xzf openssl-$VERS.tar.gz && cd openssl-$VERS && \ + ./Configure $OPENSSL_ARCH no-async no-afalgeng no-shared --static --prefix=/usr/local/$MUSL_TARGET && \ + make depend && \ + make --silent && make --silent install && \ + cd .. && rm -rf openssl-$VERS.tar.gz openssl-$VERS checksums.txt /usr/local/$MUSL_TARGET/share + +#Install QEMU +RUN curl -s https://api.github.com/repos/multiarch/qemu-user-static/releases/latest \ + | grep 'browser_download_url.*x86_64_qemu-armeb-static.tar.gz"' \ + | cut -d : -f 2,3 | xargs -n 1 curl -sSL | tar -xzC /usr/local/bin/ + +# Allows qemu run dynamic linked binaries +RUN ln -sf \ + /usr/local/$MUSL_TARGET/lib/libc.so \ + /usr/local/$MUSL_TARGET/lib/ld-musl-arm.so.1 +ENV QEMU_LD_PREFIX=/usr/local/$MUSL_TARGET + +# download rustup +ADD "https://static.rust-lang.org/rustup/dist/x86_64-unknown-linux-gnu/rustup-init" rustup-init + +# rustup directory +ENV RUSTUP_HOME=/usr/local/rustup \ + CARGO_HOME=/usr/local/cargo \ + PATH=/usr/local/cargo/bin:$PATH + +RUN chmod +x rustup-init; \ + ./rustup-init -y --no-modify-path --default-toolchain stable; \ + rm rustup-init; \ + chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \ + rustup install nightly; \ +# install x86_64_unknown_linux_musl toolchain + rustup target add $TARGET; \ + rustup target add $TARGET --toolchain nightly; \ + SCCACHE_LATEST_URL=`curl -sL https://api.github.com/repos/mozilla/sccache/releases/latest | jq -r '.assets[2].browser_download_url'`; \ + curl -L $SCCACHE_LATEST_URL | tar zxf - --overwrite --strip-components=1 -C /usr/local/cargo/bin ; \ + rm -rf /usr/local/rustup/toolchains/*/share; \ +# apt clean up + apt autoremove -y; \ + apt clean; \ + rm -rf /var/lib/apt/lists/*; + +COPY dockerfiles/config/$TARGET.config /root/.cargo/config +ENV OPENSSL_DIR=/usr/local/$MUSL_TARGET/ \ + OPENSSL_INCLUDE_DIR=/usr/local/$MUSL_TARGET/include/ \ + DEP_OPENSSL_INCLUDE=/usr/local/$MUSL_TARGET/include/ \ + OPENSSL_LIB_DIR=/usr/local/$MUSL_TARGET/lib/ + +#Prepare sccache ENV +RUN mkdir $HOME/sccache +ENV RUST_BACKTRACE=full \ + RUST_TEST_THREADS=1 \ + RUSTC_WRAPPER=sccache \ + SCCACHE_DIR=$HOME/sccache \ + SCCACHE_CACHE_SIZE=1G diff --git a/dockerfiles/Dockerfile.x86_64-unknown-linux-musl b/dockerfiles/Dockerfile.x86_64-unknown-linux-musl index 50dbbe3..d657933 100644 --- a/dockerfiles/Dockerfile.x86_64-unknown-linux-musl +++ b/dockerfiles/Dockerfile.x86_64-unknown-linux-musl @@ -1,121 +1,107 @@ FROM ubuntu:focal # metadata -ARG TARGET=x86_64-linux-musl +ARG TARGET=x86_64-unknown-linux-musl ARG OPENSSL_ARCH=linux-x86_64 +ARG MUSL_TARGET=x86_64-linux-musl -ENV RUST_MUSL_CROSS_TARGET=$TARGET - +ENV RUST_MUSL_CROSS_TARGET=$TARGET \ + TARGET_HOST=$TARGET +ENV DEBIAN_FRONTEND=noninteractive WORKDIR /builds -# rustup directory -ENV RUSTUP_HOME=/usr/local/rustup \ - CARGO_HOME=/usr/local/cargo \ - PATH=/usr/local/cargo/bin:$PATH - # install tools and dependencies RUN set -eux; \ - #sed 's/http:\/\/\(.*\).ubuntu.com\/ubuntu\//[arch-=amd64,i386] http:\/\/ports.ubuntu.com\/ubuntu-ports\//g' /etc/apt/sources.list > /etc/apt/sources.list.d/ports.list \ - #sed -i 's/http:\/\/\(.*\).ubuntu.com\/ubuntu\//[arch=amd64,i386] http:\/\/\1.archive.ubuntu.com\/ubuntu\//g' /etc/apt/sources.list \ apt update; \ - apt install -y --no-install-recommends \ - autoconf automake binutils ca-certificates cmake file gcc g++ git jq libc-dev libc-dev zlib1g-dev \ - libtool m4 make pkg-config curl libssl-dev; + apt install -qq -y --no-install-recommends \ + autoconf automake binutils ca-certificates cmake file gcc g++ git jq \ + libc6-dev libtool m4 make pkg-config curl libssl-dev zlib1g-dev mc; # install musl -RUN curl -sLO https://musl.cc/x86_64-linux-musl-cross.tgz&& \ - tar xzf x86_64-linux-musl-cross.tgz&& \ - cd x86_64-linux-musl-cross&& \ +RUN curl -sLO https://musl.cc/$MUSL_TARGET-cross.tgz&& \ + tar xzf $MUSL_TARGET-cross.tgz&& \ + cd $MUSL_TARGET-cross&& \ cp -fR * ../../usr/local/&& \ - cd ..&& rm -rf x86_64-linux-musl-cross* + cd ..&& rm -rf $MUSL_TARGET-cross* + -ENV CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=$TARGET-gcc \ - CC=$TARGET-gcc \ - CXX=$TARGET-g++ \ - CC_x86_64-unknown-linux-gnu=$TARGET-gcc \ - CXX_x86_64-unknown-linux-gnu=$TARGET-g++ \ - CC_x86_64_unknown_linux_musl=$TARGET-gcc \ - CXX_x86_64_unknown_linux_musl=$TARGET-g++\ - TARGET_CC=$TARGET-gcc\ - TARGET_CXX=$TARGET-g++\ - TARGET_AR=$TARGET-ar\ - TARGET_C_INCLUDE_PATH=/usr/local/$TARGET/include/\ - CXX_LIB_PATH_x86_64_unknown_linux_musl=/usr/local/$TARGET/lib/ \ - C_LIB_PATH_x86_64_unknown_linux_musl=/usr/local/$TARGET/lib/\ +ENV CC=$MUSL_TARGET-gcc \ + CXX=$MUSL_TARGET-g++ \ + CC_x86_64_unknown_linux_musl=$MUSL_TARGET-gcc \ + CXX_x86_64_unknown_linux_musl=$MUSL_TARGET-g++\ + CARGO_TARGET_X86_64_UNKNOWN_LINUX_MUSL_LINKER=$MUSL_TARGET-gcc \ + TARGET_CC=$MUSL_TARGET-gcc\ + TARGET_CXX=$MUSL_TARGET-g++\ + TARGET_AR=$MUSL_TARGET-ar\ + TARGET_C_INCLUDE_PATH=/usr/local/$MUSL_TARGET/include/\ + CXX_LIB_PATH_x86_64_unknown_linux_musl=/usr/local/$MUSL_TARGET/lib/ \ + C_LIB_PATH_x86_64_unknown_linux_musl=/usr/local/$MUSL_TARGET/lib/\ CXXSTDLIB=stdc++ \ TARGET_CXXSTDLIB=stdc++ \ CXXSTDLIB_x86_64_unknown_linux_musl=stdc++ \ - PATH=/usr/local/x86_64-unknown-linux-musl/bin:$PATH \ - LDFLAGS_x86_64_unknown_linux_gnu=" -static -static-libstdc++ -static-libgcc -L/usr/local/lib -L/usr/local/$TARGET/lib" \ - LDFLAGS_x86_64_unknown_linux_musl=" -static -static-libstdc++ -static-libgcc -L/usr/local/lib -L/usr/local/$TARGET/lib" \ - LDFLAGS=" -static -static-libstdc++ -static-libgcc -L/usr/local/lib -L/usr/local/$TARGET/lib" \ - CFLAGS_x86_64_unknown_linux_gnu=" -fPIC -I/usr/local/include -I/usr/local/$TARGET/include" \ - CXXFLAGS_x86_64_unknown_linux_gnu=" -fPIC -I/usr/local/include -I/usr/local/$TARGET/include" \ - CFLAGS_x86_64_unknown_linux_musl=" -fPIC -I/usr/local/include -I/usr/local/$TARGET/include" \ - CXXFLAGS_x86_64_unknown_linux_musl=" -fPIC -I/usr/local/include -I/usr/local/$TARGET/include" \ - CFLAGS=" -fPIC -I/usr/local/include -I/usr/local/$TARGET/include" \ - CXXFLAGS=" -fPIC -I/usr/local/include -I/usr/local/$TARGET/include" \ - LIBZ_SYS_STATIC=1 \ - LD_LIBRARY_PATH=/usr/local/lib:/usr/local/$TARGET/lib:$LD_LIBRARY_PATH \ + LDFLAGS_x86_64_unknown_linux_musl=" -static -static-libstdc++ -static-libgcc -L/usr/local/lib -L/usr/local/$MUSL_TARGET/lib" \ + LDFLAGS=" -static -static-libstdc++ -static-libgcc -L/usr/local/lib -L/usr/local/$MUSL_TARGET/lib" \ + CFLAGS_x86_64_unknown_linux_musl=" -fPIC -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \ + CXXFLAGS_x86_64_unknown_linux_musl=" -fPIC -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \ + CFLAGS=" -fPIC -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \ + CXXFLAGS=" -fPIC -I/usr/local/include -I/usr/local/$MUSL_TARGET/include" \ + LD_LIBRARY_PATH=/usr/local/lib:/usr/local/$MUSL_TARGET/lib:$LD_LIBRARY_PATH \ PKG_CONFIG_ALLOW_CROSS=1 \ PKG_CONFIG_ALL_STATIC=1 \ - OPENSSL_STATIC=1 - -# Set up a prefix for musl build libraries, make the linker's job of finding them easier - -RUN echo "/usr/local/lib" >> /etc/ld-musl-x86_64.path && \ - echo "/usr/local/x86_64-linux-musl/lib" >> /etc/ld-musl-x86_64.path && \ - ln -s /usr/include/x86_64-linux-gnu/asm /usr/local/x86_64-linux-musl/include/asm && \ - ln -s /usr/include/asm-generic /usr/local/x86_64-linux-musl/include/asm-generic && \ - ln -s /usr/include/ /usr/local/x86_64-linux-musl/include + OPENSSL_STATIC=1 \ + LIBZ_SYS_STATIC=1 \ + PATH=/usr/local/$MUSL_TARGET/b78.46.21.213in:$PATH -RUN mkdir -p /root/.cargo&&echo "[build]\ntarget = \"$TARGET\"\n\n[target.$TARGET]\nlinker = \"$TARGET-gcc\"\n" > /root/.cargo/config -# OpenSSL -RUN export CC=$TARGET_CC && \ - export C_INCLUDE_PATH=$TARGET_C_INCLUDE_PATH && \ - echo "Building zlib" && \ +# ZLib & OpenSSL +RUN echo "Building zlib" && \ VERS=1.2.11 && \ curl -sLO https://zlib.net/zlib-$VERS.tar.gz && \ tar xzf zlib-$VERS.tar.gz && cd zlib-$VERS && \ - ./configure --static --archs="-fPIC" --prefix=/usr/local/$TARGET && \ - make && make install && \ - cd .. && rm -rf zlib-$VERS.tar.gz zlib-$VERS checksums.txt && \ - echo "Building OpenSSL" && \ + $CC -v&&\ + CHOST=$TARGET CC=$TARGET_CC ./configure --static --prefix=/usr/local/$MUSL_TARGET && \ + make --silent && make --silent install && \ + cd .. && rm -rf zlib-$VERS.tar.gz zlib-$VERS checksums.txt +RUN echo "Building OpenSSL" && \ VERS=1.1.1d && \ curl -sLO https://www.openssl.org/source/openssl-$VERS.tar.gz && \ tar xzf openssl-$VERS.tar.gz && cd openssl-$VERS && \ - ./Configure $OPENSSL_ARCH no-async no-afalgeng no-shared no-zlib --static -fPIC --prefix=/usr/local/$TARGET && \ + ./Configure $OPENSSL_ARCH no-async no-afalgeng no-shared --static --prefix=/usr/local/$MUSL_TARGET && \ make depend && \ - make && make install && \ - cd .. && rm -rf openssl-$VERS.tar.gz openssl-$VERS checksums.txt /usr/local/$TARGET/share + make --silent && make --silent install && \ + cd .. && rm -rf openssl-$VERS.tar.gz openssl-$VERS checksums.txt /usr/local/$MUSL_TARGET/share # download rustup ADD "https://static.rust-lang.org/rustup/dist/x86_64-unknown-linux-gnu/rustup-init" rustup-init +# rustup directory +ENV RUSTUP_HOME=/usr/local/rustup \ + CARGO_HOME=/usr/local/cargo \ + PATH=/usr/local/cargo/bin:$PATH + RUN chmod +x rustup-init; \ ./rustup-init -y --no-modify-path --default-toolchain stable; \ rm rustup-init; \ chmod -R a+w $RUSTUP_HOME $CARGO_HOME; \ rustup install nightly; \ # install x86_64_unknown_linux_musl toolchain - rustup target add x86_64_unknown_linux_musl; \ - rustup target add x86_64_unknown_linux_musl --toolchain nightly; \ + rustup target add $TARGET; \ + rustup target add $TARGET --toolchain nightly; \ SCCACHE_LATEST_URL=`curl -sL https://api.github.com/repos/mozilla/sccache/releases/latest | jq -r '.assets[2].browser_download_url'`; \ curl -L $SCCACHE_LATEST_URL | tar zxf - --overwrite --strip-components=1 -C /usr/local/cargo/bin ; \ rm -rf /usr/local/rustup/toolchains/*/share; \ - rm -rf $CARGO_HOME/registry/*; \ # apt clean up apt autoremove -y; \ apt clean; \ rm -rf /var/lib/apt/lists/*; -#COPY config/config /root/.cargo/$TARGET-config -ENV OPENSSL_DIR=/usr/local/musl/$TARGET/ \ - OPENSSL_INCLUDE_DIR=/usr/local/$TARGET/include/ \ - DEP_OPENSSL_INCLUDE=/usr/local/$TARGET/include/ \ - OPENSSL_LIB_DIR=/usr/local/$TARGET/lib/ \ - PORTABLE=1 +COPY dockerfiles/config/$TARGET.config /root/.cargo/config +ENV OPENSSL_DIR=/usr/local/$MUSL_TARGET/ \ + OPENSSL_INCLUDE_DIR=/usr/local/$MUSL_TARGET/include/ \ + DEP_OPENSSL_INCLUDE=/usr/local/$MUSL_TARGET/include/ \ + OPENSSL_LIB_DIR=/usr/local/$MUSL_TARGET/lib/ + +#Prepare sccache ENV RUN mkdir $HOME/sccache ENV RUST_BACKTRACE=full\ RUSTC_WRAPPER=sccache \ diff --git a/dockerfiles/build.sh b/dockerfiles/build.sh index 7c9c48c..929e5a1 100755 --- a/dockerfiles/build.sh +++ b/dockerfiles/build.sh @@ -3,7 +3,7 @@ TOOLS='clang lld' PROJECTS='libunwind compiler-rt libcxx libcxxabi' ARCH="$(uname -m)" -TARGETS='X86' +TARGETS='X86;AArch64;ARM;WebAssembly' ROOT=$(dirname $(readlink -f "$0")) PATH=/"$ARCH"-unknown-linux-musl/bin:"$PATH" diff --git a/dockerfiles/config/aarch64-unknown-linux-musl.config b/dockerfiles/config/aarch64-unknown-linux-musl.config new file mode 100644 index 0000000..1fd77e4 --- /dev/null +++ b/dockerfiles/config/aarch64-unknown-linux-musl.config @@ -0,0 +1,5 @@ +[target.aarch64-unknown-linux-musl] +rustflags = ["-C", "target-feature=+crt-static", "-C","link-arg=-lgcc"] +ar = "aarch64-linux-musl-ar" +linker = "aarch64-linux-musl-gcc" +runner = "qemu-aarch64_be-static" diff --git a/dockerfiles/config/armv7-unknown-linux-musleabihf.config b/dockerfiles/config/armv7-unknown-linux-musleabihf.config new file mode 100644 index 0000000..de8950f --- /dev/null +++ b/dockerfiles/config/armv7-unknown-linux-musleabihf.config @@ -0,0 +1,4 @@ +[target.armv7-unknown-linux-musleabihf] +ar = "arm-linux-musleabihf-ar" +linker = "arm-linux-musleabihf-gcc" +runner = "qemu-armeb-static" diff --git a/dockerfiles/config/x86_64-unknown-linux-musl.config b/dockerfiles/config/x86_64-unknown-linux-musl.config new file mode 100644 index 0000000..f67eade --- /dev/null +++ b/dockerfiles/config/x86_64-unknown-linux-musl.config @@ -0,0 +1,5 @@ +[target.x86_64-unknown-linux-musl] +# Enables the aes-ni instructions for RustCrypto dependency. +rustflags = ["-C","target-feature=+aes,+sse2,+ssse3"] +ar = "x86_64-linux-musl-ar" +linker = "x86_64-linux-musl-gcc" diff --git a/dockerfiles/configure.sh b/dockerfiles/configure.sh index 80026d4..a10425f 100755 --- a/dockerfiles/configure.sh +++ b/dockerfiles/configure.sh @@ -3,7 +3,7 @@ TOOLS='clang lld' PROJECTS='libunwind compiler-rt libcxx libcxxabi' ARCH="$(uname -m)" -TARGETS='X86' +TARGETS='X86;AArch64;ARM;WebAssembly' ROOT=$(dirname $(readlink -f "$0")) PATH=/"$ARCH"-unknown-linux-musl/bin:"$PATH" diff --git a/dockerfiles/install.sh b/dockerfiles/install.sh index 2ea8708..c003cba 100755 --- a/dockerfiles/install.sh +++ b/dockerfiles/install.sh @@ -3,7 +3,7 @@ TOOLS='clang lld' PROJECTS='libunwind compiler-rt libcxx libcxxabi' ARCH="$(uname -m)" -TARGETS='X86' +TARGETS='X86;AArch64;ARM;WebAssembly' ROOT=$(dirname $(readlink -f "$0")) PATH=/"$ARCH"-unknown-linux-musl/bin:"$PATH" @@ -50,6 +50,7 @@ ln -s llvm-nm nm ln -s clang cc ln -s clang++ c++ ln -s ld.lld ld +ln -s ld.lld rust-lld cd / || $(echo 'failed to change directory' && exit 1) tar cvfz "$ARCH"-unknown-linux-musl.tar.gz "$ARCH"-unknown-linux-musl || exit 46 mkdir -p $ROOT/artifact || $(echo 'failed to change directory' && exit 1)