gen_windows.ps1 3.33 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

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

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

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

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

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

}

init_vars
git_module_setup
apply_patches
Daniel Hiltgen's avatar
Daniel Hiltgen committed
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
83

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

90
91
92
93

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