-
Notifications
You must be signed in to change notification settings - Fork 11
Open
Windows-on-ARM-Experiments/mingw-woarm64
#8Labels
Description
The second stage aarch64-w64-mingw32 build of libwinpthreads with --enable-static, --enable-shared, --enable-wildcard, and --with-libraries=all fails with the following errors:
/bin/bash ./libtool --tag=CC --mode=link aarch64-w64-mingw32-gcc -Wall -DWIN32_LEAN_AND_MEAN -O0 -ggdb -no-undefined -version-info 1:0:0 -L./fakelib -Wc,-no-pthread -o libwinpthread.la -rpath /home/radekbarton/cross-aarch64-w64-mingw32-msvcrt/aarch64-w64-mingw32/lib src/libwinpthread_la-barrier.lo src/libwinpthread_la-cond.lo src/libwinpthread_la-misc.lo src/libwinpthread_la-mutex.lo src/libwinpthread_la-rwlock.lo src/libwinpthread_la-spinlock.lo src/libwinpthread_la-thread.lo src/libwinpthread_la-ref.lo src/libwinpthread_la-sem.lo src/libwinpthread_la-sched.lo src/libwinpthread_la-clock.lo src/libwinpthread_la-nanosleep.lo src/version.lo
libtool: link: aarch64-w64-mingw32-gcc -shared src/.libs/libwinpthread_la-barrier.o src/.libs/libwinpthread_la-cond.o src/.libs/libwinpthread_la-misc.o src/.libs/libwinpthread_la-mutex.o src/.libs/libwinpthread_la-rwlock.o src/.libs/libwinpthread_la-spinlock.o src/.libs/libwinpthread_la-thread.o src/.libs/libwinpthread_la-ref.o src/.libs/libwinpthread_la-sem.o src/.libs/libwinpthread_la-sched.o src/.libs/libwinpthread_la-clock.o src/.libs/libwinpthread_la-nanosleep.o src/.libs/version.o -L./fakelib -O0 -ggdb -no-pthread -o .libs/libwinpthread-1.dll -Wl,--enable-auto-image-base -Xlinker --out-implib -Xlinker .libs/libwinpthread.dll.a
/home/radekbarton/cross-aarch64-w64-mingw32-msvcrt/lib/gcc/aarch64-w64-mingw32/15.0.1/../../../../aarch64-w64-mingw32/bin/ld: /home/radekbarton/cross-aarch64-w64-mingw32-msvcrt/lib/gcc/aarch64-w64-mingw32/15.0.1/../../../../aarch64-w64-mingw32/lib/dllcrt2.o: in function `_InterlockedCompareExchangePointer':
/home/radekbarton/cross-aarch64-w64-mingw32-msvcrt/aarch64-w64-mingw32/include/psdk_inc/intrin-impl.h:1760:(.text+0x110): undefined reference to `__aarch64_cas8_sync'
/home/radekbarton/cross-aarch64-w64-mingw32-msvcrt/lib/gcc/aarch64-w64-mingw32/15.0.1/../../../../aarch64-w64-mingw32/bin/ld: /home/radekbarton/cross-aarch64-w64-mingw32-msvcrt/lib/gcc/aarch64-w64-mingw32/15.0.1/../../../../aarch64-w64-mingw32/lib/dllcrt2.o: in function `_InterlockedExchangePointer':
/home/radekbarton/cross-aarch64-w64-mingw32-msvcrt/aarch64-w64-mingw32/include/psdk_inc/intrin-impl.h:1771:(.text+0x1e8): undefined reference to `__aarch64_swp8_sync'
/home/radekbarton/cross-aarch64-w64-mingw32-msvcrt/lib/gcc/aarch64-w64-mingw32/15.0.1/../../../../aarch64-w64-mingw32/bin/ld: src/.libs/libwinpthread_la-barrier.o: in function `_InterlockedDecrement':
/home/radekbarton/cross-aarch64-w64-mingw32-msvcrt/aarch64-w64-mingw32/include/psdk_inc/intrin-impl.h:1705:
/home/radekbarton/cross-aarch64-w64-mingw32-msvcrt/lib/gcc/aarch64-w64-mingw32/15.0.1/../../../../aarch64-w64-mingw32/bin/ld: /home/radekbarton/cross-aarch64-w64-mingw32-msvcrt/aarch64-w64-mingw32/include/psdk_inc/intrin-impl.h:1672:(.text+0x1d2c): undefined reference to `__aarch64_ldadd4_sync'
collect2: error: ld returned 1 exit status
make[4]: *** [Makefile:706: libwinpthread.la] Error 1
The root cause is that https://github.com/Windows-on-ARM-Experiments/mingw-woarm64/blob/woarm64/mingw-w64-headers/include/psdk_inc/intrin-impl.h#L1760 file references GCC built-in functions like __sync_val_compare_and_swap that is implemented using __aarch64_cas8_sync LSE intrinsic in libgcc.a but the libwinpthread links against fakelib that does not define those symbols.
One possible workaround is to add -mno-outline-atomics to CFLAGS when building both mingw-w64-crt and mingw-w64-winpthreads.
Another workaround is:
--- a/mingw-w64-libraries/winpthreads/Makefile.am
+++ b/mingw-w64-libraries/winpthreads/Makefile.am
@@ -19,7 +19,7 @@ AM_CFLAGS += -nologo
libwinpthread_la_CPPFLAGS += -D_CRT_NONSTDC_NO_WARNINGS
else
libwinpthread_la_CPPFLAGS += -D__USE_MINGW_ANSI_STDIO=0
-libwinpthread_la_LDFLAGS += -L$(builddir)/fakelib -Wc,-no-pthread
+libwinpthread_la_LDFLAGS += -Wc,-no-pthread
EXTRA_libwinpthread_la_DEPENDENCIES = fakelib/libgcc.a fakelib/libgcc_eh.a fakelib/libgcc_s.a
# Break circular dep on bootstrap
diff --git a/mingw-w64-libraries/winpthreads/Makefile.in b/mingw-w64-libraries/winpthreads/Makefile.in
index e14a95843..7561b16d9 100644
--- a/mingw-w64-libraries/winpthreads/Makefile.in
+++ b/mingw-w64-libraries/winpthreads/Makefile.in
@@ -93,7 +93,7 @@ host_triplet = @host@
@MSVC_TRUE@am__append_1 = -nologo
@MSVC_TRUE@am__append_2 = -D_CRT_NONSTDC_NO_WARNINGS
@MSVC_FALSE@am__append_3 = -D__USE_MINGW_ANSI_STDIO=0
-@MSVC_FALSE@am__append_4 = -L$(builddir)/fakelib -Wc,-no-pthread
+@MSVC_FALSE@am__append_4 = -Wc,-no-pthread
@COPY_STATIC_TRUE@am__append_5 = libpthread.a
@COPY_SHARED_TRUE@am__append_6 = libpthread.dll.a
subdir = .