Merged PR 1062: SuperScaler: Add Feature - Add backend dependency script

## Overview

Add backend dependency cmake script

## Details

- Add `/external`

- Add `/cmake`
This commit is contained in:
Jianfeng Wang 2020-10-10 04:42:48 +00:00 коммит произвёл Peng Cheng
Родитель 0c961caadc
Коммит 280bfe1ffc
9 изменённых файлов: 241 добавлений и 0 удалений

45
cmake/FindIBVerbs.cmake Normal file
Просмотреть файл

@ -0,0 +1,45 @@
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC
# @license GNU General Public License (version 3)
#
# VILLASnode
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
###################################################################################
find_path(IBVERBS_INCLUDE_DIR
NAMES infiniband/verbs.h
)
find_library(IBVERBS_LIBRARY
NAMES ibverbs
)
include(FindPackageHandleStandardArgs)
# handle the QUIETLY and REQUIRED arguments and set VILLASNODE_FOUND to TRUE
# if all listed variables are TRUE
find_package_handle_standard_args(IBVerbs DEFAULT_MSG
IBVERBS_LIBRARY)
mark_as_advanced(IBVERBS_INCLUDE_DIR IBVERBS_LIBRARY)
set(IBVERBS_LIBRARIES ${IBVERBS_LIBRARY})
set(IBVERBS_INCLUDE_DIRS ${IBVERBS_INCLUDE_DIR})
add_library(IBVerbs INTERFACE)
target_include_directories(IBVerbs SYSTEM INTERFACE ${IBVERBS_INCLUDE_DIRS})
target_link_libraries(IBVerbs INTERFACE ${IBVERBS_LIBRARIES})

93
cmake/FindNCCL.cmake Normal file
Просмотреть файл

@ -0,0 +1,93 @@
# Find the nccl libraries
#
# The following variables are optionally searched for defaults
# NCCL_ROOT: Base directory where all NCCL components are found
# NCCL_INCLUDE_DIR: Directory where NCCL header is found
# NCCL_LIB_DIR: Directory where NCCL library is found
#
# The following are set after configuration is done:
# NCCL_FOUND
# NCCL_INCLUDE_DIRS
# NCCL_LIBRARIES
#
# The path hints include CUDA_TOOLKIT_ROOT_DIR seeing as some folks
# install NCCL in the same location as the CUDA toolkit.
# See https://github.com/caffe2/caffe2/issues/1601
set(NCCL_INCLUDE_DIR $ENV{NCCL_INCLUDE_DIR} CACHE PATH "Folder contains NVIDIA NCCL headers")
set(NCCL_LIB_DIR $ENV{NCCL_LIB_DIR} CACHE PATH "Folder contains NVIDIA NCCL libraries")
set(NCCL_VERSION $ENV{NCCL_VERSION} CACHE STRING "Version of NCCL to build with")
if ($ENV{NCCL_ROOT_DIR})
message(WARNING "NCCL_ROOT_DIR is deprecated. Please set NCCL_ROOT instead.")
endif()
list(APPEND NCCL_ROOT $ENV{NCCL_ROOT_DIR} ${CUDA_TOOLKIT_ROOT_DIR})
# Compatible layer for CMake <3.12. NCCL_ROOT will be accounted in for searching paths and libraries for CMake >=3.12.
list(APPEND CMAKE_PREFIX_PATH ${NCCL_ROOT})
find_path(NCCL_INCLUDE_DIRS
NAMES nccl.h
HINTS ${NCCL_INCLUDE_DIR})
if (USE_STATIC_NCCL)
MESSAGE(STATUS "USE_STATIC_NCCL is set. Linking with static NCCL library.")
SET(NCCL_LIBNAME "nccl_static")
if (NCCL_VERSION) # Prefer the versioned library if a specific NCCL version is specified
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a.${NCCL_VERSION}" ${CMAKE_FIND_LIBRARY_SUFFIXES})
endif()
else()
SET(NCCL_LIBNAME "nccl")
if (NCCL_VERSION) # Prefer the versioned library if a specific NCCL version is specified
set(CMAKE_FIND_LIBRARY_SUFFIXES ".so.${NCCL_VERSION}" ${CMAKE_FIND_LIBRARY_SUFFIXES})
endif()
endif()
find_library(NCCL_LIBRARIES
NAMES ${NCCL_LIBNAME}
HINTS ${NCCL_LIB_DIR})
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(NCCL DEFAULT_MSG NCCL_INCLUDE_DIRS NCCL_LIBRARIES)
if(NCCL_FOUND) # obtaining NCCL version and some sanity checks
set (NCCL_HEADER_FILE "${NCCL_INCLUDE_DIRS}/nccl.h")
message (STATUS "Determining NCCL version from ${NCCL_HEADER_FILE}...")
set (OLD_CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES})
list (APPEND CMAKE_REQUIRED_INCLUDES ${NCCL_INCLUDE_DIRS})
include(CheckCXXSymbolExists)
check_cxx_symbol_exists(NCCL_VERSION_CODE nccl.h NCCL_VERSION_DEFINED)
if (NCCL_VERSION_DEFINED)
set(file "${PROJECT_BINARY_DIR}/detect_nccl_version.cc")
file(WRITE ${file} "
#include <iostream>
#include <nccl.h>
int main()
{
std::cout << NCCL_MAJOR << '.' << NCCL_MINOR << '.' << NCCL_PATCH << std::endl;
int x;
ncclGetVersion(&x);
return x == NCCL_VERSION_CODE;
}
")
try_run(NCCL_VERSION_MATCHED compile_result ${PROJECT_BINARY_DIR} ${file}
RUN_OUTPUT_VARIABLE NCCL_VERSION_FROM_HEADER
LINK_LIBRARIES ${NCCL_LIBRARIES})
if (NOT NCCL_VERSION_MATCHED)
message(FATAL_ERROR "Found NCCL header version and library version do not match! \
(include: ${NCCL_INCLUDE_DIRS}, library: ${NCCL_LIBRARIES}) Please set NCCL_INCLUDE_DIR and NCCL_LIB_DIR manually.")
endif()
message(STATUS "NCCL version: ${NCCL_VERSION_FROM_HEADER}")
else()
message(STATUS "NCCL version < 2.3.5-5")
endif ()
set (CMAKE_REQUIRED_INCLUDES ${OLD_CMAKE_REQUIRED_INCLUDES})
message(STATUS "Found NCCL (include: ${NCCL_INCLUDE_DIRS}, library: ${NCCL_LIBRARIES})")
mark_as_advanced(NCCL_ROOT_DIR NCCL_INCLUDE_DIRS NCCL_LIBRARIES)
endif()
add_library(NCCL INTERFACE)
target_include_directories(NCCL SYSTEM INTERFACE ${NCCL_INCLUDE_DIRS})
target_link_libraries(NCCL INTERFACE ${NCCL_LIBRARIES})

44
cmake/FindRDMACM.cmake Normal file
Просмотреть файл

@ -0,0 +1,44 @@
# CMakeLists.txt.
#
# @author Steffen Vogel <stvogel@eonerc.rwth-aachen.de>
# @copyright 2018, Institute for Automation of Complex Power Systems, EONERC
# @license GNU General Public License (version 3)
#
# VILLASnode
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
###################################################################################
find_path(RDMACM_INCLUDE_DIR
NAMES rdma/rdma_cma.h
)
find_library(RDMACM_LIBRARY
NAMES rdmacm
)
include(FindPackageHandleStandardArgs)
# handle the QUIETLY and REQUIRED arguments and set VILLASNODE_FOUND to TRUE
# if all listed variables are TRUE
find_package_handle_standard_args(RDMACM DEFAULT_MSG
RDMACM_LIBRARY RDMACM_INCLUDE_DIR)
mark_as_advanced(RDMACM_INCLUDE_DIR RDMACM_LIBRARY)
set(RDMACM_LIBRARIES ${RDMACM_LIBRARY})
set(RDMACM_INCLUDE_DIRS ${RDMACM_INCLUDE_DIR})
add_library(RDMACM INTERFACE)
target_include_directories(RDMACM SYSTEM INTERFACE ${RDMACM_INCLUDE_DIRS})
target_link_libraries(RDMACM INTERFACE ${RDMACM_LIBRARIES})

Просмотреть файл

@ -0,0 +1,13 @@
include(FetchContent)
FetchContent_Declare(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG release-1.10.0
)
FetchContent_GetProperties(googletest)
if(NOT googletest_POPULATED)
FetchContent_Populate(googletest)
add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR})
endif()

