104 lines
4.4 KiB
CMake
104 lines
4.4 KiB
CMake
cmake_minimum_required(VERSION 3.8)
|
|
project(tmo_kernels)
|
|
message(STATUS "project name: ${PROJECT_NAME}")
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
################################################################################
|
|
# Build Evironment
|
|
################################################################################
|
|
set(BANG_TARGET_CPU_ARCH ${TARGET_CPU_ARCH})
|
|
message("-- TARGET_CPU_ARCH=${TARGET_CPU_ARCH}")
|
|
set(TARGET_MLU_ARCH ${TARGET_MLU_ARCH})
|
|
message("-- TARGET_MLU_ARCH=${TARGET_MLU_ARCH}")
|
|
set(NEUWARE_HOME ${NEUWARE_HOME})
|
|
message("-- NEUWARE_HOME=${NEUWARE_HOME}")
|
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
|
|
"${CMAKE_SOURCE_DIR}/cmake"
|
|
"${NEUWARE_HOME}/cmake"
|
|
"${NEUWARE_HOME}/cmake/modules"
|
|
)
|
|
|
|
find_package(BANG)
|
|
if(NOT BANG_FOUND)
|
|
message(FATAL_ERROR "BANG cannot be found.")
|
|
else ()
|
|
if (NOT BANG_CNCC_EXECUTABLE)
|
|
message(FATAL_ERROR "cncc not found, please ensure cncc is in your PATH env or set variable BANG_CNCC_EXECUTABLE from cmake. Otherwise you should check path used by find_program(BANG_CNCC_EXECUTABLE) in FindBANG.cmake")
|
|
endif()
|
|
endif()
|
|
set(EXECUTABLE_OUTPUT_PATH "${CMAKE_BINARY_DIR}/test")
|
|
set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib")
|
|
|
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -pthread -pipe")
|
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${CMAKE_C_FLAGS} -g3 -O0")
|
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${CMAKE_C_FLAGS} -O3")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror -fPIC -std=c++17 -pthread -pipe")
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${CMAKE_CXX_FLAGS} -g3 -O0")
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${CMAKE_CXX_FLAGS} -O3")
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} -Wl,--gc-sections -fPIC")
|
|
|
|
set(BANG_CNCC_FLAGS "-Wall -Werror -Wdeprecated-declarations -fPIC -std=c++17 -pthread --target=${TARGET_CPU_ARCH}")
|
|
|
|
if ( "${_cncc_version}" VERSION_LESS "5.0.0") # [CNNLCORE-19128]
|
|
message(STATUS "Default rounding mode will be rn when computing float numbers, otherwise will be tz when computing int numbers")
|
|
# This compile option was enabled by JIRA: CNNLCORE-12027
|
|
set(BANG_CNCC_FLAGS "${BANG_CNCC_FLAGS} -Xbang-cnas --deprecated-cvt-default-round-mode-rn")
|
|
endif()
|
|
|
|
if(${TARGET_CPU_ARCH} MATCHES ".*x86_64.*")
|
|
set(BANG_CNCC_FLAGS "${BANG_CNCC_FLAGS} -mcmodel=large")
|
|
endif()
|
|
|
|
string(TOLOWER ${CMAKE_BUILD_TYPE} _CMAKE_BUILD_TYPE_LOWER)
|
|
if(${_CMAKE_BUILD_TYPE_LOWER} MATCHES "debug")
|
|
message(STATUS "Build debug mode")
|
|
set(BANG_CNCC_FLAGS "${BANG_CNCC_FLAGS} -g3 -O0")
|
|
endif()
|
|
|
|
if(${_CMAKE_BUILD_TYPE_LOWER} MATCHES "release")
|
|
set(BANG_CNCC_FLAGS "${BANG_CNCC_FLAGS} -O3 -DNDEBUG")
|
|
endif()
|
|
|
|
if(${TARGET_MLU_ARCH} MATCHES "CNFATBIN")
|
|
set(BANG_CNCC_FLAGS "${BANG_CNCC_FLAGS}" "--bang-mlu-arch=mtp_592 --bang-mlu-arch=mtp_613 --no-neuware-version-check")
|
|
set(BANG_CNCC_FLAGS "${BANG_CNCC_FLAGS}" "--bang-wram-align64")
|
|
else()
|
|
set(BANG_CNCC_FLAGS "${BANG_CNCC_FLAGS}" "--bang-mlu-arch=${TARGET_MLU_ARCH}")
|
|
set(BANG_CNCC_FLAGS "${BANG_CNCC_FLAGS}" "--bang-wram-align64")
|
|
endif()
|
|
|
|
# setup predefined macro for host sources, only for single mlu arch, useful for edge
|
|
if (${TARGET_MLU_ARCH} MATCHES "^(m?tp_)?([0-9]+)$")
|
|
# convert mtp_xxx or tp_xxx to xxx
|
|
string(REGEX REPLACE "^(m?tp_)?([0-9]+)$" "\\2" _TARGET_MLU_ARCH ${TARGET_MLU_ARCH})
|
|
add_definitions(-DTARGET_MLU_ARCH=${_TARGET_MLU_ARCH})
|
|
set(BANG_CNCC_FLAGS "${BANG_CNCC_FLAGS} -DTARGET_MLU_ARCH=${_TARGET_MLU_ARCH}")
|
|
endif()
|
|
|
|
################################################################################
|
|
# Neuware Evironment
|
|
################################################################################
|
|
if(EXISTS ${NEUWARE_HOME})
|
|
include_directories("${NEUWARE_HOME}/include")
|
|
link_directories("${NEUWARE_HOME}/lib64")
|
|
link_directories("${NEUWARE_HOME}/lib")
|
|
else()
|
|
message(FATAL_ERROR "NEUWARE cannot be found, refer README.md to prepare NEUWARE_HOME environment.")
|
|
endif()
|
|
|
|
include_directories("${CMAKE_CURRENT_SOURCE_DIR}")
|
|
|
|
################################################################################
|
|
# Build TMO kernels
|
|
################################################################################
|
|
# aux_source_directory(src DIR_SRCS)
|
|
file(GLOB_RECURSE bang_src_files FOLLOW_SYMLINKS "${CMAKE_CURRENT_SOURCE_DIR}/*.mlu")
|
|
|
|
bang_add_library(tmo_kernels STATIC "${bang_src_files}")
|
|
target_link_libraries(tmo_kernels cnnl cnrt cndrv dl)
|