bazelbuild / rules_rust

Rust rules for Bazel
https://bazelbuild.github.io/rules_rust/
Apache License 2.0
656 stars 419 forks source link

Cannot run wasm-bindgen on windows #2816

Open Frizi opened 1 month ago

Frizi commented 1 month ago

Wasm-bindgen default toolchain fails to build due to MAX_PATH issues when invoking msvc's cl.exe. I can't find any way to get around that issue. Could the path be shortened in some way?

MODULE.bazel:

RUST_EDITION = "2021"
RUST_VERSION = "1.79.0"

bazel_dep(name = "rules_rust", version = "0.49.1")
rust = use_extension("@rules_rust//rust:extensions.bzl", "rust")
rust.toolchain(edition = RUST_EDITION, versions = [RUST_VERSION])
use_repo(rust, "rust_toolchains")
register_toolchains("@rust_toolchains//:all")
register_toolchains("@rules_rust//wasm_bindgen:default_wasm_bindgen_toolchain")
# not exposed for bzlmod, just use a private for now
register_toolchains("@rules_rust//rust/private/dummy_cc_toolchain:dummy_cc_wasm32_toolchain")

crate = use_extension("@rules_rust//crate_universe:extension.bzl", "crate")
crate.from_cargo(
    name = "crates",
    cargo_lockfile = "//:Cargo.lock",
    cargo_config = "//:.cargo/config.toml",
    manifests = [
        "//:Cargo.toml",
        "//packages/wasmlib:Cargo.toml",
    ],
)
use_repo(crate, "crates")

packages/wasmlib/BUILD.bazel:

load("@rules_rust//rust:defs.bzl", "rust_shared_library")
load("@rules_rust//wasm_bindgen:defs.bzl", "rust_wasm_bindgen")
load("@crates//:defs.bzl", "aliases", "all_crate_deps")

rust_shared_library(
    name = "rust_lib",
    srcs = glob(["src/**/*.rs"]),
    edition = "2021",
    aliases = aliases(),
    proc_macro_deps = all_crate_deps(proc_macro = True),
    deps = all_crate_deps(normal = True),
)

rust_wasm_bindgen(
    name = "wasm_lib",
    target = "bundler",
    wasm_file = ":rust_lib",
)

error log:

