-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathsetup.py
128 lines (103 loc) · 3.21 KB
/
setup.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#!/usr/bin/python3
import os
import platform
import subprocess
from setuptools import Extension, setup
from Cython.Build import cythonize
# -----------------------------------------------------------------------------
# constants
CWD = os.getcwd()
VERSION = '0.0.1'
PLATFORM = platform.system()
WITH_DYLIB = os.getenv("WITH_DYLIB", False)
LLAMACPP_INCLUDE = os.path.join(CWD, "thirdparty/llama.cpp/include")
LLAMACPP_LIBS_DIR = os.path.join(CWD, "thirdparty/llama.cpp/lib")
DEFINE_MACROS = []
EXTRA_COMPILE_ARGS = ['-std=c++14']
EXTRA_LINK_ARGS = []
EXTRA_OBJECTS = []
INCLUDE_DIRS = [
"src/cyllama",
LLAMACPP_INCLUDE,
]
LIBRARY_DIRS = [
LLAMACPP_LIBS_DIR,
]
LIBRARIES = ["pthread"]
if WITH_DYLIB:
EXTRA_OBJECTS.append(f'{LLAMACPP_LIBS_DIR}/libcommon.a')
LIBRARIES.extend([
'common',
'ggml',
'llama',
])
else:
EXTRA_OBJECTS.extend([
f'{LLAMACPP_LIBS_DIR}/libcommon.a',
f'{LLAMACPP_LIBS_DIR}/libllama.a',
f'{LLAMACPP_LIBS_DIR}/libggml.a',
f'{LLAMACPP_LIBS_DIR}/libggml-base.a',
f'{LLAMACPP_LIBS_DIR}/libggml-blas.a',
f'{LLAMACPP_LIBS_DIR}/libggml-cpu.a',
f'{LLAMACPP_LIBS_DIR}/libggml-metal.a',
])
INCLUDE_DIRS.append(os.path.join(CWD, 'include'))
if PLATFORM == 'Darwin':
EXTRA_LINK_ARGS.append('-mmacosx-version-min=14.7')
# add local rpath
EXTRA_LINK_ARGS.append('-Wl,-rpath,' + LLAMACPP_LIBS_DIR)
os.environ['LDFLAGS'] = ' '.join([
'-framework Accelerate',
'-framework Foundation',
'-framework Metal',
'-framework MetalKit',
])
if PLATFORM == 'Linux':
EXTRA_LINK_ARGS.append('-fopenmp')
def mk_extension(name, sources, define_macros=None):
return Extension(
name=name,
sources=sources,
define_macros=define_macros if define_macros else [],
include_dirs=INCLUDE_DIRS,
libraries=LIBRARIES,
library_dirs=LIBRARY_DIRS,
extra_objects=EXTRA_OBJECTS,
extra_compile_args=EXTRA_COMPILE_ARGS,
extra_link_args=EXTRA_LINK_ARGS,
language="c++",
)
# ----------------------------------------------------------------------------
# COMMON SETUP CONFIG
common = {
"name": "cyllama",
"version": VERSION,
"description": "A cython wrapper of the llama.cpp inference engine.",
"python_requires": ">=3.8",
# "include_package_data": True,
}
# forces cythonize in this case
subprocess.call("cythonize *.pyx", cwd="src/cyllama", shell=True)
if not os.path.exists('MANIFEST.in'):
with open("MANIFEST.in", "w") as f:
f.write("exclude src/cyllama/*.pxd\n")
f.write("exclude src/cyllama/*.pyx\n")
f.write("exclude src/cyllama/*.cpp\n")
f.write("exclude src/cyllama/*.h\n")
f.write("exclude src/cyllama/py.typed\n")
extensions = [
mk_extension("cyllama.cyllama", sources=["src/cyllama/cyllama.pyx"]),
]
setup(
**common,
ext_modules=cythonize(
extensions,
compiler_directives = {
'language_level' : '3',
'embedsignature': False, # default: False
'emit_code_comments': False, # default: True
'warn.unused': True, # default: False
},
),
package_dir={"": "src"},
)