Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

aws-lc-sys fails to compile for x86_64-pc-windows-gnu host #696

Open
ognevny opened this issue Feb 14, 2025 · 15 comments
Open

aws-lc-sys fails to compile for x86_64-pc-windows-gnu host #696

ognevny opened this issue Feb 14, 2025 · 15 comments

Comments

@ognevny
Copy link

ognevny commented Feb 14, 2025

Problem:

while working at msys2/MINGW-packages#23391 I've got compile errors with missing boringssl includes. MSYS2 doesn't provide boringssl package. I'm sure that submodules are fetched properly and required build dependencies are installed. anyway generated headers are missed in CARGO_TARGET_DIR

Relevant details

AWS-LC for Rust versions or commit: aws-lc-sys v0.25.0

System information: can be found in github actions run below

Build log:
https://github.com/msys2/MINGW-packages/actions/runs/13323638143/job/37212571202#step:11:1788

@mati865
Copy link

mati865 commented Feb 15, 2025

In CMakeCache.txt there are these lines:

//No help, variable specified on the command line.
CMAKE_ASM_FLAGS:UNINITIALIZED= -ffunction-sections -fdata-sections -m64 --target=x86_64-pc-windows-gnu -ffunction-sections -fdata-sections -gdwarf-2 -fno-omit-frame-pointer -m64 --target=x86_64-pc-windows-gnu -std=c11 -I H:\msys64\tmp\aws-lc-rs\aws-lc-sys\generated-include -I H:\msys64\tmp\aws-lc-rs\aws-lc-sys\include -I H:\msys64\tmp\aws-lc-rs\aws-lc-sys\aws-lc\include -I H:\msys64\tmp\aws-lc-rs\aws-lc-sys\aws-lc\third_party\s2n-bignum\include -Wall -Wextra -Wno-unused-parameter -pthread -D_XOPEN_SOURCE=700 -DBORINGSSL_IMPLEMENTATION=1 -DBORINGSSL_PREFIX=aws_lc_0_26_0

//Flags used by the ASM_NASM compiler during all build types.
CMAKE_ASM_NASM_FLAGS:STRING=

I suppose instead of CMAKE_ASM_FLAGS the flags should go to CMAKE_ASM_NASM_FLAGS? Although I'm not that experienced with CMake, so I could be wrong here.

@ognevny
Copy link
Author

ognevny commented Feb 15, 2025

In CMakeCache.txt there are these lines:

where is this file located?

edit: nevermind, I found it

@ognevny
Copy link
Author

ognevny commented Feb 15, 2025

I've workarounded it by passing export CFLAGS="$CFLAGS -I$(cygpath -am ${srcdir}/aws-lc-rs/aws-lc-sys/aws-lc/include)" (inside of zed recipe) manually before build

@ognevny
Copy link
Author

ognevny commented Feb 15, 2025

huh?

