1
- cmake_minimum_required (VERSION 3.12 ) # Don't bump this version for no reason
1
+ cmake_minimum_required (VERSION 3.13 ) # for add_link_options
2
2
project ("llama.cpp" C CXX )
3
3
4
4
set (CMAKE_EXPORT_COMPILE_COMMANDS ON )
@@ -44,7 +44,7 @@ endif()
44
44
45
45
# general
46
46
option (LLAMA_STATIC "llama: static link libraries" OFF )
47
- option (LLAMA_NATIVE "llama: enable -march=native flag" OFF )
47
+ option (LLAMA_NATIVE "llama: enable -march=native flag" ON )
48
48
option (LLAMA_LTO "llama: enable link time optimization" OFF )
49
49
50
50
# debug
@@ -58,15 +58,21 @@ option(LLAMA_SANITIZE_ADDRESS "llama: enable address sanitizer"
58
58
option (LLAMA_SANITIZE_UNDEFINED "llama: enable undefined sanitizer" OFF )
59
59
60
60
# instruction set specific
61
- option (LLAMA_AVX "llama: enable AVX" ON )
62
- option (LLAMA_AVX2 "llama: enable AVX2" ON )
63
- option (LLAMA_AVX512 "llama: enable AVX512" OFF )
64
- option (LLAMA_AVX512_VBMI "llama: enable AVX512-VBMI" OFF )
65
- option (LLAMA_AVX512_VNNI "llama: enable AVX512-VNNI" OFF )
66
- option (LLAMA_FMA "llama: enable FMA" ON )
61
+ if (LLAMA_NATIVE )
62
+ set (INS_ENB OFF )
63
+ else ()
64
+ set (INS_ENB ON )
65
+ endif ()
66
+
67
+ option (LLAMA_AVX "llama: enable AVX" ${INS_ENB} )
68
+ option (LLAMA_AVX2 "llama: enable AVX2" ${INS_ENB} )
69
+ option (LLAMA_AVX512 "llama: enable AVX512" OFF )
70
+ option (LLAMA_AVX512_VBMI "llama: enable AVX512-VBMI" OFF )
71
+ option (LLAMA_AVX512_VNNI "llama: enable AVX512-VNNI" OFF )
72
+ option (LLAMA_FMA "llama: enable FMA" ${INS_ENB} )
67
73
# in MSVC F16C is implied with AVX2/AVX512
68
74
if (NOT MSVC )
69
- option (LLAMA_F16C "llama: enable F16C" ON )
75
+ option (LLAMA_F16C "llama: enable F16C" ${INS_ENB} )
70
76
endif ()
71
77
72
78
# 3rd party libs
@@ -343,8 +349,9 @@ if (LLAMA_MPI)
343
349
set (GGML_SOURCES_MPI ggml-mpi.c ggml-mpi.h )
344
350
add_compile_definitions (GGML_USE_MPI )
345
351
add_compile_definitions (${MPI_C_COMPILE_DEFINITIONS} )
346
- set (cxx_flags ${cxx_flags} -Wno-cast-qual )
347
- set (c_flags ${c_flags} -Wno-cast-qual )
352
+ if (NOT MSVC )
353
+ add_compile_options (-Wno-cast-qual )
354
+ endif ()
348
355
set (LLAMA_EXTRA_LIBS ${LLAMA_EXTRA_LIBS} ${MPI_C_LIBRARIES} )
349
356
set (LLAMA_EXTRA_INCLUDES ${LLAMA_EXTRA_INCLUDES} ${MPI_C_INCLUDE_DIRS} )
350
357
# Even if you're only using the C header, C++ programs may bring in MPI
@@ -418,10 +425,11 @@ if (LLAMA_ALL_WARNINGS)
418
425
set (c_flags -Wshadow -Wstrict-prototypes -Wpointer-arith -Wmissing-prototypes -Werror=implicit-int
419
426
-Werror=implicit-function-declaration )
420
427
set (cxx_flags -Wmissing-declarations -Wmissing-noreturn )
428
+ set (host_cxx_flags "" )
421
429
422
430
if (CMAKE_C_COMPILER_ID MATCHES "Clang" )
423
431
set (warning_flags ${warning_flags} -Wunreachable-code-break -Wunreachable-code-return )
424
- set (cxx_flags ${cxx_flags } -Wmissing-prototypes -Wextra-semi )
432
+ set (host_cxx_flags ${host_cxx_flags } -Wmissing-prototypes -Wextra-semi )
425
433
426
434
if (
427
435
(CMAKE_C_COMPILER_ID STREQUAL "Clang" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 3.8.0 ) OR
@@ -431,27 +439,38 @@ if (LLAMA_ALL_WARNINGS)
431
439
endif ()
432
440
elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU" )
433
441
set (c_flags ${c_flags} -Wdouble-promotion )
434
- set (cxx_flags ${cxx_flags } -Wno-array-bounds )
442
+ set (host_cxx_flags ${host_cxx_flags } -Wno-array-bounds )
435
443
436
444
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 7.1.0 )
437
- set (cxx_flags ${cxx_flags } -Wno-format-truncation )
445
+ set (host_cxx_flags ${host_cxx_flags } -Wno-format-truncation )
438
446
endif ()
439
447
if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.1.0 )
440
- set (cxx_flags ${cxx_flags } -Wextra-semi )
448
+ set (host_cxx_flags ${host_cxx_flags } -Wextra-semi )
441
449
endif ()
442
450
endif ()
443
451
else ()
444
452
# todo : msvc
445
453
endif ()
446
454
447
- add_compile_options (
448
- ${warning_flags}
449
- "$<$<COMPILE_LANGUAGE:C>:${c_flags} >"
450
- "$<$<COMPILE_LANGUAGE:CXX>:${cxx_flags} >"
451
- )
455
+ set (c_flags ${c_flags} ${warning_flags} )
456
+ set (cxx_flags ${cxx_flags} ${warning_flags} )
457
+ add_compile_options ("$<$<COMPILE_LANGUAGE:C>:${c_flags} >"
458
+ "$<$<COMPILE_LANGUAGE:CXX>:${cxx_flags} ${host_cxx_flags} >" )
452
459
453
460
endif ()
454
461
462
+ if (NOT MSVC )
463
+ set (cuda_flags -Wno-pedantic )
464
+ endif ()
465
+ set (cuda_flags ${cxx_flags} -use_fast_math ${cuda_flags} )
466
+
467
+ list (JOIN host_cxx_flags " " cuda_host_flags ) # pass host compiler flags as a single argument
468
+ if (NOT cuda_host_flags STREQUAL "" )
469
+ set (cuda_flags ${cuda_flags} -Xcompiler ${cuda_host_flags} )
470
+ endif ()
471
+
472
+ add_compile_options ("$<$<COMPILE_LANGUAGE:CUDA>:${cuda_flags} >" )
473
+
455
474
if (WIN32 )
456
475
add_compile_definitions (_CRT_SECURE_NO_WARNINGS )
457
476
@@ -491,9 +510,6 @@ if (NOT MSVC)
491
510
if (LLAMA_GPROF )
492
511
add_compile_options (-pg )
493
512
endif ()
494
- if (LLAMA_NATIVE )
495
- add_compile_options (-march=native )
496
- endif ()
497
513
endif ()
498
514
499
515
if ((${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm" ) OR (${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64" ) OR ("${CMAKE_GENERATOR_PLATFORM_LWR} " MATCHES "arm64" ))
@@ -548,6 +564,9 @@ elseif (${CMAKE_SYSTEM_PROCESSOR} MATCHES "^(x86_64|i686|AMD64)$" OR "${CMAKE_GE
548
564
add_compile_options ($< $< COMPILE_LANGUAGE:CXX> :/arch:AVX> )
549
565
endif ()
550
566
else ()
567
+ if (LLAMA_NATIVE )
568
+ add_compile_options (-march=native )
569
+ endif ()
551
570
if (LLAMA_F16C )
552
571
add_compile_options (-mf16c )
553
572
endif ()
@@ -644,6 +663,8 @@ add_library(ggml OBJECT
644
663
ggml.h
645
664
ggml-alloc.c
646
665
ggml-alloc.h
666
+ ggml-backend.c
667
+ ggml-backend.h
647
668
${GGML_SOURCES_CUDA} ${GGML_HEADERS_CUDA}
648
669
${GGML_SOURCES_OPENCL} ${GGML_HEADERS_OPENCL}
649
670
${GGML_SOURCES_METAL} ${GGML_HEADERS_METAL}
@@ -705,6 +726,7 @@ set(LLAMA_BIN_INSTALL_DIR ${CMAKE_INSTALL_BINDIR}
705
726
set (LLAMA_BUILD_NUMBER ${BUILD_NUMBER} )
706
727
set (LLAMA_BUILD_COMMIT ${BUILD_COMMIT} )
707
728
set (LLAMA_INSTALL_VERSION 0.0.${BUILD_NUMBER} )
729
+ get_directory_property (LLAMA_TRANSIENT_DEFINES COMPILE_DEFINITIONS )
708
730
709
731
configure_package_config_file (
710
732
${CMAKE_CURRENT_SOURCE_DIR} /scripts/LlamaConfig.cmake.in
0 commit comments