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()

Reply via email to