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

Reply via email to