kneron_model_converter/libs/dynasty/cmake/dynasty_safely_compile.cmake
2026-01-28 06:16:04 +00:00

221 lines
9.3 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/kl530
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/include/kl520
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/include/kl720
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/include/kl730
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/include/kl630
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/include/kl540
#${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/include/kl720_cuda
${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 FIXED_CUDA_SRC ${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/kl720/*.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 SHAREAD_DSP_FLOAT_SRC
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/dsp/*.c
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/dsp/floating/*.c
)
# FILE(GLOB SHAREAD_DSP_FIXED_SRC
# ${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/kl720/dsp/fixedpoint/*.c
# ${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/kl720/dsp/*.c
# )
FILE(GLOB FIX_POINT_INFERENCER_SRC
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/kl520/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/kl530/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/kl720/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/kl730/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/kl630/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/kl540/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/common/*.cpp
#${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/kl720_cuda/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/generic/*.cpp
#${CMAKE_CURRENT_SOURCE_DIR}/dynamic_fixed_point/src/*/*.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} ${FIXED_CUDA_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)
#target_include_directries(dps_lib )
dynasty_safely_compile_setLib()
dynasty_safely_compile_setInclude()
dynasty_safely_compile_setSrc()
set(DSP_FIX_LIB dsp_fix_lib)
set(DSP_FLOAT_LIB dsp_float_lib)
add_library(dsp_float_lib SHARED ${SHAREAD_DSP_FLOAT_SRC})
#add_library(dsp_fix_lib SHARED ${SHAREAD_DSP_FIXED_SRC})
message(STATUS "BUILD DSP: ${DSP_FLOAT_LIB}")
option(BUILD_DSP OFF)
if(BUILD_DSP)
ADD_DEFINITIONS(-DDSP_ENABLE)
set(DSP_ALL_LIB ${DSP_FLOAT_LIB})
endif()
endmacro()