This is an automated email from the ASF dual-hosted git repository.
ethanfeng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/celeborn.git
The following commit(s) were added to refs/heads/main by this push:
new 77c7a8b91 [CELEBORN-1741][CIP-14] Add processBase utils to cppClient
77c7a8b91 is described below
commit 77c7a8b91d0648775ee463533b11348cceaba513
Author: HolyLow <[email protected]>
AuthorDate: Tue Nov 26 13:38:16 2024 +0800
[CELEBORN-1741][CIP-14] Add processBase utils to cppClient
### What changes were proposed in this pull request?
This PR adds CMakeList structure and ProcessBase utils code to CppClient.
### Why are the changes needed?
To organize the compiling structure and to provide ProcessBase utils.
### Does this PR introduce _any_ user-facing change?
No.
### How was this patch tested?
Compilation.
Closes #2940 from
HolyLow/issue/celeborn-1741-add-processbase-utils-to-cppClient.
Authored-by: HolyLow <[email protected]>
Signed-off-by: mingji <[email protected]>
---
.rat-excludes | 1 +
LICENSE | 15 ++
cpp/.clang-format | 87 ++++++
cpp/CMakeLists.txt | 143 ++++++++++
cpp/README.md | 11 +
.rat-excludes => cpp/celeborn/CMakeLists.txt | 26 +-
.rat-excludes => cpp/celeborn/utils/CMakeLists.txt | 34 +--
cpp/celeborn/utils/ProcessBase.cpp | 129 +++++++++
cpp/celeborn/utils/ProcessBase.h | 68 +++++
cpp/cmake/FindSodium.cmake | 297 +++++++++++++++++++++
.../cmake/celeborn-config.cmake.in | 37 +--
11 files changed, 775 insertions(+), 73 deletions(-)
diff --git a/.rat-excludes b/.rat-excludes
index c4f31a9ff..22c97119e 100644
--- a/.rat-excludes
+++ b/.rat-excludes
@@ -37,3 +37,4 @@ build/scala-*/**
build/sbt-config/**
**/benchmarks/**
**/node_modules/**
+cpp/cmake/FindSodium.cmake
diff --git a/LICENSE b/LICENSE
index 3c8858ec9..5ca50b6f3 100644
--- a/LICENSE
+++ b/LICENSE
@@ -256,3 +256,18 @@ Remote Shuffle Service for Flink
./client-flink/common/src/main/java/org/apache/celeborn/plugin/flink/buffer/DataBuffer.java
./client-flink/common/src/main/java/org/apache/celeborn/plugin/flink/buffer/SortBasedDataBuffer.java
./client-flink/common/src/main/java/org/apache/celeborn/plugin/flink/buffer/TransferBufferPool.java
+
+Meta Velox
+./cpp/scripts/setup-ubuntu.sh
+./cpp/scripts/setup-helper-functions.sh
+./cpp/celeborn/utils/ProcessBase.h
+./cpp/celeborn/utils/ProcessBase.cpp
+
+
+------------------------------------------------------------------------------------
+This product bundles various third-party components under the CC0 license.
+This section summarizes those components.
+
+
+--------------------------------------
+./cpp/cmake/FindSodium.cmake
diff --git a/cpp/.clang-format b/cpp/.clang-format
new file mode 100644
index 000000000..684390a01
--- /dev/null
+++ b/cpp/.clang-format
@@ -0,0 +1,87 @@
+---
+AccessModifierOffset: -1
+AlignAfterOpenBracket: AlwaysBreak
+AlignConsecutiveAssignments: false
+AlignConsecutiveDeclarations: false
+AlignEscapedNewlinesLeft: true
+AlignOperands: false
+AlignTrailingComments: false
+AllowAllParametersOfDeclarationOnNextLine: false
+AllowShortBlocksOnASingleLine: false
+AllowShortCaseLabelsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: Empty
+AllowShortIfStatementsOnASingleLine: false
+AllowShortLoopsOnASingleLine: false
+AlwaysBreakAfterReturnType: None
+AlwaysBreakBeforeMultilineStrings: true
+AlwaysBreakTemplateDeclarations: true
+BinPackArguments: false
+BinPackParameters: false
+BraceWrapping:
+ AfterClass: false
+ AfterControlStatement: false
+ AfterEnum: false
+ AfterFunction: false
+ AfterNamespace: false
+ AfterObjCDeclaration: false
+ AfterStruct: false
+ AfterUnion: false
+ BeforeCatch: false
+ BeforeElse: false
+ IndentBraces: false
+BreakBeforeBinaryOperators: None
+BreakBeforeBraces: Attach
+BreakBeforeTernaryOperators: true
+BreakConstructorInitializersBeforeComma: false
+BreakAfterJavaFieldAnnotations: false
+BreakStringLiterals: false
+ColumnLimit: 80
+CommentPragmas: '^ IWYU pragma:'
+ConstructorInitializerAllOnOneLineOrOnePerLine: true
+ConstructorInitializerIndentWidth: 4
+ContinuationIndentWidth: 4
+Cpp11BracedListStyle: true
+DerivePointerAlignment: false
+DisableFormat: false
+ForEachMacros: [ FOR_EACH, FOR_EACH_R, FOR_EACH_RANGE, ]
+IncludeCategories:
+ - Regex: '^<.*\.h(pp)?>'
+ Priority: 1
+ - Regex: '^<.*'
+ Priority: 2
+ - Regex: '.*'
+ Priority: 3
+IndentCaseLabels: true
+IndentWidth: 2
+IndentWrappedFunctionNames: false
+KeepEmptyLinesAtTheStartOfBlocks: false
+MacroBlockBegin: ''
+MacroBlockEnd: ''
+MaxEmptyLinesToKeep: 1
+NamespaceIndentation: None
+ObjCBlockIndentWidth: 2
+ObjCSpaceAfterProperty: false
+ObjCSpaceBeforeProtocolList: false
+PenaltyBreakBeforeFirstCallParameter: 1
+PenaltyBreakComment: 300
+PenaltyBreakFirstLessLess: 120
+PenaltyBreakString: 1000
+PenaltyExcessCharacter: 1000000
+PenaltyReturnTypeOnItsOwnLine: 200
+PointerAlignment: Left
+ReflowComments: true
+SortIncludes: true
+SpaceAfterCStyleCast: false
+SpaceBeforeAssignmentOperators: true
+SpaceBeforeParens: ControlStatements
+SpaceInEmptyParentheses: false
+SpacesBeforeTrailingComments: 1
+SpacesInAngles: false
+SpacesInContainerLiterals: true
+SpacesInCStyleCastParentheses: false
+SpacesInParentheses: false
+SpacesInSquareBrackets: false
+Standard: Cpp11
+TabWidth: 8
+UseTab: Never
+...
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
new file mode 100644
index 000000000..1ad45f867
--- /dev/null
+++ b/cpp/CMakeLists.txt
@@ -0,0 +1,143 @@
+# 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.
+cmake_minimum_required(VERSION 3.24)
+
+if (NOT DEFINED PACKAGE_VERSION)
+ set(PACKAGE_VERSION "0.0.1")
+endif ()
+
+project("celeborn" VERSION ${PACKAGE_VERSION} LANGUAGES CXX C)
+
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED True)
+message("Appending CMAKE_CXX_FLAGS with ${SCRIPT_CXX_FLAGS}")
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SCRIPT_CXX_FLAGS}")
+if ("${TREAT_WARNINGS_AS_ERRORS}")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror")
+endif ()
+
+# Avoid folly::f14::detail::F14LinkCheck problem on x86-64 platform.
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
+
+# Set CMAKE_BUILD_TYPE to 'Release' if it is not specified.
+if (NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE Release)
+endif ()
+message(STATUS "CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}")
+
+# Known warnings that are benign can be disabled.
+set(DISABLED_WARNINGS
+ "-Wno-nullability-completeness -Wno-deprecated-declarations")
+
+# Important warnings that must be explicitly enabled.
+set(ENABLE_WARNINGS "-Wreorder")
+
+# The CMAKE_PREFIX_PATH should be set to the thirdparty's install path
+# (thirdparty/installed by default), to find all the dependencies.
+message(STATUS "Using CMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}")
+# Currently, we use the "-lgtest" to link the gtest library, and gtest library
+# is in the "thirdparty/installed/lib64" directory in the linux environment, so
+# the lib search path needs to be specified here.
+if (EXISTS ${CMAKE_PREFIX_PATH}/lib64)
+ link_directories(${CMAKE_PREFIX_PATH}/lib64)
+ # thrift.a is installed in the directory thirdparty/installed/lib by
+ # default in the Linux environment.
+ link_directories(${CMAKE_PREFIX_PATH}/lib)
+elseif (CMAKE_SYSTEM_NAME MATCHES "Linux")
+ message(
+ WARNING
+ "You did not use the recommended way "
+ "(using 'thirdparty/build-thirdparty.sh') to build & install "
+ "thirdparty libraries.")
+endif ()
+
+#if (NOT APPLE)
+# set(Boost_USE_STATIC_RUNTIME ON)
+# set(Boost_USE_STATIC_LIBS ON)
+#endif ()
+set(Boost_USE_MULTITHREADED TRUE)
+find_package(
+ Boost
+ #1.75.0
+ 1.84.0
+ REQUIRED
+ program_options
+ context
+ filesystem
+ regex
+ thread
+ system
+ date_time
+ atomic)
+include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
+
+# GFlags
+#
+# NOTE: The name here must be exactly "gflags", that is, use all lowercase.
+# Otherwise, e.g. "GFLAGS" or "GFlags", the generated `GFLAGS_LIBRARIES` will
+# point to the shared library instead of the static library, even if we
+# explicitly specify to link against the static library (via "COMPONENTS
+# static"). This may be a problem that the cmake script of GFlags does not
+# consider comprehensively (for the case of words).
+#
+# See [1] for the recommended `find_package` commands to use to find GFlags, in
+# which the "@PACKAGE_NAME@" will be replaced with "gflags" when installed.
+#
+# [1]
https://github.com/gflags/gflags/blob/v2.2.2/cmake/config.cmake.in#L50-L56
+if (APPLE)
+ # Use the shared library of gflags on MacOS because it is installed via
+ # Homebrew and only shared library is installed.
+ find_package(gflags REQUIRED COMPONENTS shared)
+else ()
+ find_package(gflags REQUIRED COMPONENTS static)
+endif ()
+
+find_package(glog REQUIRED)
+find_library(FMT fmt)
+
+find_package(folly CONFIG REQUIRED)
+set(FOLLY_WITH_DEPENDENCIES
+ ${FOLLY_LIBRARIES}
+ Boost::context
+ dl
+)
+
+# Include third party header files
+find_path(OPT_OPENSSL_DIR NAMES opt/[email protected])
+set(OPENSSL_ROOT_DIR "${OPT_OPENSSL_DIR}/opt/[email protected]")
+find_package(OpenSSL REQUIRED)
+
+find_package(Protobuf REQUIRED)
+
+set(CMAKE_MODULE_PATH
+ "${CMAKE_CURRENT_SOURCE_DIR}/cmake"
+ ${CMAKE_MODULE_PATH})
+find_package(Sodium REQUIRED)
+find_library(FIZZ fizz REQUIRED)
+find_library(WANGLE wangle REQUIRED)
+
+find_library(RE2 re2)
+
+find_package(fizz CONFIG REQUIRED)
+find_package(wangle CONFIG REQUIRED)
+
+set(WANGLE_LIBRARIES ${WANGLE} ${FIZZ})
+
+include_directories(SYSTEM ${OPENSSL_INCLUDE_DIR})
+
+include_directories(SYSTEM celeborn)
+include_directories(.)
+
+add_subdirectory(celeborn)
diff --git a/cpp/README.md b/cpp/README.md
index 3c25b5cc3..aefb67c25 100644
--- a/cpp/README.md
+++ b/cpp/README.md
@@ -37,3 +37,14 @@ cd scripts
bash setup-ubuntu.sh
```
Other platforms are not supported yet, and you could use the container above
as your dev environment.
+
+## Compile
+Currently, the modules are under development.
+You could compile the code within the dev container by
+```
+cd celeborn/cpp
+mkdir -p build && cd build
+cmake ..
+make
+```
+
diff --git a/.rat-excludes b/cpp/celeborn/CMakeLists.txt
similarity index 68%
copy from .rat-excludes
copy to cpp/celeborn/CMakeLists.txt
index c4f31a9ff..97591cb0c 100644
--- a/.rat-excludes
+++ b/cpp/celeborn/CMakeLists.txt
@@ -1,4 +1,3 @@
-#
# 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.
@@ -13,27 +12,4 @@
# 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.
-#
-
-**/.*/**
-**/*.json
-**/*.prefs
-**/*.log
-**/*.md
-**/*.iml
-**/*.svg
-**/target/**
-**/out/**
-**/spark-warehouse/**
-**/metastore_db/**
-**/licenses/LICENSE*
-**/licenses-binary/LICENSE*
-**/dependency-reduced-pom.xml
-**/scalastyle-output.xml
-NOTICE*
-assets/**
-build/apache-maven-*/**
-build/scala-*/**
-build/sbt-config/**
-**/benchmarks/**
-**/node_modules/**
+add_subdirectory(utils)
diff --git a/.rat-excludes b/cpp/celeborn/utils/CMakeLists.txt
similarity index 68%
copy from .rat-excludes
copy to cpp/celeborn/utils/CMakeLists.txt
index c4f31a9ff..9a98d6748 100644
--- a/.rat-excludes
+++ b/cpp/celeborn/utils/CMakeLists.txt
@@ -1,4 +1,3 @@
-#
# 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.
@@ -13,27 +12,14 @@
# 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.
-#
+add_library(utils ProcessBase.cpp)
-**/.*/**
-**/*.json
-**/*.prefs
-**/*.log
-**/*.md
-**/*.iml
-**/*.svg
-**/target/**
-**/out/**
-**/spark-warehouse/**
-**/metastore_db/**
-**/licenses/LICENSE*
-**/licenses-binary/LICENSE*
-**/dependency-reduced-pom.xml
-**/scalastyle-output.xml
-NOTICE*
-assets/**
-build/apache-maven-*/**
-build/scala-*/**
-build/sbt-config/**
-**/benchmarks/**
-**/node_modules/**
+target_link_libraries(
+ utils
+ ${WANGLE}
+ ${FIZZ}
+ ${LIBSODIUM_LIBRARY}
+ ${FOLLY_WITH_DEPENDENCIES}
+ ${GLOG}
+ ${GFLAGS_LIBRARIES}
+)
diff --git a/cpp/celeborn/utils/ProcessBase.cpp
b/cpp/celeborn/utils/ProcessBase.cpp
new file mode 100644
index 000000000..385dcc578
--- /dev/null
+++ b/cpp/celeborn/utils/ProcessBase.cpp
@@ -0,0 +1,129 @@
+/*
+ * Based on ProcessBase.cpp from Facebook Velox
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * 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.
+ */
+
+#include "celeborn/utils/ProcessBase.h"
+
+#include <limits.h>
+#include <stdlib.h>
+#include <time.h>
+#include <unistd.h>
+
+#include <folly/CpuId.h>
+#include <folly/FileUtil.h>
+#include <folly/String.h>
+#include <gflags/gflags.h>
+
+constexpr const char* kProcSelfCmdline = "/proc/self/cmdline";
+
+namespace celeborn {
+namespace utils {
+
+DECLARE_bool(celeborn_avx2); // Enables use of AVX2 when available NOLINT
+
+DECLARE_bool(celeborn_bmi2); // Enables use of BMI2 when available NOLINT
+
+/**
+ * Current executable's name.
+ */
+std::string getAppName() {
+ const char* result = getenv("_");
+ if (result) {
+ return result;
+ }
+
+ // if we're running under gtest, getenv will return null
+ std::string appName;
+ if (folly::readFile(kProcSelfCmdline, appName)) {
+ auto pos = appName.find('\0');
+ if (pos != std::string::npos) {
+ appName = appName.substr(0, pos);
+ }
+
+ return appName;
+ }
+
+ return "";
+}
+
+/**
+ * This machine's name.
+ */
+std::string getHostName() {
+ char hostbuf[_POSIX_HOST_NAME_MAX + 1];
+ if (gethostname(hostbuf, _POSIX_HOST_NAME_MAX + 1) < 0) {
+ return "";
+ } else {
+ // When the host name is precisely HOST_NAME_MAX bytes long, gethostname
+ // returns 0 even though the result is not NUL-terminated. Manually NUL-
+ // terminate to handle that case.
+ hostbuf[_POSIX_HOST_NAME_MAX] = '\0';
+ return hostbuf;
+ }
+}
+
+/**
+ * Process identifier.
+ */
+pid_t getProcessId() {
+ return getpid();
+}
+
+/**
+ * Current thread's identifier.
+ */
+pthread_t getThreadId() {
+ return pthread_self();
+}
+
+/**
+ * Get current working directory.
+ */
+std::string getCurrentDirectory() {
+ char buf[PATH_MAX];
+ return getcwd(buf, PATH_MAX);
+}
+
+uint64_t threadCpuNanos() {
+ timespec ts;
+ clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts);
+ return ts.tv_sec * 1'000'000'000 + ts.tv_nsec;
+}
+
+namespace {
+bool bmi2CpuFlag = folly::CpuId().bmi2();
+bool avx2CpuFlag = folly::CpuId().avx2();
+} // namespace
+
+bool hasAvx2() {
+#ifdef __AVX2__
+ return avx2CpuFlag && FLAGS_celeborn_avx2;
+#else
+ return false;
+#endif
+}
+
+bool hasBmi2() {
+#ifdef __BMI2__
+ return bmi2CpuFlag && FLAGS_celeborn_bmi2;
+#else
+ return false;
+#endif
+}
+
+} // namespace utils
+} // namespace celeborn
diff --git a/cpp/celeborn/utils/ProcessBase.h b/cpp/celeborn/utils/ProcessBase.h
new file mode 100644
index 000000000..749541faa
--- /dev/null
+++ b/cpp/celeborn/utils/ProcessBase.h
@@ -0,0 +1,68 @@
+/*
+ * Based on ProcessBase.h from Facebook Velox
+ *
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * 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.
+ */
+
+#pragma once
+
+#include <pthread.h>
+#include <sys/types.h>
+#include <string>
+#include <vector>
+
+namespace celeborn {
+namespace utils {
+
+/**
+ * Current executable's name.
+ */
+std::string getAppName();
+
+/**
+ * This machine'a name.
+ */
+std::string getHostName();
+
+/**
+ * Process identifier.
+ */
+pid_t getProcessId();
+
+/**
+ * Current thread's identifier.
+ */
+pthread_t getThreadId();
+
+/**
+ * Get current working directory.
+ */
+std::string getCurrentDirectory();
+
+/**
+ * Returns elapsed CPU nanoseconds on the calling thread
+ */
+uint64_t threadCpuNanos();
+
+// True if the machine has Intel AVX2 instructions and these are not disabled
by
+// flag.
+bool hasAvx2();
+
+// True if the machine has Intel BMI2 instructions and these are not disabled
by
+// flag.
+bool hasBmi2();
+
+} // namespace utils
+} // namespace celeborn
diff --git a/cpp/cmake/FindSodium.cmake b/cpp/cmake/FindSodium.cmake
new file mode 100644
index 000000000..fbfa59292
--- /dev/null
+++ b/cpp/cmake/FindSodium.cmake
@@ -0,0 +1,297 @@
+# Written in 2016 by Henrik Steffen Gaßmann <[email protected]>
+#
+# To the extent possible under law, the author(s) have dedicated all
+# copyright and related and neighboring rights to this software to the
+# public domain worldwide. This software is distributed without any warranty.
+#
+# You should have received a copy of the CC0 Public Domain Dedication
+# along with this software. If not, see
+#
+# http://creativecommons.org/publicdomain/zero/1.0/
+#
+########################################################################
+# Tries to find the local libsodium installation.
+#
+# On Windows the sodium_DIR environment variable is used as a default
+# hint which can be overridden by setting the corresponding cmake variable.
+#
+# Once done the following variables will be defined:
+#
+# sodium_FOUND
+# sodium_INCLUDE_DIR
+# sodium_LIBRARY_DEBUG
+# sodium_LIBRARY_RELEASE
+#
+#
+# Furthermore an imported "sodium" target is created.
+#
+
+if (CMAKE_C_COMPILER_ID STREQUAL "GNU"
+ OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
+ set(_GCC_COMPATIBLE 1)
+endif ()
+
+# static library option
+if (NOT DEFINED sodium_USE_STATIC_LIBS)
+ option(sodium_USE_STATIC_LIBS "enable to statically link against sodium"
OFF)
+endif ()
+if (NOT (sodium_USE_STATIC_LIBS EQUAL sodium_USE_STATIC_LIBS_LAST))
+ unset(sodium_LIBRARY CACHE)
+ unset(sodium_LIBRARY_DEBUG CACHE)
+ unset(sodium_LIBRARY_RELEASE CACHE)
+ unset(sodium_DLL_DEBUG CACHE)
+ unset(sodium_DLL_RELEASE CACHE)
+ set(sodium_USE_STATIC_LIBS_LAST ${sodium_USE_STATIC_LIBS} CACHE INTERNAL
"internal change tracking variable")
+endif ()
+
+
+########################################################################
+# UNIX
+if (UNIX)
+ # import pkg-config
+ find_package(PkgConfig QUIET)
+ if (PKG_CONFIG_FOUND)
+ pkg_check_modules(sodium_PKG QUIET libsodium)
+ endif ()
+
+ if (sodium_USE_STATIC_LIBS)
+ foreach (_libname ${sodium_PKG_STATIC_LIBRARIES})
+ if (NOT _libname MATCHES "^lib.*\\.a$") # ignore strings already
ending with .a
+ list(INSERT sodium_PKG_STATIC_LIBRARIES 0 "lib${_libname}.a")
+ endif ()
+ endforeach ()
+ list(REMOVE_DUPLICATES sodium_PKG_STATIC_LIBRARIES)
+
+ # if pkgconfig for libsodium doesn't provide
+ # static lib info, then override PKG_STATIC here..
+ if (NOT sodium_PKG_STATIC_FOUND)
+ set(sodium_PKG_STATIC_LIBRARIES libsodium.a)
+ endif ()
+
+ set(XPREFIX sodium_PKG_STATIC)
+ else ()
+ if (NOT sodium_PKG_FOUND)
+ set(sodium_PKG_LIBRARIES sodium)
+ endif ()
+
+ set(XPREFIX sodium_PKG)
+ endif ()
+
+ find_path(sodium_INCLUDE_DIR sodium.h
+ HINTS ${${XPREFIX}_INCLUDE_DIRS}
+ )
+ find_library(sodium_LIBRARY_DEBUG NAMES ${${XPREFIX}_LIBRARIES}
+ HINTS ${${XPREFIX}_LIBRARY_DIRS}
+ )
+ find_library(sodium_LIBRARY_RELEASE NAMES ${${XPREFIX}_LIBRARIES}
+ HINTS ${${XPREFIX}_LIBRARY_DIRS}
+ )
+
+
+ ########################################################################
+ # Windows
+elseif (WIN32)
+ set(sodium_DIR "$ENV{sodium_DIR}" CACHE FILEPATH "sodium install
directory")
+ mark_as_advanced(sodium_DIR)
+
+ find_path(sodium_INCLUDE_DIR sodium.h
+ HINTS ${sodium_DIR}
+ PATH_SUFFIXES include
+ )
+
+ if (MSVC)
+ # detect target architecture
+ file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/arch.cpp" [=[
+ #if defined _M_IX86
+ #error ARCH_VALUE x86_32
+ #elif defined _M_X64
+ #error ARCH_VALUE x86_64
+ #endif
+ #error ARCH_VALUE unknown
+ ]=])
+ try_compile(_UNUSED_VAR "${CMAKE_CURRENT_BINARY_DIR}"
"${CMAKE_CURRENT_BINARY_DIR}/arch.cpp"
+ OUTPUT_VARIABLE _COMPILATION_LOG
+ )
+ string(REGEX REPLACE ".*ARCH_VALUE ([a-zA-Z0-9_]+).*" "\\1"
_TARGET_ARCH "${_COMPILATION_LOG}")
+
+ # construct library path
+ if (_TARGET_ARCH STREQUAL "x86_32")
+ string(APPEND _PLATFORM_PATH "Win32")
+ elseif (_TARGET_ARCH STREQUAL "x86_64")
+ string(APPEND _PLATFORM_PATH "x64")
+ else ()
+ message(FATAL_ERROR "the ${_TARGET_ARCH} architecture is not
supported by Findsodium.cmake.")
+ endif ()
+ string(APPEND _PLATFORM_PATH "/$$CONFIG$$")
+
+ if (MSVC_VERSION LESS 1900)
+ math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 60")
+ else ()
+ math(EXPR _VS_VERSION "${MSVC_VERSION} / 10 - 50")
+ endif ()
+ string(APPEND _PLATFORM_PATH "/v${_VS_VERSION}")
+
+ if (sodium_USE_STATIC_LIBS)
+ string(APPEND _PLATFORM_PATH "/static")
+ else ()
+ string(APPEND _PLATFORM_PATH "/dynamic")
+ endif ()
+
+ string(REPLACE "$$CONFIG$$" "Debug" _DEBUG_PATH_SUFFIX
"${_PLATFORM_PATH}")
+ string(REPLACE "$$CONFIG$$" "Release" _RELEASE_PATH_SUFFIX
"${_PLATFORM_PATH}")
+
+ find_library(sodium_LIBRARY_DEBUG libsodium.lib
+ HINTS ${sodium_DIR}
+ PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX}
+ )
+ find_library(sodium_LIBRARY_RELEASE libsodium.lib
+ HINTS ${sodium_DIR}
+ PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX}
+ )
+ if (NOT sodium_USE_STATIC_LIBS)
+ set(CMAKE_FIND_LIBRARY_SUFFIXES_BCK ${CMAKE_FIND_LIBRARY_SUFFIXES})
+ set(CMAKE_FIND_LIBRARY_SUFFIXES ".dll")
+ find_library(sodium_DLL_DEBUG libsodium
+ HINTS ${sodium_DIR}
+ PATH_SUFFIXES ${_DEBUG_PATH_SUFFIX}
+ )
+ find_library(sodium_DLL_RELEASE libsodium
+ HINTS ${sodium_DIR}
+ PATH_SUFFIXES ${_RELEASE_PATH_SUFFIX}
+ )
+ set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES_BCK})
+ endif ()
+
+ elseif (_GCC_COMPATIBLE)
+ if (sodium_USE_STATIC_LIBS)
+ find_library(sodium_LIBRARY_DEBUG libsodium.a
+ HINTS ${sodium_DIR}
+ PATH_SUFFIXES lib
+ )
+ find_library(sodium_LIBRARY_RELEASE libsodium.a
+ HINTS ${sodium_DIR}
+ PATH_SUFFIXES lib
+ )
+ else ()
+ find_library(sodium_LIBRARY_DEBUG libsodium.dll.a
+ HINTS ${sodium_DIR}
+ PATH_SUFFIXES lib
+ )
+ find_library(sodium_LIBRARY_RELEASE libsodium.dll.a
+ HINTS ${sodium_DIR}
+ PATH_SUFFIXES lib
+ )
+
+ file(GLOB _DLL
+ LIST_DIRECTORIES false
+ RELATIVE "${sodium_DIR}/bin"
+ "${sodium_DIR}/bin/libsodium*.dll"
+ )
+ find_library(sodium_DLL_DEBUG ${_DLL} libsodium
+ HINTS ${sodium_DIR}
+ PATH_SUFFIXES bin
+ )
+ find_library(sodium_DLL_RELEASE ${_DLL} libsodium
+ HINTS ${sodium_DIR}
+ PATH_SUFFIXES bin
+ )
+ endif ()
+ else ()
+ message(FATAL_ERROR "this platform is not supported by
FindSodium.cmake")
+ endif ()
+
+
+ ########################################################################
+ # unsupported
+else ()
+ message(FATAL_ERROR "this platform is not supported by FindSodium.cmake")
+endif ()
+
+
+########################################################################
+# conf stuff
+
+# extract sodium version
+if (sodium_INCLUDE_DIR)
+ set(_VERSION_HEADER "${_INCLUDE_DIR}/sodium/version.h")
+ if (EXISTS _VERSION_HEADER)
+ file(READ "${_VERSION_HEADER}" _VERSION_HEADER_CONTENT)
+ string(REGEX REPLACE ".*#[ \t]*define[ \t]*SODIUM_VERSION_STRING[
\t]*\"([^\n]*)\".*" "\\1"
+ sodium_VERSION "${_VERSION_HEADER_CONTENT}")
+ set(sodium_VERSION "${sodium_VERSION}" PARENT_SCOPE)
+ endif ()
+endif ()
+
+# communicate results
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(
+ Sodium # The name must be either uppercase or match the filename case.
+ REQUIRED_VARS
+ sodium_LIBRARY_RELEASE
+ sodium_LIBRARY_DEBUG
+ sodium_INCLUDE_DIR
+ VERSION_VAR
+ sodium_VERSION
+)
+
+if (Sodium_FOUND)
+ set(sodium_LIBRARIES
+ optimized ${sodium_LIBRARY_RELEASE} debug ${sodium_LIBRARY_DEBUG})
+endif ()
+
+# mark file paths as advanced
+mark_as_advanced(sodium_INCLUDE_DIR)
+mark_as_advanced(sodium_LIBRARY_DEBUG)
+mark_as_advanced(sodium_LIBRARY_RELEASE)
+if (WIN32)
+ mark_as_advanced(sodium_DLL_DEBUG)
+ mark_as_advanced(sodium_DLL_RELEASE)
+endif ()
+
+# create imported target
+if (sodium_USE_STATIC_LIBS)
+ set(_LIB_TYPE STATIC)
+else ()
+ set(_LIB_TYPE SHARED)
+endif ()
+
+if (NOT TARGET sodium)
+ add_library(sodium ${_LIB_TYPE} IMPORTED)
+endif ()
+
+set_target_properties(sodium PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${sodium_INCLUDE_DIR}"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+)
+
+if (sodium_USE_STATIC_LIBS)
+ set_target_properties(sodium PROPERTIES
+ INTERFACE_COMPILE_DEFINITIONS "SODIUM_STATIC"
+ IMPORTED_LOCATION "${sodium_LIBRARY_RELEASE}"
+ IMPORTED_LOCATION_DEBUG "${sodium_LIBRARY_DEBUG}"
+ )
+else ()
+ if (UNIX)
+ set_target_properties(sodium PROPERTIES
+ IMPORTED_LOCATION "${sodium_LIBRARY_RELEASE}"
+ IMPORTED_LOCATION_DEBUG "${sodium_LIBRARY_DEBUG}"
+ )
+ elseif (WIN32)
+ set_target_properties(sodium PROPERTIES
+ IMPORTED_IMPLIB "${sodium_LIBRARY_RELEASE}"
+ IMPORTED_IMPLIB_DEBUG "${sodium_LIBRARY_DEBUG}"
+ )
+ if (NOT (sodium_DLL_DEBUG MATCHES ".*-NOTFOUND"))
+ set_target_properties(sodium PROPERTIES
+ IMPORTED_LOCATION_DEBUG "${sodium_DLL_DEBUG}"
+ )
+ endif ()
+ if (NOT (sodium_DLL_RELEASE MATCHES ".*-NOTFOUND"))
+ set_target_properties(sodium PROPERTIES
+ IMPORTED_LOCATION_RELWITHDEBINFO "${sodium_DLL_RELEASE}"
+ IMPORTED_LOCATION_MINSIZEREL "${sodium_DLL_RELEASE}"
+ IMPORTED_LOCATION_RELEASE "${sodium_DLL_RELEASE}"
+ )
+ endif ()
+ endif ()
+endif ()
diff --git a/.rat-excludes b/cpp/cmake/celeborn-config.cmake.in
similarity index 66%
copy from .rat-excludes
copy to cpp/cmake/celeborn-config.cmake.in
index c4f31a9ff..792e14e1a 100644
--- a/.rat-excludes
+++ b/cpp/cmake/celeborn-config.cmake.in
@@ -1,4 +1,3 @@
-#
# 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.
@@ -13,27 +12,17 @@
# 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.
-#
+@PACKAGE_INIT@
+
+set_and_check(CELEBORN_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@")
+set_and_check(CELEBORN_CMAKE_DIR "@PACKAGE_CMAKE_INSTALL_DIR@")
+
+if (NOT TARGET celeborn::celeborn)
+ include("${CELEBORN_CMAKE_DIR}/celeborn-targets.cmake")
+endif()
+
+set(CELEBORN_LIBRARIES celeborn::celeborn)
-**/.*/**
-**/*.json
-**/*.prefs
-**/*.log
-**/*.md
-**/*.iml
-**/*.svg
-**/target/**
-**/out/**
-**/spark-warehouse/**
-**/metastore_db/**
-**/licenses/LICENSE*
-**/licenses-binary/LICENSE*
-**/dependency-reduced-pom.xml
-**/scalastyle-output.xml
-NOTICE*
-assets/**
-build/apache-maven-*/**
-build/scala-*/**
-build/sbt-config/**
-**/benchmarks/**
-**/node_modules/**
+if (NOT celeborn_FIND_QUIETLY)
+ message(STATUS "Found celeborn: ${PACKAGE_PREFIX_DIR}")
+endif()