Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id BB308200B11 for ; Mon, 13 Jun 2016 15:20:02 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id B9B8B160A5B; Mon, 13 Jun 2016 13:20:02 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id A930C160A3C for ; Mon, 13 Jun 2016 15:20:01 +0200 (CEST) Received: (qmail 24707 invoked by uid 500); 13 Jun 2016 13:20:00 -0000 Mailing-List: contact commits-help@singa.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@singa.incubator.apache.org Delivered-To: mailing list commits@singa.incubator.apache.org Received: (qmail 24698 invoked by uid 99); 13 Jun 2016 13:20:00 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 13 Jun 2016 13:20:00 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id 77904C1D1A for ; Mon, 13 Jun 2016 13:20:00 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -4.646 X-Spam-Level: X-Spam-Status: No, score=-4.646 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-1.426] autolearn=disabled Received: from mx2-lw-us.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id 97v91o4Vx5_1 for ; Mon, 13 Jun 2016 13:19:58 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx2-lw-us.apache.org (ASF Mail Server at mx2-lw-us.apache.org) with SMTP id 7C06B5FB33 for ; Mon, 13 Jun 2016 13:19:57 +0000 (UTC) Received: (qmail 24029 invoked by uid 99); 13 Jun 2016 13:19:55 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 13 Jun 2016 13:19:55 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 256F3E03A9; Mon, 13 Jun 2016 13:19:55 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: zhaojing@apache.org To: commits@singa.incubator.apache.org Date: Mon, 13 Jun 2016 13:20:03 -0000 Message-Id: <281b2ce2ad4942c39702c2e794d45269@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [10/50] [abbrv] incubator-singa git commit: SINGA-177 Add fully cmake supporting for the compilation of singa_v1 archived-at: Mon, 13 Jun 2016 13:20:02 -0000 SINGA-177 Add fully cmake supporting for the compilation of singa_v1 Add the whole compilation system implementing by cmake. Solve the duplicated compilation bugs. Project: http://git-wip-us.apache.org/repos/asf/incubator-singa/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-singa/commit/611554f8 Tree: http://git-wip-us.apache.org/repos/asf/incubator-singa/tree/611554f8 Diff: http://git-wip-us.apache.org/repos/asf/incubator-singa/diff/611554f8 Branch: refs/heads/master Commit: 611554f88a9d321f706ab987d8fa81b8bd6d3733 Parents: 9d1bcb4 Author: xiezl Authored: Sun May 22 03:40:33 2016 +0800 Committer: xiezl Committed: Mon May 23 17:05:29 2016 +0800 ---------------------------------------------------------------------- CMakeLists.txt | 35 ++++++++++++++++++------------- cmake/Cuda.cmake | 30 +++++++++++++-------------- cmake/Dependencies.cmake | 16 ++++++++++++++ cmake/Templates/singa_config.h.in | 16 ++++++++++++++ cmake/Thirdparty/FindCUDNN.cmake | 38 +++++++++++++++++----------------- cmake/Thirdparty/FindLMDB.cmake | 12 +++++++++++ src/CMakeLists.txt | 28 +++++++++++++++++-------- test/CMakeLists.txt | 5 ++--- 8 files changed, 120 insertions(+), 60 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/611554f8/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d1a1e6..8cb42fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,10 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) + PROJECT(singa) -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") #message(STATUS "${CMAKE_CXX_FLAGS}") -list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Thirdparty) +LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Thirdparty) #message(STATUS "module path: ${CMAKE_MODULE_PATH}") # Flags @@ -11,22 +12,28 @@ IF(UNIX OR APPLE) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -Wall") ENDIF() -INCLUDE(cmake/ProtoBuf.cmake) -INCLUDE(cmake/Cuda.cmake) -# Includes -SET(SINGA_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include) -include_directories(${SINGA_INCLUDE_DIR}) -#INCLUDE_DIRECTORIES(${singa_include_dir} ${PROJECT_BINARY_DIR}) -#INCLUDE_DIRECTORIES("/home/wangwei/local/cudnn5/include" "/usr/local/cuda/include") +SET(SINGA_INCLUDE_DIR "${CMAKE_SOURCE_DIR}/include;${PROJECT_BINARY_DIR}") +#message(STATUS "include path: ${SINGA_INCLUDE_DIR}") +INCLUDE_DIRECTORIES(${SINGA_INCLUDE_DIR}) +#OPTION(CPU_ONLY "use GPU libs" OFF) +OPTION(USE_CUDA "Use Cuda libs" ON) +OPTION(USE_CUDNN "Use Cudnn libs" ON) +OPTION(USE_OPENCV "Use opencv" OFF) +OPTION(USE_LMDB "Use LMDB libs" OFF) -SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) -SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) -#SET(singa_linker_lib cudnn) -#LINK_DIRECTORIES(${LIBRARY_OUTPUT_PATH} "/home/wangwei/local/cudnn5/lib64/") +INCLUDE("cmake/Dependencies.cmake") +ADD_DEFINITIONS(-DUSE_CMAKE) -#message(STATUS "include_dir: ${SINGA_INCLUDE_DIR}") +CONFIGURE_FILE ( + "${PROJECT_SOURCE_DIR}/cmake/Templates/singa_config.h.in" + "${PROJECT_BINARY_DIR}/singa_config.h") +#set(SINGA_CONFIGURE_SRC "${PROJECT_BINARY_DIR}/singa_config.h") +#LIST(APPEND SRCS ${SINGA_CONFIGURE_SRCS} ${PROJECT_BINARY_DIR}/singa_config.h) + +SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) +SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) ADD_SUBDIRECTORY(src) ADD_SUBDIRECTORY(test) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/611554f8/cmake/Cuda.cmake ---------------------------------------------------------------------- diff --git a/cmake/Cuda.cmake b/cmake/Cuda.cmake index a9ddcb0..19d4e27 100644 --- a/cmake/Cuda.cmake +++ b/cmake/Cuda.cmake @@ -1,24 +1,24 @@ -find_package(CUDA 5.5 QUIET) +FIND_PACKAGE(CUDA 5.5 QUIET) -if(NOT CUDA_FOUND) +IF(NOT CUDA_FOUND) return() -endif() +ENDIF() -set(HAVE_CUDA TRUE) -message(STATUS "Found cuda_v${CUDA_VERSION}") -add_definitions(-DUSE_CUDA) +SET(HAVE_CUDA TRUE) +MESSAGE(STATUS "Found cuda_v${CUDA_VERSION}") +#ADD_DEFINITIONS(-DUSE_CUDA) #message(STATUS "linking: ${CUDA_CUDART_LIBRARY} ${CUDA_curand_LIBRARY} ${CUDA_CUBLAS_LIBRARIES}") -#if(USE_CUDNN) +IF(USE_CUDNN) #include(cmake/Modules/Cudnn.cmake) - find_package(CUDNN REQUIRED) - include_directories(SYSTEM ${CUDNN_INCLUDE_DIR}) - list(APPEND SINGA_LINKER_LIBS ${CUDNN_LIBRARIES}) - add_definitions(-DUSE_CUDNN) - add_definitions(-DCUDNN_VERSION_MAJOR=${CUDNN_VERSION_MAJOR}) -#endif() + FIND_PACKAGE(CUDNN REQUIRED) + INCLUDE_DIRECTORIES(SYSTEM ${CUDNN_INCLUDE_DIR}) + LIST(APPEND SINGA_LINKER_LIBS ${CUDNN_LIBRARIES}) + #ADD_DEFINITIONS(-DUSE_CUDNN) + #ADD_DEFINITIONS(-DCUDNN_VERSION_MAJOR=${CUDNN_VERSION_MAJOR}) +ENDIF() -include_directories(SYSTEM ${CUDA_INCLUDE_DIRS}) -list(APPEND SINGA_LINKER_LIBS ${CUDA_CUDART_LIBRARY} ${CUDA_curand_LIBRARY} ${CUDA_CUBLAS_LIBRARIES}) +INCLUDE_DIRECTORIES(SYSTEM ${CUDA_INCLUDE_DIRS}) +LIST(APPEND SINGA_LINKER_LIBS ${CUDA_CUDART_LIBRARY} ${CUDA_curand_LIBRARY} ${CUDA_CUBLAS_LIBRARIES}) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/611554f8/cmake/Dependencies.cmake ---------------------------------------------------------------------- diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake new file mode 100644 index 0000000..ae28073 --- /dev/null +++ b/cmake/Dependencies.cmake @@ -0,0 +1,16 @@ +SET(Singa_LINKER_LIBS "") + +INCLUDE("cmake/ProtoBuf.cmake") + +IF(USE_LMDB) + FIND_PACKAGE(LMDB REQUIRED) + INCLUDE_DIRECTORIES(SYSTEM ${LMDB_INCLUDE_DIR}) + LIST(APPEND Singa_LINKER_LIBS ${LMDB_LIBRARIES}) +ENDIF() + +IF(NOT CPU_ONLY) + INCLUDE("cmake/Cuda.cmake") +ELSE() + SET(USE_CUDA FALSE) + SET(USE_CUDNN FALSE) +ENDIF() http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/611554f8/cmake/Templates/singa_config.h.in ---------------------------------------------------------------------- diff --git a/cmake/Templates/singa_config.h.in b/cmake/Templates/singa_config.h.in new file mode 100644 index 0000000..e0f7328 --- /dev/null +++ b/cmake/Templates/singa_config.h.in @@ -0,0 +1,16 @@ +// Source directory +#define SOURCE_FOLDER "${PROJECT_SOURCE_DIR}" + +// Binaries director +#define BINARY_FOLDER "${PROJECT_BINARY_DIR}" + +#cmakedefine CPU_ONLY +// cuda +#cmakedefine USE_CUDA + +#cmakedefine USE_CUDNN +#cmakedefine CUDNN_VERSION_MAJOR @CUDNN_VERSION_MAJOR@ + +// lmdb +#cmakedefine USE_LMDB + http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/611554f8/cmake/Thirdparty/FindCUDNN.cmake ---------------------------------------------------------------------- diff --git a/cmake/Thirdparty/FindCUDNN.cmake b/cmake/Thirdparty/FindCUDNN.cmake index faf98d9..eefab9d 100644 --- a/cmake/Thirdparty/FindCUDNN.cmake +++ b/cmake/Thirdparty/FindCUDNN.cmake @@ -1,33 +1,33 @@ -find_path(CUDNN_INCLUDE_DIR NAME "cudnn.h" PATHS "$ENV{CMAKE_INCLUDE_PATH}") -find_library(CUDNN_LIBRARIES NAME "libcudnn.so" PATHS "$ENV{CMAKE_LIBRARY_PATH}") +FIND_PATH(CUDNN_INCLUDE_DIR NAME "cudnn.h" PATHS "$ENV{CMAKE_INCLUDE_PATH}") +FIND_LIBRARY(CUDNN_LIBRARIES NAME "libcudnn.so" PATHS "$ENV{CMAKE_LIBRARY_PATH}") #message("cudnn include path:${CUDNN_INCLUDE_DIR} lib path: ${CUDNN_LIBRARIES}") #message("env include path:$ENV{CUDNN_DIR} next: $ENV{CMAKE_INCLUDE_PATH}") -include(FindPackageHandleStandardArgs) +INCLUDE(FindPackageHandleStandardArgs) find_package_handle_standard_args(CUDNN DEFAULT_MSG CUDNN_INCLUDE_DIR CUDNN_LIBRARIES) -if(CUDNN_FOUND) - file(READ ${CUDNN_INCLUDE_DIR}/cudnn.h CUDNN_VERSION_FILE_CONTENTS) - string(REGEX MATCH "define CUDNN_MAJOR * +([0-9]+)" +IF(CUDNN_FOUND) + FILE(READ ${CUDNN_INCLUDE_DIR}/cudnn.h CUDNN_VERSION_FILE_CONTENTS) + STRING(REGEX MATCH "define CUDNN_MAJOR * +([0-9]+)" CUDNN_VERSION_MAJOR "${CUDNN_VERSION_FILE_CONTENTS}") - string(REGEX REPLACE "define CUDNN_MAJOR * +([0-9]+)" "\\1" + STRING(REGEX REPLACE "define CUDNN_MAJOR * +([0-9]+)" "\\1" CUDNN_VERSION_MAJOR "${CUDNN_VERSION_MAJOR}") - string(REGEX MATCH "define CUDNN_MINOR * +([0-9]+)" + STRING(REGEX MATCH "define CUDNN_MINOR * +([0-9]+)" CUDNN_VERSION_MINOR "${CUDNN_VERSION_FILE_CONTENTS}") - string(REGEX REPLACE "define CUDNN_MINOR * +([0-9]+)" "\\1" + STRING(REGEX REPLACE "define CUDNN_MINOR * +([0-9]+)" "\\1" CUDNN_VERSION_MINOR "${CUDNN_VERSION_MINOR}") - string(REGEX MATCH "define CUDNN_PATCHLEVEL * +([0-9]+)" + STRING(REGEX MATCH "define CUDNN_PATCHLEVEL * +([0-9]+)" CUDNN_VERSION_PATCH "${CUDNN_VERSION_FILE_CONTENTS}") - string(REGEX REPLACE "define CUDNN_PATCHLEVEL * +([0-9]+)" "\\1" + STRING(REGEX REPLACE "define CUDNN_PATCHLEVEL * +([0-9]+)" "\\1" CUDNN_VERSION_PATCH "${CUDNN_VERSION_PATCH}") - if(NOT CUDNN_VERSION_MAJOR) - set(CUDNN_VERSION "???") - else() - set(CUDNN_VERSION "${CUDNN_VERSION_MAJOR}.${CUDNN_VERSION_MINOR}.${CUDNN_VERSION_PATCH}") - endif() - message(STATUS "Found Cudnn_v${CUDNN_VERSION} at ${CUDNN_INCLUDE_DIR}") - mark_as_advanced(CUDNN_INCLUDE_DIR CUDNN_LIBRARIES) + IF(NOT CUDNN_VERSION_MAJOR) + SET(CUDNN_VERSION "???") + ELSE() + SET(CUDNN_VERSION "${CUDNN_VERSION_MAJOR}.${CUDNN_VERSION_MINOR}.${CUDNN_VERSION_PATCH}") + ENDIF() + MESSAGE(STATUS "Found Cudnn_v${CUDNN_VERSION} at ${CUDNN_INCLUDE_DIR}") + MARK_AS_ADVANCED(CUDNN_INCLUDE_DIR CUDNN_LIBRARIES) -endif() +ENDIF() http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/611554f8/cmake/Thirdparty/FindLMDB.cmake ---------------------------------------------------------------------- diff --git a/cmake/Thirdparty/FindLMDB.cmake b/cmake/Thirdparty/FindLMDB.cmake new file mode 100644 index 0000000..c402d99 --- /dev/null +++ b/cmake/Thirdparty/FindLMDB.cmake @@ -0,0 +1,12 @@ + +FIND_PATH(LMDB_INCLUDE_DIR NAMES lmdb.h PATHS "$ENV{LMDB_DIR}/include") +FIND_LIBRARY(LMDB_LIBRARIES NAMES lmdb PATHS "$ENV{LMDB_DIR}/include") + +INCLUDE(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LMDB DEFAULT_MSG LMDB_INCLUDE_DIR LMDB_LIBRARIES) + +IF(LMDB_FOUND) + MESSAGE(STATUS "Found lmdb at $ENV{LMDB_DIR}") + MARK_AS_ADVANCED(LMDB_INCLUDE_DIR LMDB_LIBRARIES) + +ENDIF() http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/611554f8/src/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e2e923e..39383bd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,26 +1,36 @@ # generate protobuf sources -file(GLOB proto_files proto/*.proto) +FILE(GLOB proto_files proto/*.proto) singa_protobuf_generate_cpp_py(${proto_gen_folder} proto_srcs proto_hdrs proto_python ${proto_files}) # include python files either to force generation -add_library(proto STATIC ${proto_hdrs} ${proto_srcs} ${proto_python}) -list(APPEND singa_linker_libs proto) +ADD_LIBRARY(proto STATIC ${proto_hdrs} ${proto_srcs} ${proto_python}) +LIST(APPEND singa_linker_libs proto) -FILE(GLOB_RECURSE utils_source ${CMAKE_CURRENT_SOURCE_DIR}/utils/ "*.cc") +#FILE(GLOB_RECURSE utils_source ${CMAKE_CURRENT_SOURCE_DIR}/utils/ "*.cc") +AUX_SOURCE_DIRECTORY(utils utils_source) +#message(STATUS "UTILS ${utils_source}") ADD_LIBRARY(singa_utils SHARED ${utils_source}) TARGET_LINK_LIBRARIES(singa_utils ${singa_linker_libs}) -list(APPEND singa_linker_libs singa_utils) +LIST(APPEND singa_linker_libs singa_utils) -FILE(GLOB_RECURSE core_source ${CMAKE_CURRENT_SOURCE_DIR}/core/ "*.cc") +#FILE(GLOB_RECURSE core_source ${CMAKE_CURRENT_SOURCE_DIR}/core/ "*.cc") +AUX_SOURCE_DIRECTORY(core/device core_source) +AUX_SOURCE_DIRECTORY(core/memory core_source) +AUX_SOURCE_DIRECTORY(core/scheduler core_source) +AUX_SOURCE_DIRECTORY(core/tensor core_source) +#message(STATUS "CORE ${core_source}") ADD_LIBRARY(singa_core SHARED ${core_source}) TARGET_LINK_LIBRARIES(singa_core ${singa_linker_libs}) -list(APPEND singa_linker_libs singa_core) +LIST(APPEND singa_linker_libs singa_core) #MESSAGE(STATUS "link libs " ${singa_linker_libs}) -FILE(GLOB_RECURSE model_source ${CMAKE_CURRENT_SOURCE_DIR}/model/ "*.cc") +#FILE(GLOB_RECURSE model_source ${CMAKE_CURRENT_SOURCE_DIR}/model/ "*.cc") +AUX_SOURCE_DIRECTORY(model model_source) +AUX_SOURCE_DIRECTORY(model/layer model_source) +#MESSAGE(STATUS "MODEL ${model_source}") ADD_LIBRARY(singa_model SHARED ${model_source}) TARGET_LINK_LIBRARIES(singa_model ${singa_linker_libs}) -list(APPEND singa_linker_libs singa_model) +LIST(APPEND singa_linker_libs singa_model) #ADD_LIBRARY(singa_layer SHARED ${LAYER_SOURCE}) #ADD_LIBRARY(singa_model SHARED ${MODEL_SOURCE}) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/611554f8/test/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index de64abd..a8b0e29 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -3,9 +3,8 @@ ADD_LIBRARY(gtest STATIC EXCLUDE_FROM_ALL "gtest/gtest.h" "gtest/gtest-all.cc") AUX_SOURCE_DIRECTORY(singa singa_test_source) -ADD_EXECUTABLE(test_singa "gtest/gtest_main.cc" ${singa_test_source}) +ADD_EXECUTABLE(test_singa "gtest/gtest_main.cc" ${singa_test_source}) ADD_DEPENDENCIES(test_singa singa_core singa_utils) MESSAGE(STATUS "link libs" ${singa_linker_libs}) -TARGET_LINK_LIBRARIES(test_singa gtest singa_core singa_utils proto protobuf - ${SINGA_LINKER_LIBS}) +TARGET_LINK_LIBRARIES(test_singa gtest singa_core singa_utils singa_model proto protobuf ${SINGA_LINKER_LIBS}) SET_TARGET_PROPERTIES(test_singa PROPERTIES LINK_FLAGS "${LINK_FLAGS} -pthread")