Commit 6b3aaa2b authored by Tushar Maheshwari's avatar Tushar Maheshwari Committed by Facebook Github Bot

Improve modern CMake usage

Summary:
Summary of the changes
 ---
- Fix broken MSVC build:
  - Compiling `GenerateFingerprintTables.cpp` complained about missing header file `glog/logging.h`.
  - Targets `GenerateFingerprintTables` and `folly_fingerprint` don't specify `FOLLY_INCLUDE_DIRECTORIES` in its include directories.

* Introduce a "shiny" target `folly_deps` for managing folly's dependencies and interface specification.
  * `folly_deps` is an [INTERFACE library target](https://cmake.org/cmake/help/v3.0/command/add_library.html).
  * It encapsulates the interface dependencies (compile definitions, include directories, link libraries, etc.) for other targets.
  * The usage of the new target is clean and simple:
    `target_link_libraries(<target_name> (PUBLIC|PRIVATE) folly_deps)`
    (except for OBJECT library targets, like `folly_base` - included in the change).

Possible modifications
 ---
The name `folly_deps` could be replaced with a better one.
The target can be extended to include the PUBLIC compile options set on individual targets.
Reviews and suggestions welcome.
Closes https://github.com/facebook/folly/pull/818

Reviewed By: simpkins

Differential Revision: D7642870

Pulled By: Orvid

fbshipit-source-id: c1c5fdae67f5a677c82f05757217af6b6de9db02
parent 69957e94
...@@ -285,3 +285,9 @@ function(apply_folly_compile_options_to_target THETARGET) ...@@ -285,3 +285,9 @@ function(apply_folly_compile_options_to_target THETARGET)
set_property(TARGET ${THETARGET} APPEND_STRING PROPERTY LINK_FLAGS_RELEASE " /LTCG") set_property(TARGET ${THETARGET} APPEND_STRING PROPERTY LINK_FLAGS_RELEASE " /LTCG")
endif() endif()
endfunction() endfunction()
target_link_libraries(folly_deps
INTERFACE
Iphlpapi.lib
Ws2_32.lib
)
...@@ -27,9 +27,9 @@ if (gflags_FOUND) ...@@ -27,9 +27,9 @@ if (gflags_FOUND)
message(STATUS "Found gflags from package config") message(STATUS "Found gflags from package config")
set(FOLLY_HAVE_LIBGFLAGS ON) set(FOLLY_HAVE_LIBGFLAGS ON)
if (TARGET gflags-shared) if (TARGET gflags-shared)
set(FOLLY_SHINY_DEPENDENCIES ${FOLLY_SHINY_DEPENDENCIES} gflags-shared) list(APPEND FOLLY_SHINY_DEPENDENCIES gflags-shared)
elseif (TARGET gflags) elseif (TARGET gflags)
set(FOLLY_SHINY_DEPENDENCIES ${FOLLY_SHINY_DEPENDENCIES} gflags) list(APPEND FOLLY_SHINY_DEPENDENCIES gflags)
else() else()
message(FATAL_ERROR "Unable to determine the target name for the GFlags package.") message(FATAL_ERROR "Unable to determine the target name for the GFlags package.")
endif() endif()
...@@ -49,7 +49,7 @@ find_package(glog CONFIG QUIET) ...@@ -49,7 +49,7 @@ find_package(glog CONFIG QUIET)
if (glog_FOUND) if (glog_FOUND)
message(STATUS "Found glog from package config") message(STATUS "Found glog from package config")
set(FOLLY_HAVE_LIBGLOG ON) set(FOLLY_HAVE_LIBGLOG ON)
set(FOLLY_SHINY_DEPENDENCIES ${FOLLY_SHINY_DEPENDENCIES} glog::glog) list(APPEND FOLLY_SHINY_DEPENDENCIES glog::glog)
else() else()
find_package(GLog MODULE) find_package(GLog MODULE)
set(FOLLY_HAVE_LIBGLOG ${LIBGLOG_FOUND}) set(FOLLY_HAVE_LIBGLOG ${LIBGLOG_FOUND})
...@@ -60,7 +60,7 @@ endif() ...@@ -60,7 +60,7 @@ endif()
find_package(Libevent CONFIG QUIET) find_package(Libevent CONFIG QUIET)
if(TARGET event) if(TARGET event)
message(STATUS "Found libevent from package config") message(STATUS "Found libevent from package config")
set(FOLLY_SHINY_DEPENDENCIES ${FOLLY_SHINY_DEPENDENCIES} event) list(APPEND FOLLY_SHINY_DEPENDENCIES event)
else() else()
find_package(LibEvent MODULE REQUIRED) find_package(LibEvent MODULE REQUIRED)
list(APPEND FOLLY_LINK_LIBRARIES ${LIBEVENT_LIB}) list(APPEND FOLLY_LINK_LIBRARIES ${LIBEVENT_LIB})
...@@ -144,3 +144,10 @@ list(APPEND FOLLY_INCLUDE_DIRECTORIES ${LIBURCU_INCLUDE_DIRS}) ...@@ -144,3 +144,10 @@ list(APPEND FOLLY_INCLUDE_DIRECTORIES ${LIBURCU_INCLUDE_DIRS})
list(APPEND FOLLY_LINK_LIBRARIES ${CMAKE_DL_LIBS}) list(APPEND FOLLY_LINK_LIBRARIES ${CMAKE_DL_LIBS})
list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_DL_LIBS}) list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_DL_LIBS})
add_library(folly_deps INTERFACE)
target_include_directories(folly_deps INTERFACE ${FOLLY_INCLUDE_DIRECTORIES})
target_link_libraries(folly_deps INTERFACE
${FOLLY_LINK_LIBRARIES}
${FOLLY_SHINY_DEPENDENCIES}
)
...@@ -10,7 +10,6 @@ endif() ...@@ -10,7 +10,6 @@ endif()
# includes # includes
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH}) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH})
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
# package information # package information
set(PACKAGE_NAME "folly") set(PACKAGE_NAME "folly")
...@@ -198,49 +197,35 @@ if (BUILD_SHARED_LIBS) ...@@ -198,49 +197,35 @@ if (BUILD_SHARED_LIBS)
endif() endif()
auto_source_group(folly ${FOLLY_DIR} ${files} ${hfiles}) auto_source_group(folly ${FOLLY_DIR} ${files} ${hfiles})
apply_folly_compile_options_to_target(folly_base) apply_folly_compile_options_to_target(folly_base)
target_include_directories(folly_base PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
# Add the generated files to the correct source group. # Add the generated files to the correct source group.
source_group("folly" FILES ${CMAKE_CURRENT_BINARY_DIR}/folly/folly-config.h) source_group("folly" FILES ${CMAKE_CURRENT_BINARY_DIR}/folly/folly-config.h)
source_group("folly\\build" FILES source_group("folly\\build" FILES
${CMAKE_CURRENT_BINARY_DIR}/folly/build/FingerprintTables.cpp ${CMAKE_CURRENT_BINARY_DIR}/folly/build/FingerprintTables.cpp
) )
if(CMAKE_SYSTEM_NAME STREQUAL "Windows") target_include_directories(folly_deps
set(FOLLY_LINK_LIBRARIES INTERFACE
${FOLLY_LINK_LIBRARIES} $<BUILD_INTERFACE:
Iphlpapi.lib ${CMAKE_CURRENT_SOURCE_DIR}
Ws2_32.lib ${CMAKE_CURRENT_BINARY_DIR}>
) $<INSTALL_INTERFACE:include>
endif()
set(FOLLY_LINK_LIBRARIES
${FOLLY_LINK_LIBRARIES}
${FOLLY_SHINY_DEPENDENCIES}
) )
target_include_directories(folly_base target_include_directories(folly_base
PUBLIC PUBLIC
${FOLLY_INCLUDE_DIRECTORIES} $<TARGET_PROPERTY:folly_deps,INTERFACE_INCLUDE_DIRECTORIES>
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}> )
target_compile_definitions(folly_base
PUBLIC
$<TARGET_PROPERTY:folly_deps,INTERFACE_COMPILE_DEFINITIONS>
) )
foreach (LIB ${FOLLY_SHINY_DEPENDENCIES})
target_include_directories(folly_base PUBLIC $<TARGET_PROPERTY:${LIB},INCLUDE_DIRECTORIES>)
target_compile_definitions(folly_base PUBLIC $<TARGET_PROPERTY:${LIB},INTERFACE_COMPILE_DEFINITIONS>)
endforeach()
if (FOLLY_HAVE_PTHREAD)
target_include_directories(folly_base PUBLIC ${LIBPTHREAD_INCLUDE_DIRS})
endif()
# Now to generate the fingerprint tables # Now to generate the fingerprint tables
add_executable(GenerateFingerprintTables add_executable(GenerateFingerprintTables
${FOLLY_DIR}/build/GenerateFingerprintTables.cpp ${FOLLY_DIR}/build/GenerateFingerprintTables.cpp
$<TARGET_OBJECTS:folly_base> $<TARGET_OBJECTS:folly_base>
) )
target_link_libraries(GenerateFingerprintTables PRIVATE ${FOLLY_LINK_LIBRARIES}) target_link_libraries(GenerateFingerprintTables PRIVATE folly_deps)
target_include_directories(GenerateFingerprintTables PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
add_dependencies(GenerateFingerprintTables folly_base)
apply_folly_compile_options_to_target(GenerateFingerprintTables) apply_folly_compile_options_to_target(GenerateFingerprintTables)
set_property(TARGET GenerateFingerprintTables PROPERTY FOLDER "Build") set_property(TARGET GenerateFingerprintTables PROPERTY FOLDER "Build")
source_group("" FILES ${FOLLY_DIR}/build/GenerateFingerprintTables.cpp) source_group("" FILES ${FOLLY_DIR}/build/GenerateFingerprintTables.cpp)
...@@ -263,9 +248,7 @@ add_library(folly_fingerprint STATIC ...@@ -263,9 +248,7 @@ add_library(folly_fingerprint STATIC
${FOLLY_DIR}/detail/FingerprintPolynomial.h ${FOLLY_DIR}/detail/FingerprintPolynomial.h
$<TARGET_OBJECTS:folly_base> $<TARGET_OBJECTS:folly_base>
) )
target_link_libraries(folly_fingerprint PRIVATE ${FOLLY_LINK_LIBRARIES}) target_link_libraries(folly_fingerprint PRIVATE folly_deps)
target_include_directories(folly_fingerprint PRIVATE $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>)
add_dependencies(folly_fingerprint folly_base)
apply_folly_compile_options_to_target(folly_fingerprint) apply_folly_compile_options_to_target(folly_fingerprint)
# We want to generate a single library and target for folly, but we needed a # We want to generate a single library and target for folly, but we needed a
...@@ -283,15 +266,9 @@ add_library(folly ...@@ -283,15 +266,9 @@ add_library(folly
apply_folly_compile_options_to_target(folly) apply_folly_compile_options_to_target(folly)
source_group("" FILES ${CMAKE_CURRENT_BINARY_DIR}/folly_dep.cpp) source_group("" FILES ${CMAKE_CURRENT_BINARY_DIR}/folly_dep.cpp)
target_link_libraries(folly PUBLIC ${FOLLY_LINK_LIBRARIES}) target_link_libraries(folly PUBLIC folly_deps)
target_include_directories(folly
INTERFACE
${FOLLY_INCLUDE_DIRECTORIES}
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
$<INSTALL_INTERFACE:include>
)
install(TARGETS folly install(TARGETS folly folly_deps
EXPORT folly EXPORT folly
RUNTIME DESTINATION bin RUNTIME DESTINATION bin
LIBRARY DESTINATION ${LIB_INSTALL_DIR} LIBRARY DESTINATION ${LIB_INSTALL_DIR}
......
...@@ -5,13 +5,9 @@ if (FOLLY_USE_SYMBOLIZER) ...@@ -5,13 +5,9 @@ if (FOLLY_USE_SYMBOLIZER)
StackTrace.cpp StackTrace.cpp
) )
apply_folly_compile_options_to_target(folly_exception_tracer_base) apply_folly_compile_options_to_target(folly_exception_tracer_base)
target_include_directories(folly_exception_tracer_base
PUBLIC
${FOLLY_INCLUDE_DIRECTORIES}
)
target_link_libraries( target_link_libraries(
folly_exception_tracer_base folly_exception_tracer_base
PUBLIC folly ${FOLLY_LINK_LIBRARIES} PUBLIC folly
) )
add_library( add_library(
...@@ -20,10 +16,6 @@ if (FOLLY_USE_SYMBOLIZER) ...@@ -20,10 +16,6 @@ if (FOLLY_USE_SYMBOLIZER)
ExceptionTracerLib.cpp ExceptionTracerLib.cpp
) )
apply_folly_compile_options_to_target(folly_exception_tracer) apply_folly_compile_options_to_target(folly_exception_tracer)
target_include_directories(folly_exception_tracer
PUBLIC
${FOLLY_INCLUDE_DIRECTORIES}
)
target_link_libraries( target_link_libraries(
folly_exception_tracer folly_exception_tracer
PUBLIC folly_exception_tracer_base PUBLIC folly_exception_tracer_base
...@@ -34,10 +26,6 @@ if (FOLLY_USE_SYMBOLIZER) ...@@ -34,10 +26,6 @@ if (FOLLY_USE_SYMBOLIZER)
ExceptionCounterLib.cpp ExceptionCounterLib.cpp
) )
apply_folly_compile_options_to_target(folly_exception_counter) apply_folly_compile_options_to_target(folly_exception_counter)
target_include_directories(folly_exception_counter
PUBLIC
${FOLLY_INCLUDE_DIRECTORIES}
)
target_link_libraries( target_link_libraries(
folly_exception_counter folly_exception_counter
PUBLIC folly_exception_tracer PUBLIC folly_exception_tracer
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment