From d9cd3d9667d83f68040378dc2834a49962e08244 Mon Sep 17 00:00:00 2001 From: Daniel Hiltgen Date: Wed, 20 Dec 2023 14:46:15 -0800 Subject: [PATCH] Revive windows build The windows native setup still needs some more work, but this gets it building again and if you set the PATH properly, you can run the resulting exe on a cuda system. --- llm/ext_server.go | 4 +-- llm/llama.cpp/gen_windows.ps1 | 61 ++++++++++++++++++++++++++++------- 2 files changed, 51 insertions(+), 14 deletions(-) diff --git a/llm/ext_server.go b/llm/ext_server.go index 048b1a65..45251cc5 100644 --- a/llm/ext_server.go +++ b/llm/ext_server.go @@ -22,8 +22,8 @@ package llm #cgo linux LDFLAGS: ${SRCDIR}/llama.cpp/gguf/build/cpu/libllama.a #cgo linux LDFLAGS: ${SRCDIR}/llama.cpp/gguf/build/cpu/libggml_static.a #cgo linux LDFLAGS: -lrt -lpthread -ldl -lstdc++ -lm -#cgo windows LDFLAGS: -L${SRCDIR}/llama.cpp/gguf/build/wincuda/dist/bin -#cgo windows LDFLAGS: -lext_server_shared -lpthread +#cgo windows LDFLAGS: -L${SRCDIR}/llama.cpp/gguf/build/wincpu/dist/lib +#cgo windows LDFLAGS: -lcpu_server -lpthread #include #include "server.h" diff --git a/llm/llama.cpp/gen_windows.ps1 b/llm/llama.cpp/gen_windows.ps1 index f85f1a45..2c77d4ab 100644 --- a/llm/llama.cpp/gen_windows.ps1 +++ b/llm/llama.cpp/gen_windows.ps1 @@ -3,52 +3,89 @@ $ErrorActionPreference = "Stop" function init_vars { - $script:buildDir="gguf/build/wincuda" - $script:installDir="gguf/build/wincuda/dist" $script:patches = @("0001-Expose-callable-API-for-server.patch") - $script:cmakeDefs = @("-DLLAMA_NATIVE=off", "-DLLAMA_F16C=off", "-DLLAMA_FMA=off", "-DLLAMA_AVX512=off", "-DLLAMA_AVX2=off", "-DLLAMA_AVX=on", "-DLLAMA_K_QUANTS=on", "-DLLAMA_ACCELERATE=on", "-DLLAMA_CUBLAS=ON","-DCMAKE_VERBOSE_MAKEFILE=ON","-DBUILD_SHARED_LIBS=on","-A","x64") + $script:cmakeDefs = @("-DBUILD_SHARED_LIBS=on", "-DLLAMA_NATIVE=off", "-DLLAMA_F16C=off", "-DLLAMA_FMA=off", "-DLLAMA_AVX512=off", "-DLLAMA_AVX2=off", "-DLLAMA_AVX=on", "-DLLAMA_K_QUANTS=on", "-DLLAMA_ACCELERATE=on", "-A","x64") if ($env:CGO_CFLAGS -contains "-g") { $script:cmakeDefs += @("-DCMAKE_VERBOSE_MAKEFILE=on") - $script:config += "RelWithDebInfo" + $script:config = "RelWithDebInfo" } else { - $script:config += "Release" + $script:config = "Release" } } function git_module_setup { # TODO add flags to skip the init/patch logic to make it easier to mod llama.cpp code in-repo & git submodule init + if ($LASTEXITCODE -ne 0) { exit($LASTEXITCODE)} & git submodule update --force gguf + if ($LASTEXITCODE -ne 0) { exit($LASTEXITCODE)} } function apply_patches { rm -erroraction ignore -path "gguf/examples/server/server.h" - foreach ($patch in $patches) { + foreach ($patch in $script:patches) { write-host "Applying patch $patch" & git -C gguf apply ../patches/$patch + if ($LASTEXITCODE -ne 0) { exit($LASTEXITCODE)} } } function build { - write-host "generating config with: cmake -S gguf -B $buildDir $cmakeDefs" + write-host "generating config with: cmake -S gguf -B $script:buildDir $script:cmakeDefs" & cmake --version - & cmake -S gguf -B $buildDir $cmakeDefs - write-host "building with: cmake --build $buildDir --config $config" - & cmake --build $buildDir --config $config + & cmake -S gguf -B $script:buildDir $script:cmakeDefs + if ($LASTEXITCODE -ne 0) { exit($LASTEXITCODE)} + write-host "building with: cmake --build $script:buildDir --config $script:config" + & cmake --build $script:buildDir --config $script:config + if ($LASTEXITCODE -ne 0) { exit($LASTEXITCODE)} } function install { - rm -erroraction ignore -recurse -force -path $installDir - & cmake --install $buildDir --prefix $installDir --config $config + rm -erroraction ignore -recurse -force -path $script:installDir + & cmake --install $script:buildDir --prefix $script:installDir --config $script:config + if ($LASTEXITCODE -ne 0) { exit($LASTEXITCODE)} } init_vars git_module_setup apply_patches + +# first build CPU based +$script:buildDir="gguf/build/wincpu" +$script:installDir="gguf/build/wincpu/dist" + +build +# install + +md gguf/build/lib -ea 0 +md gguf/build/wincpu/dist/lib -ea 0 +mv gguf/build/wincpu/bin/$script:config/ext_server_shared.dll gguf/build/wincpu/dist/lib/cpu_server.dll + + +# Nope, this barfs on lots of symbol problems +#mv gguf/build/wincpu/examples/server/$script:config/ext_server_shared.dll gguf/build/wincpu/dist/lib/cpu_server.lib +# Nope: this needs lots of include paths to pull in things like msvcprt.lib and other deps +# & cl.exe ` +# gguf/build/wincpu/examples/server/$script:config/ext_server.lib ` +# gguf/build/wincpu/common/$script:config/common.lib ` +# gguf/build/wincpu/$script:config/llama.lib ` +# gguf/build/wincpu/$script:config/ggml_static.lib ` +# /link /DLL /DEF:cpu_server.def /NOENTRY /MACHINE:X64 /OUT:gguf/build/wincpu/dist/lib/cpu_server.dll +# if ($LASTEXITCODE -ne 0) { exit($LASTEXITCODE)} + +# Then build cuda as a dynamically loaded library +init_vars +$script:buildDir="gguf/build/wincuda" +$script:installDir="gguf/build/wincuda/dist" +$script:cmakeDefs += @("-DLLAMA_CUBLAS=ON", "-DBUILD_SHARED_LIBS=on") build install +cp gguf/build/wincuda/dist/bin/ext_server_shared.dll gguf/build/lib/cuda_server.dll + +# TODO - more to do here to create a usable dll + # TODO - implement ROCm support on windows md gguf/build/winrocm/lib -ea 0