error: linking with `x86_64-w64-mingw32-clang` failed: exit code: 1
  |
  = note: "x86_64-w64-mingw32-clang" "-Wl,C:\\Users\\maksa\\AppData\\Local\\Temp\\rustcnzSrYQ\\list.def" "-nolibc" "--unwindlib=none" "-m64" "C:\\Users\\maksa\\AppData\\Local\\Temp\\rustcnzSrYQ\\symbols.o" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\rustls_platform_verifier-c0aabb9c92a8e78c.rustls_platform_verifier.f1ea92f7bf2b3c19-cgu.0.rcgu.o" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\rustls_platform_verifier-c0aabb9c92a8e78c.earo5ytkmksyb9b3s51cygcod.rcgu.o" "-Wl,-Bstatic" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libwindows_sys-e21cd46e5f5c3ea7.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libwindows_targets-40d05ee9a1d7cba0.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libonce_cell-2bb2372d1ff8c12f.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\librustls-15ca1ae29c2c324c.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libsubtle-268779909dee740b.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libwebpki-d42370efe6665ac1.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libaws_lc_rs-f1411be7822ee305.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libaws_lc_sys-32f7345d44df1ef8.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libring-97e10a5a9e54d289.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libgetrandom-d6ac76f53555f973.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libspin-3f6627eb217a1881.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\liblock_api-f40f5679b24db94b.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libscopeguard-5e74f98728429845.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libuntrusted-f29ea2256874a040.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libcfg_if-4c020f47987b3eac.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libzeroize-c714da62fd5f4e87.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\librustls_pki_types-f63ebcef71d53ead.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\liblog-47224a1abf63b262.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libvalue_bag-0dd600c7177a4a20.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libvalue_bag_serde1-ecbada867e4215fa.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libserde_fmt-879890945828655e.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\liberased_serde-f609069a6afa1b5c.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libtypeid-b74ff3563d381ed3.rlib" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\libserde-a043e2fa6142f570.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libstd-410fa91fa6dc1c59.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libpanic_unwind-d25a646625fd5962.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libobject-97be30568f44e201.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libmemchr-9ccb84e9ace50ead.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libaddr2line-b8efe78a7440a5ae.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libgimli-0c29cef0213b4cfa.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libwindows_targets-29189256c55ada09.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\librustc_demangle-8d2162f42a9d8448.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libstd_detect-4ce03d674c2ce574.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libhashbrown-07caeeada9ffcfc7.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\librustc_std_workspace_alloc-8ef1298b3d45de35.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libminiz_oxide-6c60a6dacce7402f.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libadler-f85df1e394c4074a.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libunwind-f28474fa1b1ddc77.rlib" "-lunwind" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libcfg_if-8b20dc020b3ff935.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\liblibc-abdc72e4a099e8b5.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\liballoc-75803d6e5e196793.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\librustc_std_workspace_core-67ec541f3468b9d1.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libcore-46b711d94a09abb1.rlib" "C:\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libcompiler_builtins-b74f3bce47921798.rlib" "-Wl,-Bdynamic" "-lwindows.0.52.0" "-lbcrypt" "-ladvapi32" "-lkernel32" "-lkernel32" "-ladvapi32" "-lntdll" "-luserenv" "-lws2_32" "-ldbghelp" "-lmingw32" "-lmingwex" "-lmsvcrt" "-lkernel32" "-luser32" "-Wl,--nxcompat" "-L" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\build\\aws-lc-sys-3b8fcfd20c9a3f8a\\out\\build\\artifacts" "-L" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\build\\ring-ffb63d62ee25928a\\out" "-L" "C:\\Users\\maksa\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\windows_x86_64_gnullvm-0.52.6\\lib" "-o" "C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\rustls_platform_verifier-c0aabb9c92a8e78c.dll" "-Wl,--gc-sections" "-shared" "-Wl,--out-implib=C:\\msys64\\home\\maksa\\forks\\MINGW-packages\\mingw-w64-zed\\src\\zed\\target\\release\\deps\\librustls_platform_verifier-c0aabb9c92a8e78c.dll.a" "-Wl,-O1" "-Wl,--strip-debug" "-fuse-ld=lld"
  = note: x86_64-w64-mingw32-clang: warning: argument unused during compilation: '-nolibc' [-Wunused-command-line-argument]␍
          ld.lld: error: undefined symbol: pthread_rwlock_init␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_MUTEX_init)␍
          ␍
          ld.lld: error: undefined symbol: pthread_rwlock_rdlock␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_MUTEX_lock_read)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_STATIC_MUTEX_lock_read)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_STATIC_MUTEX_lock_read)␍
          ␍
          ld.lld: error: undefined symbol: pthread_rwlock_wrlock␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_MUTEX_lock_write)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_STATIC_MUTEX_lock_write)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_STATIC_MUTEX_lock_write)␍
          ␍
          ld.lld: error: undefined symbol: pthread_rwlock_unlock␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_MUTEX_unlock_read)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_MUTEX_unlock_write)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_STATIC_MUTEX_unlock_read)␍
          >>> referenced 1 more times␍
          ␍
          ld.lld: error: undefined symbol: pthread_rwlock_destroy␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_MUTEX_cleanup)␍
          ␍
          ld.lld: error: undefined symbol: sched_yield␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_STATIC_MUTEX_lock_read)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_STATIC_MUTEX_lock_write)␍
          ␍
          ld.lld: error: undefined symbol: pthread_once␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_once)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_get_thread_local)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_set_thread_local)␍
          ␍
          ld.lld: error: undefined symbol: pthread_getspecific␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_get_thread_local)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_set_thread_local)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_AWSLC_thread_local_clear)␍
          ␍
          ld.lld: error: undefined symbol: pthread_key_create␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(thread_local_init)␍
          ␍
          ld.lld: error: undefined symbol: pthread_mutex_lock␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_set_thread_local)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_AWSLC_thread_local_clear)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(thread_local_destructor)␍
          ␍
          ld.lld: error: undefined symbol: pthread_mutex_unlock␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_set_thread_local)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_AWSLC_thread_local_clear)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(thread_local_destructor)␍
          ␍
          ld.lld: error: undefined symbol: pthread_setspecific␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_set_thread_local)␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_AWSLC_thread_local_clear)␍
          ␍
          ld.lld: error: undefined symbol: pthread_key_delete␍
          >>> referenced by libaws_lc_sys-32f7345d44df1ef8.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_AWSLC_thread_local_shutdown)␍
          x86_64-w64-mingw32-clang: error: linker command failed with exit code 1 (use -v to see invocation)␍

