diff --git a/.bumpversion.toml b/.bumpversion.toml index 402fd573..2caae397 100644 --- a/.bumpversion.toml +++ b/.bumpversion.toml @@ -92,6 +92,11 @@ glob = "node/package.json" replace = "\"@lancedb/vectordb-win32-x64-msvc\": \"{new_version}\"" search = "\"@lancedb/vectordb-win32-x64-msvc\": \"{current_version}\"" +[[tool.bumpversion.files]] +glob = "node/package.json" +replace = "\"@lancedb/vectordb-win32-arm64-msvc\": \"{new_version}\"" +search = "\"@lancedb/vectordb-win32-arm64-msvc\": \"{current_version}\"" + # Cargo files # ------------ [[tool.bumpversion.files]] diff --git a/.cargo/config.toml b/.cargo/config.toml index ec0369f8..7a5e31a8 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -38,3 +38,7 @@ rustflags = ["-C", "target-cpu=apple-m1", "-C", "target-feature=+neon,+fp16,+fhm # not found errors on systems that are missing it. [target.x86_64-pc-windows-msvc] rustflags = ["-Ctarget-feature=+crt-static"] + +# Experimental target for Arm64 Windows +[target.aarch64-pc-windows-msvc] +rustflags = ["-Ctarget-feature=+crt-static"] \ No newline at end of file diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 25a941e8..ab02b499 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -35,21 +35,21 @@ jobs: CC: clang-18 CXX: clang++-18 steps: - - uses: actions/checkout@v4 - with: + - uses: actions/checkout@v4 + with: fetch-depth: 0 lfs: true - - uses: Swatinem/rust-cache@v2 - with: - workspaces: rust - - name: Install dependencies - run: | + - uses: Swatinem/rust-cache@v2 + with: + workspaces: rust + - name: Install dependencies + run: | sudo apt update sudo apt install -y protobuf-compiler libssl-dev - - name: Run format - run: cargo fmt --all -- --check - - name: Run clippy - run: cargo clippy --workspace --tests --all-features -- -D warnings + - name: Run format + run: cargo fmt --all -- --check + - name: Run clippy + run: cargo clippy --workspace --tests --all-features -- -D warnings linux: timeout-minutes: 30 # To build all features, we need more disk space than is available @@ -65,37 +65,37 @@ jobs: CC: clang-18 CXX: clang++-18 steps: - - uses: actions/checkout@v4 - with: + - uses: actions/checkout@v4 + with: fetch-depth: 0 lfs: true - - uses: Swatinem/rust-cache@v2 - with: + - uses: Swatinem/rust-cache@v2 + with: workspaces: rust - - name: Install dependencies - run: | + - name: Install dependencies + run: | sudo apt update sudo apt install -y protobuf-compiler libssl-dev - - name: Make Swap - run: | - sudo fallocate -l 16G /swapfile - sudo chmod 600 /swapfile - sudo mkswap /swapfile - sudo swapon /swapfile - - name: Start S3 integration test environment - working-directory: . - run: docker compose up --detach --wait - - name: Build - run: cargo build --all-features - - name: Run tests - run: cargo test --all-features - - name: Run examples - run: cargo run --example simple + - name: Make Swap + run: | + sudo fallocate -l 16G /swapfile + sudo chmod 600 /swapfile + sudo mkswap /swapfile + sudo swapon /swapfile + - name: Start S3 integration test environment + working-directory: . + run: docker compose up --detach --wait + - name: Build + run: cargo build --all-features + - name: Run tests + run: cargo test --all-features + - name: Run examples + run: cargo run --example simple macos: timeout-minutes: 30 strategy: matrix: - mac-runner: [ "macos-13", "macos-14" ] + mac-runner: ["macos-13", "macos-14"] runs-on: "${{ matrix.mac-runner }}" defaults: run: @@ -104,8 +104,8 @@ jobs: steps: - uses: actions/checkout@v4 with: - fetch-depth: 0 - lfs: true + fetch-depth: 0 + lfs: true - name: CPU features run: sysctl -a | grep cpu - uses: Swatinem/rust-cache@v2 @@ -139,3 +139,102 @@ jobs: $env:VCPKG_ROOT = $env:VCPKG_INSTALLATION_ROOT cargo build cargo test + windows-arm64: + runs-on: windows-4x-arm + steps: + - name: Cache installations + id: cache-installs + uses: actions/cache@v4 + with: + path: | + C:\Program Files\Git + C:\BuildTools + C:\Program Files (x86)\Windows Kits + C:\Program Files\7-Zip + C:\protoc + key: ${{ runner.os }}-arm64-installs-v1 + restore-keys: | + ${{ runner.os }}-arm64-installs- + - name: Install Git + if: steps.cache-installs.outputs.cache-hit != 'true' + run: | + Invoke-WebRequest -Uri "https://github.com/git-for-windows/git/releases/download/v2.44.0.windows.1/Git-2.44.0-64-bit.exe" -OutFile "git-installer.exe" + Start-Process -FilePath "git-installer.exe" -ArgumentList "/VERYSILENT", "/NORESTART" -Wait + shell: powershell + - name: Add Git to PATH + run: | + Add-Content $env:GITHUB_PATH "C:\Program Files\Git\bin" + $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") + shell: powershell + - name: Configure Git symlinks + run: git config --global core.symlinks true + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.13" + - name: Install Visual Studio Build Tools + if: steps.cache-installs.outputs.cache-hit != 'true' + run: | + Invoke-WebRequest -Uri "https://aka.ms/vs/17/release/vs_buildtools.exe" -OutFile "vs_buildtools.exe" + Start-Process -FilePath "vs_buildtools.exe" -ArgumentList "--quiet", "--wait", "--norestart", "--nocache", ` + "--installPath", "C:\BuildTools", ` + "--add", "Microsoft.VisualStudio.Component.VC.Tools.ARM64", ` + "--add", "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", ` + "--add", "Microsoft.VisualStudio.Component.Windows11SDK.22621", ` + "--add", "Microsoft.VisualStudio.Component.VC.ATL", ` + "--add", "Microsoft.VisualStudio.Component.VC.ATLMFC", ` + "--add", "Microsoft.VisualStudio.Component.VC.Llvm.Clang" -Wait + shell: powershell + - name: Add Visual Studio Build Tools to PATH + run: | + $vsPath = "C:\BuildTools\VC\Tools\MSVC" + $latestVersion = (Get-ChildItem $vsPath | Sort-Object {[version]$_.Name} -Descending)[0].Name + Add-Content $env:GITHUB_PATH "C:\BuildTools\VC\Tools\MSVC\$latestVersion\bin\Hostx64\arm64" + Add-Content $env:GITHUB_PATH "C:\BuildTools\VC\Tools\MSVC\$latestVersion\bin\Hostx64\x64" + Add-Content $env:GITHUB_PATH "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\arm64" + Add-Content $env:GITHUB_PATH "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64" + Add-Content $env:GITHUB_PATH "C:\BuildTools\VC\Tools\Llvm\x64\bin" + + $env:LIB = "" + Add-Content $env:GITHUB_ENV "LIB=C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\um\arm64;C:\Program Files (x86)\Windows Kits\10\Lib\10.0.22621.0\ucrt\arm64" + shell: powershell + - name: Install Rust + run: | + Invoke-WebRequest https://win.rustup.rs/x86_64 -OutFile rustup-init.exe + .\rustup-init.exe -y --default-host aarch64-pc-windows-msvc + shell: powershell + - name: Add Rust to PATH + run: | + Add-Content $env:GITHUB_PATH "$env:USERPROFILE\.cargo\bin" + shell: powershell + + - uses: Swatinem/rust-cache@v2 + with: + workspaces: rust + - name: Install 7-Zip ARM + if: steps.cache-installs.outputs.cache-hit != 'true' + run: | + New-Item -Path 'C:\7zip' -ItemType Directory + Invoke-WebRequest https://7-zip.org/a/7z2408-arm64.exe -OutFile C:\7zip\7z-installer.exe + Start-Process -FilePath C:\7zip\7z-installer.exe -ArgumentList '/S' -Wait + shell: powershell + - name: Add 7-Zip to PATH + run: Add-Content $env:GITHUB_PATH "C:\Program Files\7-Zip" + shell: powershell + - name: Install Protoc v21.12 + if: steps.cache-installs.outputs.cache-hit != 'true' + working-directory: C:\ + run: | + New-Item -Path 'C:\protoc' -ItemType Directory + Set-Location C:\protoc + Invoke-WebRequest https://github.com/protocolbuffers/protobuf/releases/download/v21.12/protoc-21.12-win64.zip -OutFile C:\protoc\protoc.zip + & 'C:\Program Files\7-Zip\7z.exe' x protoc.zip + shell: powershell + - name: Add Protoc to PATH + run: Add-Content $env:GITHUB_PATH "C:\protoc\bin" + shell: powershell + - name: Run tests + run: | + $env:VCPKG_ROOT = $env:VCPKG_INSTALLATION_ROOT + cargo build --target aarch64-pc-windows-msvc + cargo test --target aarch64-pc-windows-msvc diff --git a/ci/build_windows_artifacts.ps1 b/ci/build_windows_artifacts.ps1 index 039d4b95..02f2d207 100644 --- a/ci/build_windows_artifacts.ps1 +++ b/ci/build_windows_artifacts.ps1 @@ -3,6 +3,7 @@ # Targets supported: # - x86_64-pc-windows-msvc # - i686-pc-windows-msvc +# - aarch64-pc-windows-msvc function Prebuild-Rust { param ( @@ -31,7 +32,7 @@ function Build-NodeBinaries { $targets = $args[0] if (-not $targets) { - $targets = "x86_64-pc-windows-msvc" + $targets = "x86_64-pc-windows-msvc", "aarch64-pc-windows-msvc" } Write-Host "Building artifacts for targets: $targets" diff --git a/ci/build_windows_artifacts_nodejs.ps1 b/ci/build_windows_artifacts_nodejs.ps1 index b960f306..5c1ac4fa 100644 --- a/ci/build_windows_artifacts_nodejs.ps1 +++ b/ci/build_windows_artifacts_nodejs.ps1 @@ -3,6 +3,7 @@ # Targets supported: # - x86_64-pc-windows-msvc # - i686-pc-windows-msvc +# - aarch64-pc-windows-msvc function Prebuild-Rust { param ( @@ -31,7 +32,7 @@ function Build-NodeBinaries { $targets = $args[0] if (-not $targets) { - $targets = "x86_64-pc-windows-msvc" + $targets = "x86_64-pc-windows-msvc", "aarch64-pc-windows-msvc" } Write-Host "Building artifacts for targets: $targets" diff --git a/node/package-lock.json b/node/package-lock.json index 17d0f111..e160fcf8 100644 --- a/node/package-lock.json +++ b/node/package-lock.json @@ -56,6 +56,7 @@ "@lancedb/vectordb-darwin-x64": "0.13.0-beta.1", "@lancedb/vectordb-linux-arm64-gnu": "0.13.0-beta.1", "@lancedb/vectordb-linux-x64-gnu": "0.13.0-beta.1", + "@lancedb/vectordb-win32-arm64-msvc": "0.13.0-beta.1", "@lancedb/vectordb-win32-x64-msvc": "0.13.0-beta.1" }, "peerDependencies": { @@ -326,6 +327,66 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@lancedb/vectordb-darwin-arm64": { + "version": "0.13.0-beta.1", + "resolved": "https://registry.npmjs.org/@lancedb/vectordb-darwin-arm64/-/vectordb-darwin-arm64-0.13.0-beta.1.tgz", + "integrity": "sha512-beOrf6selCzzhLgDG8Nibma4nO/CSnA1wUKRmlJHEPtGcg7PW18z6MP/nfwQMpMR/FLRfTo8pPTbpzss47MiQQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lancedb/vectordb-darwin-x64": { + "version": "0.13.0-beta.1", + "resolved": "https://registry.npmjs.org/@lancedb/vectordb-darwin-x64/-/vectordb-darwin-x64-0.13.0-beta.1.tgz", + "integrity": "sha512-YdraGRF/RbJRkKh0v3xT03LUhq47T2GtCvJ5gZp8wKlh4pHa8LuhLU0DIdvmG/DT5vuQA+td8HDkBm/e3EOdNg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lancedb/vectordb-linux-arm64-gnu": { + "version": "0.13.0-beta.1", + "resolved": "https://registry.npmjs.org/@lancedb/vectordb-linux-arm64-gnu/-/vectordb-linux-arm64-gnu-0.13.0-beta.1.tgz", + "integrity": "sha512-Pp0O/uhEqof1oLaWrNbv+Ym+q8kBkiCqaA5+2eAZ6a3e9U+Ozkvb0FQrHuyi9adJ5wKQ4NabyQE9BMf2bYpOnQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lancedb/vectordb-linux-x64-gnu": { + "version": "0.13.0-beta.1", + "resolved": "https://registry.npmjs.org/@lancedb/vectordb-linux-x64-gnu/-/vectordb-linux-x64-gnu-0.13.0-beta.1.tgz", + "integrity": "sha512-y8nxOye4egfWF5FGED9EfkmZ1O5HnRLU4a61B8m5JSpkivO9v2epTcbYN0yt/7ZFCgtqMfJ8VW4Mi7qQcz3KDA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lancedb/vectordb-win32-x64-msvc": { + "version": "0.13.0-beta.1", + "resolved": "https://registry.npmjs.org/@lancedb/vectordb-win32-x64-msvc/-/vectordb-win32-x64-msvc-0.13.0-beta.1.tgz", + "integrity": "sha512-STMDP9dp0TBLkB3ro+16pKcGy6bmbhRuEZZZ1Tp5P75yTPeVh4zIgWkidMdU1qBbEYM7xacnsp9QAwgLnMU/Ow==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@neon-rs/cli": { "version": "0.0.160", "resolved": "https://registry.npmjs.org/@neon-rs/cli/-/cli-0.0.160.tgz", diff --git a/node/package.json b/node/package.json index c1d18727..e3045277 100644 --- a/node/package.json +++ b/node/package.json @@ -84,7 +84,8 @@ "aarch64-apple-darwin": "@lancedb/vectordb-darwin-arm64", "x86_64-unknown-linux-gnu": "@lancedb/vectordb-linux-x64-gnu", "aarch64-unknown-linux-gnu": "@lancedb/vectordb-linux-arm64-gnu", - "x86_64-pc-windows-msvc": "@lancedb/vectordb-win32-x64-msvc" + "x86_64-pc-windows-msvc": "@lancedb/vectordb-win32-x64-msvc", + "aarch64-pc-windows-msvc": "@lancedb/vectordb-win32-arm64-msvc" } }, "optionalDependencies": { @@ -92,6 +93,7 @@ "@lancedb/vectordb-darwin-x64": "0.13.0-beta.1", "@lancedb/vectordb-linux-arm64-gnu": "0.13.0-beta.1", "@lancedb/vectordb-linux-x64-gnu": "0.13.0-beta.1", - "@lancedb/vectordb-win32-x64-msvc": "0.13.0-beta.1" + "@lancedb/vectordb-win32-x64-msvc": "0.13.0-beta.1", + "@lancedb/vectordb-win32-arm64-msvc": "0.13.0-beta.1" } } diff --git a/nodejs/npm/win32-arm64-msvc/README.md b/nodejs/npm/win32-arm64-msvc/README.md new file mode 100644 index 00000000..939180c6 --- /dev/null +++ b/nodejs/npm/win32-arm64-msvc/README.md @@ -0,0 +1,3 @@ +# `@lancedb/lancedb-win32-arm64-msvc` + +This is the **aarch64-pc-windows-msvc** binary for `@lancedb/lancedb` diff --git a/nodejs/npm/win32-arm64-msvc/package.json b/nodejs/npm/win32-arm64-msvc/package.json new file mode 100644 index 00000000..0478cef7 --- /dev/null +++ b/nodejs/npm/win32-arm64-msvc/package.json @@ -0,0 +1,18 @@ +{ + "name": "@lancedb/lancedb-win32-arm64-msvc", + "version": "0.12.0", + "os": [ + "win32" + ], + "cpu": [ + "arm64" + ], + "main": "lancedb.win32-arm64-msvc.node", + "files": [ + "lancedb.win32-arm64-msvc.node" + ], + "license": "Apache 2.0", + "engines": { + "node": ">= 18" + } +}