Repository: incubator-singa Updated Branches: refs/heads/master fac3af949 -> 1117a16eb
SINGA-255 Compile mandatory depedent libaries together with SINGA code Add protobuf. Add OpenBLAS. delete submodules SINGA-255 Compile mandatory depedent libaries together with SINGA code Add externalproject for singa. SINGA-255 Compile mandatory depedent libaries together with SINGA code Add USE_SHARED_LIBS option and some cmake codes. Project: http://git-wip-us.apache.org/repos/asf/incubator-singa/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-singa/commit/932a0cd4 Tree: http://git-wip-us.apache.org/repos/asf/incubator-singa/tree/932a0cd4 Diff: http://git-wip-us.apache.org/repos/asf/incubator-singa/diff/932a0cd4 Branch: refs/heads/master Commit: 932a0cd4959d7b897003d360cdbb3240ca83aeab Parents: 61faa84 Author: xiezl <[email protected]> Authored: Thu Oct 20 22:06:05 2016 +0800 Committer: xiezl <[email protected]> Committed: Mon Oct 24 14:01:21 2016 +0800 ---------------------------------------------------------------------- .gitmodules | 6 +++ CMakeLists.txt | 73 +++++++++++++++++++++++++------- cmake/Dependencies.cmake | 80 +++++++++++++++++++++++++----------- examples/cifar10/CMakeLists.txt | 12 +++--- src/CMakeLists.txt | 1 + test/CMakeLists.txt | 2 +- 6 files changed, 127 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/932a0cd4/.gitmodules ---------------------------------------------------------------------- diff --git a/.gitmodules b/.gitmodules index cd0a9d2..fc8ce49 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,9 @@ [submodule "lib/cnmem"] path = lib/cnmem url = https://github.com/NVIDIA/cnmem.git +[submodule "lib/protobuf"] + path = lib/protobuf + url = https://github.com/google/protobuf.git +[submodule "lib/OpenBLAS"] + path = lib/OpenBLAS + url = https://github.com/xianyi/OpenBLAS.git http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/932a0cd4/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/CMakeLists.txt b/CMakeLists.txt index 2e9f27a..464f8d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,7 +16,7 @@ # limitations under the License. # -CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +CMAKE_MINIMUM_REQUIRED(VERSION 2.8) PROJECT(singa) SET(PACKAGE_VERSION "1.0.0") @@ -27,17 +27,18 @@ LIST(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/Thirdparty) # Flags IF(UNIX OR APPLE) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g -O2 -fPIC -Wall") + SET(CMAKE_CXX_FLAGS + "${CMAKE_CXX_FLAGS} -std=c++11 -g -O2 -fPIC -Wall -pthread") ENDIF() IF(WIN32) - IF (MSVC) - MESSAGE(STATUS "Using msvc compiler") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_SCL_SECURE_NO_WARNINGS") - MESSAGE(STATUS "Using msvc compiler ${CMAKE_CXX_FLAGS}") - ENDIF() + IF (MSVC) + MESSAGE(STATUS "Using msvc compiler") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /D_SCL_SECURE_NO_WARNINGS") + MESSAGE(STATUS "Using msvc compiler ${CMAKE_CXX_FLAGS}") + ENDIF() ENDIF() IF(CMAKE_BUILD_TYPE=Debug) - SET(NVCC_FLAG "${NVCC_FLAG} -g -G ") + SET(NVCC_FLAG "${NVCC_FLAG} -g -G ") ENDIF() #message(STATUS "${CMAKE_CXX_FLAGS}") SET(SINGA_INCLUDE_DIR @@ -54,6 +55,8 @@ OPTION(USE_JAVA "Generate java wrappers" OFF) OPTION(USE_OPENCL "Use OpenCL" OFF) OPTION(ENABLE_DIST "enable distributed training" OFF) OPTION(DISABLE_WARNINGS "disable warnings under windows" ON) +OPTION(USE_MODULES "Use submodules to compile" ON) +OPTION(USE_SHARED_LIBS "Use shared library" OFF) INCLUDE("cmake/Dependencies.cmake") #INCLUDE("cmake/Utils.cmake") @@ -78,7 +81,47 @@ ENDIF() # TODO(wangwei) detect the ev lib IF (ENABLE_DIST) - LIST(APPEND SINGA_LINKER_LIBS ev) + LIST(APPEND SINGA_LINKER_LIBS ev) +ENDIF() + +IF (USE_MODULES) + include(ExternalProject) + #ADD_SUBDIRECTORY(lib/protobuf/cmake) + #ADD_SUBDIRECTORY(lib/OpenBLAS) + IF(USE_SHARED_LIBS) + ExternalProject_Add(protobuf + GIT_REPOSITORY "https://github.com/google/protobuf.git" + GIT_TAG "2.7.0" + SOURCE_DIR "protobuf/" + CONFIGURE_COMMAND "${CMAKE_COMMAND}" + "-H${CMAKE_BINARY_DIR}/protobuf/cmake" "-B." + "-Dprotobuf_BUILD_TESTS=OFF" "-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}" + "-Dprotobuf_BUILD_SHARED_LIBS=ON" "-DCMAKE_C_FLAGS=-fPIC" + "-DCMAKE_CXX_FLAGS=-fPIC" + BUILD_COMMAND "${CMAKE_COMMAND}" --build "." + ) + ELSE() + ExternalProject_Add(protobuf + GIT_REPOSITORY "https://github.com/google/protobuf.git" + GIT_TAG "2.7.0" + SOURCE_DIR "protobuf/" + CONFIGURE_COMMAND "${CMAKE_COMMAND}" + "-H${CMAKE_BINARY_DIR}/protobuf/cmake" "-B." + "-Dprotobuf_BUILD_TESTS=OFF" "-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}" + "-Dprotobuf_BUILD_SHARED_LIBS=OFF" "-DCMAKE_C_FLAGS=-fPIC" + "-DCMAKE_CXX_FLAGS=-fPIC" + BUILD_COMMAND "${CMAKE_COMMAND}" --build "." + ) + ENDIF() + ExternalProject_Add(openblas + GIT_REPOSITORY "https://github.com/xianyi/OpenBLAS.git" + GIT_TAG "develop" + SOURCE_DIR "openblas/" + BUILD_IN_SOURCE 1 + CONFIGURE_COMMAND "" + BUILD_COMMAND "make" "ONLY_CBLAS=1" + INSTALL_COMMAND "make" "PREFIX=${CMAKE_BINARY_DIR}/" "install" + ) ENDIF() INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}/include") @@ -87,17 +130,17 @@ ADD_SUBDIRECTORY(test) ADD_SUBDIRECTORY(examples) IF (USE_PYTHON) - ADD_SUBDIRECTORY(python) + ADD_SUBDIRECTORY(python) ENDIF() IF (USE_JAVA) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing ") - ADD_SUBDIRECTORY(java) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing ") + ADD_SUBDIRECTORY(java) ENDIF() INSTALL(DIRECTORY include/singa DESTINATION ${CMAKE_INSTALL_PREFIX}/include) INSTALL(FILES ${CMAKE_BINARY_DIR}/include/singa/singa_config.h DESTINATION - ${CMAKE_INSTALL_PREFIX}/include/singa) + ${CMAKE_INSTALL_PREFIX}/include/singa) INSTALL (DIRECTORY ${CMAKE_BINARY_DIR}/lib DESTINATION - ${CMAKE_INSTALL_PREFIX} - PATTERN "*libgtest.a" EXCLUDE ) + ${CMAKE_INSTALL_PREFIX} + PATTERN "*libgtest.a" EXCLUDE ) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/932a0cd4/cmake/Dependencies.cmake ---------------------------------------------------------------------- diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index 6ad15c0..572a43b 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -18,12 +18,49 @@ SET(SINGA_LINKER_LIBS "") -#INCLUDE("cmake/ProtoBuf.cmake") +IF(USE_MODULES) + IF(USE_SHARED_LIBS) + include(FindProtobuf) + SET(PROTOBUF_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include") + SET(PROTOBUF_LIBRARIES "${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_LIBRARIES}) + 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_LIBRARIES "${CMAKE_BINARY_DIR}/lib/libprotobuf.a") + SET(PROTOBUF_PROTOC_LIBRARY "${CMAKE_BINARY_DIR}/lib/libprotoc.a") + SET(PROTOBUF_PROTOC_EXECUTABLE "${CMAKE_BINARY_DIR}/bin/protoc") + INCLUDE_DIRECTORIES(SYSTEM ${PROTOBUF_INCLUDE_DIR}) + LIST(APPEND SINGA_LINKER_LIBS ${PROTOBUF_LIBRARIES}) + IF(USE_CBLAS) + SET(CBLAS_INCLUDE_DIR "${CMAKE_BINARY_DIR}/include") + SET(CBLAS_LIBRARIES "${CMAKE_BINARY_DIR}/lib/libopenblas.a") + INCLUDE_DIRECTORIES(SYSTEM ${CBLAS_INCLUDE_DIR}) + LIST(APPEND SINGA_LINKER_LIBS ${CBLAS_LIBRARIES}) + ENDIF() + ENDIF() +ELSE() + FIND_PACKAGE( Protobuf REQUIRED ) + MESSAGE(STATUS "proto libs " ${PROTOBUF_LIBRARIES}) + LIST(APPEND SINGA_LINKER_LIBS ${PROTOBUF_LIBRARIES}) + IF(USE_CBLAS) + FIND_PACKAGE(CBLAS REQUIRED) + INCLUDE_DIRECTORIES(SYSTEM ${CBLAS_INCLUDE_DIR}) + LIST(APPEND SINGA_LINKER_LIBS ${CBLAS_LIBRARIES}) + MESSAGE(STATUS "Found cblas at ${CBLAS_LIBRARIES}") + ENDIF() +ENDIF() -FIND_PACKAGE( Protobuf REQUIRED ) -INCLUDE_DIRECTORIES(SYSTEM ${PROTOBUF_INCLUDE_DIR}) -MESSAGE(STATUS "proto libs " ${PROTOBUF_LIBRARIES}) -LIST(APPEND SINGA_LINKER_LIBS ${PROTOBUF_LIBRARIES}) +#INCLUDE("cmake/ProtoBuf.cmake") #INCLUDE("cmake/Protobuf.cmake") FIND_PACKAGE(Glog) @@ -31,7 +68,7 @@ IF(GLOG_FOUND) MESSAGE(STATUS "GLOG FOUND at ${GLOG_INCLUDE_DIR}") ADD_DEFINITIONS("-DUSE_GLOG") LIST(APPEND SINGA_LINKER_LIBS ${GLOG_LIBRARIES}) - INCLUDE_DIRECTORIES(${GLOG_INCLUDE_DIR}) + INCLUDE_DIRECTORIES(${GLOG_INCLUDE_DIR}) ENDIF() IF(USE_LMDB) @@ -47,30 +84,23 @@ ELSE() SET(USE_CUDNN FALSE) ENDIF() -IF(USE_CBLAS) - FIND_PACKAGE(CBLAS REQUIRED) - INCLUDE_DIRECTORIES(SYSTEM ${CBLAS_INCLUDE_DIR}) - LIST(APPEND SINGA_LINKER_LIBS ${CBLAS_LIBRARIES}) - MESSAGE(STATUS "Found cblas at ${CBLAS_LIBRARIES}") -ENDIF() - IF(USE_OPENCL) FIND_PACKAGE(OpenCL REQUIRED) IF(NOT OpenCL_FOUND) MESSAGE(SEND_ERROR "OpenCL was requested, but not found.") ELSE() - MESSAGE(STATUS "Found OpenCL headers at ${OpenCL_INCLUDE_DIRS}") - INCLUDE_DIRECTORIES(SYSTEM ${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(SYSTEM ${ViennaCL_INCLUDE_DIR}) - LIST(APPEND SINGA_LINKER_LIBS ${ViennaCL_LIBRARIES}) - ENDIF() - ENDIF() + MESSAGE(STATUS "Found OpenCL headers at ${OpenCL_INCLUDE_DIRS}") + INCLUDE_DIRECTORIES(SYSTEM ${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(SYSTEM ${ViennaCL_INCLUDE_DIR}) + LIST(APPEND SINGA_LINKER_LIBS ${ViennaCL_LIBRARIES}) + ENDIF() + ENDIF() ENDIF() #FIND_PACKAGE(Glog REQUIRED) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/932a0cd4/examples/cifar10/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/examples/cifar10/CMakeLists.txt b/examples/cifar10/CMakeLists.txt index 5708c29..8026467 100644 --- a/examples/cifar10/CMakeLists.txt +++ b/examples/cifar10/CMakeLists.txt @@ -22,18 +22,18 @@ INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/include) ADD_EXECUTABLE(alexnet alexnet.cc) ADD_DEPENDENCIES(alexnet singa) -TARGET_LINK_LIBRARIES(alexnet singa ${SINGA_LIBKER_LIBS}) +TARGET_LINK_LIBRARIES(alexnet singa) IF(USE_CUDNN) ADD_EXECUTABLE(alexnet-parallel alexnet-parallel.cc) ADD_DEPENDENCIES(alexnet-parallel singa) -TARGET_LINK_LIBRARIES(alexnet-parallel singa protobuf ${SINGA_LIBKER_LIBS}) -SET_TARGET_PROPERTIES(alexnet-parallel PROPERTIES LINK_FLAGS "${LINK_FLAGS} -pthread") +TARGET_LINK_LIBRARIES(alexnet-parallel singa) +#SET_TARGET_PROPERTIES(alexnet-parallel PROPERTIES LINK_FLAGS "${LINK_FLAGS} -pthread") ADD_EXECUTABLE(vgg-parallel vgg-parallel.cc) ADD_DEPENDENCIES(vgg-parallel singa) -TARGET_LINK_LIBRARIES(vgg-parallel singa protobuf ${SINGA_LIBKER_LIBS}) -SET_TARGET_PROPERTIES(vgg-parallel PROPERTIES LINK_FLAGS "${LINK_FLAGS} -pthread") +TARGET_LINK_LIBRARIES(vgg-parallel singa) +#SET_TARGET_PROPERTIES(vgg-parallel PROPERTIES LINK_FLAGS "${LINK_FLAGS} -pthread") -ENDIF(USE_CUDNN) \ No newline at end of file +ENDIF(USE_CUDNN) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/932a0cd4/src/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8ef4732..709894b 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -95,6 +95,7 @@ ADD_DEPENDENCIES(singa_objects copy_protobuf) IF(UNIX OR APPLE) ADD_LIBRARY(singa SHARED $<TARGET_OBJECTS:singa_objects> ${cuda_objs}) TARGET_LINK_LIBRARIES(singa ${SINGA_LINKER_LIBS}) + SET_TARGET_PROPERTIES(singa PROPERTIES LINK_FLAGS "") ENDIF() #pass configure infor to swig http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/932a0cd4/test/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index e1487d2..79e481c 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -33,7 +33,7 @@ LIST(REMOVE_ITEM singa_test_source "singa/test_ep.cc") ADD_EXECUTABLE(test_singa "gtest/gtest_main.cc" ${singa_test_source}) ADD_DEPENDENCIES(test_singa singa) #MESSAGE(STATUS "link libs" ${singa_linker_libs}) -TARGET_LINK_LIBRARIES(test_singa gtest singa ${SINGA_LINKER_LIBS}) +TARGET_LINK_LIBRARIES(test_singa gtest singa ) IF(UNIX AND (NOT APPLE)) LIST(APPEND LINK_FLAGS "-pthread") ENDIF()