@ognevny
Copy link
Author

ognevny commented Feb 15, 2025

turns out that this is CLANG64 only issue

maxdeviant pushed a commit to zed-industries/zed that referenced this issue Feb 15, 2025
CLANG64 version of Zed is being removed in
msys2/MINGW-packages#23391 due to build issue
with `aws-lc-sys`:
aws/aws-lc-rs#696 (comment)

Closes #ISSUE

Release Notes:

- N/A
@mati865
Copy link

mati865 commented Feb 15, 2025

Clang does not link pthread on Windows by default, and it should not be necessary. So, the fact that something requires it is another bug with the library.

@ognevny
Copy link
Author

ognevny commented Feb 15, 2025

Clang does not link pthread on Windows by default, and it should not be necessary. So, the fact that something requires it is another bug with the library.

-pthread is used as an option, and C source literally requires it

@mati865
Copy link

mati865 commented Feb 15, 2025

If you inspect x86_64-w64-mingw32-clang arguments from the error there is no -pthread or -lpthread.
It shouldn't be necessary because native Win32 solution is present (otherwise it wouldn't work with MSVC). So, the fact the native Win32 code path is not used is an error.

@ognevny
Copy link
Author

ognevny commented Feb 15, 2025

patching this header allows compiling for win32 threads, but threads_win.c seems to have lots of MSVC things...

@mati865
Copy link

mati865 commented Feb 15, 2025

Ah, that's unfortunate. GCC is probably never going to support a lot of this stuff.
I believe your patch is mostly correct, but _tls_used might need more consideration.

@ognevny
Copy link
Author

ognevny commented Feb 15, 2025

I believe your patch is mostly correct, but _tls_used might need more consideration.

feel free to fix patch if needed. thankfully CLANG64 Zed now launches and even works (probably) properly

@justsmth
Copy link
Contributor

Sorry for the delayed response on this. I see that the PR referenced was merged, but there's still an issue compiling with clang64 on Windows? We do have CI jobs to test compilation for the x86_64-pc-windows-gnu and i686-pc-windows-gnu targets, but I believe they only use gcc (not clang).

Do you have any guidance on how I could reproduce this error?

@ognevny
Copy link
Author

ognevny commented Feb 18, 2025

