diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index cf1adddd..00e05593 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -16,6 +16,7 @@ jobs: name: "Build CLIs ${{ matrix.target }} (${{ matrix.os }})" runs-on: ${{ matrix.os }} strategy: + fail-fast: false matrix: include: - target: aarch64-pc-windows-msvc @@ -64,6 +65,21 @@ jobs: uses: actions-rust-lang/setup-rust-toolchain@v1.8.0 with: cache-workspaces: "./libs -> ./target" + components: llvm-tools-preview + - name: Install linker (Windows) + if: ${{ matrix.os == 'windows-2022' }} + uses: taiki-e/install-action@v2 + with: + tool: cargo-binutils + - name: Install linker (Linux) + if: ${{ matrix.os == 'ubuntu-22.04' }} + run: | + sudo apt-get update + sudo apt-get install lld clang + - name: Install linker (MacOS) + if: ${{ matrix.os == 'macos-12' || matrix.os == 'macos-14' }} + run: | + brew install llvm - name: Build CLI run: | cd libs @@ -215,9 +231,23 @@ jobs: - name: Install Rust stable toolchain uses: actions-rust-lang/setup-rust-toolchain@v1.8.0 with: - components: rustfmt + components: rustfmt, llvm-tools-preview rustflags: "" cache-workspaces: "./libs -> ./target" + - name: Install linker (Windows) + if: ${{ matrix.os == 'windows-2022' }} + uses: taiki-e/install-action@v2 + with: + tool: cargo-binutils + - name: Install linker (Linux) + if: ${{ matrix.os == 'ubuntu-22.04' }} + run: | + sudo apt-get update + sudo apt-get install lld clang + - name: Install linker (MacOS) + if: ${{ matrix.os == 'macos-12' || matrix.os == 'macos-14' }} + run: | + brew install llvm - name: Download pavex CLI artifact uses: actions/download-artifact@v4 with: diff --git a/.gitignore b/.gitignore index babe2434..4a2e78f5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ /libs/ui_test_envs2 /libs/target /libs/vendor -/libs/.cargo /doc_examples/tutorial_envs/ /doc_examples/**/target /examples/**/vendor diff --git a/libs/.cargo/config.toml b/libs/.cargo/config.toml new file mode 100644 index 00000000..3cc95a6c --- /dev/null +++ b/libs/.cargo/config.toml @@ -0,0 +1,20 @@ +# On Windows +# ``` +# cargo install -f cargo-binutils +# rustup component add llvm-tools-preview +[target.x86_64-pc-windows-msvc] +rustflags = ["-C", "link-arg=-fuse-ld=lld"] +[target.x86_64-pc-windows-gnu] +rustflags = ["-C", "link-arg=-fuse-ld=lld"] + +# On Linux: +# - Ubuntu, `sudo apt-get install lld clang` +# - Arch, `sudo pacman -S lld clang` +[target.x86_64-unknown-linux-gnu] +rustflags = ["-C", "linker=clang", "-C", "link-arg=-fuse-ld=lld"] + +# On MacOS, `brew install llvm` and follow steps in `brew info llvm` +[target.x86_64-apple-darwin] +rustflags = ["-C", "link-arg=-fuse-ld=/usr/local/opt/llvm/bin/ld64.lld"] +[target.aarch64-apple-darwin] +rustflags = ["-C", "link-arg=-fuse-ld=/opt/homebrew/opt/llvm/bin/ld64.lld"] diff --git a/libs/pavex_test_runner/src/lib.rs b/libs/pavex_test_runner/src/lib.rs index ce6891f1..448a37d6 100644 --- a/libs/pavex_test_runner/src/lib.rs +++ b/libs/pavex_test_runner/src/lib.rs @@ -621,6 +621,28 @@ impl TestData { toml::to_string(&cargo_toml)?.as_bytes(), )?; + let cargo_config = toml! { + [build] + incremental = false + + [target.x86_64-pc-windows-msvc] + rustflags = ["-C", "link-arg=-fuse-ld=lld"] + [target.x86_64-pc-windows-gnu] + rustflags = ["-C", "link-arg=-fuse-ld=lld"] + [target.x86_64-unknown-linux-gnu] + rustflags = ["-C", "linker=clang", "-C", "link-arg=-fuse-ld=lld"] + [target.x86_64-apple-darwin] + rustflags = ["-C", "link-arg=-fuse-ld=/usr/local/opt/llvm/bin/ld64.lld"] + [target.aarch64-apple-darwin] + rustflags = ["-C", "link-arg=-fuse-ld=/opt/homebrew/opt/llvm/bin/ld64.lld"] + }; + let dot_cargo_folder = self.runtime_directory.join(".cargo"); + fs_err::create_dir_all(&dot_cargo_folder)?; + persist_if_changed( + &dot_cargo_folder.join("config.toml"), + toml::to_string(&cargo_config)?.as_bytes(), + )?; + let main_rs = format!( r##"use app_{}::blueprint; use pavex_cli_client::{{Client, config::Color}};