This commit is contained in:
netrunnereve 2023-11-02 20:57:01 -04:00
commit d104725a46
2 changed files with 75 additions and 37 deletions

View file

@ -105,6 +105,44 @@ if (LLAMA_NATIVE)
include(cmake/FindSIMD.cmake) include(cmake/FindSIMD.cmake)
endif () endif ()
#
# Build info header
#
# Generate initial build-info.h
include(${CMAKE_CURRENT_SOURCE_DIR}/scripts/build-info.cmake)
if(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.git")
set(GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.git")
# Is git submodule
if(NOT IS_DIRECTORY "${GIT_DIR}")
file(READ ${GIT_DIR} REAL_GIT_DIR_LINK)
string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" REAL_GIT_DIR ${REAL_GIT_DIR_LINK})
set(GIT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/${REAL_GIT_DIR}")
endif()
# Add a custom target for build-info.h
add_custom_target(BUILD_INFO ALL DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/build-info.h")
# Add a custom command to rebuild build-info.h when .git/index changes
add_custom_command(
OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/build-info.h"
COMMENT "Generating build details from Git"
COMMAND ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_SOURCE_DIR}/scripts/build-info.cmake"
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS "${GIT_DIR}/index"
VERBATIM
)
else()
message(WARNING "Git repository not found; to enable automatic generation of build info, make sure Git is installed and the project is a Git repository.")
endif()
if(LLAMA_NATIVE)
include(cmake/FindSIMD.cmake)
endif()
>>>>>>> 8a2a73102c8b7af446af0350282b65d7820fe4ac
# #
# Compile flags # Compile flags
# #

View file

@ -1,6 +1,6 @@
INCLUDE(CheckCSourceRuns) include(CheckCSourceRuns)
SET(AVX_CODE " set(AVX_CODE "
#include <immintrin.h> #include <immintrin.h>
int main() int main()
{ {
@ -10,7 +10,7 @@ SET(AVX_CODE "
} }
") ")
SET(AVX512_CODE " set(AVX512_CODE "
#include <immintrin.h> #include <immintrin.h>
int main() int main()
{ {
@ -28,7 +28,7 @@ SET(AVX512_CODE "
} }
") ")
SET(AVX2_CODE " set(AVX2_CODE "
#include <immintrin.h> #include <immintrin.h>
int main() int main()
{ {
@ -40,7 +40,7 @@ SET(AVX2_CODE "
} }
") ")
SET(FMA_CODE " set(FMA_CODE "
#include <immintrin.h> #include <immintrin.h>
int main() int main()
{ {
@ -52,48 +52,48 @@ SET(FMA_CODE "
} }
") ")
MACRO(CHECK_SSE type flags) macro(check_sse type flags)
SET(__FLAG_I 1) set(__FLAG_I 1)
SET(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS})
FOREACH(__FLAG ${flags}) foreach(__FLAG ${flags})
IF(NOT ${type}_FOUND) if(NOT ${type}_FOUND)
SET(CMAKE_REQUIRED_FLAGS ${__FLAG}) set(CMAKE_REQUIRED_FLAGS ${__FLAG})
CHECK_C_SOURCE_RUNS("${${type}_CODE}" HAS_${type}_${__FLAG_I}) CHECK_C_SOURCE_RUNS("${${type}_CODE}" HAS_${type}_${__FLAG_I})
IF(HAS_${type}_${__FLAG_I}) if(HAS_${type}_${__FLAG_I})
SET(${type}_FOUND TRUE CACHE BOOL "${type} support") set(${type}_FOUND TRUE CACHE BOOL "${type} support")
SET(${type}_FLAGS "${__FLAG}" CACHE STRING "${type} flags") set(${type}_FLAGS "${__FLAG}" CACHE STRING "${type} flags")
ENDIF() endif()
MATH(EXPR __FLAG_I "${__FLAG_I}+1") math(EXPR __FLAG_I "${__FLAG_I}+1")
ENDIF() endif()
ENDFOREACH() endforeach()
SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE})
IF(NOT ${type}_FOUND) if(NOT ${type}_FOUND)
SET(${type}_FOUND FALSE CACHE BOOL "${type} support") set(${type}_FOUND FALSE CACHE BOOL "${type} support")
SET(${type}_FLAGS "" CACHE STRING "${type} flags") set(${type}_FLAGS "" CACHE STRING "${type} flags")
ENDIF() endif()
MARK_AS_ADVANCED(${type}_FOUND ${type}_FLAGS) mark_as_advanced(${type}_FOUND ${type}_FLAGS)
ENDMACRO() endmacro()
CHECK_SSE("AVX" " ;/arch:AVX") check_sse("AVX" " ;/arch:AVX")
IF(NOT ${AVX_FOUND}) if(NOT ${AVX_FOUND})
set(LLAMA_AVX OFF) set(LLAMA_AVX OFF)
ELSE() else()
set(LLAMA_AVX ON) set(LLAMA_AVX ON)
ENDIF() endif()
CHECK_SSE("AVX2" " ;/arch:AVX2") check_sse("AVX2" " ;/arch:AVX2")
IF(NOT ${AVX2_FOUND}) if(NOT ${AVX2_FOUND})
set(LLAMA_AVX2 OFF) set(LLAMA_AVX2 OFF)
ELSE() else()
set(LLAMA_AVX2 ON) set(LLAMA_AVX2 ON)
ENDIF() endif()
CHECK_SSE("AVX512" " ;/arch:AVX512") check_sse("AVX512" " ;/arch:AVX512")
IF(NOT ${AVX512_FOUND}) if(NOT ${AVX512_FOUND})
set(LLAMA_AVX512 OFF) set(LLAMA_AVX512 OFF)
ELSE() else()
set(LLAMA_AVX512 ON) set(LLAMA_AVX512 ON)
ENDIF() endif()