Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
fangy14
committed
Nov 6, 2019
0 parents
commit 8d3d27c
Showing
276 changed files
with
585,368 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
cmake_minimum_required(VERSION 2.8.2) | ||
|
||
project(${DL_ARGS_PROJ}-download NONE) | ||
|
||
include(ExternalProject) | ||
ExternalProject_Add(${DL_ARGS_PROJ}-download | ||
${DL_ARGS_UNPARSED_ARGUMENTS} | ||
SOURCE_DIR "${DL_ARGS_SOURCE_DIR}" | ||
BINARY_DIR "${DL_ARGS_BINARY_DIR}" | ||
CONFIGURE_COMMAND "" | ||
BUILD_COMMAND "" | ||
INSTALL_COMMAND "" | ||
TEST_COMMAND "" | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
The MIT License (MIT) | ||
|
||
Copyright (c) 2015 Crascit | ||
|
||
Permission is hereby granted, free of charge, to any person obtaining a copy | ||
of this software and associated documentation files (the "Software"), to deal | ||
in the Software without restriction, including without limitation the rights | ||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
copies of the Software, and to permit persons to whom the Software is | ||
furnished to do so, subject to the following conditions: | ||
|
||
The above copyright notice and this permission notice shall be included in all | ||
copies or substantial portions of the Software. | ||
|
||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
SOFTWARE. | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,143 @@ | ||
# MODULE: DownloadProject | ||
# | ||
# PROVIDES: | ||
# download_project( PROJ projectName | ||
# [PREFIX prefixDir] | ||
# [DOWNLOAD_DIR downloadDir] | ||
# [SOURCE_DIR srcDir] | ||
# [BINARY_DIR binDir] | ||
# [QUIET] | ||
# ... | ||
# ) | ||
# | ||
# Provides the ability to download and unpack a tarball, zip file, git repository, | ||
# etc. at configure time (i.e. when the cmake command is run). How the downloaded | ||
# and unpacked contents are used is up to the caller, but the motivating case is | ||
# to download source code which can then be included directly in the build with | ||
# add_subdirectory() after the call to download_project(). Source and build | ||
# directories are set up with this in mind. | ||
# | ||
# The PROJ argument is required. The projectName value will be used to construct | ||
# the following variables upon exit (obviously replace projectName with its actual | ||
# value): | ||
# | ||
# projectName_SOURCE_DIR | ||
# projectName_BINARY_DIR | ||
# | ||
# The SOURCE_DIR and BINARY_DIR arguments are optional and would not typically | ||
# need to be provided. They can be specified if you want the downloaded source | ||
# and build directories to be located in a specific place. The contents of | ||
# projectName_SOURCE_DIR and projectName_BINARY_DIR will be populated with the | ||
# locations used whether you provide SOURCE_DIR/BINARY_DIR or not. | ||
# | ||
# The DOWNLOAD_DIR argument does not normally need to be set. It controls the | ||
# location of the temporary CMake build used to perform the download. | ||
# | ||
# The PREFIX argument can be provided to change the base location of the default | ||
# values of DOWNLOAD_DIR, SOURCE_DIR and BINARY_DIR. If all of those three arguments | ||
# are provided, then PREFIX will have no effect. The default value for PREFIX is | ||
# CMAKE_BINARY_DIR. | ||
# | ||
# The QUIET option can be given if you do not want to show the output associated | ||
# with downloading the specified project. | ||
# | ||
# In addition to the above, any other options are passed through unmodified to | ||
# ExternalProject_Add() to perform the actual download, patch and update steps. | ||
# The following ExternalProject_Add() options are explicitly prohibited (they | ||
# are reserved for use by the download_project() command): | ||
# | ||
# CONFIGURE_COMMAND | ||
# BUILD_COMMAND | ||
# INSTALL_COMMAND | ||
# TEST_COMMAND | ||
# | ||
# Only those ExternalProject_Add() arguments which relate to downloading, patching | ||
# and updating of the project sources are intended to be used. Also note that at | ||
# least one set of download-related arguments are required. | ||
# | ||
# If using CMake 3.2 or later, the UPDATE_DISCONNECTED option can be used to | ||
# prevent a check at the remote end for changes every time CMake is run | ||
# after the first successful download. See the documentation of the ExternalProject | ||
# module for more information. It is likely you will want to use this option if it | ||
# is available to you. | ||
# | ||
# EXAMPLE USAGE: | ||
# | ||
# include(download_project.cmake) | ||
# download_project(PROJ googletest | ||
# GIT_REPOSITORY https://github.com/google/googletest.git | ||
# GIT_TAG master | ||
# UPDATE_DISCONNECTED 1 | ||
# QUIET | ||
# ) | ||
# | ||
# add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR}) | ||
# | ||
#======================================================================================== | ||
|
||
|
||
set(_DownloadProjectDir "${CMAKE_CURRENT_LIST_DIR}") | ||
|
||
include(CMakeParseArguments) | ||
|
||
function(download_project) | ||
|
||
set(options QUIET) | ||
set(oneValueArgs | ||
PROJ | ||
PREFIX | ||
DOWNLOAD_DIR | ||
SOURCE_DIR | ||
BINARY_DIR | ||
# Prevent the following from being passed through | ||
CONFIGURE_COMMAND | ||
BUILD_COMMAND | ||
INSTALL_COMMAND | ||
TEST_COMMAND | ||
) | ||
set(multiValueArgs "") | ||
|
||
cmake_parse_arguments(DL_ARGS "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) | ||
|
||
# Hide output if requested | ||
if (DL_ARGS_QUIET) | ||
set(OUTPUT_QUIET "OUTPUT_QUIET") | ||
else() | ||
unset(OUTPUT_QUIET) | ||
message(STATUS "Downloading/updating ${DL_ARGS_PROJ}") | ||
endif() | ||
|
||
# Set up where we will put our temporary CMakeLists.txt file and also | ||
# the base point below which the default source and binary dirs will be | ||
if (NOT DL_ARGS_PREFIX) | ||
set(DL_ARGS_PREFIX "${CMAKE_BINARY_DIR}") | ||
endif() | ||
if (NOT DL_ARGS_DOWNLOAD_DIR) | ||
set(DL_ARGS_DOWNLOAD_DIR "${DL_ARGS_PREFIX}/${DL_ARGS_PROJ}-download") | ||
endif() | ||
|
||
# Ensure the caller can know where to find the source and build directories | ||
if (NOT DL_ARGS_SOURCE_DIR) | ||
set(DL_ARGS_SOURCE_DIR "${DL_ARGS_PREFIX}/${DL_ARGS_PROJ}-src") | ||
endif() | ||
if (NOT DL_ARGS_BINARY_DIR) | ||
set(DL_ARGS_BINARY_DIR "${DL_ARGS_PREFIX}/${DL_ARGS_PROJ}-build") | ||
endif() | ||
set(${DL_ARGS_PROJ}_SOURCE_DIR "${DL_ARGS_SOURCE_DIR}" PARENT_SCOPE) | ||
set(${DL_ARGS_PROJ}_BINARY_DIR "${DL_ARGS_BINARY_DIR}" PARENT_SCOPE) | ||
|
||
# Create and build a separate CMake project to carry out the download. | ||
# If we've already previously done these steps, they will not cause | ||
# anything to be updated, so extra rebuilds of the project won't occur. | ||
configure_file("${_DownloadProjectDir}/DownloadProject.CMakeLists.cmake.in" | ||
"${DL_ARGS_DOWNLOAD_DIR}/CMakeLists.txt") | ||
execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . | ||
${OUTPUT_QUIET} | ||
WORKING_DIRECTORY "${DL_ARGS_DOWNLOAD_DIR}" | ||
) | ||
execute_process(COMMAND ${CMAKE_COMMAND} --build . | ||
${OUTPUT_QUIET} | ||
WORKING_DIRECTORY "${DL_ARGS_DOWNLOAD_DIR}" | ||
) | ||
|
||
endfunction() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,192 @@ | ||
# | ||
# Finds the Cap'n Proto libraries, and compiles schema files. | ||
# | ||
# Configuration variables (optional): | ||
# CAPNPC_OUTPUT_DIR | ||
# Directory to place compiled schema sources (default: the same directory as the schema file). | ||
# CAPNPC_IMPORT_DIRS | ||
# List of additional include directories for the schema compiler. | ||
# (CMAKE_CURRENT_SOURCE_DIR and CAPNP_INCLUDE_DIRS are always included.) | ||
# CAPNPC_SRC_PREFIX | ||
# Schema file source prefix (default: CMAKE_CURRENT_SOURCE_DIR). | ||
# CAPNPC_FLAGS | ||
# Additional flags to pass to the schema compiler. | ||
# | ||
# Variables that are discovered: | ||
# CAPNP_EXECUTABLE | ||
# Path to the `capnp` tool (can be set to override). | ||
# CAPNPC_CXX_EXECUTABLE | ||
# Path to the `capnpc-c++` tool (can be set to override). | ||
# CAPNP_INCLUDE_DIRS | ||
# Include directories for the library's headers (can be set to override). | ||
# CANP_LIBRARIES | ||
# The Cap'n Proto library paths. | ||
# CAPNP_LIBRARIES_LITE | ||
# Paths to only the 'lite' libraries. | ||
# CAPNP_DEFINITIONS | ||
# Compiler definitions required for building with the library. | ||
# CAPNP_FOUND | ||
# Set if the libraries have been located. | ||
# | ||
# Example usage: | ||
# | ||
# find_package(CapnProto REQUIRED) | ||
# include_directories(${CAPNP_INCLUDE_DIRS}) | ||
# add_definitions(${CAPNP_DEFINITIONS}) | ||
# | ||
# capnp_generate_cpp(CAPNP_SRCS CAPNP_HDRS schema.capnp) | ||
# add_executable(a a.cc ${CAPNP_SRCS} ${CAPNP_HDRS}) | ||
# target_link_library(a ${CAPNP_LIBRARIES}) | ||
# | ||
# For out-of-source builds: | ||
# | ||
# set(CAPNPC_OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}) | ||
# include_directories(${CAPNPC_OUTPUT_DIR}) | ||
# capnp_generate_cpp(...) | ||
# | ||
|
||
# CAPNP_GENERATE_CPP =========================================================== | ||
|
||
function(CAPNP_GENERATE_CPP SOURCES HEADERS) | ||
if(NOT ARGN) | ||
message(SEND_ERROR "CAPNP_GENERATE_CPP() called without any source files.") | ||
endif() | ||
if(NOT CAPNP_EXECUTABLE) | ||
message(SEND_ERROR "Could not locate capnp executable (CAPNP_EXECUTABLE).") | ||
endif() | ||
if(NOT CAPNPC_CXX_EXECUTABLE) | ||
message(SEND_ERROR "Could not locate capnpc-c++ executable (CAPNPC_CXX_EXECUTABLE).") | ||
endif() | ||
if(NOT CAPNP_INCLUDE_DIRS) | ||
message(SEND_ERROR "Could not locate capnp header files (CAPNP_INCLUDE_DIRS).") | ||
endif() | ||
|
||
# Default compiler includes | ||
set(include_path -I ${CMAKE_CURRENT_SOURCE_DIR} -I ${CAPNP_INCLUDE_DIRS}) | ||
|
||
if(DEFINED CAPNPC_IMPORT_DIRS) | ||
# Append each directory as a series of '-I' flags in ${include_path} | ||
foreach(directory ${CAPNPC_IMPORT_DIRS}) | ||
get_filename_component(absolute_path "${directory}" ABSOLUTE) | ||
list(APPEND include_path -I ${absolute_path}) | ||
endforeach() | ||
endif() | ||
|
||
if(DEFINED CAPNPC_OUTPUT_DIR) | ||
# Prepend a ':' to get the format for the '-o' flag right | ||
set(output_dir ":${CAPNPC_OUTPUT_DIR}") | ||
else() | ||
set(output_dir ":.") | ||
endif() | ||
|
||
if(NOT DEFINED CAPNPC_SRC_PREFIX) | ||
set(CAPNPC_SRC_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}") | ||
endif() | ||
get_filename_component(CAPNPC_SRC_PREFIX "${CAPNPC_SRC_PREFIX}" ABSOLUTE) | ||
|
||
set(${SOURCES}) | ||
set(${HEADERS}) | ||
foreach(schema_file ${ARGN}) | ||
get_filename_component(file_path "${schema_file}" ABSOLUTE) | ||
get_filename_component(file_dir "${file_path}" PATH) | ||
|
||
# Figure out where the output files will go | ||
if (NOT DEFINED CAPNPC_OUTPUT_DIR) | ||
set(output_base "${file_path}") | ||
else() | ||
# Output files are placed in CAPNPC_OUTPUT_DIR, at a location as if they were | ||
# relative to CAPNPC_SRC_PREFIX. | ||
string(LENGTH "${CAPNPC_SRC_PREFIX}" prefix_len) | ||
string(SUBSTRING "${file_path}" 0 ${prefix_len} output_prefix) | ||
if(NOT "${CAPNPC_SRC_PREFIX}" STREQUAL "${output_prefix}") | ||
message(SEND_ERROR "Could not determine output path for '${schema_file}' ('${file_path}') with source prefix '${CAPNPC_SRC_PREFIX}' into '${CAPNPC_OUTPUT_DIR}'.") | ||
endif() | ||
|
||
string(SUBSTRING "${file_path}" ${prefix_len} -1 output_path) | ||
set(output_base "${CAPNPC_OUTPUT_DIR}${output_path}") | ||
endif() | ||
|
||
add_custom_command( | ||
OUTPUT "${output_base}.c++" "${output_base}.h" | ||
COMMAND "${CAPNP_EXECUTABLE}" | ||
ARGS compile | ||
-o ${CAPNPC_CXX_EXECUTABLE}${output_dir} | ||
--src-prefix ${CAPNPC_SRC_PREFIX} | ||
${include_path} | ||
${CAPNPC_FLAGS} | ||
${file_path} | ||
DEPENDS "${schema_file}" | ||
COMMENT "Compiling Cap'n Proto schema ${schema_file}" | ||
VERBATIM | ||
) | ||
list(APPEND ${SOURCES} "${output_base}.c++") | ||
list(APPEND ${HEADERS} "${output_base}.h") | ||
endforeach() | ||
|
||
set_source_files_properties(${${SOURCES}} ${${HEADERS}} PROPERTIES GENERATED TRUE) | ||
set(${SOURCES} ${${SOURCES}} PARENT_SCOPE) | ||
set(${HEADERS} ${${HEADERS}} PARENT_SCOPE) | ||
endfunction() | ||
|
||
# Find Libraries/Paths ========================================================= | ||
|
||
# Use pkg-config to get path hints and definitions | ||
find_package(PkgConfig QUIET) | ||
pkg_check_modules(PKGCONFIG_CAPNP capnp) | ||
pkg_check_modules(PKGCONFIG_CAPNP_RPC capnp-rpc QUIET) | ||
|
||
find_library(CAPNP_LIB_KJ kj | ||
HINTS "${PKGCONFIG_CAPNP_LIBDIR}" ${PKGCONFIG_CAPNP_LIBRARY_DIRS} | ||
) | ||
find_library(CAPNP_LIB_KJ-ASYNC kj-async | ||
HINTS "${PKGCONFIG_CAPNP_RPC_LIBDIR}" ${PKGCONFIG_CAPNP_RPC_LIBRARY_DIRS} | ||
) | ||
find_library(CAPNP_LIB_CAPNP capnp | ||
HINTS "${PKGCONFIG_CAPNP_LIBDIR}" ${PKGCONFIG_CAPNP_LIBRARY_DIRS} | ||
) | ||
find_library(CAPNP_LIB_CAPNP-RPC capnp-rpc | ||
HINTS "${PKGCONFIG_CAPNP_RPC_LIBDIR}" ${PKGCONFIG_CAPNP_RPC_LIBRARY_DIRS} | ||
) | ||
mark_as_advanced(CAPNP_LIB_KJ CAPNP_LIB_KJ-ASYNC CAPNP_LIB_CAPNP CAPNP_LIB_CAPNP-RPC) | ||
set(CAPNP_LIBRARIES_LITE | ||
${CAPNP_LIB_CAPNP} | ||
${CAPNP_LIB_KJ} | ||
) | ||
set(CAPNP_LIBRARIES | ||
${CAPNP_LIB_CAPNP-RPC} | ||
${CAPNP_LIB_CAPNP} | ||
${CAPNP_LIB_KJ-ASYNC} | ||
${CAPNP_LIB_KJ} | ||
) | ||
|
||
# Was only the 'lite' library found? | ||
if(CAPNP_LIB_CAPNP AND NOT CAPNP_LIB_CAPNP-RPC) | ||
set(CAPNP_DEFINITIONS -DCAPNP_LITE) | ||
else() | ||
set(CAPNP_DEFINITIONS) | ||
endif() | ||
|
||
find_path(CAPNP_INCLUDE_DIRS capnp/generated-header-support.h | ||
HINTS "${PKGCONFIG_CAPNP_INCLUDEDIR}" ${PKGCONFIG_CAPNP_INCLUDE_DIRS} | ||
) | ||
|
||
find_program(CAPNP_EXECUTABLE | ||
NAMES capnp | ||
DOC "Cap'n Proto Command-line Tool" | ||
HINTS "${PKGCONFIG_CAPNP_PREFIX}/bin" | ||
) | ||
|
||
find_program(CAPNPC_CXX_EXECUTABLE | ||
NAMES capnpc-c++ | ||
DOC "Capn'n Proto C++ Compiler" | ||
HINTS "${PKGCONFIG_CAPNP_PREFIX}/bin" | ||
) | ||
|
||
# Only *require* the include directory, libkj, and libcapnp. If compiling with | ||
# CAPNP_LITE, nothing else will be found. | ||
include(FindPackageHandleStandardArgs) | ||
find_package_handle_standard_args(CAPNP DEFAULT_MSG | ||
CAPNP_INCLUDE_DIRS | ||
CAPNP_LIB_KJ | ||
CAPNP_LIB_CAPNP | ||
) |
Oops, something went wrong.