183 lines
7.5 KiB
CMake
183 lines
7.5 KiB
CMake
# The macro will set three variables: DYNASTY_ALL_LIB, DYNASTY_ALL_INCLUDE, and DYNASTY_ALL_SRC
|
|
# tricky parts here are that:
|
|
# 1. if cuda not found, we will compile dummy cuda & cudnn inferencers;
|
|
# 2. if cuda found but cudnn not found, we will compile a dummy cudnn inferencer;
|
|
# 3. only if cuda 10.0 found and cudnn found, we will compile msft-gpu inferencer
|
|
# author: Nan Zhou, nanzhou at kneron dot us
|
|
|
|
# set DYNASTY_ALL_LIB
|
|
macro(dynasty_safely_compile_setLib)
|
|
IF(CUDA_FOUND AND CUDNN_FOUND)
|
|
SET(DYNASTY_ALL_LIB ${GTEST_LIB} ${PIANO_LIB} ${CMAKE_DL_LIBS} ${MSFT_GPU_LIB}
|
|
${CUDA_LIBRARIES} ${CUDA_CUBLAS_LIBRARIES} ${CUDA_CUDART_LIBRARY} ${CUDA_curand_LIBRARY}
|
|
${CUDNN_LIBRARY} )
|
|
ELSE()
|
|
SET(DYNASTY_ALL_LIB ${GTEST_LIB} ${PIANO_LIB} ${CMAKE_DL_LIBS} ${MSFT_LIB} )
|
|
ENDIF()
|
|
|
|
IF(NOT DISABLE_KPLUS)
|
|
SET(KPLUS_LIB ${KPLUS_LIB} ${USB_LIB})
|
|
SET(DYNASTY_ALL_LIB ${DYNASTY_ALL_LIB} ${KPLUS_LIB})
|
|
ENDIF()
|
|
|
|
IF(OpenBLAS_FOUND)
|
|
set(DYNASTY_ALL_LIB ${DYNASTY_ALL_LIB} ${OpenBLAS_LIB})
|
|
ENDIF()
|
|
|
|
endmacro()
|
|
|
|
# after moved to own submodule
|
|
set(FLOAT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/floating_point)
|
|
# set DYNASTY_ALL_INCLUDE
|
|
macro(dynasty_safely_compile_setInclude)
|
|
# EXT_INCLUDE_DIR is defined in common_header_lib/common.cmake
|
|
set( EXT_INCLUDE_DIR ${EXT_INCLUDE_DIR}
|
|
${EXT_INC_DIR}/eigen
|
|
${EXT_INC_DIR}/zdl
|
|
${EXT_INC_DIR}/../../include/io
|
|
${EXT_INC_DIR}/../../include/tensor
|
|
)
|
|
|
|
set(FLOATING_OP_INC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/floating_point/base_operators/src/math)
|
|
SET(SHARED_INCLUDE ${FLOAT_DIR}/include/cuda
|
|
${FLOAT_DIR}/include/io
|
|
${FLOAT_DIR}/include/log
|
|
${FLOATING_OP_INC_DIR}/math
|
|
${FLOAT_DIR}/include/parser
|
|
${FLOAT_DIR}/include/common
|
|
${FLOAT_DIR}/include/inferencer
|
|
${FLOATING_OP_INC_DIR}
|
|
)
|
|
SET(FLOATING_INFERENCE_SHARED_INCLUDE ${FLOAT_DIR}/floating_point/include/common)
|
|
|
|
SET(INFERENCER_INCLUDE ${FLOAT_DIR}/floating_point/include
|
|
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/include/common
|
|
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/include/generic
|
|
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/include/kl730
|
|
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/include/kl1140
|
|
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/include
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../piano/lib/piano
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../compiler/lib/
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../compiler/lib/mozart/frontend
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../compiler/lib/mozart/backend/include
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../compiler/lib/bach/frontend
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../compiler/lib/bach
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../compiler/lib/beethoven/frontend
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../compiler/lib/beethoven
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../compiler/lib/mozart
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../compiler/lib/bach
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../compiler/lib/bach/frontend
|
|
${CMAKE_CURRENT_SOURCE_DIR}/../compiler/lib/common
|
|
)
|
|
|
|
SET(FLOATING_INFERENCER_INCLUDE ${FLOAT_DIR}/floating_point/include)
|
|
|
|
IF(CUDA_FOUND AND CUDNN_FOUND)
|
|
SET(DYNASTY_ALL_INCLUDE ${EXT_INCLUDE_DIR}
|
|
${INFERENCER_INCLUDE}
|
|
${FLOATING_INFERENCE_SHARED_INCLUDE}
|
|
${SHARED_INCLUDE}
|
|
${CUDA_INCLUDE_DIRS}
|
|
${CUDNN_INCLUDE_DIR}
|
|
)
|
|
ELSE()
|
|
SET(DYNASTY_ALL_INCLUDE ${EXT_INCLUDE_DIR}
|
|
${INFERENCER_INCLUDE}
|
|
${FLOATING_INFERENCE_SHARED_INCLUDE}
|
|
${SHARED_INCLUDE})
|
|
ENDIF()
|
|
|
|
#KPLUS related
|
|
SET(KPLUS_INCLUDE ${FLOAT_DIR}/KneronPlus/include)
|
|
SET(DYNASTY_ALL_INCLUDE ${DYNASTY_ALL_INCLUDE} ${KPLUS_INCLUDE})
|
|
|
|
|
|
IF(OpenBLAS_FOUND)
|
|
SET(DYNASTY_ALL_INCLUDE ${DYNASTY_ALL_INCLUDE} ${OpenBLAS_INCLUDE_DIR})
|
|
ENDIF()
|
|
|
|
endmacro()
|
|
|
|
# set DYNASTY_ALL_SRC
|
|
macro(dynasty_safely_compile_setSrc)
|
|
#COMMON_HEADER_SRC is set up by common_header_lib/common.cmake
|
|
|
|
FILE(GLOB SHAREAD_IO_SRC ${FLOAT_DIR}/src/io/*.cpp)
|
|
FILE(GLOB SHAREAD_PARSER_SRC ${FLOAT_DIR}/src/parser/*.cpp)
|
|
FILE(GLOB SHAREAD_LOG_SRC ${FLOAT_DIR}/src/log/*.cpp)
|
|
FILE(GLOB SHAREAD_CUDA_SRC ${FLOAT_DIR}/src/cuda/*.c
|
|
${FLOAT_DIR}/src/cuda/*.cpp
|
|
${FLOAT_DIR}/src/cuda/*.cu )
|
|
|
|
|
|
FILE(GLOB SHARED_INFERENCER_SRC ${FLOAT_DIR}/src/inferencer/AbstractInferencer.cpp
|
|
${FLOAT_DIR}/src/inferencer/PianoInferencer.cpp
|
|
${FLOAT_DIR}/floating_point/src/common/*.cpp)
|
|
|
|
|
|
FILE(GLOB FIX_POINT_INFERENCER_SRC
|
|
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/kl730/*.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/kl1140/*.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/common/*.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/generic/*.cpp
|
|
${CMAKE_CURRENT_SOURCE_DIR}../piano/lib/piano/graph/*.cc)
|
|
|
|
|
|
FILE(GLOB CPU_INFERENCER_SRC ${FLOAT_DIR}/floating_point/src/common/*.cpp
|
|
${FLOAT_DIR}/floating_point/src/cpu/*.cpp)
|
|
|
|
FILE(GLOB MSFT_GPU_INFERENCER_SRC ${FLOAT_DIR}/floating_point/src/msft-gpu/*.cpp)
|
|
FILE(GLOB MSFT_INFERENCER_SRC ${FLOAT_DIR}/floating_point/src/msft/*.cpp)
|
|
|
|
IF(CUDA_FOUND AND CUDNN_FOUND)
|
|
SET(DYNASTY_ALL_SRC ${SHARED_INFERENCER_SRC} ${FIX_POINT_INFERENCER_SRC} ${CPU_INFERENCER_SRC} ${MSFT_INFERENCER_SRC} ${MSFT_GPU_INFERENCER_SRC}
|
|
${SHAREAD_IO_SRC} ${SHAREAD_MATH_SRC} ${SHAREAD_PARSER_SRC} ${SHAREAD_LOG_SRC} ${SHAREAD_CUDA_SRC} ${KPLUS_SRC})
|
|
ELSE()
|
|
SET(DYNASTY_ALL_SRC ${SHARED_INFERENCER_SRC} ${FIX_POINT_INFERENCER_SRC} ${CPU_INFERENCER_SRC} ${MSFT_INFERENCER_SRC}
|
|
${SHAREAD_IO_SRC} ${SHAREAD_MATH_SRC} ${SHAREAD_PARSER_SRC} ${SHAREAD_LOG_SRC} ${KPLUS_SRC})
|
|
ENDIF()
|
|
|
|
#KPLUS Related
|
|
FILE(GLOB KPLUS_SRC ${FLOAT_DIR}/KneronPlus/src/*.cpp)
|
|
SET(DYNASTY_ALL_SRC ${DYNASTY_ALL_SRC} ${KPLUS_SRC})
|
|
|
|
SET(DYNASTY_ALL_SRC ${DYNASTY_ALL_SRC} ${COMMON_HEADER_SRC})
|
|
|
|
endmacro()
|
|
|
|
# main macro to set three variables: DYNASTY_ALL_LIB, DYNASTY_ALL_INCLUDE, and DYNASTY_ALL_SRC
|
|
macro(dynasty_safely_compile)
|
|
SET(ASAN_FLAGS "-fsanitize=address -fno-omit-frame-pointer -g -static-libasan")
|
|
|
|
# SET(TSAN_FLAGS "-fsanitize=thread -fPIE -g -static-libtsan")
|
|
# SET(USAN_FLAGS "-fsanitize=undefined -fno-sanitize-recover=all -static-libubsan")
|
|
#SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${ASAN_FLAGS} ${USAN_FLAGS}")
|
|
|
|
IF(OPENMP_FOUND)
|
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
|
|
SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
|
|
ENDIF()
|
|
|
|
IF (${PLATFORM} STREQUAL "arm64")
|
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mfp16-format=alternative")
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfp16-format=alternative")
|
|
ENDIF()
|
|
|
|
IF(BUILD_IOS)
|
|
UNSET(CMAKE_C_FLAGS)
|
|
UNSET(CMAKE_CXX_FLAGS)
|
|
ENDIF()
|
|
|
|
# This is the customer library for mystery node
|
|
SET(CPU_MYSTERYNODE_SRC ${FLOAT_DIR}/floating_point/src/cpu/mystery.c)
|
|
add_library(${MYSTERY_LIB} ${CPU_MYSTERYNODE_SRC})
|
|
|
|
target_include_directories(${MYSTERY_LIB} PUBLIC ${FLOAT_DIR}/floating_point/include/cpu)
|
|
|
|
dynasty_safely_compile_setLib()
|
|
dynasty_safely_compile_setInclude()
|
|
dynasty_safely_compile_setSrc()
|
|
|
|
endmacro()
|