From cd73ed83083ca14addd43dfb796ff461f0cbf456 Mon Sep 17 00:00:00 2001 From: Steve Lhomme Date: Wed, 13 Mar 2019 10:11:28 +0100 Subject: [PATCH] wrappers: link with the Windows Store specific runtime for UWP --- run-tests.sh | 24 ++++++++++++++++++++++-- wrappers/clang-target-wrapper.c | 2 ++ wrappers/clang-target-wrapper.sh | 2 ++ wrappers/ld-wrapper.sh | 2 +- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/run-tests.sh b/run-tests.sh index 1f985b7..b35fed9 100755 --- a/run-tests.sh +++ b/run-tests.sh @@ -10,7 +10,23 @@ PREFIX="$1" export PATH=$PREFIX/bin:$PATH : ${ARCHS:=${TOOLCHAIN_ARCHS-i686 x86_64 armv7 aarch64}} -: ${TARGET_OSES:=${TOOLCHAIN_TARGET_OSES-mingw32 mingw32uwp}} + +cd test + +DEFAULT_OSES="mingw32 mingw32uwp" +cat< is-ucrt.c +#include <_mingw.h> +#if __MSVCRT_VERSION__ < 0x1400 +#error not ucrt +#endif +EOF +ANY_ARCH=$(echo $ARCHS | awk '{print $1}') +if ! $ANY_ARCH-w64-mingw32-gcc -E is-ucrt.c > /dev/null 2>&1; then + # If the default CRT isn't UCRT, we can't build for mingw32uwp. + DEFAULT_OSES="mingw32" +fi + +: ${TARGET_OSES:=${TOOLCHAIN_TARGET_OSES-$DEFAULT_OSES}} if [ -z "$RUN_X86" ]; then case $(uname) in @@ -27,7 +43,6 @@ if [ -z "$RUN_X86" ]; then fi -cd test TESTS_C="hello hello-tls crt-test setjmp" TESTS_C_DLL="autoimport-lib" TESTS_C_LINK_DLL="autoimport-main" @@ -143,6 +158,11 @@ for arch in $ARCHS; do if [ "$arch" = "i686" ]; then compiler_rt_arch=i386 fi + if [ "$target_os" != "mingw32" ]; then + # The Windows Store specific CRT DLL is usually not available + # outside of such contexts, so skip trying to run those tests. + continue + fi for i in libc++ libunwind libssp-0 libclang_rt.asan_dynamic-$compiler_rt_arch; do if [ -f $PREFIX/$arch-w64-mingw32/bin/$i.dll ]; then cp $PREFIX/$arch-w64-mingw32/bin/$i.dll $TEST_DIR diff --git a/wrappers/clang-target-wrapper.c b/wrappers/clang-target-wrapper.c index 7088f4b..7d467e0 100644 --- a/wrappers/clang-target-wrapper.c +++ b/wrappers/clang-target-wrapper.c @@ -305,6 +305,8 @@ int _tmain(int argc, TCHAR* argv[]) { exec_argv[arg++] = _T("-DUNICODE"); // add the minimum runtime to use for UWP targets exec_argv[arg++] = _T("-Wl,-lmincore"); + // This requires that the default crt is ucrt. + exec_argv[arg++] = _T("-Wl,-lvcruntime140_app"); } exec_argv[arg++] = _T("-target"); diff --git a/wrappers/clang-target-wrapper.sh b/wrappers/clang-target-wrapper.sh index 13328fd..07d2793 100755 --- a/wrappers/clang-target-wrapper.sh +++ b/wrappers/clang-target-wrapper.sh @@ -63,6 +63,8 @@ mingw32uwp) FLAGS="$FLAGS -DUNICODE" # add the minimum runtime to use for UWP targets FLAGS="$FLAGS -Wl,-lmincore" + # This requires that the default crt is ucrt. + FLAGS="$FLAGS -Wl,-lvcruntime140_app" ;; esac diff --git a/wrappers/ld-wrapper.sh b/wrappers/ld-wrapper.sh index b65a5fd..71263d2 100755 --- a/wrappers/ld-wrapper.sh +++ b/wrappers/ld-wrapper.sh @@ -36,7 +36,7 @@ esac FLAGS="-m $M" case $TARGET_OS in mingw32uwp) - FLAGS="$FLAGS -lmincore" + FLAGS="$FLAGS -lmincore -lvcruntime140_app" ;; esac ld.lld $FLAGS "$@"