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:
1 parent
0f0863b010
commit
c06aca2432
1 file changed
+29
-28
+29
-28
@@ -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 && \
|
||||
|
||||
Reference in new issue
Block a user