Use -unwindlib=libunwind instead of merging libunwind into libc++
This makes the build of libcxx a bit cleaner, and simplifies later building and testing of libcxx.
This commit is contained in:
1 parent
e40ff6ab49
commit
e35ef3b7d7
5 files changed
+29
-10
No files matched your search
+16
-1
@@ -100,7 +100,22 @@ for arch in $ARCHS; do
|
|||||||
$BUILDCMD ${CORES+-j$CORES}
|
$BUILDCMD ${CORES+-j$CORES}
|
||||||
$BUILDCMD install
|
$BUILDCMD install
|
||||||
mkdir -p "$PREFIX/$arch-w64-mingw32/bin"
|
mkdir -p "$PREFIX/$arch-w64-mingw32/bin"
|
||||||
if [ -n "$SANITIZERS" ]; then
|
if [ -z "$SANITIZERS" ]; then
|
||||||
|
# Building builtins only. If libunwind isn't built yet, linking of any
|
||||||
|
# executable will still fail as we're using -unwindlib=libunwind.
|
||||||
|
# Therefore, create a dummy libunwind.a (unless there's a real
|
||||||
|
# libunwind installed already) to let linking succeed.
|
||||||
|
#
|
||||||
|
# This is a workaround to avoid needing to specify -unwindlib=none
|
||||||
|
# for all linking until libunwind has been built. This avoids
|
||||||
|
# needing to build libunwind right away (allowing building plain C
|
||||||
|
# executables already now) and avoids needing to pass -unwindlib=none
|
||||||
|
# when configuring the libunwind build.
|
||||||
|
if [ ! -f $PREFIX/$arch-w64-mingw32/lib/libunwind.a ] && [ ! -f $PREFIX/$arch-w64-mingw32/lib/libunwind.dll.a ]; then
|
||||||
|
# Create an archive, don't add any members.
|
||||||
|
llvm-ar rcs $PREFIX/$arch-w64-mingw32/lib/libunwind.a
|
||||||
|
fi
|
||||||
|
else
|
||||||
mv "$PREFIX/lib/clang/$CLANG_VERSION/lib/windows/"*.dll "$PREFIX/$arch-w64-mingw32/bin"
|
mv "$PREFIX/lib/clang/$CLANG_VERSION/lib/windows/"*.dll "$PREFIX/$arch-w64-mingw32/bin"
|
||||||
fi
|
fi
|
||||||
cd ..
|
cd ..
|
||||||
|
|||||||
+10
-9
@@ -193,15 +193,6 @@ build_all() {
|
|||||||
cd build-$arch-$type
|
cd build-$arch-$type
|
||||||
$BUILDCMD ${CORES+-j$CORES}
|
$BUILDCMD ${CORES+-j$CORES}
|
||||||
$BUILDCMD install
|
$BUILDCMD install
|
||||||
if [ "$type" = "shared" ]; then
|
|
||||||
llvm-ar qcsL \
|
|
||||||
"$PREFIX/$arch-w64-mingw32/lib/libc++.dll.a" \
|
|
||||||
"$PREFIX/$arch-w64-mingw32/lib/libunwind.dll.a"
|
|
||||||
else
|
|
||||||
llvm-ar qcsL \
|
|
||||||
"$PREFIX/$arch-w64-mingw32/lib/libc++.a" \
|
|
||||||
"$PREFIX/$arch-w64-mingw32/lib/libunwind.a"
|
|
||||||
fi
|
|
||||||
cd ..
|
cd ..
|
||||||
done
|
done
|
||||||
cd ..
|
cd ..
|
||||||
@@ -211,3 +202,13 @@ build_all() {
|
|||||||
# work when linking against the DLL, but not vice versa.
|
# work when linking against the DLL, but not vice versa.
|
||||||
[ -z "$BUILD_SHARED" ] || build_all shared
|
[ -z "$BUILD_SHARED" ] || build_all shared
|
||||||
[ -z "$BUILD_STATIC" ] || build_all static
|
[ -z "$BUILD_STATIC" ] || build_all static
|
||||||
|
|
||||||
|
# Remove dummy placeholder libunwind.a. If we've built a static version, it
|
||||||
|
# already was overwritten with a proper one, but if only building a shared
|
||||||
|
# version, remove the dummy one to avoid surprises.
|
||||||
|
for arch in $ARCHS; do
|
||||||
|
# Only remove the file if it contains no members.
|
||||||
|
if [ -f $PREFIX/$arch-w64-mingw32/lib/libunwind.a ] && [ "$(llvm-ar t $PREFIX/$arch-w64-mingw32/lib/libunwind.a)" = "" ]; then
|
||||||
|
rm $PREFIX/$arch-w64-mingw32/lib/libunwind.a
|
||||||
|
fi
|
||||||
|
done
|
||||||
@@ -157,6 +157,7 @@ if [ -n "$HOST" ]; then
|
|||||||
# the frontend wrappers, but this makes sure they are enabled by
|
# the frontend wrappers, but this makes sure they are enabled by
|
||||||
# default if that wrapper is bypassed as well.
|
# default if that wrapper is bypassed as well.
|
||||||
CMAKEFLAGS="$CMAKEFLAGS -DCLANG_DEFAULT_RTLIB=compiler-rt"
|
CMAKEFLAGS="$CMAKEFLAGS -DCLANG_DEFAULT_RTLIB=compiler-rt"
|
||||||
|
CMAKEFLAGS="$CMAKEFLAGS -DCLANG_DEFAULT_UNWINDLIB=libunwind"
|
||||||
CMAKEFLAGS="$CMAKEFLAGS -DCLANG_DEFAULT_CXX_STDLIB=libc++"
|
CMAKEFLAGS="$CMAKEFLAGS -DCLANG_DEFAULT_CXX_STDLIB=libc++"
|
||||||
CMAKEFLAGS="$CMAKEFLAGS -DCLANG_DEFAULT_LINKER=lld"
|
CMAKEFLAGS="$CMAKEFLAGS -DCLANG_DEFAULT_LINKER=lld"
|
||||||
BUILDDIR=$BUILDDIR-$HOST
|
BUILDDIR=$BUILDDIR-$HOST
|
||||||
|
|||||||
@@ -224,6 +224,7 @@ int _tmain(int argc, TCHAR* argv[]) {
|
|||||||
exec_argv[arg++] = _T("-target");
|
exec_argv[arg++] = _T("-target");
|
||||||
exec_argv[arg++] = target;
|
exec_argv[arg++] = target;
|
||||||
exec_argv[arg++] = _T("-rtlib=compiler-rt");
|
exec_argv[arg++] = _T("-rtlib=compiler-rt");
|
||||||
|
exec_argv[arg++] = _T("-unwindlib=libunwind");
|
||||||
exec_argv[arg++] = _T("-stdlib=libc++");
|
exec_argv[arg++] = _T("-stdlib=libc++");
|
||||||
exec_argv[arg++] = _T("-fuse-ld=lld");
|
exec_argv[arg++] = _T("-fuse-ld=lld");
|
||||||
exec_argv[arg++] = _T("-Qunused-arguments");
|
exec_argv[arg++] = _T("-Qunused-arguments");
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ esac
|
|||||||
|
|
||||||
FLAGS="$FLAGS -target $TARGET"
|
FLAGS="$FLAGS -target $TARGET"
|
||||||
FLAGS="$FLAGS -rtlib=compiler-rt"
|
FLAGS="$FLAGS -rtlib=compiler-rt"
|
||||||
|
FLAGS="$FLAGS -unwindlib=libunwind"
|
||||||
FLAGS="$FLAGS -stdlib=libc++"
|
FLAGS="$FLAGS -stdlib=libc++"
|
||||||
FLAGS="$FLAGS -fuse-ld=lld"
|
FLAGS="$FLAGS -fuse-ld=lld"
|
||||||
FLAGS="$FLAGS -Qunused-arguments"
|
FLAGS="$FLAGS -Qunused-arguments"
|
||||||
|
|||||||
Reference in new issue
Block a user