From c9cdc986279606b7016d22c04e784f4077805241 Mon Sep 17 00:00:00 2001 From: liaogang Date: Wed, 17 May 2017 17:45:27 +0800 Subject: [PATCH 01/11] detect golang in cmake --- cmake/CMakeDetermineGoCompiler.cmake | 44 ++++++++++++++++++++++++++++ cmake/CMakeGoCompiler.cmake.in | 8 +++++ cmake/CMakeGoInformation.cmake | 7 +++++ cmake/CMakeTestGoCompiler.cmake | 1 + 4 files changed, 60 insertions(+) create mode 100644 cmake/CMakeDetermineGoCompiler.cmake create mode 100644 cmake/CMakeGoCompiler.cmake.in create mode 100644 cmake/CMakeGoInformation.cmake create mode 100644 cmake/CMakeTestGoCompiler.cmake diff --git a/cmake/CMakeDetermineGoCompiler.cmake b/cmake/CMakeDetermineGoCompiler.cmake new file mode 100644 index 0000000000..b3f8fbe271 --- /dev/null +++ b/cmake/CMakeDetermineGoCompiler.cmake @@ -0,0 +1,44 @@ +if(NOT CMAKE_Go_COMPILER) + if(NOT $ENV{GO_COMPILER} STREQUAL "") + get_filename_component(CMAKE_Go_COMPILER_INIT $ENV{GO_COMPILER} PROGRAM PROGRAM_ARGS CMAKE_Go_FLAGS_ENV_INIT) + + if(CMAKE_Go_FLAGS_ENV_INIT) + set(CMAKE_Go_COMPILER_ARG1 "${CMAKE_Go_FLAGS_ENV_INIT}" CACHE STRING "First argument to Go compiler") + endif() + + if(NOT EXISTS ${CMAKE_Go_COMPILER_INIT}) + message(SEND_ERROR "Could not find compiler set in environment variable GO_COMPILER:\n$ENV{GO_COMPILER}.") + endif() + + endif() + + set(Go_BIN_PATH + $ENV{GOPATH} + $ENV{GOROOT} + $ENV{GOROOT}/../bin + $ENV{GO_COMPILER} + /usr/bin + /usr/local/bin + ) + + if(CMAKE_Go_COMPILER_INIT) + set(CMAKE_Go_COMPILER ${CMAKE_Go_COMPILER_INIT} CACHE PATH "Go Compiler") + else() + find_program(CMAKE_Go_COMPILER + NAMES go + PATHS ${Go_BIN_PATH} + ) + EXEC_PROGRAM(${CMAKE_Go_COMPILER} ARGS version OUTPUT_VARIABLE GOLANG_VERSION) + STRING(REGEX MATCH "go[0-9]+.[0-9]+.[0-9]+[ /A-Za-z0-9]*" VERSION "${GOLANG_VERSION}") + message("-- The Golang compiler identification is ${VERSION}") + message("-- Check for working Golang compiler: ${CMAKE_Go_COMPILER}") + endif() + +endif() + +mark_as_advanced(CMAKE_Go_COMPILER) + +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/CMakeGoCompiler.cmake.in + ${CMAKE_PLATFORM_INFO_DIR}/CMakeGoCompiler.cmake @ONLY) + +set(CMAKE_Go_COMPILER_ENV_VAR "GO_COMPILER") diff --git a/cmake/CMakeGoCompiler.cmake.in b/cmake/CMakeGoCompiler.cmake.in new file mode 100644 index 0000000000..a71f08e064 --- /dev/null +++ b/cmake/CMakeGoCompiler.cmake.in @@ -0,0 +1,8 @@ +set(CMAKE_Go_COMPILER "@CMAKE_Go_COMPILER@") +set(CMAKE_Go_COMPILER_LOADED 1) + +set(CMAKE_Go_SOURCE_FILE_EXTENSIONS go) +set(CMAKE_Go_LINKER_PREFERENCE 40) +set(CMAKE_Go_OUTPUT_EXTENSION .o) +set(CMAKE_Go_OUTPUT_EXTENSION_REPLACE 1) +set(CMAKE_Go_COMPILER_ENV_VAR "GO_COMPILER") diff --git a/cmake/CMakeGoInformation.cmake b/cmake/CMakeGoInformation.cmake new file mode 100644 index 0000000000..ba51ac93fc --- /dev/null +++ b/cmake/CMakeGoInformation.cmake @@ -0,0 +1,7 @@ +if(NOT CMAKE_Go_COMPILE_OBJECT) + set(CMAKE_Go_COMPILE_OBJECT "go tool compile -l -N -o ") +endif() + +if(NOT CMAKE_Go_LINK_EXECUTABLE) + set(CMAKE_Go_LINK_EXECUTABLE "go tool link -o ") +endif() diff --git a/cmake/CMakeTestGoCompiler.cmake b/cmake/CMakeTestGoCompiler.cmake new file mode 100644 index 0000000000..b9891b015b --- /dev/null +++ b/cmake/CMakeTestGoCompiler.cmake @@ -0,0 +1 @@ +set(CMAKE_Go_COMPILER_WORKS 1 CACHE INTERNAL "") From 4dcb9f1ca1995011b8a0c1f65663e756ff95e854 Mon Sep 17 00:00:00 2001 From: liaogang Date: Wed, 17 May 2017 20:44:29 +0800 Subject: [PATCH 02/11] add go_xxx to simplify cmake --- CMakeLists.txt | 3 +- cmake/generic.cmake | 97 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 cmake/generic.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index fc85f83b94..79210d0436 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,7 +19,7 @@ set(PROJ_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) include(system) -project(paddle CXX C) +project(paddle CXX C Go) find_package(Sphinx) if(NOT CMAKE_CROSSCOMPILING) @@ -92,6 +92,7 @@ include(external/swig) # download, build, install swig include(external/warpctc) # download, build, install warpctc include(external/any) # download libn::any +include(generic) # simplify cmake module include(package) # set paddle packages include(cpplint) # set paddle c++ style include(ccache) # set ccache for compilation diff --git a/cmake/generic.cmake b/cmake/generic.cmake new file mode 100644 index 0000000000..063a09b63e --- /dev/null +++ b/cmake/generic.cmake @@ -0,0 +1,97 @@ +# Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserve. +# +# Licensed 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. + + +# To simplify the build process of PaddlePaddle, we defined couple of +# fundamental abstractions, e.g., how to build library, binary and +# test in C++, CUDA and Go. +# +# ------------------------------------------- +# C++ CUDA C++ Go +# ------------------------------------------- +# cc_library nv_library go_library +# cc_binary nv_binary go_binary +# cc_test nv_test go_test +# ------------------------------------------- +# +# cmake_parse_arguments can help us to achieve this goal. +# https://cmake.org/cmake/help/v3.0/module/CMakeParseArguments.html + + +set(GOPATH "${CMAKE_CURRENT_BINARY_DIR}/go") +file(MAKE_DIRECTORY ${GOPATH}) + +# Because api.go defines a GO wrapper to ops and tensor, it depends on +# both. This implies that if any of tensor.{h,cc}, ops.{h,cu}, or +# api.go is changed, api need to be re-built. +# go_library(api +# SRCS +# api.go +# DEPS +# tensor # Because ops depend on tensor, this line is optional. +# ops) +function(go_library TARGET_NAME) + set(options OPTIONAL) + set(oneValueArgs "") + set(multiValueArgs SRCS DEPS) + cmake_parse_arguments(go_library "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + if (${go_library_OPTIONAL} STREQUAL "SHARED") + set(BUILD_MODE "-buildmode=c-shared") + if(APPLE) + set(LIB_NAME "lib${TARGET_NAME}.dylib") + else() + set(LIB_NAME "lib${TARGET_NAME}.so") + endif() + else() + set(BUILD_MODE "-buildmode=c-archive") + set(LIB_NAME "lib${TARGET_NAME}.a") + endif() + add_custom_command(OUTPUT ${TARGET_NAME}_timestamp + COMMAND env GOPATH=${GOPATH} ${CMAKE_Go_COMPILER} build ${BUILD_MODE} + -o "${CMAKE_CURRENT_BINARY_DIR}/${LIB_NAME}" + ${go_library_SRCS} + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) + add_custom_target(${TARGET_NAME}_lib ALL DEPENDS ${TARGET_NAME}_timestamp ${go_library_DEPS}) + add_library(${TARGET_NAME} STATIC IMPORTED) + set_target_properties(${TARGET_NAME} PROPERTIES + IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${LIB_NAME}) +endfunction(go_library) + +function(go_binary TARGET_NAME) + set(options OPTIONAL) + set(oneValueArgs "") + set(multiValueArgs SRCS DEPS) + cmake_parse_arguments(go_binary "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + add_custom_command(OUTPUT ${TARGET_NAME}_timestamp + COMMAND env GOPATH=${GOPATH} ${CMAKE_Go_COMPILER} build + -o "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}" + ${go_library_SRCS} + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) + add_custom_target(${TARGET_NAME} ALL DEPENDS ${TARGET_NAME}_timestamp ${go_binary_DEPS}) + install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME} DESTINATION bin) +endfunction(go_binary) + +function(go_test TARGET_NAME) + set(options OPTIONAL) + set(oneValueArgs "") + set(multiValueArgs SRCS DEPS) + cmake_parse_arguments(go_test "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + add_custom_command(OUTPUT ${TARGET_NAME}_timestamp + COMMAND env GOPATH=${GOPATH} ${CMAKE_Go_COMPILER} test + -c -o "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}" + ${go_test_SRCS} + WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) + add_custom_target(${TARGET_NAME} ALL DEPENDS ${TARGET_NAME}_timestamp ${go_test_DEPS}) + add_test(${TARGET_NAME} ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}) +endfunction(go_test) From e254c7a799db1b309d87da9fce5bc1c0d0e5b718 Mon Sep 17 00:00:00 2001 From: liaogang Date: Wed, 17 May 2017 20:44:43 +0800 Subject: [PATCH 03/11] add go unit test --- paddle/CMakeLists.txt | 4 ++++ paddle/go/CMakeLists.txt | 13 +++++++++++++ paddle/go/adder.go | 10 ++++++++++ paddle/go/cgo_test.cc | 7 +++++++ 4 files changed, 34 insertions(+) create mode 100644 paddle/go/CMakeLists.txt create mode 100644 paddle/go/adder.go create mode 100644 paddle/go/cgo_test.cc diff --git a/paddle/CMakeLists.txt b/paddle/CMakeLists.txt index 7699554909..694ebb9ba0 100644 --- a/paddle/CMakeLists.txt +++ b/paddle/CMakeLists.txt @@ -9,6 +9,10 @@ add_subdirectory(pserver) add_subdirectory(trainer) add_subdirectory(scripts) +if(${CMAKE_Go_COMPILER}) + add_subdirectory(go) +endif() + find_package(Boost QUIET) if(Boost_FOUND) diff --git a/paddle/go/CMakeLists.txt b/paddle/go/CMakeLists.txt new file mode 100644 index 0000000000..482c948a51 --- /dev/null +++ b/paddle/go/CMakeLists.txt @@ -0,0 +1,13 @@ +include_directories(${CMAKE_CURRENT_BINARY_DIR}) + +go_library(adder SRCS adder.go) + +# cc_test(cgo_test +# SRCS +# cgo_test.cc +# DEPS +# adder) +add_executable(cgo_test cgo_test.cc) +add_dependencies(cgo_test adder) +target_link_libraries(cgo_test ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} adder) +add_test(cgo_test cgo_test) diff --git a/paddle/go/adder.go b/paddle/go/adder.go new file mode 100644 index 0000000000..e14f40fd9f --- /dev/null +++ b/paddle/go/adder.go @@ -0,0 +1,10 @@ +package main + +import "C" + +//export GoAdder +func GoAdder(x, y int) int { + return x + y +} + +func main() {} // Required but ignored diff --git a/paddle/go/cgo_test.cc b/paddle/go/cgo_test.cc new file mode 100644 index 0000000000..8d89a92c08 --- /dev/null +++ b/paddle/go/cgo_test.cc @@ -0,0 +1,7 @@ +#include "libadder.h" +#include +#include "gtest/gtest.h" + +TEST(Cgo, Invoke) { + EXPECT_EQ(GoAdder(30, 12), 42); +} From 4d5417b55d69df5268ff32d6d4dc8de0a4208f53 Mon Sep 17 00:00:00 2001 From: liaogang Date: Wed, 17 May 2017 20:57:30 +0800 Subject: [PATCH 04/11] modify travis --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 387367a230..d1e5080f68 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,7 @@ -language: cpp +language: go +go: + - 1.8 + cache: directories: - $HOME/third_party From 447145207608f2825e8d4dd0351a9167b0893a9f Mon Sep 17 00:00:00 2001 From: liaogang Date: Wed, 17 May 2017 21:15:02 +0800 Subject: [PATCH 05/11] update travis --- .travis.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index d1e5080f68..387367a230 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,4 @@ -language: go -go: - - 1.8 - +language: cpp cache: directories: - $HOME/third_party From af065196400ca0254e61df3916888f4341306e97 Mon Sep 17 00:00:00 2001 From: liaogang Date: Wed, 17 May 2017 21:21:45 +0800 Subject: [PATCH 06/11] clang-format test.cc --- paddle/go/cgo_test.cc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/paddle/go/cgo_test.cc b/paddle/go/cgo_test.cc index 8d89a92c08..64efa606ff 100644 --- a/paddle/go/cgo_test.cc +++ b/paddle/go/cgo_test.cc @@ -1,7 +1,5 @@ -#include "libadder.h" #include #include "gtest/gtest.h" +#include "libadder.h" -TEST(Cgo, Invoke) { - EXPECT_EQ(GoAdder(30, 12), 42); -} +TEST(Cgo, Invoke) { EXPECT_EQ(GoAdder(30, 12), 42); } From a7edafc4bf653c05444939c5fd6dc5482f6a51cb Mon Sep 17 00:00:00 2001 From: liaogang Date: Thu, 18 May 2017 00:34:43 +0800 Subject: [PATCH 07/11] add cc_test --- cmake/CMakeDetermineGoCompiler.cmake | 10 ++++++---- cmake/generic.cmake | 5 +++-- paddle/CMakeLists.txt | 2 +- paddle/go/CMakeLists.txt | 14 +++++--------- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/cmake/CMakeDetermineGoCompiler.cmake b/cmake/CMakeDetermineGoCompiler.cmake index b3f8fbe271..9196880c0e 100644 --- a/cmake/CMakeDetermineGoCompiler.cmake +++ b/cmake/CMakeDetermineGoCompiler.cmake @@ -28,10 +28,12 @@ if(NOT CMAKE_Go_COMPILER) NAMES go PATHS ${Go_BIN_PATH} ) - EXEC_PROGRAM(${CMAKE_Go_COMPILER} ARGS version OUTPUT_VARIABLE GOLANG_VERSION) - STRING(REGEX MATCH "go[0-9]+.[0-9]+.[0-9]+[ /A-Za-z0-9]*" VERSION "${GOLANG_VERSION}") - message("-- The Golang compiler identification is ${VERSION}") - message("-- Check for working Golang compiler: ${CMAKE_Go_COMPILER}") + if(CMAKE_Go_COMPILER) + EXEC_PROGRAM(${CMAKE_Go_COMPILER} ARGS version OUTPUT_VARIABLE GOLANG_VERSION) + STRING(REGEX MATCH "go[0-9]+[.0-9]*[ /A-Za-z0-9]*" VERSION "${GOLANG_VERSION}") + message("-- The Golang compiler identification is ${VERSION}") + message("-- Check for working Golang compiler: ${CMAKE_Go_COMPILER}") + endif() endif() endif() diff --git a/cmake/generic.cmake b/cmake/generic.cmake index 555faff499..e4c1e2b41a 100644 --- a/cmake/generic.cmake +++ b/cmake/generic.cmake @@ -163,8 +163,9 @@ function(go_library TARGET_NAME) WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}) add_custom_target(${TARGET_NAME}_lib ALL DEPENDS ${TARGET_NAME}_timestamp ${go_library_DEPS}) add_library(${TARGET_NAME} STATIC IMPORTED) - set_target_properties(${TARGET_NAME} PROPERTIES - IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${LIB_NAME}) + set_property(TARGET ${TARGET_NAME} PROPERTY + IMPORTED_LOCATION "${CMAKE_CURRENT_BINARY_DIR}/${LIB_NAME}") + add_dependencies(${TARGET_NAME} ${TARGET_NAME}_lib) endfunction(go_library) function(go_binary TARGET_NAME) diff --git a/paddle/CMakeLists.txt b/paddle/CMakeLists.txt index 694ebb9ba0..cf31b4a342 100644 --- a/paddle/CMakeLists.txt +++ b/paddle/CMakeLists.txt @@ -9,7 +9,7 @@ add_subdirectory(pserver) add_subdirectory(trainer) add_subdirectory(scripts) -if(${CMAKE_Go_COMPILER}) +if(CMAKE_Go_COMPILER) add_subdirectory(go) endif() diff --git a/paddle/go/CMakeLists.txt b/paddle/go/CMakeLists.txt index 482c948a51..20f1476943 100644 --- a/paddle/go/CMakeLists.txt +++ b/paddle/go/CMakeLists.txt @@ -2,12 +2,8 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}) go_library(adder SRCS adder.go) -# cc_test(cgo_test -# SRCS -# cgo_test.cc -# DEPS -# adder) -add_executable(cgo_test cgo_test.cc) -add_dependencies(cgo_test adder) -target_link_libraries(cgo_test ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES} adder) -add_test(cgo_test cgo_test) +cc_test(cgo_test + SRCS + cgo_test.cc + DEPS + adder) From 589cea1f920ae2aae89b315ef24f3da9875e5e63 Mon Sep 17 00:00:00 2001 From: liaogang Date: Thu, 18 May 2017 00:38:11 +0800 Subject: [PATCH 08/11] add $ENV{GOROOT}/bin --- cmake/CMakeDetermineGoCompiler.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/CMakeDetermineGoCompiler.cmake b/cmake/CMakeDetermineGoCompiler.cmake index 9196880c0e..abf0a00c5e 100644 --- a/cmake/CMakeDetermineGoCompiler.cmake +++ b/cmake/CMakeDetermineGoCompiler.cmake @@ -15,7 +15,7 @@ if(NOT CMAKE_Go_COMPILER) set(Go_BIN_PATH $ENV{GOPATH} $ENV{GOROOT} - $ENV{GOROOT}/../bin + $ENV{GOROOT}/bin $ENV{GO_COMPILER} /usr/bin /usr/local/bin From 071c65f9cc4d3db168397af9ce4f0bbf5d752552 Mon Sep 17 00:00:00 2001 From: liaogang Date: Thu, 18 May 2017 00:46:11 +0800 Subject: [PATCH 09/11] add go extern --- cmake/generic.cmake | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/cmake/generic.cmake b/cmake/generic.cmake index e4c1e2b41a..90ec9532e5 100644 --- a/cmake/generic.cmake +++ b/cmake/generic.cmake @@ -195,3 +195,10 @@ function(go_test TARGET_NAME) add_custom_target(${TARGET_NAME} ALL DEPENDS ${TARGET_NAME}_timestamp ${go_test_DEPS}) add_test(${TARGET_NAME} ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}) endfunction(go_test) + +# go_extern will download extern go project. +# go_extern(target_name extern_source) +# go_extern(go_redis github.com/hoisie/redis) +function(go_extern TARGET_NAME) + add_custom_target(${TARGET_NAME} env GOPATH=${GOPATH} ${CMAKE_Go_COMPILER} get ${ARGN}) +endfunction(go_extern) From 4f837b9f382814c883fa9c0fa9b9003f5db6e094 Mon Sep 17 00:00:00 2001 From: liaogang Date: Thu, 18 May 2017 09:38:12 +0800 Subject: [PATCH 10/11] add ${CMAKE_THREAD_LIBS_INIT} --- cmake/generic.cmake | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/cmake/generic.cmake b/cmake/generic.cmake index 90ec9532e5..89bf1ef1ec 100644 --- a/cmake/generic.cmake +++ b/cmake/generic.cmake @@ -58,7 +58,7 @@ function(cc_binary TARGET_NAME) cmake_parse_arguments(cc_binary "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) add_executable(${TARGET_NAME} ${cc_binary_SRCS}) add_dependencies(${TARGET_NAME} ${cc_binary_DEPS} ${external_project_dependencies}) - target_link_libraries(${TARGET_NAME} ${cc_binary_DEPS}) + target_link_libraries(${TARGET_NAME} ${cc_binary_DEPS} ${CMAKE_THREAD_LIBS_INIT}) endfunction(cc_binary) # The dependency to target tensor implies that if any of @@ -75,7 +75,11 @@ function(cc_test TARGET_NAME) cmake_parse_arguments(cc_test "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) add_executable(${TARGET_NAME} ${cc_test_SRCS}) add_dependencies(${TARGET_NAME} ${cc_test_DEPS} ${external_project_dependencies}) - target_link_libraries(${TARGET_NAME} ${cc_test_DEPS} ${GTEST_MAIN_LIBRARIES} ${GTEST_LIBRARIES}) + target_link_libraries(${TARGET_NAME} + ${cc_test_DEPS} + ${GTEST_MAIN_LIBRARIES} + ${GTEST_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT}) add_test(${TARGET_NAME} ${TARGET_NAME}) endfunction(cc_test) @@ -107,7 +111,7 @@ function(nv_binary TARGET_NAME) cmake_parse_arguments(nv_binary "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) cuda_add_executable(${TARGET_NAME} ${nv_binary_SRCS}) add_dependencies(${TARGET_NAME} ${nv_binary_DEPS} ${external_project_dependencies}) - target_link_libraries(${TARGET_NAME} ${nv_binary_DEPS}) + target_link_libraries(${TARGET_NAME} ${nv_binary_DEPS} ${CMAKE_THREAD_LIBS_INIT}) endfunction(nv_binary) # The dependency to target tensor implies that if any of @@ -124,7 +128,11 @@ function(nv_test TARGET_NAME) cmake_parse_arguments(nv_test "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) cuda_add_executable(${TARGET_NAME} ${nv_test_SRCS}) add_dependencies(${TARGET_NAME} ${nv_test_DEPS} ${external_project_dependencies}) - target_link_libraries(${TARGET_NAME} ${nv_test_DEPS} ${GTEST_MAIN_LIBRARIES} ${GTEST_LIBRARIES}) + target_link_libraries(${TARGET_NAME} + ${nv_test_DEPS} + ${GTEST_MAIN_LIBRARIES} + ${GTEST_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT}) add_test(${TARGET_NAME} ${TARGET_NAME}) endfunction(nv_test) From 50d0e26746e1d9ced00449238043bbe36dc5843d Mon Sep 17 00:00:00 2001 From: liaogang Date: Sat, 20 May 2017 09:06:17 +0800 Subject: [PATCH 11/11] pass travis ci --- cmake/generic.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/cmake/generic.cmake b/cmake/generic.cmake index d73ab176f2..efc49b8fd3 100644 --- a/cmake/generic.cmake +++ b/cmake/generic.cmake @@ -27,6 +27,7 @@ # # cmake_parse_arguments can help us to achieve this goal. # https://cmake.org/cmake/help/v3.0/module/CMakeParseArguments.html +# # cc_library parses tensor.cc and figures out that target also depend on tensor.h. # cc_library(tensor