blob: 60c432729119e8ecd1a8c6384aec2ba99a3021ae [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
SET(SINGA_LINKER_LIBS "")
IF(USE_MODULES)
#IF(USE_SHARED_LIBS)
# include(FindProtobuf)
# SET(CMAKE_INSTALL_RPATH "${CMAKE_BINARY_DIR}/lib")
# link_directories(${CMAKE_BINARY_DIR}/lib)
# SET(PROTOBUF_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include")
# SET(PROTOBUF_LIBRARY "${CMAKE_BINARY_DIR}/lib/libprotobuf.so")
# SET(PROTOBUF_PROTOC_LIBRARY "${CMAKE_BINARY_DIR}/lib/libprotoc.so")
# SET(PROTOBUF_PROTOC_EXECUTABLE "${CMAKE_BINARY_DIR}/bin/protoc")
# INCLUDE_DIRECTORIES(SYSTEM ${PROTOBUF_INCLUDE_DIR})
# LIST(APPEND SINGA_LINKER_LIBS ${PROTOBUF_LIBRARY})
# #IF(USE_CBLAS)
# SET(CBLAS_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include")
# SET(CBLAS_LIBRARIES "${CMAKE_BINARY_DIR}/lib/libopenblas.so")
# INCLUDE_DIRECTORIES(SYSTEM ${CBLAS_INCLUDE_DIR})
# LIST(APPEND SINGA_LINKER_LIBS ${CBLAS_LIBRARIES})
#ENDIF()
#ELSE()
include(FindProtobuf)
SET(PROTOBUF_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include")
SET(PROTOBUF_LIBRARY "${CMAKE_BINARY_DIR}/lib/libprotobuf.a")
SET(PROTOBUF_PROTOC_LIBRARY "${CMAKE_BINARY_DIR}/lib/libprotobuf.a")
SET(PROTOBUF_PROTOC_EXECUTABLE "${CMAKE_BINARY_DIR}/bin/protoc")
INCLUDE_DIRECTORIES( ${PROTOBUF_INCLUDE_DIR})
LIST(APPEND SINGA_LINKER_LIBS ${PROTOBUF_LIBRARY})
#IF(USE_CBLAS)
SET(CBLAS_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include")
SET(CBLAS_LIBRARIES "${CMAKE_BINARY_DIR}/lib/libopenblas.a")
INCLUDE_DIRECTORIES( ${CBLAS_INCLUDE_DIR})
LIST(APPEND SINGA_LINKER_LIBS ${CBLAS_LIBRARIES})
#ENDIF()
#ENDIF()
ELSE()
FIND_PACKAGE( Protobuf 3.0 REQUIRED )
#MESSAGE(STATUS "proto libs " ${PROTOBUF_LIBRARY})
LIST(APPEND SINGA_LINKER_LIBS ${PROTOBUF_LIBRARY})
#IF(USE_CBLAS)
FIND_PACKAGE(CBLAS REQUIRED)
INCLUDE_DIRECTORIES( ${CBLAS_INCLUDE_DIR})
LIST(APPEND SINGA_LINKER_LIBS ${CBLAS_LIBRARIES})
#MESSAGE(STATUS "Found cblas at ${CBLAS_LIBRARIES}")
#ENDIF()
ENDIF()
#INCLUDE("cmake/ProtoBuf.cmake")
#INCLUDE("cmake/Protobuf.cmake")
FIND_PACKAGE(Glog)
IF(GLOG_FOUND)
MESSAGE(STATUS "FOUND GLOG at ${GLOG_INCLUDE_DIR}")
#ADD_DEFINITIONS("-DUSE_GLOG")
SET(USE_GLOG TRUE)
LIST(APPEND SINGA_LINKER_LIBS ${GLOG_LIBRARIES})
INCLUDE_DIRECTORIES(${GLOG_INCLUDE_DIR})
ENDIF()
IF(USE_LMDB)
FIND_PACKAGE(LMDB REQUIRED)
INCLUDE_DIRECTORIES( ${LMDB_INCLUDE_DIR})
LIST(APPEND SINGA_LINKER_LIBS ${LMDB_LIBRARIES})
#MESSAGE(STATUS "FOUND lmdb at ${LMDB_INCLUDE_DIR}")
ENDIF()
IF(USE_CUDA)
INCLUDE("cmake/Cuda.cmake")
SET(CNMEM_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include")
SET(CNMEM_LIBRARY "${CMAKE_BINARY_DIR}/lib/libcnmem.a")
LIST(APPEND SINGA_LINKER_LIBS ${CNMEM_LIBRARY})
ELSE()
SET(USE_CUDNN FALSE)
ENDIF()
IF(USE_OPENCL)
FIND_PACKAGE(OpenCL REQUIRED)
IF(NOT OPENCL_FOUND)
MESSAGE(SEND_ERROR "OpenCL was requested, but not found.")
ELSE()
INCLUDE_DIRECTORIES( ${OPENCL_INCLUDE_DIR})
LIST(APPEND SINGA_LINKER_LIBS ${OPENCL_LIBRARIES})
FIND_PACKAGE(ViennaCL REQUIRED)
IF(NOT ViennaCL_FOUND)
MESSAGE(SEND_ERROR "ViennaCL is required if OpenCL is enabled.")
ELSE()
#MESSAGE(STATUS "Found ViennaCL headers at ${ViennaCL_INCLUDE_DIR}")
INCLUDE_DIRECTORIES( ${ViennaCL_INCLUDE_DIR})
LIST(APPEND SINGA_LINKER_LIBS ${ViennaCL_LIBRARIES})
ENDIF()
ENDIF()
ENDIF()
#FIND_PACKAGE(Glog REQUIRED)
#INCLUDE_DIRECTORIES(SYSTEM ${GLOG_INCLUDE_DIRS})
#LIST(APPEND SINGA_LINKER_LIBS ${GLOG_LIBRARIES})
#MESSAGE(STATUS "Found glog at ${GLOG_INCLUDE_DIRS}")
IF(USE_OPENCV)
FIND_PACKAGE(OpenCV REQUIRED)
MESSAGE(STATUS "Found OpenCV_${OpenCV_VERSION} at ${OpenCV_INCLUDE_DIRS}")
INCLUDE_DIRECTORIES( ${OpenCV_INCLUDE_DIRS})
LIST(APPEND SINGA_LINKER_LIBS ${OpenCV_LIBRARIES})
ENDIF()
#LIST(APPEND SINGA_LINKER_LIBS "/home/wangwei/local/lib/libopenblas.so")
#MESSAGE(STATUS "link lib : " ${SINGA_LINKER_LIBS})
IF(USE_PYTHON)
IF(USE_PYTHON3)
set(Python_ADDITIONAL_VERSIONS 3.6 3.5 3.4)
FIND_PACKAGE(PythonInterp 3 REQUIRED)
FIND_PACKAGE(PythonLibs 3 REQUIRED)
FIND_PACKAGE(SWIG 3.0.10 REQUIRED)
ELSE()
FIND_PACKAGE(PythonInterp 2.7 REQUIRED)
FIND_PACKAGE(PythonLibs 2.7 REQUIRED)
FIND_PACKAGE(SWIG 3.0.8 REQUIRED)
ENDIF()
ENDIF()
IF(USE_JAVA)
FIND_PACKAGE(Java REQUIRED)
FIND_PACKAGE(JNI REQUIRED)
FIND_PACKAGE(SWIG 3.0 REQUIRED)
ENDIF()
IF(USE_DNNL)
FIND_PATH(DNNL_INCLUDE_DIR NAME "dnnl.hpp" PATHS "$ENV{DNNL_ROOT}/include")
FIND_LIBRARY(DNNL_LIBRARIES NAME "dnnl" PATHS "$ENV{DNNL_ROOT}/lib")
MESSAGE(STATUS "Found DNNL at ${DNNL_INCLUDE_DIR}")
INCLUDE_DIRECTORIES(${DNNL_INCLUDE_DIR})
LIST(APPEND SINGA_LINKER_LIBS ${DNNL_LIBRARIES})
ENDIF()
IF(USE_DIST)
FIND_PATH(MPI_INCLUDE_DIR NAME "mpi.h" PATHS "$ENV{HOME}/mpich-3.3.2/build/include/")
FIND_LIBRARY(MPI_LIBRARIES NAME "mpi" PATHS "$ENV{HOME}/mpich-3.3.2/build/lib")
FIND_LIBRARY(MPICXX_LIBRARIES NAME "mpicxx" PATHS "$ENV{HOME}/mpich-3.3.2/build/lib")
MESSAGE(STATUS "Found MPI at ${MPI_INCLUDE_DIR}")
INCLUDE_DIRECTORIES(${MPI_INCLUDE_DIR})
LIST(APPEND SINGA_LINKER_LIBS ${MPI_LIBRARIES})
LIST(APPEND SINGA_LINKER_LIBS ${MPICXX_LIBRARIES})
MESSAGE(STATUS "Found MPI lib at ${MPI_LIBRARIES}")
MESSAGE(STATUS "Found all lib at ${SINGA_LINKER_LIBS}")
FIND_PATH(NCCL_INCLUDE_DIR NAME "nccl.h" PATHS "/usr/include/")
FIND_LIBRARY(NCCL_LIBRARIES NAME "nccl" PATHS "/usr/lib/x86_64-linux-gnu/")
MESSAGE(STATUS "Found NCCL at ${NCCL_INCLUDE_DIR}")
INCLUDE_DIRECTORIES(${NCCL_INCLUDE_DIR})
LIST(APPEND SINGA_LINKER_LIBS ${NCCL_LIBRARIES})
MESSAGE(STATUS "Found NCCL lib at ${NCCL_LIBRARIES}")
ENDIF()