Sorry for the delayed response on this. I see that the PR referenced was merged, but there's still an issue compiling with clang64 on Windows?

I fixed it later

We do have CI jobs to test compilation for the x86_64-pc-windows-gnu and i686-pc-windows-gnu targets, but I believe they only use gcc (not clang).

it's another target, x86_64-pc-windows-gnullvm

Do you have any guidance on how I could reproduce this error?

you need to use CLANG64 environment first. then build steps should be the same as for x86_64-pc-windows-gnu or i686-pc-windows-gnu targets.

fixing an issue with clang requires patch for aws-lc itself. the patch can be upstreamed, but thread_win.c change should be not just gating uncompilable code

@ognevny
Copy link
Author

ognevny commented Feb 18, 2025

you need to use CLANG64 environment first. then build steps should be the same as for x86_64-pc-windows-gnu or i686-pc-windows-gnu targets.

oh, I see you don't use msys2 in CI, so using it will be harder. you can try to use llvm-mingw to get clang

@mati865
Copy link

mati865 commented Feb 18, 2025

To get this correctly, there are two distinct issues here:

Sorry for the delayed response on this. I see that the PR referenced was merged

It wasn't fixed, only a hack/workaround was applied at downstream:

I've workarounded it by passing export CFLAGS="$CFLAGS -I$(cygpath -am ${srcdir}/aws-lc-rs/aws-lc-sys/aws-lc/include)" (inside of zed recipe) manually before build

but there's still an issue compiling with clang64 on Windows?

Another downstream hack/workaround was applied:

fixing an issue with clang requires patch for aws-lc itself. the patch can be upstreamed, but thread_win.c change should be not just gating uncompilable code


First issue affects both x86_64-pc-windows-gnu and x86_64-pc-windows-gnullvm targets. IIUC it's caused because CMake flags are set to the wrong variable: #696 (comment)

That would explain why manually adding these flags mitigates it.

