@@ -97,9 +97,9 @@ option(LLAMA_METAL_NDEBUG "llama: disable Metal debugging"
9797option (LLAMA_MPI "llama: use MPI" OFF )
9898option (LLAMA_QKK_64 "llama: use super-block size of 64 for k-quants" OFF )
9999
100- option (LLAMA_BUILD_TESTS "llama: build tests" ${LLAMA_STANDALONE} )
101- option (LLAMA_BUILD_EXAMPLES "llama: build examples" ${LLAMA_STANDALONE} )
102- option (LLAMA_BUILD_SERVER "llama: build server example" ON )
100+ option (LLAMA_BUILD_TESTS "llama: build tests" ${LLAMA_STANDALONE} )
101+ option (LLAMA_BUILD_EXAMPLES "llama: build examples" ${LLAMA_STANDALONE} )
102+ option (LLAMA_BUILD_SERVER "llama: build server example" ON )
103103
104104# Required for relocatable CMake package
105105include (${CMAKE_CURRENT_SOURCE_DIR} /scripts/build -info.cmake)
@@ -397,57 +397,102 @@ if (LLAMA_HIPBLAS)
397397 endif ()
398398endif ()
399399
400+ function (get_flags CCID CCVER)
401+ set (C_FLAGS "" )
402+ set (CXX_FLAGS "" )
403+
404+ if (CCID MATCHES "Clang" )
405+ set (C_FLAGS -Wunreachable-code-break -Wunreachable-code-return)
406+ set (CXX_FLAGS -Wunreachable-code-break -Wunreachable-code-return -Wmissing-prototypes -Wextra-semi)
407+
408+ if (
409+ (CCID STREQUAL "Clang" AND CCVER VERSION_GREATER_EQUAL 3.8.0) OR
410+ (CCID STREQUAL "AppleClang" AND CCVER VERSION_GREATER_EQUAL 7.3.0)
411+ )
412+ set (C_FLAGS ${C_FLAGS} -Wdouble-promotion)
413+ endif ()
414+ elseif (CCID STREQUAL "GNU" )
415+ set (C_FLAGS -Wdouble-promotion)
416+ set (CXX_FLAGS -Wno-array-bounds)
417+
418+ if (CCVER VERSION_GREATER_EQUAL 7.1.0)
419+ set (CXX_FLAGS ${CXX_FLAGS} -Wno-format-truncation)
420+ endif ()
421+ if (CCVER VERSION_GREATER_EQUAL 8.1.0)
422+ set (CXX_FLAGS ${CXX_FLAGS} -Wextra-semi)
423+ endif ()
424+ endif ()
425+
426+ set (GF_C_FLAGS ${C_FLAGS} PARENT_SCOPE)
427+ set (GF_CXX_FLAGS ${CXX_FLAGS} PARENT_SCOPE)
428+ endfunction ()
429+
400430if (LLAMA_ALL_WARNINGS)
401431 if (NOT MSVC )
402- set (warning_flags -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function)
403- set (c_flags -Wshadow -Wstrict-prototypes -Wpointer-arith -Wmissing-prototypes -Werror=implicit-int -Werror=implicit-function-declaration)
404- set (cxx_flags -Wmissing-declarations -Wmissing-noreturn)
405- set (host_cxx_flags "" )
406-
407- if (CMAKE_C_COMPILER_ID MATCHES "Clang" )
408- set (warning_flags ${warning_flags} -Wunreachable-code-break -Wunreachable-code-return)
409- set (host_cxx_flags ${host_cxx_flags} -Wmissing-prototypes -Wextra-semi)
410-
411- if (
412- (CMAKE_C_COMPILER_ID STREQUAL "Clang" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 3.8.0) OR
413- (CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 7.3.0)
414- )
415- set (c_flags ${c_flags} -Wdouble-promotion)
416- endif ()
417- elseif (CMAKE_C_COMPILER_ID STREQUAL "GNU" )
418- set (c_flags ${c_flags} -Wdouble-promotion)
419- set (host_cxx_flags ${host_cxx_flags} -Wno-array-bounds)
432+ set (WARNING_FLAGS -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function)
433+ set (C_FLAGS -Wshadow -Wstrict-prototypes -Wpointer-arith -Wmissing-prototypes
434+ -Werror=implicit-int -Werror=implicit-function-declaration)
435+ set (CXX_FLAGS -Wmissing-declarations -Wmissing-noreturn)
420436
421- if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 7.1.0 )
422- set (host_cxx_flags ${host_cxx_flags} -Wno-format-truncation )
423- endif ()
424- if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 8.1.0 )
425- set (host_cxx_flags ${host_cxx_flags} -Wextra-semi)
426- endif ()
427- endif ( )
437+ set (C_FLAGS ${WARNING_FLAGS} ${C_FLAGS} )
438+ set (CXX_FLAGS ${WARNING_FLAGS} ${CXX_FLAGS} )
439+
440+ get_flags( ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION} )
441+
442+ add_compile_options ( "$<$<COMPILE_LANGUAGE:C>: ${C_FLAGS} ; ${GF_C_FLAGS} >"
443+ "$<$<COMPILE_LANGUAGE:CXX>: ${CXX_FLAGS} ; ${GF_CXX_FLAGS} >" )
428444 else ()
429445 # todo : msvc
446+ set (C_FLAGS "" )
447+ set (CXX_FLAGS "" )
430448 endif ()
449+ endif ()
431450
432- set (c_flags ${c_flags} ${warning_flags} )
433- set (cxx_flags ${cxx_flags} ${warning_flags} )
434- add_compile_options ( "$<$<COMPILE_LANGUAGE:C>: ${c_flags} >"
435- "$<$<COMPILE_LANGUAGE:CXX>: ${cxx_flags} >"
436- "$<$<COMPILE_LANGUAGE:CXX>: ${host_cxx_flags} >" )
451+ if (LLAMA_CUBLAS )
452+ set (CUDA_FLAGS ${CXX_FLAGS} -use_fast_math )
453+ if ( NOT MSVC )
454+ set (CUDA_FLAGS ${CUDA_FLAGS} -Wno-pedantic)
455+ endif ( )
437456
438- endif ()
457+ if (LLAMA_ALL_WARNINGS AND NOT MSVC )
458+ set (NVCC_CMD ${CMAKE_CUDA_COMPILER} .c)
459+ if (NOT CMAKE_CUDA_HOST_COMPILER STREQUAL "" )
460+ set (NVCC_CMD ${NVCC_CMD} -ccbin ${CMAKE_CUDA_HOST_COMPILER} )
461+ endif ()
439462
440- if (NOT MSVC )
441- set (cuda_flags -Wno-pedantic)
442- endif ()
443- set (cuda_flags ${cxx_flags} -use_fast_math ${cuda_flags} )
463+ execute_process (
464+ COMMAND ${NVCC_CMD} -Xcompiler --version
465+ OUTPUT_VARIABLE CUDA_CCFULLVER
466+ ERROR_QUIET
467+ )
444468
445- list (JOIN host_cxx_flags " " cuda_host_flags) # pass host compiler flags as a single argument
446- if (NOT cuda_host_flags STREQUAL "" )
447- set (cuda_flags ${cuda_flags} -Xcompiler ${cuda_host_flags} )
448- endif ()
469+ if (NOT CUDA_CCFULLVER MATCHES clang)
470+ set (CUDA_CCID "GNU" )
471+ execute_process (
472+ COMMAND ${NVCC_CMD} -Xcompiler "-dumpfullversion -dumpversion"
473+ OUTPUT_VARIABLE CUDA_CCVER
474+ ERROR_QUIET
475+ )
476+ else ()
477+ if (CUDA_CCFULLVER MATCHES Apple )
478+ set (CUDA_CCID "AppleClang" )
479+ else ()
480+ set (CUDA_CCID "Clang" )
481+ endif ()
482+ string (REGEX REPLACE "^.* version ([0-9.]*).*$" "\\ 1" CUDA_CCVER ${CUDA_CCFULLVER} )
483+ endif ()
484+
485+ message ("-- CUDA host compiler is ${CUDA_CCID} ${CUDA_CCVER} " )
449486
450- add_compile_options ("$<$<COMPILE_LANGUAGE:CUDA>:${cuda_flags} >" )
487+ get_flags(${CUDA_CCID} ${CUDA_CCVER} )
488+ list (JOIN GF_CXX_FLAGS " " CUDA_CXX_FLAGS) # pass host compiler flags as a single argument
489+ if (NOT CUDA_CXX_FLAGS STREQUAL "" )
490+ set (CUDA_FLAGS ${CUDA_FLAGS} -Xcompiler ${CUDA_CXX_FLAGS} )
491+ endif ()
492+ endif ()
493+
494+ add_compile_options ("$<$<COMPILE_LANGUAGE:CUDA>:${CUDA_FLAGS} >" )
495+ endif ()
451496
452497if (WIN32 )
453498 add_compile_definitions (_CRT_SECURE_NO_WARNINGS)
@@ -471,6 +516,7 @@ endif()
471516execute_process (
472517 COMMAND ${CMAKE_C_COMPILER} ${CMAKE_EXE_LINKER_FLAGS} -Wl,-v
473518 ERROR_VARIABLE output
519+ OUTPUT_QUIET
474520)
475521if (output MATCHES "dyld-1015\. 7" )
476522 add_compile_definitions (HAVE_BUGGY_APPLE_LINKER)
@@ -593,6 +639,11 @@ else()
593639 message (STATUS "Unknown architecture" )
594640endif ()
595641
642+ if (MINGW)
643+ # Target Windows 8 for PrefetchVirtualMemory
644+ add_compile_definitions (_WIN32_WINNT=0x602)
645+ endif ()
646+
596647#
597648# POSIX conformance
598649#
@@ -662,11 +713,11 @@ add_library(ggml OBJECT
662713 ggml-backend.h
663714 ggml-quants.c
664715 ggml-quants.h
665- ${GGML_SOURCES_CUDA} ${GGML_HEADERS_CUDA}
716+ ${GGML_SOURCES_CUDA} ${GGML_HEADERS_CUDA}
666717 ${GGML_SOURCES_OPENCL} ${GGML_HEADERS_OPENCL}
667- ${GGML_SOURCES_METAL} ${GGML_HEADERS_METAL}
668- ${GGML_SOURCES_MPI} ${GGML_HEADERS_MPI}
669- ${GGML_SOURCES_EXTRA} ${GGML_HEADERS_EXTRA}
718+ ${GGML_SOURCES_METAL} ${GGML_HEADERS_METAL}
719+ ${GGML_SOURCES_MPI} ${GGML_HEADERS_MPI}
720+ ${GGML_SOURCES_EXTRA} ${GGML_HEADERS_EXTRA}
670721 )
671722
672723target_include_directories (ggml PUBLIC . ${LLAMA_EXTRA_INCLUDES} )
0 commit comments