SINGA-189 Generate python outputs of proto files Remove ProtoBuf.cmake. Add python outputs generated by proto files locate at build/src. The proto headers are now at build/include/singa/proto.
Project: http://git-wip-us.apache.org/repos/asf/incubator-singa/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-singa/commit/da23e577 Tree: http://git-wip-us.apache.org/repos/asf/incubator-singa/tree/da23e577 Diff: http://git-wip-us.apache.org/repos/asf/incubator-singa/diff/da23e577 Branch: refs/heads/master Commit: da23e577e48e9f52644dabaa844a010a97286b70 Parents: 3e2507b Author: xiezl <[email protected]> Authored: Fri Jun 3 01:15:53 2016 +0800 Committer: xiezl <[email protected]> Committed: Fri Jun 3 01:15:53 2016 +0800 ---------------------------------------------------------------------- cmake/Dependencies.cmake | 7 ++- cmake/ProtoBuf.cmake | 116 ------------------------------------------ src/CMakeLists.txt | 25 ++++++--- test/CMakeLists.txt | 1 + 4 files changed, 26 insertions(+), 123 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/da23e577/cmake/Dependencies.cmake ---------------------------------------------------------------------- diff --git a/cmake/Dependencies.cmake b/cmake/Dependencies.cmake index 5505ad6..d3f0b00 100644 --- a/cmake/Dependencies.cmake +++ b/cmake/Dependencies.cmake @@ -1,6 +1,11 @@ SET(SINGA_LINKER_LIBS "") -INCLUDE("cmake/ProtoBuf.cmake") +#INCLUDE("cmake/ProtoBuf.cmake") + +FIND_PACKAGE( Protobuf REQUIRED ) +INCLUDE_DIRECTORIES(SYSTEM ${PROTOBUF_INCLUDE_DIR}) +MESSAGE(STATUS "proto libs " ${PROTOBUF_LIBRARIES}) +LIST(APPEND singa_linker_libs ${PROTOBUF_LIBRARIES}) IF(USE_LMDB) FIND_PACKAGE(LMDB REQUIRED) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/da23e577/cmake/ProtoBuf.cmake ---------------------------------------------------------------------- diff --git a/cmake/ProtoBuf.cmake b/cmake/ProtoBuf.cmake deleted file mode 100644 index 437d136..0000000 --- a/cmake/ProtoBuf.cmake +++ /dev/null @@ -1,116 +0,0 @@ -#/** -# * 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. -# */ - -# This file is adpated from Caffe cmake/ProtoBuf.cmake. -# We changed 'caffe' to 'singa' - -# Finds Google Protocol Buffers library and compilers and extends -# the standard cmake script with version and python generation support - -find_package( Protobuf REQUIRED ) -include_directories(SYSTEM ${PROTOBUF_INCLUDE_DIR}) -MESSAGE(STATUS "proto libs " ${PROTOBUF_LIBRARIES}) -list(APPEND singa_linker_libs ${PROTOBUF_LIBRARIES}) - -# As of Ubuntu 14.04 protoc is no longer a part of libprotobuf-dev package -# and should be installed separately as in: sudo apt-get install -# protobuf-compiler -if(EXISTS ${PROTOBUF_PROTOC_EXECUTABLE}) - message(STATUS "Found PROTOBUF Compiler: ${PROTOBUF_PROTOC_EXECUTABLE}") -else() - message(FATAL_ERROR "Could not find PROTOBUF Compiler") -endif() - -#if(PROTOBUF_FOUND) -# # fetches protobuf version -# caffe_parse_header(${PROTOBUF_INCLUDE_DIR}/google/protobuf/stubs/common.h VERION_LINE GOOGLE_PROTOBUF_VERSION) -# string(REGEX MATCH "([0-9])00([0-9])00([0-9])" PROTOBUF_VERSION ${GOOGLE_PROTOBUF_VERSION}) -# set(PROTOBUF_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}") -# unset(GOOGLE_PROTOBUF_VERSION) -#endif() - -# place where to generate protobuf sources -set(proto_gen_folder "${PROJECT_BINARY_DIR}/include/singa/proto") -include_directories("${PROJECT_BINARY_DIR}/include") - -set(PROTOBUF_GENERATE_CPP_APPEND_PATH TRUE) - -############################################################################### -# Modification of standard 'protobuf_generate_cpp()' with output dir parameter -# and python support -# Usage: -# singa_protobuf_generate_cpp_py(<output_dir> <srcs_var> <hdrs_var> -# <python_var> <proto_files>) -function(singa_protobuf_generate_cpp_py output_dir srcs_var hdrs_var python_var) - if(NOT ARGN) - message(SEND_ERROR - "Error: singa_protobuf_generate_cpp_py() called without any proto files") - return() - endif() - - if(PROTOBUF_GENERATE_CPP_APPEND_PATH) - # Create an include path for each file specified - foreach(fil ${ARGN}) - get_filename_component(abs_fil ${fil} ABSOLUTE) - get_filename_component(abs_path ${abs_fil} PATH) - list(FIND _protoc_include ${abs_path} _contains_already) - if(${_contains_already} EQUAL -1) - list(APPEND _protoc_include -I ${abs_path}) - endif() - endforeach() - else() - set(_protoc_include -I ${CMAKE_CURRENT_SOURCE_DIR}) - endif() - - if(DEFINED PROTOBUF_IMPORT_DIRS) - foreach(dir ${PROTOBUF_IMPORT_DIRS}) - get_filename_component(abs_path ${dir} ABSOLUTE) - list(FIND _protoc_include ${abs_path} _contains_already) - if(${_contains_already} EQUAL -1) - list(APPEND _protoc_include -I ${abs_path}) - endif() - endforeach() - endif() - - set(${srcs_var}) - set(${hdrs_var}) - set(${python_var}) - foreach(fil ${ARGN}) - get_filename_component(abs_fil ${fil} ABSOLUTE) - get_filename_component(fil_we ${fil} NAME_WE) - - list(APPEND ${srcs_var} "${output_dir}/${fil_we}.pb.cc") - list(APPEND ${hdrs_var} "${output_dir}/${fil_we}.pb.h") - list(APPEND ${python_var} "${output_dir}/${fil_we}_pb2.py") - - add_custom_command( - OUTPUT "${output_dir}/${fil_we}.pb.cc" - "${output_dir}/${fil_we}.pb.h" - "${output_dir}/${fil_we}_pb2.py" - COMMAND ${CMAKE_COMMAND} -E make_directory "${output_dir}" - COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} --cpp_out ${output_dir} ${_protoc_include} ${abs_fil} - COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} --python_out ${output_dir} ${_protoc_include} ${abs_fil} - DEPENDS ${abs_fil} - COMMENT "Running C++/Python protocol buffer compiler on ${fil}" VERBATIM ) - endforeach() - - set_source_files_properties(${${srcs_var}} ${${hdrs_var}} ${${python_var}} PROPERTIES GENERATED TRUE) - set(${srcs_var} ${${srcs_var}} PARENT_SCOPE) - set(${hdrs_var} ${${hdrs_var}} PARENT_SCOPE) - set(${python_var} ${${python_var}} PARENT_SCOPE) -endfunction() http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/da23e577/src/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 28066de..952f7ee 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,8 +1,21 @@ # generate protobuf sources 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}) +protobuf_generate_cpp(proto_srcs proto_hdrs ${proto_files}) +protobuf_generate_python(proto_pys ${proto_files}) +INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}/include") +#message(STATUS "include: ${CMAKE_BINARY_DIR} ") +#message(STATUS "srcs: ${proto_srcs}") +#message(STATUS "hdrs: ${proto_hdrs}") +#message(STATUS "pys: ${proto_pys}") +ADD_LIBRARY(proto STATIC ${proto_hdrs} ${proto_srcs} ${proto_pys}) +FOREACH(fil ${proto_hdrs}) + ADD_CUSTOM_COMMAND( + TARGET proto PRE_BUILD + COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/include/singa/proto" + COMMAND ${CMAKE_COMMAND} -E copy ${fil} "${CMAKE_BINARY_DIR}/include/singa/proto" + #COMMAND ${CMAKE_COMMAND} -E echo "copy done" + ) +ENDFOREACH() LIST(APPEND SINGA_LINKER_LIBS proto) #FILE(GLOB_RECURSE utils_source ${CMAKE_CURRENT_SOURCE_DIR}/utils/ "*.cc") @@ -19,14 +32,14 @@ AUX_SOURCE_DIRECTORY(core/memory core_source) AUX_SOURCE_DIRECTORY(core/scheduler core_source) AUX_SOURCE_DIRECTORY(core/tensor core_source) FILE(GLOB_RECURSE cuda_source core "*.cu") -set(FLAGS_BACKUP ${CMAKE_CXX_FLAGS}) -set(CMAKE_CXX_FLAGS "") +SET(FLAGS_BACKUP ${CMAKE_CXX_FLAGS}) +SET(CMAKE_CXX_FLAGS "") CUDA_COMPILE(cuda_objs SHARED ${cuda_source} OPTIONS "-Xcompiler -fPIC") #message(STATUS "FLAGS ${CMAKE_CXX_FLAGS}") #message(STATUS "CORE ${cuda_source}") #message(STATUS "OBJ ${cuda_objs}") include_directories("${CMAKE_CURRENT_SOURCE_DIR}/core/tensor") -set(CMAKE_CXX_FLAGS ${FLAGS_BACKUP}) +SET(CMAKE_CXX_FLAGS ${FLAGS_BACKUP}) ADD_LIBRARY(singa_core SHARED ${core_source} ${cuda_objs}) TARGET_LINK_LIBRARIES(singa_core ${SINGA_LINKER_LIBS}) LIST(APPEND SINGA_LINKER_LIBS singa_core) http://git-wip-us.apache.org/repos/asf/incubator-singa/blob/da23e577/test/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index a8b0e29..92401ad 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,4 +1,5 @@ INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) +INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}/include) ADD_LIBRARY(gtest STATIC EXCLUDE_FROM_ALL "gtest/gtest.h" "gtest/gtest-all.cc") AUX_SOURCE_DIRECTORY(singa singa_test_source)
