@@ -17,36 +17,97 @@ endif()
17
17
include_directories ("${CMAKE_CURRENT_BINARY_DIR} " )
18
18
19
19
set (LLMODEL_VERSION_MAJOR 0)
20
- set (LLMODEL_VERSION_MINOR 1 )
21
- set (LLMODEL_VERSION_PATCH 1 )
20
+ set (LLMODEL_VERSION_MINOR 2 )
21
+ set (LLMODEL_VERSION_PATCH 0 )
22
22
set (LLMODEL_VERSION "${LLMODEL_VERSION_MAJOR} .${LLMODEL_VERSION_MINOR} .${LLMODEL_VERSION_PATCH} " )
23
23
project (llmodel VERSION ${LLMODEL_VERSION} LANGUAGES CXX C)
24
24
25
+ set (CMAKE_CXX_STANDARD 20)
25
26
set (CMAKE_CXX_STANDARD_REQUIRED ON )
27
+ set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} )
28
+ set (BUILD_SHARED_LIBS ON )
26
29
27
- set (LLAMA_BUILD_EXAMPLES ON CACHE BOOL "llama: build examples" FORCE)
28
- set (BUILD_SHARED_LIBS ON FORCE)
30
+ # Check for IPO support
31
+ include (CheckIPOSupported)
32
+ check_ipo_supported(RESULT IPO_SUPPORTED OUTPUT IPO_ERROR)
33
+ if (NOT IPO_SUPPORTED)
34
+ message (WARNING "Interprocedural optimization is not supported by your toolchain! This will lead to bigger file sizes and worse performance: ${IPO_ERROR} " )
35
+ else ()
36
+ message (STATUS "Interprocedural optimization support detected" )
37
+ endif ()
38
+
39
+ include (llama.cpp.cmake)
40
+
41
+ set (BUILD_VARIANTS default avxonly)
29
42
30
43
set (CMAKE_VERBOSE_MAKEFILE ON )
31
- if (GPT4ALL_AVX_ONLY)
32
- set (LLAMA_AVX2 OFF CACHE BOOL "llama: enable AVX2" FORCE)
33
- set (LLAMA_F16C OFF CACHE BOOL "llama: enable F16C" FORCE)
34
- set (LLAMA_FMA OFF CACHE BOOL "llama: enable FMA" FORCE)
35
- endif ()
36
44
37
- add_subdirectory (llama.cpp)
45
+ # Go through each build variant
46
+ foreach (BUILD_VARIANT IN LISTS BUILD_VARIANTS)
47
+ # Determine flags
48
+ if (BUILD_VARIANT STREQUAL avxonly)
49
+ set (GPT4ALL_ALLOW_NON_AVX NO )
50
+ else ()
51
+ set (GPT4ALL_ALLOW_NON_AVX YES )
52
+ endif ()
53
+ set (LLAMA_AVX2 ${GPT4ALL_ALLOW_NON_AVX} )
54
+ set (LLAMA_F16C ${GPT4ALL_ALLOW_NON_AVX} )
55
+ set (LLAMA_FMA ${GPT4ALL_ALLOW_NON_AVX} )
56
+
57
+ # Include GGML
58
+ include_ggml(llama.cpp-mainline -mainline-${BUILD_VARIANT} ON )
59
+ include_ggml(llama.cpp-230511 -230511-${BUILD_VARIANT} ON )
60
+ include_ggml(llama.cpp-230519 -230519-${BUILD_VARIANT} ON )
61
+
62
+ # Function for preparing individual implementations
63
+ function (prepare_target TARGET_NAME BASE_LIB)
64
+ set (TARGET_NAME ${TARGET_NAME} -${BUILD_VARIANT} )
65
+ message (STATUS "Configuring model implementation target ${TARGET_NAME} " )
66
+ # Link to ggml/llama
67
+ target_link_libraries (${TARGET_NAME}
68
+ PUBLIC ${BASE_LIB} -${BUILD_VARIANT} )
69
+ # Let it know about its build variant
70
+ target_compile_definitions (${TARGET_NAME}
71
+ PRIVATE GGML_BUILD_VARIANT="${BUILD_VARIANT} " )
72
+ # Enable IPO if possible
73
+ set_property (TARGET ${TARGET_NAME}
74
+ PROPERTY INTERPROCEDURAL_OPTIMIZATION ${IPO_SUPPORTED} )
75
+ endfunction ()
76
+
77
+ # Add each individual implementations
78
+ add_library (llamamodel-mainline-${BUILD_VARIANT} SHARED
79
+ llamamodel.cpp)
80
+ target_compile_definitions (llamamodel-mainline-${BUILD_VARIANT} PRIVATE
81
+ LLAMA_VERSIONS=>=3 LLAMA_DATE=999999)
82
+ prepare_target(llamamodel-mainline llama-mainline)
83
+
84
+ add_library (llamamodel-230519-${BUILD_VARIANT} SHARED
85
+ llamamodel.cpp)
86
+ target_compile_definitions (llamamodel-230519-${BUILD_VARIANT} PRIVATE
87
+ LLAMA_VERSIONS===2 LLAMA_DATE=230519)
88
+ prepare_target(llamamodel-230519 llama-230519)
89
+
90
+ add_library (llamamodel-230511-${BUILD_VARIANT} SHARED
91
+ llamamodel.cpp)
92
+ target_compile_definitions (llamamodel-230511-${BUILD_VARIANT} PRIVATE
93
+ LLAMA_VERSIONS=<=1 LLAMA_DATE=230511)
94
+ prepare_target(llamamodel-230511 llama-230511)
95
+
96
+ add_library (gptj-${BUILD_VARIANT} SHARED
97
+ gptj.cpp utils.h utils.cpp)
98
+ prepare_target(gptj ggml-230511)
99
+
100
+ add_library (mpt-${BUILD_VARIANT} SHARED
101
+ mpt.cpp utils.h utils.cpp)
102
+ prepare_target(mpt ggml-230511)
103
+ endforeach ()
38
104
39
105
add_library (llmodel
40
- gptj.h gptj.cpp
41
- llamamodel.h llamamodel.cpp
42
- llama.cpp/examples/common.cpp
43
- llmodel.h llmodel_c.h llmodel_c.cpp
44
- mpt.h mpt.cpp
45
- utils.h utils.cpp
106
+ llmodel.h llmodel.cpp
107
+ llmodel_c.h llmodel_c.cpp
108
+ dlhandle.h
46
109
)
47
-
48
- target_link_libraries (llmodel
49
- PRIVATE llama)
110
+ target_compile_definitions (llmodel PRIVATE LIB_FILE_EXT="${CMAKE_SHARED_LIBRARY_SUFFIX} " )
50
111
51
112
set_target_properties (llmodel PROPERTIES
52
113
VERSION ${PROJECT_VERSION}
0 commit comments