Skip to content

Commit 31ff2a2

Browse files
committed
find folly using its installed cmake config file
Summary: Find folly using its installed CMake configuration file, and delete the custom FindFolly.cmake file that was being used previously. The FindFolly.cmake file did not list all dependent libraries necessary to link statically against folly. Linking against folly as a shared library is not recommended, as folly provides no binary compatibility guarantees between changes. folly's current CMake-based build only builds it as a static library by default. When building with RSOCKET_INSTALL_DEPS enabled, this also changes the code to always build the latest version of folly (instead of pinning to an older release), and to build folly using CMake rather than the older autotools-based folly build which no longer exists in folly. Note that the build now happens as part of the `cmake` step, since folly must be installed before we call `find_package()` to find folly. Test Plan: Tested building rsocket-cpp on an Ubuntu 18.04 host. Confirmed it worked both with an existing folly installation, as well as when using `INSTALL_FOLLY` to have rsocket download and build folly as part of its build steps.
1 parent e9094fa commit 31ff2a2

File tree

7 files changed

+53
-95
lines changed

7 files changed

+53
-95
lines changed

.travis.yml

-9
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,6 @@ addons:
1414
packages: &common_deps
1515
- lcov
1616
# Folly dependencies
17-
- autoconf
18-
- autoconf-archive
19-
- automake
2017
- binutils-dev
2118
- g++
2219
- libboost-all-dev
@@ -29,9 +26,7 @@ addons:
2926
- liblzma-dev
3027
- libsnappy-dev
3128
- libssl-dev
32-
- libtool
3329
- make
34-
- pkg-config
3530
- zlib1g-dev
3631

3732
matrix:
@@ -82,10 +77,6 @@ env:
8277
eHz/lHAoLXWg/BhtgQbPmMYYKRrQaH7EKzBbqEHv6PhOk7vLMtdx5X7KmhVuFjpAMbaYoj
8378
zwxxH0u+VAnVB5iazzyjhySjvzkvx6pGzZtTnjLJHxKcp9633z4OU=
8479
85-
cache:
86-
directories:
87-
- $HOME/folly
88-
8980
before_script:
9081
# Install lcov to coveralls conversion + upload tool.
9182
- gem install coveralls-lcov

CMakeLists.txt

+3-1
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,9 @@ add_library(
306306
rsocket/transports/tcp/TcpDuplexConnection.cpp
307307
rsocket/transports/tcp/TcpDuplexConnection.h)
308308

309-
target_link_libraries(ReactiveSocket yarpl ${GFLAGS_LIBRARY} ${GLOG_LIBRARY})
309+
target_link_libraries(ReactiveSocket
310+
PUBLIC yarpl ${GFLAGS_LIBRARY} ${GLOG_LIBRARY}
311+
INTERFACE ${EXTRA_LINK_FLAGS})
310312