11
cmake/external_json.cmake Normal file
Просмотреть файл

@ -0,0 +1,11 @@
include(FetchContent)
FetchContent_Declare(json
GIT_REPOSITORY https://github.com/nlohmann/json.git
GIT_TAG v3.7.3)
FetchContent_GetProperties(json)
if(NOT json_POPULATED)
FetchContent_Populate(json)
add_subdirectory(${json_SOURCE_DIR} ${json_BINARY_DIR} EXCLUDE_FROM_ALL)
endif()

3
external/CMakeLists.txt поставляемый Normal file
Просмотреть файл

@ -0,0 +1,3 @@
add_subdirectory(gtest)
add_subdirectory(tensorflow)
add_subdirectory(json)

5
external/gtest/CMakeLists.txt поставляемый Normal file
Просмотреть файл

@ -0,0 +1,5 @@
find_package(GTest QUIET)
if(NOT GTest_FOUND)
set(BUILD_SHARED_LIBS ON)
include(external_gtest)
endif()

4
external/json/CMakeLists.txt поставляемый Normal file
Просмотреть файл

@ -0,0 +1,4 @@
find_package(nlohmann_json QUIET)
if(NOT nlohmann_json_FOUND)
include(external_json)
endif()

23
external/tensorflow/CMakeLists.txt поставляемый Normal file
Просмотреть файл

@ -0,0 +1,23 @@
cmake_minimum_required(VERSION 3.17)
project(tensorflow)
execute_process(
COMMAND
bash -c
"python3 -c \'import tensorflow as tf; print(\"\".join(tf.sysconfig.get_include()), end=\"\")\'"
OUTPUT_VARIABLE TF_INCLUDE)
execute_process(
COMMAND
bash -c
"python3 -c \'import tensorflow as tf; print(\"\".join(tf.sysconfig.get_lib()) + \"/libtensorflow_framework.so.1\", end=\"\")\'"
OUTPUT_VARIABLE TF_LIB)
message(STATUS "tensorflow include path :" ${TF_INCLUDE})
message(STATUS "tensorflow lib path :" ${TF_LIB})
add_library(tf_lib INTERFACE)
target_include_directories(tf_lib SYSTEM INTERFACE ${TF_INCLUDE})
target_link_libraries(tf_lib INTERFACE ${TF_LIB})
target_compile_features(tf_lib INTERFACE cxx_std_11)
target_compile_definitions(tf_lib INTERFACE -D_GLIBCXX_USE_CXX11_ABI=0 -DNDEBUG)