➜ bazel build //packages/wasmlib:wasm_lib
INFO: Invocation ID: cd207d85-ae7e-49c7-8fb8-406fc10deced
WARNING: Build option --toolchain_resolution_debug has changed, discarding analysis cache (this can be expensive, see https://bazel.build/advanced/performance/iteration-speed).
INFO: Analyzed target //packages/wasmlib:wasm_lib (265 packages loaded, 7408 targets configured).
ERROR: C:/bzl/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/BUILD.bazel:180:19: Running Cargo build script ring [for tool] failed: (Exit 1): cargo_build_script_runner.exe failed: error executing CargoBuildScriptRun command (from target @@rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5//:_bs)
  cd /d C:/bzl/execroot/_main
  SET AR=C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.36.32532/bin/HostX64/x64/lib.exe
    SET CARGO_CRATE_NAME=ring
    SET CARGO_ENCODED_RUSTFLAGS=--sysroot=${pwd}/bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~rust~rust_windows_x86_64__x86_64-pc-windows-msvc__stable_tools/rust_toolchain\x1f--cap-lints=allow
    SET CARGO_FEATURE_ALLOC=1
    SET CARGO_FEATURE_DEFAULT=1
    SET CARGO_FEATURE_DEV_URANDOM_FALLBACK=1
    SET CARGO_MANIFEST_DIR=bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/_bs_.exe.runfiles/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/
    SET CARGO_MANIFEST_LINKS=ring_core_0_17_5
    SET CARGO_PKG_NAME=ring
    SET CARGO_PKG_VERSION=0.17.5
    SET CARGO_PKG_VERSION_MAJOR=0
    SET CARGO_PKG_VERSION_MINOR=17
    SET CARGO_PKG_VERSION_PATCH=5
    SET CARGO_PKG_VERSION_PRE=
    SET CC=C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.36.32532/bin/HostX64/x64/cl.exe
    SET CFLAGS=/nologo /DCOMPILER_MSVC /DNOMINMAX /D_WIN32_WINNT=0x0601 /D_CRT_SECURE_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS /bigobj /Zm500 /EHsc /wd4351 /wd4291 /wd4250 /wd4996 /showIncludes /MD /O2 /Oy- /DNDEBUG /wd4117 -D__DATE__="redacted" -D__TIMESTAMP__="redacted" -D__TIME__="redacted" /Gy /Gw
    SET CXX=C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.36.32532/bin/HostX64/x64/cl.exe
    SET CXXFLAGS=/nologo /DCOMPILER_MSVC /DNOMINMAX /D_WIN32_WINNT=0x0601 /D_CRT_SECURE_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS /bigobj /Zm500 /EHsc /wd4351 /wd4291 /wd4250 /wd4996 /showIncludes /MD /O2 /Oy- /DNDEBUG /wd4117 -D__DATE__="redacted" -D__TIMESTAMP__="redacted" -D__TIME__="redacted" /Gy /Gw
    SET DEBUG=false
    SET HOST=x86_64-pc-windows-msvc
    SET INCLUDE=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\ATLMFC\include;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\VS\include;C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\um;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\shared;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\winrt;C:\Program Files (x86)\Windows Kits\10\\include\10.0.22621.0\\cppwinrt;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um
    SET LD=C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.36.32532/bin/HostX64/x64/link.exe
    SET LDFLAGS=/nologo /SUBSYSTEM:CONSOLE advapi32.lib ws2_32.lib userenv.lib Bcrypt.lib /MACHINE:X64 /DEFAULTLIB:msvcrt.lib /OPT:ICF /OPT:REF
    SET LIB=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\ATLMFC\lib\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\lib\x64;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x64;C:\Program Files (x86)\Windows Kits\10\lib\10.0.22621.0\ucrt\x64;C:\Program Files (x86)\Windows Kits\10\\lib\10.0.22621.0\\um\x64
    SET NUM_JOBS=1
    SET OPT_LEVEL=3
    SET PATH=C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\bin\HostX64\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\VCPackages;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TestWindow;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer;C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\bin\Roslyn;C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\;C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\\x64;C:\Program Files (x86)\Windows Kits\10\bin\\x64;C:\Program Files\Microsoft Visual Studio\2022\Community\\MSBuild\Current\Bin\amd64;C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\;;C:\WINDOWS\system32;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\Ninja;C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\Linux\bin\ConnectionManagerExe;C:\Program Files\Microsoft Visual Studio\2022\Community\VC\vcpkg
    SET PROFILE=release
    SET RUSTC=bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~rust~rust_windows_x86_64__x86_64-pc-windows-msvc__stable_tools/rust_toolchain/bin/rustc.exe
    SET TARGET=x86_64-pc-windows-msvc
    SET TEMP=C:\Users\Frizi\AppData\Local\Temp
    SET TMP=C:\Users\Frizi\AppData\Local\Temp
  bazel-out\x64_windows-opt-exec-ST-d57f47055a04\bin\external\rules_rust~\cargo\cargo_build_script_runner\cargo_build_script_runner.exe bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/_bs_.exe ring_core_0_17_5 bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/_bs.out_dir bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/_bs.env bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/_bs.flags bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/_bs.linkflags bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/_bs.linksearchpaths bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/_bs.depenv bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/_bs.stdout.log bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/_bs.stderr.log
# Configuration: a196221f9a68c2820d15302c9bef8e3fbd8d5f147eacd0180e7deff4b4900fce
# Execution platform: @@platforms//host:host
Build script process failed with exit code 1
--stdout:
cargo:rerun-if-env-changed=RING_PREGENERATE_ASM
cargo:rustc-env=RING_CORE_PREFIX=ring_core_0_17_5_
OPT_LEVEL = Some("3")
TARGET = Some("x86_64-pc-windows-msvc")
HOST = Some("x86_64-pc-windows-msvc")
cargo:rerun-if-env-changed=CC_x86_64-pc-windows-msvc
CC_x86_64-pc-windows-msvc = None
cargo:rerun-if-env-changed=CC_x86_64_pc_windows_msvc
CC_x86_64_pc_windows_msvc = None
cargo:rerun-if-env-changed=HOST_CC
HOST_CC = None
cargo:rerun-if-env-changed=CC
CC = Some("C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.36.32532/bin/HostX64/x64/cl.exe")
cargo:rerun-if-env-changed=CRATE_CC_NO_DEFAULTS
CRATE_CC_NO_DEFAULTS = None
CARGO_CFG_TARGET_FEATURE = Some("cmpxchg16b,fxsr,sse,sse2,sse3")
DEBUG = Some("false")
cargo:rerun-if-env-changed=CFLAGS_x86_64-pc-windows-msvc
CFLAGS_x86_64-pc-windows-msvc = None
cargo:rerun-if-env-changed=CFLAGS_x86_64_pc_windows_msvc
CFLAGS_x86_64_pc_windows_msvc = None
cargo:rerun-if-env-changed=HOST_CFLAGS
HOST_CFLAGS = None
cargo:rerun-if-env-changed=CFLAGS
CFLAGS = Some("/nologo /DCOMPILER_MSVC /DNOMINMAX /D_WIN32_WINNT=0x0601 /D_CRT_SECURE_NO_DEPRECATE /D_CRT_SECURE_NO_WARNINGS /bigobj /Zm500 /EHsc /wd4351 /wd4291 /wd4250 /wd4996 /showIncludes /MD /O2 /Oy- /DNDEBUG /wd4117 -D__DATE__=\"redacted\" -D__TIMESTAMP__=\"redacted\" -D__TIME__=\"redacted\" /Gy /Gw")
running: "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.36.32532/bin/HostX64/x64/cl.exe" "-nologo" "-MD" "-O2" "-Brepro" "/nologo" "/DCOMPILER_MSVC" "/DNOMINMAX" "/D_WIN32_WINNT=0x0601" "/D_CRT_SECURE_NO_DEPRECATE" "/D_CRT_SECURE_NO_WARNINGS" "/bigobj" "/Zm500" "/EHsc" "/wd4351" "/wd4291" "/wd4250" "/wd4996" "/showIncludes" "/MD" "/O2" "/Oy-" "/DNDEBUG" "/wd4117" "-D__DATE__=\"redacted\"" "-D__TIMESTAMP__=\"redacted\"" "-D__TIME__=\"redacted\"" "/Gy" "/Gw" "-I" "include" "-I" "C:\\bzl\\execroot\\_main\\bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/_bs.out_dir" "/Gy" "/Zc:wchar_t" "/Zc:forScope" "/Zc:inline" "/Wall" "/wd4127" "/wd4464" "/wd4514" "/wd4710" "/wd4711" "/wd4820" "/wd5045" "-DNDEBUG" "-FoC:\\bzl\\execroot\\_main\\bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/_bs.out_dir\\crypto/curve25519/curve25519.o" "-c" "crypto/curve25519/curve25519.c"
curve25519.c
Note: including file: include\ring-core/mem.h
Note: including file:  include\ring-core/base.h
Note: including file:   C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\stddef.h
Note: including file:    C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\corecrt.h
Note: including file:     C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\vcruntime.h
Note: including file:      C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\sal.h
Note: including file:       C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\concurrencysal.h
Note: including file:      C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\vadefs.h
Note: including file:   C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\stdint.h
Note: including file:   include\ring-core/target.h
Note: including file:   C:\bzl\execroot\_main\bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/_bs.out_dir\ring_core_generated/prefix_symbols.h
Note: including file:   include\ring-core/type_check.h
Note: including file:    include\ring-core/base.h
Note: including file: C:\bzl\execroot\_main\bazel-out\x64_windows-opt-exec-ST-d57f47055a04\bin\external\rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5\_bs_.exe.runfiles\rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5\crypto\curve25519\internal.h
Note: including file:  C:\bzl\execroot\_main\bazel-out\x64_windows-opt-exec-ST-d57f47055a04\bin\external\rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5\_bs_.exe.runfiles\rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5\crypto\curve25519\../internal.h
Note: including file:   include\ring-core/check.h
Note: including file:    C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\assert.h
Note: including file:   C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\stdlib.h
Note: including file:    C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\corecrt_malloc.h
Note: including file:    C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\corecrt_search.h
Note: including file:    C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\corecrt_wstdlib.h
Note: including file:    C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\limits.h
Note: including file:   C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\string.h
Note: including file:    C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\corecrt_memory.h
Note: including file:     C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\corecrt_memcpy_s.h
Note: including file:      C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\errno.h
Note: including file:      C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.36.32532\include\vcruntime_string.h
Note: including file:    C:\Program Files (x86)\Windows Kits\10\include\10.0.22621.0\ucrt\corecrt_wstring.h
Note: including file: C:\bzl\execroot\_main\bazel-out\x64_windows-opt-exec-ST-d57f47055a04\bin\external\rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5\_bs_.exe.runfiles\rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5\crypto\curve25519\./curve25519_tables.h
crypto/curve25519/curve25519.c(52): fatal error C1083: Cannot open include file: '../../third_party/fiat/curve25519_64_msvc.h': No such file or directory
exit code: 2

--stderr:

error occurred: Command "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.36.32532/bin/HostX64/x64/cl.exe" "-nologo" "-MD" "-O2" "-Brepro" "/nologo" "/DCOMPILER_MSVC" "/DNOMINMAX" "/D_WIN32_WINNT=0x0601" "/D_CRT_SECURE_NO_DEPRECATE" "/D_CRT_SECURE_NO_WARNINGS" "/bigobj" "/Zm500" "/EHsc" "/wd4351" "/wd4291" "/wd4250" "/wd4996" "/showIncludes" "/MD" "/O2" "/Oy-" "/DNDEBUG" "/wd4117" "-D__DATE__=\"redacted\"" "-D__TIMESTAMP__=\"redacted\"" "-D__TIME__=\"redacted\"" "/Gy" "/Gw" "-I" "include" "-I" "C:\\bzl\\execroot\\_main\\bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/_bs.out_dir" "/Gy" "/Zc:wchar_t" "/Zc:forScope" "/Zc:inline" "/Wall" "/wd4127" "/wd4464" "/wd4514" "/wd4710" "/wd4711" "/wd4820" "/wd5045" "-DNDEBUG" "-FoC:\\bzl\\execroot\\_main\\bazel-out/x64_windows-opt-exec-ST-d57f47055a04/bin/external/rules_rust~~i~rules_rust_wasm_bindgen__ring-0.17.5/_bs.out_dir\\crypto/curve25519/curve25519.o" "-c" "crypto/curve25519/curve25519.c" with args "cl.exe" did not execute successfully (status code exit code: 2).

Target //packages/wasmlib:wasm_lib failed to build
INFO: Elapsed time: 3.141s, Critical Path: 0.51s
INFO: 9 processes: 9 internal.
ERROR: Build did NOT complete successfully

The file that supposedly "doesn't exist" actually do exist. It's just that the long header file path combined with the relative path in #include overflows MAX_PATH, making cl.exe barf out a nonsense exit code.