311313
target_compile_options(
312314
ReactiveSocket

cmake/FindFolly.cmake

-15
This file was deleted.

cmake/InstallFolly.cmake

+12-66
Original file line numberDiff line numberDiff line change
@@ -1,73 +1,19 @@
11
if (NOT FOLLY_INSTALL_DIR)
2-
set(FOLLY_INSTALL_DIR $ENV{HOME}/folly)
2+
set(FOLLY_INSTALL_DIR ${CMAKE_BINARY_DIR}/folly-install)
33
endif ()
44

5-
# Check if the correct version of folly is already installed.
6-
set(FOLLY_VERSION v2018.06.25.00)
7-
set(FOLLY_VERSION_FILE ${FOLLY_INSTALL_DIR}/${FOLLY_VERSION})
85
if (RSOCKET_INSTALL_DEPS)
9-
if (NOT EXISTS ${FOLLY_VERSION_FILE})
10-
# Remove the old version of folly.
11-
file(REMOVE_RECURSE ${FOLLY_INSTALL_DIR})
12-
set(INSTALL_FOLLY True)
13-
endif ()
14-
endif ()
15-
16-
if (INSTALL_FOLLY)
17-
# Build and install folly.
18-
ExternalProject_Add(
19-
folly-ext
20-
GIT_REPOSITORY https://github.com/facebook/folly
21-
GIT_TAG ${FOLLY_VERSION}
22-
BINARY_DIR folly-ext-prefix/src/folly-ext/folly
23-
CONFIGURE_COMMAND autoreconf -ivf
24-
COMMAND ./configure CXX=${CMAKE_CXX_COMPILER}
25-
--prefix=${FOLLY_INSTALL_DIR}
26-
BUILD_COMMAND make -j4
27-
INSTALL_COMMAND make install
28-
COMMAND cmake -E touch ${FOLLY_VERSION_FILE})
29-
30-
set(FOLLY_INCLUDE_DIR ${FOLLY_INSTALL_DIR}/include)
31-
set(lib ${CMAKE_SHARED_LIBRARY_PREFIX}folly${CMAKE_SHARED_LIBRARY_SUFFIX})
32-
set(benchlib ${CMAKE_SHARED_LIBRARY_PREFIX}follybenchmark${CMAKE_SHARED_LIBRARY_SUFFIX})
33-
set(FOLLY_LIBRARY ${FOLLY_INSTALL_DIR}/lib/${lib})
34-
set(FOLLY_BENCHMARK_LIBRARY ${FOLLY_INSTALL_DIR}/lib/${benchlib})
35-
36-
# CMake requires directories listed in INTERFACE_INCLUDE_DIRECTORIES to exist.
37-
file(MAKE_DIRECTORY ${FOLLY_INCLUDE_DIR})
38-
else ()
39-
# Use installed folly.
40-
find_package(Folly REQUIRED)
6+
execute_process(
7+
COMMAND
8+
${CMAKE_SOURCE_DIR}/scripts/build_folly.sh
9+
${CMAKE_BINARY_DIR}/folly-src
10+
${FOLLY_INSTALL_DIR}
11+
RESULT_VARIABLE folly_result
12+
)
13+
if (NOT "${folly_result}" STREQUAL "0")
14+
message(FATAL_ERROR "failed to build folly")
15+
endif()
4116
endif ()
4217

4318
find_package(Threads)
44-
find_library(EVENT_LIBRARY event)
45-
46-
add_library(folly SHARED IMPORTED)
47-
set_property(TARGET folly PROPERTY IMPORTED_LOCATION ${FOLLY_LIBRARY})
48-
set_property(TARGET folly
49-
APPEND PROPERTY INTERFACE_LINK_LIBRARIES
50-
${EXTRA_LINK_FLAGS} ${EVENT_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
51-
if (TARGET folly-ext)
52-
add_dependencies(folly folly-ext)
53-
endif ()
54-
55-
add_library(folly-benchmark SHARED IMPORTED)
56-
set_property(TARGET folly-benchmark PROPERTY IMPORTED_LOCATION ${FOLLY_BENCHMARK_LIBRARY})
57-
set_property(TARGET folly-benchmark
58-
APPEND PROPERTY INTERFACE_LINK_LIBRARIES
59-
${EXTRA_LINK_FLAGS} ${EVENT_LIBRARY} ${CMAKE_THREAD_LIBS_INIT})
60-
if (TARGET folly-ext)
61-
add_dependencies(folly-benchmark folly-ext)
62-
endif ()
63-
64-
# Folly includes are marked as system to prevent errors on non-standard
65-
# extensions when compiling with -pedantic and -Werror.
66-
set_property(TARGET folly
67-
APPEND PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ${FOLLY_INCLUDE_DIR})
68-
set_property(TARGET folly
69-
APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${FOLLY_INCLUDE_DIR})
70-
set_property(TARGET folly-benchmark
71-
APPEND PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES ${FOLLY_INCLUDE_DIR})
72-
set_property(TARGET folly-benchmark
73-
APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${FOLLY_INCLUDE_DIR})
19+
find_package(folly CONFIG REQUIRED PATHS ${FOLLY_INSTALL_DIR})

rsocket/benchmarks/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
add_library(fixture Fixture.cpp Fixture.h)
2-
target_link_libraries(fixture ReactiveSocket folly)
2+
target_link_libraries(fixture ReactiveSocket Folly::folly)
33

44
function(benchmark NAME FILE)
55
add_executable(${NAME} ${FILE} Benchmarks.cpp)
66
target_link_libraries(
77
${NAME}
88
fixture
99
ReactiveSocket
10-
folly-benchmark
10+
Folly::follybenchmark
1111
${GFLAGS_LIBRARY}
1212
${GLOG_LIBRARY})
1313
endfunction()

scripts/build_folly.sh

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#!/bin/bash
2+
#
3+
# Copyright 2004-present Facebook. All Rights Reserved.
4+
#
5+
CHECKOUT_DIR=$1
6+
INSTALL_DIR=$2
7+
if [[ -z $INSTALL_DIR ]]; then
8+
echo "usage: $0 CHECKOUT_DIR INSTALL_DIR" >&2
9+
exit 1
10+
fi
11+
12+
# If folly was already installed, just return early
13+
INSTALL_MARKER_FILE="$INSTALL_DIR/folly.installed"
14+
if [[ -f $INSTALL_MARKER_FILE ]]; then
15+
echo "folly was previously built"
16+
exit 0
17+
fi
18+
19+
set -e
20+
set -x
21+
22+
if [[ -d "$CHECKOUT_DIR" ]]; then
23+
git -C "$CHECKOUT_DIR" fetch
24+
git -C "$CHECKOUT_DIR" checkout master
25+
else
26+
git clone https://github.com/facebook/folly "$CHECKOUT_DIR"
27+
fi
28+
29+
mkdir -p "$CHECKOUT_DIR/_build"
30+
cd "$CHECKOUT_DIR/_build"
31+
cmake "-DCMAKE_INSTALL_PREFIX=${INSTALL_DIR}" ..
32+
make -j4
33+
make install
34+
touch "$INSTALL_MARKER_FILE"

yarpl/CMakeLists.txt

+2-2
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,8 @@ message("yarpl source dir: ${CMAKE_CURRENT_SOURCE_DIR}")
119119

120120
target_link_libraries(
121121
yarpl
122-
folly
123-
${GLOG_LIBRARY})
122+
PUBLIC Folly::folly ${GLOG_LIBRARY}
123+
INTERFACE ${EXTRA_LINK_FLAGS})
124124

125125
install(TARGETS yarpl DESTINATION lib)
126126
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DESTINATION include FILES_MATCHING PATTERN "*.h")

0 commit comments

Comments
 (0)