282 lines
12 KiB
CMake
282 lines
12 KiB
CMake
# Compile all the inferencers across platform as a static library or an executable
|
|
# Some tricks we played here are that:
|
|
# 1. The static library will be fat, since it contains inferencers across platform; as a consumer of our lib,
|
|
# you are only supposed to use one of them, for example, CUDAInferencer;
|
|
# 2. Since we implement build() function only in each specific inplementation, the bin or shared library of the
|
|
# consumer will be small and only link codes of corresponding platform; for example, CUDAInferencer will not
|
|
# contain codes of CPUInferencer
|
|
# 3. We have automactic dectection of dependencies and dummy inferencers; for example, if you have CUDA installed,
|
|
# the target will compile the fully functionnal CUDAInferencer; otherwise, the target will compile a dummy
|
|
# CUDAInferencer which will crash when you create it and print "CUDA NOT FOUND ON CURRENT MACHINE"
|
|
# author: Nan Zhou, nanzhou at kneron dot us
|
|
|
|
|
|
#supportted cmake options: -DDISABLE_CUDA -DDISABLE_OPENBLAS
|
|
|
|
cmake_minimum_required(VERSION 3.10)
|
|
include(../piano/common_header_lib/common.cmake)
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -std=c++17 -Xcompiler -fPIC -arch=sm_61")
|
|
|
|
|
|
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
|
|
set(FLOAT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/floating_point)
|
|
find_package(OpenMP)
|
|
|
|
#######################
|
|
### check options #####
|
|
#######################
|
|
option(DISABLE_CUDA "DISABLE CUDA RELATED CODE(THIS IS NEEDED IN A CUDA ENV)" OFF)
|
|
option(DISABLE_OPENBLAS "DISABLE OPENBLAS RELATED CODE(THIS IS NEEDED IN A OPENBLAS ENV)" OFF)
|
|
option(DISABLE_KPLUS "DISABLE KPLUS RELATED CODE(THIS IS NEEDED WHEN TARGET SYSTEM DOESNT PROVIDE LIBUSBDEV" OFF)
|
|
option(KNEREX_MODE "KNEREX_MODE for Dynasty" OFF)
|
|
|
|
IF(KNEREX_MODE)
|
|
ADD_DEFINITIONS(-DKNEREX_MODE)
|
|
ENDIF()
|
|
|
|
IF(NOT DISABLE_CUDA)
|
|
find_package(CUDA QUIET)
|
|
find_package(CUDNN QUIET)
|
|
ENDIF()
|
|
|
|
MESSAGE("cudnn version: " ${CUDNN_VERSION} ${CUDA_cudnn_LIBRARY})
|
|
|
|
IF(NOT DISABLE_OPENBLAS)
|
|
find_package(OpenBLAS QUIET)
|
|
IF(OpenBLAS_FOUND)
|
|
ADD_DEFINITIONS(-DOPENBLAS_FOUND)
|
|
ENDIF()
|
|
ENDIF()
|
|
|
|
IF(NOT DISABLE_KPLUS)
|
|
find_library(USB_LIB
|
|
NAMES usb-1.0 libusb-1.0
|
|
)
|
|
MESSAGE(STATUS "USB_LIB found as : " ${USB_LIB})
|
|
ADD_DEFINITIONS(-DUSBLIB_FOUND)
|
|
ELSE()
|
|
MESSAGE(STATUS "KPLUS inference will be disabled")
|
|
ENDIF()
|
|
|
|
|
|
IF (NOT ${PLATFORM} STREQUAL "ubuntu_x64")
|
|
ADD_DEFINITIONS(-DBUILD_CPU_ONLY)
|
|
ENDIF()
|
|
|
|
include(cmake/dynasty_safely_compile.cmake)
|
|
dynasty_safely_compile()
|
|
add_subdirectory(floating_point/base_operators)
|
|
|
|
#######################################################################
|
|
##### build ##########################################################
|
|
##### only build run_fix_infer/run_infer on ubuntun_x64 platform ####
|
|
#######################################################################
|
|
#this is the way to get a Linux executable to search for .sos in the directory ../lib as the executable.
|
|
#this will take effect in the link stage
|
|
set(CMAKE_INSTALL_RPATH "$ORIGIN/../lib/")
|
|
IF(CUDA_FOUND)
|
|
ADD_DEFINITIONS(-DCUDA_FOUND)
|
|
cuda_add_library(inferencer_lib STATIC ${DYNASTY_ALL_SRC})
|
|
ELSE()
|
|
add_library(inferencer_lib STATIC ${DYNASTY_ALL_SRC})
|
|
ENDIF()
|
|
|
|
target_link_libraries(inferencer_lib cpu_op ${DYNASTY_ALL_LIB} )
|
|
target_include_directories(inferencer_lib PRIVATE
|
|
${DYNASTY_ALL_INCLUDE}
|
|
)
|
|
|
|
IF (${PLATFORM} STREQUAL "ubuntu_x64")
|
|
add_executable(run_inferencer ${FLOAT_DIR}/src/run_inferencer.cpp )
|
|
add_executable(run_fix_inference dynamic_fixed_point/src/run_fix_inference.cpp)
|
|
|
|
target_link_libraries(run_inferencer inferencer_lib cpu_op ${DSP_ALL_LIB} ${DYNASTY_ALL_LIB} ${MYSTERY_LIB} )
|
|
target_include_directories(run_inferencer PUBLIC ${DYNASTY_ALL_INCLUDE} )
|
|
|
|
|
|
target_link_libraries(run_fix_inference inferencer_lib cpu_op ${DSP_ALL_LIB} ${DYNASTY_ALL_LIB} ${MYSTERY_LIB})
|
|
target_include_directories(run_fix_inference PUBLIC ${DYNASTY_ALL_INCLUDE})
|
|
ENDIF()
|
|
|
|
|
|
|
|
set(CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_SOURCE_DIR})
|
|
add_subdirectory(test)
|
|
add_subdirectory(E2ESimulator)
|
|
##################################
|
|
#### Installation ###########
|
|
##################################
|
|
|
|
IF (${PLATFORM} STREQUAL "ubuntu_x64")
|
|
install(TARGETS run_inferencer
|
|
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_WRITE GROUP_READ WORLD_EXECUTE WORLD_READ WORLD_WRITE
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/release/bin
|
|
)
|
|
|
|
install(TARGETS run_fix_inference
|
|
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_WRITE GROUP_READ WORLD_EXECUTE WORLD_READ WORLD_WRITE
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/release/bin
|
|
)
|
|
install(TARGETS inferencer_integration_tests
|
|
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_WRITE GROUP_READ WORLD_EXECUTE WORLD_READ WORLD_WRITE
|
|
RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/release/bin
|
|
)
|
|
ENDIF()
|
|
|
|
set(dynasty_headers )
|
|
list(APPEND dynasty_headers dynamic_fixed_point/include/generic/KnerexInferencer.h)
|
|
list(APPEND dynasty_headers ${FLOAT_DIR}/include/inferencer/PianoInferencer.h)
|
|
list(APPEND dynasty_headers ${FLOAT_DIR}/include/inferencer/AbstractInferencer.h)
|
|
list(APPEND dynasty_headers ../piano/common_header_lib/include/io/JsonIO.h)
|
|
list(APPEND dynasty_headers ${FLOAT_DIR}/include/io/ONNXIO.h)
|
|
list(APPEND dynasty_headers ${FLOAT_DIR}/include/io/UnixFileManager.h)
|
|
|
|
set_target_properties(inferencer_lib PROPERTIES
|
|
PUBLIC_HEADER "${dynasty_headers}"
|
|
)
|
|
|
|
install(FILES ${MSFT_GPU_LIB}
|
|
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_WRITE GROUP_READ WORLD_EXECUTE WORLD_READ WORLD_WRITE
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/lib)
|
|
|
|
install(FILES ${PROTOBUF}
|
|
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_WRITE GROUP_READ WORLD_EXECUTE WORLD_READ WORLD_WRITE
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/lib)
|
|
|
|
install(FILES ${KPLUS_LIB}
|
|
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_WRITE GROUP_READ WORLD_EXECUTE WORLD_READ WORLD_WRITE
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/lib)
|
|
|
|
install(FILES ${LIBZIP_LIB}
|
|
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_WRITE GROUP_READ WORLD_EXECUTE WORLD_READ WORLD_WRITE
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/lib)
|
|
install(FILES ${ZLIB_LIB}
|
|
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_WRITE GROUP_READ WORLD_EXECUTE WORLD_READ WORLD_WRITE
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/lib)
|
|
|
|
install(TARGETS ${DSP_ALL_LIB} ${MYSTERY_LIB} ${PIANO_LIB}
|
|
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_WRITE GROUP_READ WORLD_EXECUTE WORLD_READ WORLD_WRITE
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/lib)
|
|
install(TARGETS inferencer_lib
|
|
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_WRITE GROUP_READ WORLD_EXECUTE WORLD_READ WORLD_WRITE
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/release/lib
|
|
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include)
|
|
|
|
install(TARGETS cpu_op
|
|
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_WRITE GROUP_READ WORLD_EXECUTE WORLD_READ WORLD_WRITE
|
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/release/lib
|
|
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include)
|
|
|
|
|
|
install(FILES dynamic_fixed_point/include/generic/InferencerPImpl.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
RENAME GenericInferencer.h)
|
|
install(FILES dynamic_fixed_point/include/kl520/InferencerImplWrapperFactory.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
RENAME KL520WrapperFactory.h)
|
|
install(FILES dynamic_fixed_point/include/kl720/InferencerImplWrapperFactory.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
RENAME KL720WrapperFactory.h)
|
|
install(FILES dynamic_fixed_point/include/kl530/InferencerImplWrapperFactory.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
RENAME KL530WrapperFactory.h)
|
|
install(FILES dynamic_fixed_point/include/kl630/InferencerImplWrapperFactory.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
RENAME KL630WrapperFactory.h)
|
|
install(FILES dynamic_fixed_point/include/kl730/InferencerImplWrapperFactory.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
RENAME KL730WrapperFactory.h)
|
|
install(FILES dynamic_fixed_point/include/kl540/InferencerImplWrapperFactory.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
RENAME KL540WrapperFactory.h)
|
|
|
|
install(FILES ${FLOAT_DIR}/base_operators/include/Operators_imp.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
)
|
|
install(FILES ${FLOAT_DIR}/base_operators/include/C_Tensor.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
)
|
|
install(FILES ${FLOAT_DIR}/base_operators/include/DepthSpace_imp.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
)
|
|
install(FILES ${FLOAT_DIR}/base_operators/include/ElementBinaryOp_imp.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
)
|
|
install(FILES ${FLOAT_DIR}/base_operators/include/ElementUnaryOp_imp.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
)
|
|
install(FILES ${FLOAT_DIR}/base_operators/include/Gather_imp.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
)
|
|
install(FILES ${FLOAT_DIR}/base_operators/include/KneronOp_imp.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
)
|
|
install(FILES ${FLOAT_DIR}/base_operators/include/Gemm_imp.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
)
|
|
install(FILES ${FLOAT_DIR}/base_operators/include/OtherOp_imp.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
)
|
|
install(FILES ${FLOAT_DIR}/base_operators/include/Pool_imp.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
)
|
|
install(FILES ${FLOAT_DIR}/base_operators/include/Random_imp.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
)
|
|
install(FILES ${FLOAT_DIR}/base_operators/include/Reduce_imp.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
)
|
|
install(FILES ${FLOAT_DIR}/base_operators/include/Resize_imp.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
)
|
|
install(FILES ${FLOAT_DIR}/base_operators/include/RNN_imp.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
)
|
|
install(FILES ${FLOAT_DIR}/base_operators/include/Mystery_imp.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
)
|
|
|
|
|
|
install(FILES ${FLOAT_DIR}/floating_point/include/cpu/InferencerPImpl.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
RENAME CPUInferencer.h)
|
|
install(FILES ${FLOAT_DIR}/floating_point/include/msft-gpu/InferencerPImpl.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include/msft-gpu/
|
|
)
|
|
install(FILES ${FLOAT_DIR}/floating_point/include/msft-gpu/MSFTInferencer.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include/msft-gpu/
|
|
RENAME MSFTInferencer.h)
|
|
install(FILES ${FLOAT_DIR}/floating_point/include/msft/MSFTInferencer.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include/msft/
|
|
RENAME MSFTInferencer.h)
|
|
install(FILES ${FLOAT_DIR}/KneronPlus/include/KplusInferencer.h
|
|
${FLOAT_DIR}/KneronPlus/include/KplusInferencerPImpl.h
|
|
${FLOAT_DIR}/KneronPlus/include/KplusPlatform.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include)
|
|
install(FILES ../piano/common_header_lib/external/include/kplus/kp_struct.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include/kplus)
|
|
|
|
|
|
install(FILES ${FLOAT_DIR}/floating_point/include/msft-gpu/InferencerPImpl.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
RENAME MSFTInferencerGPU.h)
|
|
install(FILES ${FLOAT_DIR}/floating_point/include/cpu/mystery.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include
|
|
RENAME mystery.h)
|
|
install(FILES ../piano/common_header_lib/include/tensor/tensor.h
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/release/include)
|
|
|
|
|
|
#INSTALL(CODE "execute_process( \
|
|
# COMMAND ${CMAKE_COMMAND} -E create_symlink \
|
|
# ${CMAKE_INSTALL_PREFIX}/release/lib/libinferencer_lib_${CMAKE_BUILD_TYPE}.a \
|
|
# ${CMAKE_INSTALL_PREFIX}/release/lib/libinferencer_lib.a \
|
|
# )")
|
|
|
|
|
|
cmake_print_variables(CMAKE_BUILD_TYPE PLATFORM USE_CXX11_ABI BUILD_DSP BUILD_IOS BUILD_KNEREX OPENMP_FOUND CUDA_FOUND OpenBLAS_FOUND DISABLE_KPLUS)
|