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