From 5395203ec134d84a8d90c0d548a8f6612967d0ce Mon Sep 17 00:00:00 2001 From: David Goodwin Date: Tue, 30 Mar 2021 12:56:43 -0700 Subject: [PATCH] Top-level CMake --- .gitignore | 3 + CMakeLists.txt | 85 ++++++++++++++++++ LICENSE | 25 ++++++ README.md | 32 ++++++- src/c++/library/CMakeLists.txt | 88 ++++++++++++++----- .../library/cmake/TritonClientConfig.cmake.in | 37 ++++++++ src/python/examples/CMakeLists.txt | 8 +- src/python/library/CMakeLists.txt | 12 +-- .../library/tritonclient/CMakeLists.txt | 8 +- 9 files changed, 260 insertions(+), 38 deletions(-) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 LICENSE create mode 100644 src/c++/library/cmake/TritonClientConfig.cmake.in diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..0e9f099a2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +/build +/.vscode +*.so diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..617849835 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,85 @@ +# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +cmake_minimum_required(VERSION 3.17) + +project(tritonclient LANGUAGES C CXX) + +# +# Options +# +option(TRITON_ENABLE_CC_HTTP "Enable C++ HTTP client libraries" OFF) +option(TRITON_ENABLE_CC_GRPC "Enable C++ GRPC client libraries" OFF) +option(TRITON_ENABLE_GPU "Enable GPU support in libraries" OFF) + +set(TRITON_CORE_REPO_TAG "main" CACHE STRING "Tag for triton-inference-server/core repo") +set(TRITON_COMMON_REPO_TAG "main" CACHE STRING "Tag for triton-inference-server/common repo") + +if(NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE Release) +endif() + +# +# Dependencies +# +include(FetchContent) + +FetchContent_Declare( + repo-common + GIT_REPOSITORY https://github.com/triton-inference-server/common.git + GIT_TAG ${TRITON_COMMON_REPO_TAG} + GIT_SHALLOW ON +) +FetchContent_Declare( + repo-core + GIT_REPOSITORY https://github.com/triton-inference-server/core.git + GIT_TAG ${TRITON_CORE_REPO_TAG} + GIT_SHALLOW ON +) +FetchContent_MakeAvailable(repo-common repo-core) + +if(TRITON_ENABLE_CC_HTTP OR TRITON_ENABLE_CC_GRPC) + add_subdirectory(src/c++/library) +endif() # TRITON_ENABLE_CC_HTTP OR TRITON_ENABLE_CC_GRPC + +if(TRITON_ENABLE_CC_HTTP) + add_custom_target(cc-http ALL) + add_dependencies(cc-http httpclient httpclient_static) +endif() # TRITON_ENABLE_CC_HTTP + +if(TRITON_ENABLE_CC_GRPC) + add_custom_target(cc-grpc ALL) + add_dependencies(cc-grpc grpcclient grpcclient_static) +endif() # TRITON_ENABLE_CC_GRPC + +#add_subdirectory(src/c++/library) +#if(NOT ${TRITON_CLIENT_SKIP_EXAMPLES}) +# add_subdirectory(examples) +# add_subdirectory(perf_analyzer) +# # FIXME: Control building the client test with a +# # separate cmake flag. +# add_subdirectory(tests) +#endif() # TRITON_CLIENT_SKIP_EXAMPLES diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..e8584b917 --- /dev/null +++ b/LICENSE @@ -0,0 +1,25 @@ +Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of NVIDIA CORPORATION nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md index 68734b02a..6fd9cf249 100644 --- a/README.md +++ b/README.md @@ -1 +1,31 @@ -# client \ No newline at end of file + + +[![License](https://img.shields.io/badge/License-BSD3-lightgrey.svg)](https://opensource.org/licenses/BSD-3-Clause) + +# Triton Clients diff --git a/src/c++/library/CMakeLists.txt b/src/c++/library/CMakeLists.txt index 4cd515bab..d4aa21663 100644 --- a/src/c++/library/CMakeLists.txt +++ b/src/c++/library/CMakeLists.txt @@ -28,7 +28,7 @@ cmake_minimum_required (VERSION 3.18) find_package(Threads REQUIRED) -if(${TRITON_ENABLE_GRPC}) +if(${TRITON_ENABLE_CC_GRPC}) # # libgrpcclient.so and libgrpcclient_static.a # @@ -199,9 +199,9 @@ if(${TRITON_ENABLE_GRPC}) DESTINATION include ) -endif() # TRITON_ENABLE_GRPC +endif() # TRITON_ENABLE_CC_GRPC -if(${TRITON_ENABLE_HTTP}) +if(${TRITON_ENABLE_CC_HTTP}) # # libhttpclient.so and libhttpclient_static.a # @@ -345,30 +345,72 @@ if(${TRITON_ENABLE_HTTP}) LIBRARY DESTINATION lib ARCHIVE DESTINATION lib ) -endif() # TRITON_ENABLE_HTTP +endif() # TRITON_ENABLE_CC_HTTP -# cmake configuration -include (CMakePackageConfigHelpers) -set(_LIB_CMAKE_DIR lib/cmake/TRITON) -install( - EXPORT triton-export - FILE TRITONTargets.cmake - NAMESPACE TRITON:: - DESTINATION ${_LIB_CMAKE_DIR} +include(GNUInstallDirs) +set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/TritonClient) + +if(${TRITON_ENABLE_CC_GRPC}) + install( + TARGETS + grpcclient + grpcclient_static + + EXPORT + triton-client-targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) -write_basic_package_version_file( - ${CMAKE_CURRENT_BINARY_DIR}/TRITONConfigVersion.cmake - VERSION ${TRITON_VERSION} - COMPATIBILITY ExactVersion +endif() # TRITON_ENABLE_CC_GRPC + +if(${TRITON_ENABLE_CC_HTTP}) + install( + TARGETS + httpclient + httpclient_static + + EXPORT + triton-client-targets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) -configure_package_config_file ( - ${CMAKE_CURRENT_LIST_DIR}/cmake/TRITONConfig.cmake.in - ${CMAKE_CURRENT_BINARY_DIR}/TRITONConfig.cmake - INSTALL_DESTINATION ${_LIB_CMAKE_DIR} +endif() # TRITON_ENABLE_CC_HTTP + +install( + EXPORT + triton-client-targets + FILE + TritonClientTargets.cmake + NAMESPACE + TritonClient:: + DESTINATION + ${INSTALL_CONFIGDIR} ) + +include(CMakePackageConfigHelpers) +configure_package_config_file( + ${CMAKE_CURRENT_LIST_DIR}/cmake/TritonClientConfig.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/TritonClientConfig.cmake + INSTALL_DESTINATION ${INSTALL_CONFIGDIR} +) + install( FILES - ${CMAKE_CURRENT_BINARY_DIR}/TRITONConfig.cmake - ${CMAKE_CURRENT_BINARY_DIR}/TRITONConfigVersion.cmake - DESTINATION ${_LIB_CMAKE_DIR} + ${CMAKE_CURRENT_BINARY_DIR}/TritonClientConfig.cmake + DESTINATION + ${INSTALL_CONFIGDIR} ) + +# +# Export from build tree +# +export( + EXPORT + triton-client-targets + FILE + ${CMAKE_CURRENT_BINARY_DIR}/TritonClientTargets.cmake + NAMESPACE + TritonClient:: +) + +export(PACKAGE TritonClient) diff --git a/src/c++/library/cmake/TritonClientConfig.cmake.in b/src/c++/library/cmake/TritonClientConfig.cmake.in new file mode 100644 index 000000000..b2529f166 --- /dev/null +++ b/src/c++/library/cmake/TritonClientConfig.cmake.in @@ -0,0 +1,37 @@ +# Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * Neither the name of NVIDIA CORPORATION nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY +# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY +# OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +include(CMakeFindDependencyMacro) + +get_filename_component( + TRITONCLIENT_CMAKE_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH +) + +list(APPEND CMAKE_MODULE_PATH ${TRITONCLIENT_CMAKE_DIR}) + +if(NOT TARGET TritonClient::triton-client) + include("${TRITONCLIENT_CMAKE_DIR}/TritonClientTargets.cmake") +endif() diff --git a/src/python/examples/CMakeLists.txt b/src/python/examples/CMakeLists.txt index 317167a81..0c923d157 100644 --- a/src/python/examples/CMakeLists.txt +++ b/src/python/examples/CMakeLists.txt @@ -26,7 +26,7 @@ cmake_minimum_required (VERSION 3.18) -if(${TRITON_ENABLE_HTTP}) +if(${TRITON_ENABLE_CC_HTTP}) install( PROGRAMS simple_http_health_metadata.py @@ -46,7 +46,7 @@ if(${TRITON_ENABLE_HTTP}) DESTINATION python ) endif() # TRITON_ENABLE_GPU -endif() # TRITON_ENABLE_HTTP +endif() # TRITON_ENABLE_CC_HTTP if(${TRITON_ENABLE_GRPC}) install( @@ -77,7 +77,7 @@ if(${TRITON_ENABLE_GRPC}) endif() # TRITON_ENABLE_GPU endif() # TRITON_ENABLE_GRPC -if(${TRITON_ENABLE_HTTP} OR ${TRITON_ENABLE_GRPC}) +if(${TRITON_ENABLE_CC_HTTP} OR ${TRITON_ENABLE_CC_GRPC}) install( PROGRAMS ensemble_image_client.py @@ -86,4 +86,4 @@ if(${TRITON_ENABLE_HTTP} OR ${TRITON_ENABLE_GRPC}) memory_growth_test.py DESTINATION python ) -endif() # TRITON_ENABLE_HTTP || TRITON_ENABLE_GRPC +endif() # TRITON_ENABLE_CC_HTTP || TRITON_ENABLE_CC_GRPC diff --git a/src/python/library/CMakeLists.txt b/src/python/library/CMakeLists.txt index b3d6246d5..987ebc54d 100644 --- a/src/python/library/CMakeLists.txt +++ b/src/python/library/CMakeLists.txt @@ -31,12 +31,12 @@ add_subdirectory(tritonclient) # Needed for the backwards-compatibility # Remove when moving completely to the # new structure. -if(${TRITON_ENABLE_GRPC}) +if(${TRITON_ENABLE_CC_GRPC}) file(COPY tritongrpcclient DESTINATION .) -endif() # TRITON_ENABLE_GRPC -if(${TRITON_ENABLE_HTTP}) +endif() # TRITON_ENABLE_CC_GRPC +if(${TRITON_ENABLE_CC_HTTP}) file(COPY tritonhttpclient DESTINATION .) -endif() # TRITON_ENABLE_HTTP +endif() # TRITON_ENABLE_CC_HTTP file(COPY tritonclientutils DESTINATION .) if (NOT WIN32) file(COPY tritonshmutils DESTINATION .) @@ -63,12 +63,12 @@ if(${TRITON_ENABLE_GRPC}) ) endif() # TRITON_ENABLE_GRPC -if(${TRITON_ENABLE_HTTP}) +if(${TRITON_ENABLE_CC_HTTP}) set(WHEEL_DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/tritonclient/http ${WHEEL_DEPENDS} ) -endif() # TRITON_ENABLE_HTTP +endif() # TRITON_ENABLE_CC_HTTP # # Generic Wheel file diff --git a/src/python/library/tritonclient/CMakeLists.txt b/src/python/library/tritonclient/CMakeLists.txt index 8e4af31b3..4139371a0 100644 --- a/src/python/library/tritonclient/CMakeLists.txt +++ b/src/python/library/tritonclient/CMakeLists.txt @@ -26,12 +26,12 @@ cmake_minimum_required (VERSION 3.18) -if(${TRITON_ENABLE_HTTP}) +if(${TRITON_ENABLE_CC_HTTP}) file(COPY http DESTINATION .) -endif() # TRITON_ENABLE_HTTP +endif() # TRITON_ENABLE_CC_HTTP -if(${TRITON_ENABLE_GRPC}) +if(${TRITON_ENABLE_CC_GRPC}) file(COPY grpc DESTINATION .) -endif() # TRITON_ENABLE_GRPC +endif() # TRITON_ENABLE_CC_GRPC add_subdirectory(utils)