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)
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
#

View file

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