[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 <jiaming.xie7@gmail.com> Signed-off-by: mingji <fengmingxiao.fmx@alibaba-inc.com>
This commit is contained in:
parent
1b193aa196
commit
77c7a8b91d
@ -37,3 +37,4 @@ build/scala-*/**
|
||||
build/sbt-config/**
|
||||
**/benchmarks/**
|
||||
**/node_modules/**
|
||||
cpp/cmake/FindSodium.cmake
|
||||
|
||||
15
LICENSE
15
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
|
||||
|
||||
87
cpp/.clang-format
Normal file
87
cpp/.clang-format
Normal file
@ -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
|
||||
...
|
||||
143
cpp/CMakeLists.txt
Normal file
143
cpp/CMakeLists.txt
Normal file
@ -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/openssl@1.1)
|
||||
set(OPENSSL_ROOT_DIR "${OPT_OPENSSL_DIR}/opt/openssl@1.1")
|
||||
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)
|
||||
@ -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
|
||||
```
|
||||
|
||||
|
||||
15
cpp/celeborn/CMakeLists.txt
Normal file
15
cpp/celeborn/CMakeLists.txt
Normal file
@ -0,0 +1,15 @@
|
||||
# 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.
|
||||
add_subdirectory(utils)
|
||||
25
cpp/celeborn/utils/CMakeLists.txt
Normal file
25
cpp/celeborn/utils/CMakeLists.txt
Normal file
@ -0,0 +1,25 @@
|
||||
# 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.
|
||||
add_library(utils ProcessBase.cpp)
|
||||
|
||||
target_link_libraries(
|
||||
utils
|
||||
${WANGLE}
|
||||
${FIZZ}
|
||||
${LIBSODIUM_LIBRARY}
|
||||
${FOLLY_WITH_DEPENDENCIES}
|
||||
${GLOG}
|
||||
${GFLAGS_LIBRARIES}
|
||||
)
|
||||
129
cpp/celeborn/utils/ProcessBase.cpp
Normal file
129
cpp/celeborn/utils/ProcessBase.cpp
Normal file
@ -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
|
||||
68
cpp/celeborn/utils/ProcessBase.h
Normal file
68
cpp/celeborn/utils/ProcessBase.h
Normal file
@ -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
|
||||
297
cpp/cmake/FindSodium.cmake
Normal file
297
cpp/cmake/FindSodium.cmake
Normal file
@ -0,0 +1,297 @@
|
||||
# Written in 2016 by Henrik Steffen Gaßmann <henrik@gassmann.onl>
|
||||
#
|
||||
# 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 ()
|
||||
28
cpp/cmake/celeborn-config.cmake.in
Normal file
28
cpp/cmake/celeborn-config.cmake.in
Normal file
@ -0,0 +1,28 @@
|
||||
# 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.
|
||||
@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)
|
||||
|
||||
if (NOT celeborn_FIND_QUIETLY)
|
||||
message(STATUS "Found celeborn: ${PACKAGE_PREFIX_DIR}")
|
||||
endif()
|
||||
Loading…
Reference in New Issue
Block a user