Build error:
    -- Build files have been written to: C:/_/B/src/zed/target/release/build/aws-lc-sys-e5bc9c1e4614afcc/out/build
    running: "cmake" "--build" "C:\\_\\B\\src\\zed\\target\\release\\build\\aws-lc-sys-e5bc9c1e4614afcc\\out\\build" "--target" "install" "--config" "Release" "--parallel" "4"
    [  0%] Built target boringssl_prefix_symbols
    [  1%] Building C object aws-lc/crypto/fipsmodule/CMakeFiles/fipsmodule.dir/bcm.c.obj
    [  1%] Building C object aws-lc/crypto/fipsmodule/CMakeFiles/fipsmodule.dir/fips_shared_support.c.obj
    [  1%] Building C object aws-lc/crypto/CMakeFiles/crypto_objects.dir/asn1/a_bitstr.c.obj
    [  1%] Building C object aws-lc/crypto/fipsmodule/CMakeFiles/fipsmodule.dir/cpucap/cpucap.c.obj
    [  2%] Building C object aws-lc/crypto/CMakeFiles/crypto_objects.dir/asn1/a_bool.c.obj
  
    --- stderr
    CMake Deprecation Warning at CMakeLists.txt:4 (cmake_minimum_required):
      Compatibility with CMake < 3.10 will be removed from a future version of
      CMake.
  
      Update the VERSION argument <min> value.  Or, use the <min>...<max> syntax
      to tell CMake that the project requires at least <min> but has been updated
      to work with policies introduced by <max> or earlier.
  
  
    CMake Deprecation Warning at aws-lc/CMakeLists.txt:1 (cmake_minimum_required):
      Compatibility with CMake < 3.10 will be removed from a future version of
      CMake.
  
      Update the VERSION argument <min> value.  Or, use the <min>...<max> syntax
      to tell CMake that the project requires at least <min> but has been updated
      to work with policies introduced by <max> or earlier.
  
  
    Copying platform assembly files from C:/_/B/src/aws-lc-rs/aws-lc-sys/aws-lc/generated-src/win-x86_64/crypto/ to C:/_/B/src/zed/target/release/build/aws-lc-sys-e5bc9c1e4614afcc/out/build/aws-lc/crypto
    CMake Warning at CMakeLists.txt:22 (message):
      ###### WARNING: MISSING GIT SUBMODULE ###### Did you initialize the repo's
      git submodules? CMakeLists.txt not found.
  
       -- run 'git submodule update --init --recursive' to initialize.
  
  
    C:/_/B/src/aws-lc-rs/aws-lc-sys/aws-lc/crypto/fipsmodule/bcm.c:37:10: fatal error: openssl/digest.h: No such file or directory
       37 | #include <openssl/digest.h>
          |          ^~~~~~~~~~~~~~~~~~
    compilation terminated.
    C:/_/B/src/aws-lc-rs/aws-lc-sys/aws-lc/crypto/fipsmodule/cpucap/cpucap.c:12:10: fatal error: openssl/cpu.h: No such file or directory
       12 | #include <openssl/cpu.h>
          |          ^~~~~~~~~~~~~~~
    compilation terminated.
    C:/_/B/src/aws-lc-rs/aws-lc-sys/aws-lc/crypto/asn1/a_bitstr.c:63:10: fatal error: openssl/mem.h: No such file or directory
       63 | #include <openssl/mem.h>
          |          ^~~~~~~~~~~~~~~
    compilation terminated.
    make[2]: *** [aws-lc/crypto/fipsmodule/CMakeFiles/fipsmodule.dir/build.make:79: aws-lc/crypto/fipsmodule/CMakeFiles/fipsmodule.dir/bcm.c.obj] Error 1
    make[2]: *** Waiting for unfinished jobs....
    make[2]: *** [aws-lc/crypto/fipsmodule/CMakeFiles/fipsmodule.dir/build.make:107: aws-lc/crypto/fipsmodule/CMakeFiles/fipsmodule.dir/cpucap/cpucap.c.obj] Error 1
    make[2]: *** [aws-lc/crypto/CMakeFiles/crypto_objects.dir/build.make:79: aws-lc/crypto/CMakeFiles/crypto_objects.dir/asn1/a_bitstr.c.obj] Error 1
    make[2]: *** Waiting for unfinished jobs....
    make[1]: *** [CMakeFiles/Makefile2:305: aws-lc/crypto/fipsmodule/CMakeFiles/fipsmodule.dir/all] Error 2
    make[1]: *** Waiting for unfinished jobs....
    C:/_/B/src/aws-lc-rs/aws-lc-sys/aws-lc/crypto/asn1/a_bool.c:59:10: fatal error: openssl/bytestring.h: No such file or directory
       59 | #include <openssl/bytestring.h>
          |          ^~~~~~~~~~~~~~~~~~~~~~
    compilation terminated.
    make[2]: *** [aws-lc/crypto/CMakeFiles/crypto_objects.dir/build.make:93: aws-lc/crypto/CMakeFiles/crypto_objects.dir/asn1/a_bool.c.obj] Error 1
    make[1]: *** [CMakeFiles/Makefile2:239: aws-lc/crypto/CMakeFiles/crypto_objects.dir/all] Error 2
    make: *** [Makefile:136: all] Error 2
    thread 'main' panicked at C:\Users\runneradmin\.cargo\registry\src\index.crates.io-6f17d22bba15001f\cmake-0.1.53\src\lib.rs:1121:5:
  
    command did not execute successfully, got: exit code: 2

Second issue affects happens only when using Clang (or to be specific Clang that is not patched to add -pthread by default). It's caused by the fact https://github.com/aws/aws-lc/blob/main/crypto/thread_pthread.c is used with both GCC and Clang and it assumes pthread library is linked implicitly which isn't the case with Clang on Windows. That's because pthread is not a common library on Windows, and is provided by mingw-w64 project for the compatibility.
GCC when configured to use POSIX threads, always links it, but it can be configured to use Win32 threads by default (just like Clang) and in that case also won't link implicitly link it.

