Files
calculet-npu-research-archive/source/repositories-complete/calrt-exact/calrt/hostrt/CMakeLists.txt
T

232 lines
6.7 KiB
CMake

#cmake minimal version
cmake_minimum_required (VERSION 3.15)
# get the current git commit id
execute_process(
COMMAND git rev-parse --short=8 HEAD
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE GIT_COMMIT_ID
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# get the current git tag
execute_process(
COMMAND git describe --tags --always
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
OUTPUT_VARIABLE GIT_TAG
OUTPUT_STRIP_TRAILING_WHITESPACE
)
project(calrt VERSION 0.7.6)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.9")
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION OFF)
endif()
option(PLD_MODE "enable PLD mode specs" OFF)
option(EMU_MODE "enable Emulator mode specs" OFF)
option(BUILD_SHARED_LIBS "build shared lib" OFF)
option(BUILD_NATIVE_ARCH "optimization for the build machine CPU" OFF)
option(BUILD_RELEASE "building and package lib" OFF)
#c++ standard
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build Type" FORCE)
ENDIF(NOT CMAKE_BUILD_TYPE)
# Set a value type to properly display CMAKE_BUILD_TYPE on GUI if the
# value type is "UNINITIALIZED".
GET_PROPERTY(cached_type CACHE CMAKE_BUILD_TYPE PROPERTY TYPE)
IF("${cached_type}" STREQUAL "UNINITIALIZED")
SET(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING "Build Type" FORCE)
ENDIF("${cached_type}" STREQUAL "UNINITIALIZED")
# Check the Build Type.
# Convert the CMAKE_BUILD_TYPE to uppercase to perform a case-insensitive comparison.
string(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_UPPER)
IF(NOT "${CMAKE_BUILD_TYPE_UPPER}"
MATCHES "^(DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL|NONE)\$")
MESSAGE(FATAL_ERROR
"Unknown keyword for CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}\n"
"Acceptable keywords: Debug, Release, RelWithDebInfo, MinSizeRel, None")
ENDIF(NOT "${CMAKE_BUILD_TYPE_UPPER}"
MATCHES "^(DEBUG|RELEASE|RELWITHDEBINFO|MINSIZEREL|NONE)\$")
set(CALRT_DRIVER_PATH ${CMAKE_CURRENT_SOURCE_DIR}/driver)
set(CALRT_INCLUDE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/include)
set(CALRT_INTERNAL_PATH ${CMAKE_CURRENT_SOURCE_DIR}/internal_common)
configure_file(
${CALRT_INTERNAL_PATH}/version.h.in
${CALRT_INTERNAL_PATH}/version.h
@ONLY
)
include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/calrt_cfg.cmake)
include(GNUInstallDirs)
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
find_library(ELF_LIB elf REQUIRED)
add_library(calrt ${CALRT_SRC_FILES})
if(PLD_MODE)
message(STATUS "Build PLD mode")
target_compile_definitions(calrt PRIVATE PLD)
elseif(EMU_MODE)
message(STATUS "Build emulator mode")
target_compile_definitions(calrt PUBLIC EMU_MODE)
endif()
target_compile_features(calrt PUBLIC cxx_std_17)
target_compile_definitions(calrt PRIVATE CALRT_VERSION_MAJOR=1 CALRT_VERSION_MINOR=0 CALRT_VERSION_PATCH=0)
if("${CMAKE_BUILD_TYPE_UPPER}" MATCHES "RELEASE")
add_compile_definitions(RELRT)
message(STATUS "Building in Release mode: Disable Debug Log")
target_compile_options(calrt PRIVATE
-O3
#-march=x86-64
#-mtune=generic
-fno-ipa-icf
-fPIC
-fno-semantic-interposition
-fno-stack-protector
-fno-asynchronous-unwind-tables
-fno-plt
-fvisibility=hidden
-fvisibility-inlines-hidden
-fno-exceptions
-ffunction-sections
-fdata-sections
)
target_link_options(calrt PRIVATE
-fno-ipa-icf
-Wl,-z,now
-Wl,-z,relro
-Wl,--as-needed
-Wl,-O1
-Wl,--gc-sections
)
endif()
target_link_libraries(calrt PRIVATE
Threads::Threads
# libusb_vendor
${ELF_LIB}
rt # rt for shm_open
dl
)
string(TOLOWER "${CMAKE_SYSTEM_NAME}" PLATFORM_OS)
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64")
message(STATUS "Build x86 ARCH")
set(PLATFORM_ARCH "x86_64")
if (BUILD_NATIVE_ARCH)
target_compile_options(calrt PRIVATE
-march=native
-mtune=native
)
else()
target_compile_options(calrt PRIVATE
-march=x86-64
-mtune=generic
)
endif()
elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64|arm64")
message(STATUS "Build arm ARCH")
set(PLATFORM_ARCH "arm64")
target_compile_options(calrt PRIVATE
-march=armv8-a
)
else()
set(PLATFORM_ARCH "${CMAKE_SYSTEM_PROCESSOR}")
endif()
set_target_properties(calrt PROPERTIES
OUTPUT_NAME "calrt-${PLATFORM_OS}-${PLATFORM_ARCH}"
VERSION 0.7.6
SOVERSION 1 # linux ABI stable usage. SONAME
C_VISIBILITY_PRESET hidden
CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN ON
)
if(NOT BUILD_SHARED_LIBS)
message(STATUS "Build static lib")
set_target_properties(calrt PROPERTIES POSITION_INDEPENDENT_CODE ON) # add for linking to libggml-calrt.a
endif()
target_include_directories(calrt
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/calrt>
PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/internal_common>
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/driver>
)
set_target_properties(calrt PROPERTIES EXPORT_NAME calrt)
add_library(calrt::calrt ALIAS calrt)
# CMake config files for find_package
include(CMakePackageConfigHelpers)
install(TARGETS calrt
EXPORT calrtLibTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/calrt
)
export(
EXPORT calrtLibTargets
NAMESPACE calrt::
FILE "${CMAKE_CURRENT_BINARY_DIR}/calrtLibTargets.cmake"
)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/calrtConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion
)
configure_package_config_file(
${CMAKE_CURRENT_SOURCE_DIR}/Config.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/calrtConfig.cmake
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/calrt
)
#set(calr_DIR ${CMAKE_CURRENT_BINARY_DIR} PARENT_SCOPE)
install(EXPORT calrtLibTargets
FILE calrtLibTargets.cmake
NAMESPACE calrt::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/calrt
COMPONENT calrt
)
install(FILES
"${CMAKE_CURRENT_BINARY_DIR}/calrtConfig.cmake"
"${CMAKE_CURRENT_BINARY_DIR}/calrtConfigVersion.cmake"
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/calrt
COMPONENT calrt
)
if(BUILD_RELEASE)
string(TIMESTAMP TODAY %Y%m%d)
set(CPACK_GENERATOR "TGZ")
set(CPACK_PACKAGE_NAME "libcalrt")
set(CPACK_PACKAGE_FILE_NAME
"libcalrt_${GIT_COMMIT_ID}_${TODAY}"
)
include(CPack)
endif(BUILD_RELEASE)