diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index 07fe8645..1087619c 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -334,51 +334,50 @@ jobs: path: | node/dist/lancedb-vectordb-win32*.tgz - # TODO: https://github.com/lancedb/lancedb/issues/1975 - # node-windows-arm64: - # name: vectordb ${{ matrix.config.arch }}-pc-windows-msvc - # # if: startsWith(github.ref, 'refs/tags/v') - # runs-on: ubuntu-latest - # container: alpine:edge - # strategy: - # fail-fast: false - # matrix: - # config: - # # - arch: x86_64 - # - arch: aarch64 - # steps: - # - name: Checkout - # uses: actions/checkout@v4 - # - name: Install dependencies - # run: | - # apk add protobuf-dev curl clang lld llvm19 grep npm bash msitools sed - # curl --proto '=https' --tlsv1.3 -sSf https://raw.githubusercontent.com/rust-lang/rustup/refs/heads/master/rustup-init.sh | sh -s -- -y - # echo "source $HOME/.cargo/env" >> saved_env - # echo "export CC=clang" >> saved_env - # echo "export AR=llvm-ar" >> saved_env - # source "$HOME/.cargo/env" - # rustup target add ${{ matrix.config.arch }}-pc-windows-msvc - # (mkdir -p sysroot && cd sysroot && sh ../ci/sysroot-${{ matrix.config.arch }}-pc-windows-msvc.sh) - # echo "export C_INCLUDE_PATH=/usr/${{ matrix.config.arch }}-pc-windows-msvc/usr/include" >> saved_env - # echo "export CARGO_BUILD_TARGET=${{ matrix.config.arch }}-pc-windows-msvc" >> saved_env - # - name: Configure x86_64 build - # if: ${{ matrix.config.arch == 'x86_64' }} - # run: | - # echo "export RUSTFLAGS='-Ctarget-cpu=haswell -Ctarget-feature=+crt-static,+avx2,+fma,+f16c -Clinker=lld -Clink-arg=/LIBPATH:/usr/x86_64-pc-windows-msvc/usr/lib'" >> saved_env - # - name: Configure aarch64 build - # if: ${{ matrix.config.arch == 'aarch64' }} - # run: | - # echo "export RUSTFLAGS='-Ctarget-feature=+crt-static,+neon,+fp16,+fhm,+dotprod -Clinker=lld -Clink-arg=/LIBPATH:/usr/aarch64-pc-windows-msvc/usr/lib -Clink-arg=arm64rt.lib'" >> saved_env - # - name: Build Windows Artifacts - # run: | - # source ./saved_env - # bash ci/manylinux_node/build_vectordb.sh ${{ matrix.config.arch }} ${{ matrix.config.arch }}-pc-windows-msvc - # - name: Upload Windows Artifacts - # uses: actions/upload-artifact@v4 - # with: - # name: node-native-windows-${{ matrix.config.arch }} - # path: | - # node/dist/lancedb-vectordb-win32*.tgz + node-windows-arm64: + name: vectordb ${{ matrix.config.arch }}-pc-windows-msvc + # if: startsWith(github.ref, 'refs/tags/v') + runs-on: ubuntu-latest + container: alpine:edge + strategy: + fail-fast: false + matrix: + config: + # - arch: x86_64 + - arch: aarch64 + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Install dependencies + run: | + apk add protobuf-dev curl clang lld llvm19 grep npm bash msitools sed + curl --proto '=https' --tlsv1.3 -sSf https://raw.githubusercontent.com/rust-lang/rustup/refs/heads/master/rustup-init.sh | sh -s -- -y + echo "source $HOME/.cargo/env" >> saved_env + echo "export CC=clang" >> saved_env + echo "export AR=llvm-ar" >> saved_env + source "$HOME/.cargo/env" + rustup target add ${{ matrix.config.arch }}-pc-windows-msvc + (mkdir -p sysroot && cd sysroot && sh ../ci/sysroot-${{ matrix.config.arch }}-pc-windows-msvc.sh) + echo "export C_INCLUDE_PATH=/usr/${{ matrix.config.arch }}-pc-windows-msvc/usr/include" >> saved_env + echo "export CARGO_BUILD_TARGET=${{ matrix.config.arch }}-pc-windows-msvc" >> saved_env + - name: Configure x86_64 build + if: ${{ matrix.config.arch == 'x86_64' }} + run: | + echo "export RUSTFLAGS='-Ctarget-cpu=haswell -Ctarget-feature=+crt-static,+avx2,+fma,+f16c -Clinker=lld -Clink-arg=/LIBPATH:/usr/x86_64-pc-windows-msvc/usr/lib'" >> saved_env + - name: Configure aarch64 build + if: ${{ matrix.config.arch == 'aarch64' }} + run: | + echo "export RUSTFLAGS='-Ctarget-feature=+crt-static,+neon,+fp16,+fhm,+dotprod -Clinker=lld -Clink-arg=/LIBPATH:/usr/aarch64-pc-windows-msvc/usr/lib -Clink-arg=arm64rt.lib'" >> saved_env + - name: Build Windows Artifacts + run: | + source ./saved_env + bash ci/manylinux_node/build_vectordb.sh ${{ matrix.config.arch }} ${{ matrix.config.arch }}-pc-windows-msvc + - name: Upload Windows Artifacts + uses: actions/upload-artifact@v4 + with: + name: node-native-windows-${{ matrix.config.arch }} + path: | + node/dist/lancedb-vectordb-win32*.tgz nodejs-windows: name: lancedb ${{ matrix.target }} @@ -414,58 +413,57 @@ jobs: path: | nodejs/dist/*.node - # TODO: https://github.com/lancedb/lancedb/issues/1975 - # nodejs-windows-arm64: - # name: lancedb ${{ matrix.config.arch }}-pc-windows-msvc - # # Only runs on tags that matches the make-release action - # # if: startsWith(github.ref, 'refs/tags/v') - # runs-on: ubuntu-latest - # container: alpine:edge - # strategy: - # fail-fast: false - # matrix: - # config: - # # - arch: x86_64 - # - arch: aarch64 - # steps: - # - name: Checkout - # uses: actions/checkout@v4 - # - name: Install dependencies - # run: | - # apk add protobuf-dev curl clang lld llvm19 grep npm bash msitools sed - # curl --proto '=https' --tlsv1.3 -sSf https://raw.githubusercontent.com/rust-lang/rustup/refs/heads/master/rustup-init.sh | sh -s -- -y - # echo "source $HOME/.cargo/env" >> saved_env - # echo "export CC=clang" >> saved_env - # echo "export AR=llvm-ar" >> saved_env - # source "$HOME/.cargo/env" - # rustup target add ${{ matrix.config.arch }}-pc-windows-msvc - # (mkdir -p sysroot && cd sysroot && sh ../ci/sysroot-${{ matrix.config.arch }}-pc-windows-msvc.sh) - # echo "export C_INCLUDE_PATH=/usr/${{ matrix.config.arch }}-pc-windows-msvc/usr/include" >> saved_env - # echo "export CARGO_BUILD_TARGET=${{ matrix.config.arch }}-pc-windows-msvc" >> saved_env - # printf '#!/bin/sh\ncargo "$@"' > $HOME/.cargo/bin/cargo-xwin - # chmod u+x $HOME/.cargo/bin/cargo-xwin - # - name: Configure x86_64 build - # if: ${{ matrix.config.arch == 'x86_64' }} - # run: | - # echo "export RUSTFLAGS='-Ctarget-cpu=haswell -Ctarget-feature=+crt-static,+avx2,+fma,+f16c -Clinker=lld -Clink-arg=/LIBPATH:/usr/x86_64-pc-windows-msvc/usr/lib'" >> saved_env - # - name: Configure aarch64 build - # if: ${{ matrix.config.arch == 'aarch64' }} - # run: | - # echo "export RUSTFLAGS='-Ctarget-feature=+crt-static,+neon,+fp16,+fhm,+dotprod -Clinker=lld -Clink-arg=/LIBPATH:/usr/aarch64-pc-windows-msvc/usr/lib -Clink-arg=arm64rt.lib'" >> saved_env - # - name: Build Windows Artifacts - # run: | - # source ./saved_env - # bash ci/manylinux_node/build_lancedb.sh ${{ matrix.config.arch }} - # - name: Upload Windows Artifacts - # uses: actions/upload-artifact@v4 - # with: - # name: nodejs-native-windows-${{ matrix.config.arch }} - # path: | - # nodejs/dist/*.node + nodejs-windows-arm64: + name: lancedb ${{ matrix.config.arch }}-pc-windows-msvc + # Only runs on tags that matches the make-release action + # if: startsWith(github.ref, 'refs/tags/v') + runs-on: ubuntu-latest + container: alpine:edge + strategy: + fail-fast: false + matrix: + config: + # - arch: x86_64 + - arch: aarch64 + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Install dependencies + run: | + apk add protobuf-dev curl clang lld llvm19 grep npm bash msitools sed + curl --proto '=https' --tlsv1.3 -sSf https://raw.githubusercontent.com/rust-lang/rustup/refs/heads/master/rustup-init.sh | sh -s -- -y + echo "source $HOME/.cargo/env" >> saved_env + echo "export CC=clang" >> saved_env + echo "export AR=llvm-ar" >> saved_env + source "$HOME/.cargo/env" + rustup target add ${{ matrix.config.arch }}-pc-windows-msvc + (mkdir -p sysroot && cd sysroot && sh ../ci/sysroot-${{ matrix.config.arch }}-pc-windows-msvc.sh) + echo "export C_INCLUDE_PATH=/usr/${{ matrix.config.arch }}-pc-windows-msvc/usr/include" >> saved_env + echo "export CARGO_BUILD_TARGET=${{ matrix.config.arch }}-pc-windows-msvc" >> saved_env + printf '#!/bin/sh\ncargo "$@"' > $HOME/.cargo/bin/cargo-xwin + chmod u+x $HOME/.cargo/bin/cargo-xwin + - name: Configure x86_64 build + if: ${{ matrix.config.arch == 'x86_64' }} + run: | + echo "export RUSTFLAGS='-Ctarget-cpu=haswell -Ctarget-feature=+crt-static,+avx2,+fma,+f16c -Clinker=lld -Clink-arg=/LIBPATH:/usr/x86_64-pc-windows-msvc/usr/lib'" >> saved_env + - name: Configure aarch64 build + if: ${{ matrix.config.arch == 'aarch64' }} + run: | + echo "export RUSTFLAGS='-Ctarget-feature=+crt-static,+neon,+fp16,+fhm,+dotprod -Clinker=lld -Clink-arg=/LIBPATH:/usr/aarch64-pc-windows-msvc/usr/lib -Clink-arg=arm64rt.lib'" >> saved_env + - name: Build Windows Artifacts + run: | + source ./saved_env + bash ci/manylinux_node/build_lancedb.sh ${{ matrix.config.arch }} + - name: Upload Windows Artifacts + uses: actions/upload-artifact@v4 + with: + name: nodejs-native-windows-${{ matrix.config.arch }} + path: | + nodejs/dist/*.node release: name: vectordb NPM Publish - needs: [node, node-macos, node-linux-gnu, node-linux-musl, node-windows] + needs: [node, node-macos, node-linux-gnu, node-linux-musl, node-windows, node-windows-arm64] runs-on: ubuntu-latest # Only runs on tags that matches the make-release action if: startsWith(github.ref, 'refs/tags/v') @@ -505,7 +503,7 @@ jobs: release-nodejs: name: lancedb NPM Publish - needs: [nodejs-macos, nodejs-linux-gnu, nodejs-linux-musl, nodejs-windows] + needs: [nodejs-macos, nodejs-linux-gnu, nodejs-linux-musl, nodejs-windows, nodejs-windows-arm64] runs-on: ubuntu-latest # Only runs on tags that matches the make-release action if: startsWith(github.ref, 'refs/tags/v') diff --git a/ci/sysroot-aarch64-pc-windows-msvc.sh b/ci/sysroot-aarch64-pc-windows-msvc.sh index 16fb4502..a7b06f60 100644 --- a/ci/sysroot-aarch64-pc-windows-msvc.sh +++ b/ci/sysroot-aarch64-pc-windows-msvc.sh @@ -53,7 +53,7 @@ curl -O https://download.visualstudio.microsoft.com/download/pr/32863b8d-a46d-42 curl -O https://download.visualstudio.microsoft.com/download/pr/32863b8d-a46d-4231-8e84-0888519d20a9/149578fb3b621cdb61ee1813b9b3e791/463ad1b0783ebda908fd6c16a4abfe93.cab curl -O https://download.visualstudio.microsoft.com/download/pr/32863b8d-a46d-4231-8e84-0888519d20a9/5c986c4f393c6b09d5aec3b539e9fb4a/5a22e5cde814b041749fb271547f4dd5.cab -# fwpuclnt.lib arm64rt.lib +# dbghelp.lib fwpuclnt.lib arm64rt.lib curl -O https://download.visualstudio.microsoft.com/download/pr/32863b8d-a46d-4231-8e84-0888519d20a9/7a332420d812f7c1d41da865ae5a7c52/windows%20sdk%20desktop%20libs%20arm64-x86_en-us.msi curl -O https://download.visualstudio.microsoft.com/download/pr/32863b8d-a46d-4231-8e84-0888519d20a9/19de98ed4a79938d0045d19c047936b3/3e2f7be479e3679d700ce0782e4cc318.cab @@ -98,7 +98,7 @@ find /usr/aarch64-pc-windows-msvc/usr/include -type f -exec sed -i -E 's/(#inclu # reason: https://developercommunity.visualstudio.com/t/libucrtlibstreamobj-error-lnk2001-unresolved-exter/1544787#T-ND1599818 # I don't understand the 'correct' fix for this, arm64rt.lib is supposed to be the workaround -(cd 'program files/windows kits/10/lib/10.0.26100.0/um/arm64' && cp advapi32.lib bcrypt.lib kernel32.lib ntdll.lib user32.lib uuid.lib ws2_32.lib userenv.lib cfgmgr32.lib runtimeobject.lib fwpuclnt.lib arm64rt.lib -t /usr/aarch64-pc-windows-msvc/usr/lib) +(cd 'program files/windows kits/10/lib/10.0.26100.0/um/arm64' && cp advapi32.lib bcrypt.lib kernel32.lib ntdll.lib user32.lib uuid.lib ws2_32.lib userenv.lib cfgmgr32.lib runtimeobject.lib dbghelp.lib fwpuclnt.lib arm64rt.lib -t /usr/aarch64-pc-windows-msvc/usr/lib) (cd 'contents/vc/tools/msvc/14.16.27023/lib/arm64' && cp libcmt.lib libvcruntime.lib -t /usr/aarch64-pc-windows-msvc/usr/lib)