-
Yifan Zhao authoredYifan Zhao authored
BuildNVDLA.cmake 2.54 KiB
get_filename_component(NVDLA_DIR ${NVDLA_DIR} ABSOLUTE)
set(NVDLA_UMD_DIR ${NVDLA_DIR}/umd)
set(NVDLA_LIB_DIR ${NVDLA_DIR}/lib)
make_directory(${NVDLA_LIB_DIR})
# Build Protobuf
set(PROTOBUF_DIR ${NVDLA_UMD_DIR}/external/protobuf-2.6)
set(COMPILER_APPS_DIR ${NVDLA_UMD_DIR}/apps/compiler)
set(COMPILER_CORE_DIR ${NVDLA_UMD_DIR}/core/src/compiler)
add_custom_command(
OUTPUT
${COMPILER_CORE_DIR}/libprotobuf.a ${COMPILER_APPS_DIR}/libprotobuf.a
${NVDLA_LIB_DIR}/libprotobuf.so # Final product 1
WORKING_DIRECTORY ${PROTOBUF_DIR}
COMMAND ./autogen.sh && ./configure && make
COMMAND cp ./src/.libs/libprotobuf.a ${COMPILER_CORE_DIR}
COMMAND cp ./src/.libs/libprotobuf.a ${COMPILER_APPS_DIR}
# Some versions of OS may need all of these:
COMMAND mkdir -p ${NVDLA_LIB_DIR}
COMMAND cp ./src/.libs/libprotobuf.so ${NVDLA_LIB_DIR}/libprotobuf.so.9.0.1
COMMAND ln -s ${NVDLA_LIB_DIR}/libprotobuf.so.9.0.1 ${NVDLA_LIB_DIR}/libprotobuf.so.9
COMMAND ln -s ${NVDLA_LIB_DIR}/libprotobuf.so.9 ${NVDLA_LIB_DIR}/libprotobuf.so
)
# Build NVDLA library
add_custom_command(
OUTPUT ${COMPILER_APPS_DIR}/libnvdla_compiler.so # Final product 2
WORKING_DIRECTORY ${NVDLA_UMD_DIR}
COMMAND make TOP=${NVDLA_UMD_DIR}
COMMAND cp ${NVDLA_UMD_DIR}/out/core/src/compiler/libnvdla_compiler/libnvdla_compiler.so ${COMPILER_APPS_DIR}
)
# What's funny is Make and Ninja don't see these .so files without a custom target
# even though the user of these files is right there (NVDLA)
# So we add these custom target rules here.
add_custom_target(nvdla-protobuf DEPENDS ${NVDLA_LIB_DIR}/libprotobuf.so)
add_custom_target(nvdla-compiler DEPENDS ${COMPILER_APPS_DIR}/libnvdla_compiler.so)
add_library(NVDLA INTERFACE)
target_include_directories(
NVDLA INTERFACE
$<BUILD_INTERFACE:${NVDLA_DIR}/umd/external/include>
$<BUILD_INTERFACE:${NVDLA_DIR}/umd/core/include>
$<BUILD_INTERFACE:${NVDLA_DIR}/umd/core/src/common/include>
$<BUILD_INTERFACE:${NVDLA_DIR}/umd/core/src/compiler/include>
$<INSTALL_INTERFACE:include/umd>
)
target_link_libraries(
NVDLA INTERFACE
${COMPILER_APPS_DIR}/libnvdla_compiler.so
${NVDLA_LIB_DIR}/libprotobuf.so
)
add_dependencies(NVDLA nvdla-protobuf nvdla-compiler)
# LLVM wants to every lib/ module to be installable,
# so as a dependency of a lib/ module, NVDLA must also be installable.
# N.B.: what we write here will not necessarily work for users who install HPVM
# (we haven't figured that out yet); this is just to make CMake happy.
install(TARGETS NVDLA EXPORT LLVMExports)
set_property(GLOBAL APPEND PROPERTY LLVM_EXPORTS_BUILDTREE_ONLY NVDLA)