gen_windows.ps1 3.24 KB
Newer Older
1
2
3
4
5
6
#!powershell

$ErrorActionPreference = "Stop"

function init_vars {
    $script:patches = @("0001-Expose-callable-API-for-server.patch")
Daniel Hiltgen's avatar
Daniel Hiltgen committed
7
    $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")
8
9
10

    if ($env:CGO_CFLAGS -contains "-g") {
        $script:cmakeDefs += @("-DCMAKE_VERBOSE_MAKEFILE=on")
Daniel Hiltgen's avatar
Daniel Hiltgen committed
11
        $script:config = "RelWithDebInfo"
12
    } else {
Daniel Hiltgen's avatar
Daniel Hiltgen committed
13
        $script:config = "Release"
14
15
16
17
18
19
    }
}

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
Daniel Hiltgen's avatar
Daniel Hiltgen committed
20
    if ($LASTEXITCODE -ne 0) { exit($LASTEXITCODE)}
21
    & git submodule update --force gguf
Daniel Hiltgen's avatar
Daniel Hiltgen committed
22
    if ($LASTEXITCODE -ne 0) { exit($LASTEXITCODE)}
23
24
25
26
}

function apply_patches {
    rm -erroraction ignore -path "gguf/examples/server/server.h"
Daniel Hiltgen's avatar
Daniel Hiltgen committed
27
    foreach ($patch in $script:patches) {
28
29
        write-host "Applying patch $patch"
        & git -C gguf apply ../patches/$patch
Daniel Hiltgen's avatar
Daniel Hiltgen committed
30
        if ($LASTEXITCODE -ne 0) { exit($LASTEXITCODE)}
31
32
33
34
    }
}

function build {
Daniel Hiltgen's avatar
Daniel Hiltgen committed
35
    write-host "generating config with: cmake -S gguf -B $script:buildDir $script:cmakeDefs"
36
    & cmake --version
Daniel Hiltgen's avatar
Daniel Hiltgen committed
37
38
39
40
41
    & 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)}
42
43
44
}

function install {
Daniel Hiltgen's avatar
Daniel Hiltgen committed
45
46
47
    rm -erroraction ignore -recurse -force -path $script:installDir
    & cmake --install $script:buildDir --prefix $script:installDir --config $script:config
    if ($LASTEXITCODE -ne 0) { exit($LASTEXITCODE)}
48
49
50
51
52
53

}

init_vars
git_module_setup
apply_patches
Daniel Hiltgen's avatar
Daniel Hiltgen committed
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82

# 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")
83
build
84
install
Daniel Hiltgen's avatar
Daniel Hiltgen committed
85
86
87
88
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

89
90
91
92

# TODO - implement ROCm support on windows
md gguf/build/winrocm/lib -ea 0
echo $null >> gguf/build/winrocm/lib/.generated