There are two ways to solve this issue for Clang:

  • keep using pthread implementation but explicitly pass -pthread
  • use win32 implementation

I have not benchmarked it, but since pthread on Windows is a wrapper over Win32 API anyway, I suppose that implementation should be faster and perhaps less problematic, because of avoiding the middleware.

Build error:
  error: linking with `x86_64-w64-mingw32-clang` failed: exit code: 1
    |
    = note: "x86_64-w64-mingw32-clang" "-Wl,D:\\M\\msys64\\tmp\\rustcZ3D3mm\\list.def" "-nolibc" "--unwindlib=none" "-m64" "D:\\M\\msys64\\tmp\\rustcZ3D3mm\\symbols.o" "C:\\_\\B\\src\\zed\\target\\release\\deps\\rustls_platform_verifier-182b2daa0bb1a169.rustls_platform_verifier.5672cdf689b53b54-cgu.0.rcgu.o" "C:\\_\\B\\src\\zed\\target\\release\\deps\\rustls_platform_verifier-182b2daa0bb1a169.51i4d5hh3z2ii3err2e1cldxd.rcgu.o" "-Wl,-Bstatic" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libwindows_sys-e21cd46e5f5c3ea7.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libwindows_targets-40d05ee9a1d7cba0.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libonce_cell-2bb2372d1ff8c12f.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\librustls-8fe7c57c3242c16a.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libsubtle-268779909dee740b.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libwebpki-cb0a0e8471967dea.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libaws_lc_rs-48ed4f180bc9e83e.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libaws_lc_sys-31036a1361d73084.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libring-97e10a5a9e54d289.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libgetrandom-d6ac76f53555f973.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libspin-3f6627eb217a1881.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\liblock_api-f40f5679b24db94b.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libscopeguard-5e74f98728429845.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libuntrusted-f29ea2256874a040.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libcfg_if-4c020f47987b3eac.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libzeroize-c714da62fd5f4e87.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\librustls_pki_types-f63ebcef71d53ead.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\liblog-47224a1abf63b262.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libvalue_bag-0dd600c7177a4a20.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libvalue_bag_serde1-ecbada867e4215fa.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libserde_fmt-879890945828655e.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\liberased_serde-f609069a6afa1b5c.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libtypeid-b74ff3563d381ed3.rlib" "C:\\_\\B\\src\\zed\\target\\release\\deps\\libserde-a043e2fa6142f570.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libstd-410fa91fa6dc1c59.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libpanic_unwind-d25a646625fd5962.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libobject-97be30568f44e201.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libmemchr-9ccb84e9ace50ead.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libaddr2line-b8efe78a7440a5ae.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libgimli-0c29cef0213b4cfa.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libwindows_targets-29189256c55ada09.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\librustc_demangle-8d2162f42a9d8448.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libstd_detect-4ce03d674c2ce574.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libhashbrown-07caeeada9ffcfc7.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\librustc_std_workspace_alloc-8ef1298b3d45de35.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libminiz_oxide-6c60a6dacce7402f.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libadler-f85df1e394c4074a.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libunwind-f28474fa1b1ddc77.rlib" "-lunwind" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libcfg_if-8b20dc020b3ff935.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\liblibc-abdc72e4a099e8b5.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\liballoc-75803d6e5e196793.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\librustc_std_workspace_core-67ec541f3468b9d1.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libcore-46b711d94a09abb1.rlib" "D:\\M\\msys64\\clang64\\lib\\rustlib\\x86_64-pc-windows-gnullvm\\lib\\libcompiler_builtins-b74f3bce47921798.rlib" "-Wl,-Bdynamic" "-lwindows.0.52.0" "-lbcrypt" "-ladvapi32" "-lkernel32" "-lkernel32" "-ladvapi32" "-lntdll" "-luserenv" "-lws2_32" "-ldbghelp" "-lmingw32" "-lmingwex" "-lmsvcrt" "-lkernel32" "-luser32" "-Wl,--nxcompat" "-L" "C:\\_\\B\\src\\zed\\target\\release\\build\\aws-lc-sys-0404a1a7bb09777c\\out\\build\\artifacts" "-L" "C:\\_\\B\\src\\zed\\target\\release\\build\\ring-ffb63d62ee25928a\\out" "-L" "C:\\Users\\runneradmin\\.cargo\\registry\\src\\index.crates.io-6f17d22bba15001f\\windows_x86_64_gnullvm-0.52.6\\lib" "-o" "C:\\_\\B\\src\\zed\\target\\release\\deps\\rustls_platform_verifier-182b2daa0bb1a169.dll" "-Wl,--gc-sections" "-shared" "-Wl,--out-implib=C:\\_\\B\\src\\zed\\target\\release\\deps\\librustls_platform_verifier-182b2daa0bb1a169.dll.a" "-Wl,-O1" "-Wl,--strip-debug" "-fuse-ld=lld"
    = note: x86_64-w64-mingw32-clang: warning: argument unused during compilation: '-nolibc' [-Wunused-command-line-argument]␍
            ld.lld: error: undefined symbol: pthread_rwlock_init␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_MUTEX_init)␍
            ␍
            ld.lld: error: undefined symbol: pthread_rwlock_rdlock␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_MUTEX_lock_read)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_STATIC_MUTEX_lock_read)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_STATIC_MUTEX_lock_read)␍
            ␍
            ld.lld: error: undefined symbol: pthread_rwlock_wrlock␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_MUTEX_lock_write)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_STATIC_MUTEX_lock_write)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_STATIC_MUTEX_lock_write)␍
            ␍
            ld.lld: error: undefined symbol: pthread_rwlock_unlock␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_MUTEX_unlock_read)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_MUTEX_unlock_write)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_STATIC_MUTEX_unlock_read)␍
            >>> referenced 1 more times␍
            ␍
            ld.lld: error: undefined symbol: pthread_rwlock_destroy␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_MUTEX_cleanup)␍
            ␍
            ld.lld: error: undefined symbol: sched_yield␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_STATIC_MUTEX_lock_read)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_STATIC_MUTEX_lock_write)␍
            ␍
            ld.lld: error: undefined symbol: pthread_once␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_once)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_get_thread_local)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_set_thread_local)␍
            ␍
            ld.lld: error: undefined symbol: pthread_getspecific␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_get_thread_local)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_set_thread_local)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_AWSLC_thread_local_clear)␍
            ␍
            ld.lld: error: undefined symbol: pthread_key_create␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(thread_local_init)␍
            ␍
            ld.lld: error: undefined symbol: pthread_mutex_lock␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_set_thread_local)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_AWSLC_thread_local_clear)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(thread_local_destructor)␍
            ␍
            ld.lld: error: undefined symbol: pthread_mutex_unlock␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_set_thread_local)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_AWSLC_thread_local_clear)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(thread_local_destructor)␍
            ␍
            ld.lld: error: undefined symbol: pthread_setspecific␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_CRYPTO_set_thread_local)␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_AWSLC_thread_local_clear)␍
            ␍
            ld.lld: error: undefined symbol: pthread_key_delete␍
            >>> referenced by libaws_lc_sys-31036a1361d73084.rlib(thread_pthread.c.obj):(aws_lc_0_25_0_AWSLC_thread_local_shutdown)␍
            x86_64-w64-mingw32-clang: error: linker command failed with exit code 1 (use -v to see invocation)␍
            
  
  error: could not compile `rustls-platform-verifier` (lib) due to 1 previous error
  warning: build failed, waiting for other jobs to finish...

The first issue should have happened on CI. I could reproduce it by cloning this repository and running cargo b few days ago, I don't remember if it was in the repository root or aws-lc-sys though.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants