Build libunwind before libcxxabi

This is the correct layering/ordering.

This requies setting forcing CXX_SUPPORTS_CXX11=TRUE in cmake,
since it tries linking to see whether the C++ environment works,
but we haven't built libcxx yet.

Manually add the libcxx include directory to the include path
(since libunwind does use some C++ headers but doesn't require
linking to C++ libraries).
This commit is contained in:
Martin Storsjö committed 2017-11-28 22:56:42 +02:00
1 parent 0f0863b010
commit c06aca2432
1 file changed
+29 -28
+29 -28
View File
@@ -157,6 +157,30 @@ RUN git clone -b master https://github.com/llvm-mirror/libcxx.git && \
cd ../libunwind && \
git checkout 2ddcf2461daa5d61c543474aed06b12a8b9ad816
RUN cd libunwind && \
for arch in $TOOLCHAIN_ARCHS; do \
mkdir build-$arch && cd build-$arch && cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$TOOLCHAIN_PREFIX/$arch-w64-mingw32 \
-DCMAKE_C_COMPILER=$arch-w64-mingw32-clang \
-DCMAKE_CXX_COMPILER=$arch-w64-mingw32-clang++ \
-DCMAKE_CROSSCOMPILING=TRUE \
-DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_C_COMPILER_WORKS=TRUE \
-DCMAKE_CXX_COMPILER_WORKS=TRUE \
-DCMAKE_AR=$TOOLCHAIN_PREFIX/bin/llvm-ar \
-DCMAKE_RANLIB=$TOOLCHAIN_PREFIX/bin/llvm-ranlib \
-DLLVM_NO_OLD_LIBSTDCXX=TRUE \
-DCXX_SUPPORTS_CXX11=TRUE \
-DLIBUNWIND_USE_COMPILER_RT=TRUE \
-DLIBUNWIND_ENABLE_THREADS=TRUE \
-DLIBUNWIND_ENABLE_SHARED=FALSE \
-DLIBUNWIND_ENABLE_CROSS_UNWINDING=FALSE \
-DCMAKE_CXX_FLAGS="-I/build/libcxx/include" \
.. && \
make -j4 && make install && \
cd .. || exit 1; \
done
RUN cd libcxxabi && \
for arch in $TOOLCHAIN_ARCHS; do \
@@ -215,39 +239,16 @@ RUN cd libcxx && \
-DCMAKE_CXX_FLAGS="-D_LIBCXXABI_DISABLE_VISIBILITY_ANNOTATIONS" \
.. && \
make -j4 && make install && \
../utils/merge_archives.py \
--ar llvm-ar \
-o $TOOLCHAIN_PREFIX/$arch-w64-mingw32/lib/libc++.a \
$TOOLCHAIN_PREFIX/$arch-w64-mingw32/lib/libc++.a \
$TOOLCHAIN_PREFIX/$arch-w64-mingw32/lib/libunwind.a && \
cd .. || exit 1; \
done
RUN cd $TOOLCHAIN_PREFIX/include && ln -s ../$(echo $TOOLCHAIN_ARCHS | awk '{print $1}')-w64-mingw32/include/c++ .
RUN cd libunwind && \
for arch in $TOOLCHAIN_ARCHS; do \
mkdir build-$arch && cd build-$arch && cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=$TOOLCHAIN_PREFIX/$arch-w64-mingw32 \
-DCMAKE_C_COMPILER=$arch-w64-mingw32-clang \
-DCMAKE_CXX_COMPILER=$arch-w64-mingw32-clang++ \
-DCMAKE_CROSSCOMPILING=TRUE \
-DCMAKE_SYSTEM_NAME=Windows \
-DCMAKE_C_COMPILER_WORKS=TRUE \
-DCMAKE_CXX_COMPILER_WORKS=TRUE \
-DCMAKE_AR=$TOOLCHAIN_PREFIX/bin/llvm-ar \
-DCMAKE_RANLIB=$TOOLCHAIN_PREFIX/bin/llvm-ranlib \
-DLLVM_NO_OLD_LIBSTDCXX=TRUE \
-DLIBUNWIND_USE_COMPILER_RT=TRUE \
-DLIBUNWIND_ENABLE_THREADS=TRUE \
-DLIBUNWIND_ENABLE_SHARED=FALSE \
-DLIBUNWIND_ENABLE_CROSS_UNWINDING=FALSE \
.. && \
make -j4 && make install && \
../../libcxx/utils/merge_archives.py \
--ar llvm-ar \
-o $TOOLCHAIN_PREFIX/$arch-w64-mingw32/lib/libc++.a \
$TOOLCHAIN_PREFIX/$arch-w64-mingw32/lib/libc++.a \
lib/libunwind.a && \
cd .. || exit 1; \
done
RUN mkdir -p hello
COPY hello.c hello.cpp hello-exception.cpp /build/hello/
RUN cd hello && \