Commit 20f44782 by Mike Kruskal Committed by Copybara-Service

Include Abseil logging in windows dll, and add a test helper dll.

This was tested with https://github.com/protocolbuffers/protobuf/pull/11623 in Protobuf's windows shared library build.

PiperOrigin-RevId: 504294227
Change-Id: I9657197e649a334585bffa2c7bc6340cd2354e84
parent a9bc6fdf
...@@ -146,6 +146,47 @@ set(ABSL_INTERNAL_DLL_FILES ...@@ -146,6 +146,47 @@ set(ABSL_INTERNAL_DLL_FILES
"hash/internal/spy_hash_state.h" "hash/internal/spy_hash_state.h"
"hash/internal/low_level_hash.h" "hash/internal/low_level_hash.h"
"hash/internal/low_level_hash.cc" "hash/internal/low_level_hash.cc"
"log/absl_check.h"
"log/absl_log.h"
"log/check.h"
"log/die_if_null.cc"
"log/die_if_null.h"
"log/globals.cc"
"log/globals.h"
"log/internal/append_truncated.h"
"log/internal/check_impl.h"
"log/internal/check_op.cc"
"log/internal/check_op.h"
"log/internal/conditions.cc"
"log/internal/conditions.h"
"log/internal/config.h"
"log/internal/globals.cc"
"log/internal/globals.h"
"log/internal/log_format.cc"
"log/internal/log_format.h"
"log/internal/log_impl.h"
"log/internal/log_message.cc"
"log/internal/log_message.h"
"log/internal/log_sink_set.cc"
"log/internal/log_sink_set.h"
"log/internal/nullguard.cc"
"log/internal/nullguard.h"
"log/internal/nullstream.h"
"log/internal/proto.h"
"log/internal/proto.cc"
"log/internal/strip.h"
"log/internal/structured.h"
"log/internal/voidify.h"
"log/initialize.cc"
"log/initialize.h"
"log/log.h"
"log/log_entry.cc"
"log/log_entry.h"
"log/log_sink.cc"
"log/log_sink.h"
"log/log_sink_registry.h"
"log/log_streamer.h"
"log/structured.h"
"memory/memory.h" "memory/memory.h"
"meta/type_traits.h" "meta/type_traits.h"
"numeric/bits.h" "numeric/bits.h"
...@@ -172,7 +213,6 @@ set(ABSL_INTERNAL_DLL_FILES ...@@ -172,7 +213,6 @@ set(ABSL_INTERNAL_DLL_FILES
"random/internal/fast_uniform_bits.h" "random/internal/fast_uniform_bits.h"
"random/internal/generate_real.h" "random/internal/generate_real.h"
"random/internal/iostream_state_saver.h" "random/internal/iostream_state_saver.h"
"random/internal/mock_helpers.h"
"random/internal/nonsecure_base.h" "random/internal/nonsecure_base.h"
"random/internal/pcg_engine.h" "random/internal/pcg_engine.h"
"random/internal/platform.h" "random/internal/platform.h"
...@@ -382,6 +422,8 @@ set(ABSL_INTERNAL_DLL_FILES ...@@ -382,6 +422,8 @@ set(ABSL_INTERNAL_DLL_FILES
) )
set(ABSL_INTERNAL_DLL_TARGETS set(ABSL_INTERNAL_DLL_TARGETS
"absl_check"
"absl_log"
"algorithm" "algorithm"
"algorithm_container" "algorithm_container"
"any" "any"
...@@ -396,6 +438,7 @@ set(ABSL_INTERNAL_DLL_TARGETS ...@@ -396,6 +438,7 @@ set(ABSL_INTERNAL_DLL_TARGETS
"bind_front" "bind_front"
"bits" "bits"
"btree" "btree"
"check"
"city" "city"
"civil_time" "civil_time"
"compare" "compare"
...@@ -413,6 +456,7 @@ set(ABSL_INTERNAL_DLL_TARGETS ...@@ -413,6 +456,7 @@ set(ABSL_INTERNAL_DLL_TARGETS
"debugging" "debugging"
"debugging_internal" "debugging_internal"
"demangle_internal" "demangle_internal"
"die_if_null"
"dynamic_annotations" "dynamic_annotations"
"endian" "endian"
"examine_stack" "examine_stack"
...@@ -435,7 +479,31 @@ set(ABSL_INTERNAL_DLL_TARGETS ...@@ -435,7 +479,31 @@ set(ABSL_INTERNAL_DLL_TARGETS
"kernel_timeout_internal" "kernel_timeout_internal"
"layout" "layout"
"leak_check" "leak_check"
"log_internal_check_impl"
"log_internal_check_op"
"log_internal_conditions"
"log_internal_config"
"log_internal_format"
"log_internal_globals"
"log_internal_log_impl"
"log_internal_proto"
"log_internal_message"
"log_internal_log_sink_set"
"log_internal_nullguard"
"log_internal_nullstream"
"log_internal_strip"
"log_internal_voidify"
"log_internal_append_truncated"
"log_globals"
"log_initialize"
"log"
"log_entry"
"log_sink"
"log_sink_registry"
"log_streamer"
"log_internal_structured"
"log_severity" "log_severity"
"log_structured"
"malloc_internal" "malloc_internal"
"memory" "memory"
"meta" "meta"
...@@ -503,6 +571,27 @@ set(ABSL_INTERNAL_DLL_TARGETS ...@@ -503,6 +571,27 @@ set(ABSL_INTERNAL_DLL_TARGETS
"variant" "variant"
) )
set(ABSL_INTERNAL_TEST_DLL_FILES
"hash/hash_testing.h"
"log/scoped_mock_log.cc"
"log/scoped_mock_log.h"
"random/internal/mock_overload_set.h"
"random/mocking_bit_gen.h"
"random/mock_distributions.h"
"random/mock_helpers.h"
"strings/cordz_test_helpers.h"
"strings/cord_test_helpers.h"
)
set(ABSL_INTERNAL_TEST_DLL_TARGETS
"cord_test_helpers"
"cordz_test_helpers"
"hash_testing"
"random_mocking_bit_gen"
"random_internal_mock_overload_set"
"scoped_mock_log"
)
function(_absl_target_compile_features_if_available TARGET TYPE FEATURE) function(_absl_target_compile_features_if_available TARGET TYPE FEATURE)
if(FEATURE IN_LIST CMAKE_CXX_COMPILE_FEATURES) if(FEATURE IN_LIST CMAKE_CXX_COMPILE_FEATURES)
target_compile_features(${TARGET} ${TYPE} ${FEATURE}) target_compile_features(${TARGET} ${TYPE} ${FEATURE})
...@@ -554,6 +643,28 @@ function(absl_internal_dll_contains) ...@@ -554,6 +643,28 @@ function(absl_internal_dll_contains)
endif() endif()
endfunction() endfunction()
function(absl_internal_test_dll_contains)
cmake_parse_arguments(ABSL_INTERNAL_TEST_DLL
""
"OUTPUT;TARGET"
""
${ARGN}
)
STRING(REGEX REPLACE "^absl::" "" _target ${ABSL_INTERNAL_TEST_DLL_TARGET})
list(FIND
ABSL_INTERNA_TEST_DLL_TARGETS
"${_target}"
_index)
if (${_index} GREATER -1)
set(${ABSL_INTERNAL_TEST_DLL_OUTPUT} 1 PARENT_SCOPE)
else()
set(${ABSL_INTERNAL_TEST_DLL_OUTPUT} 0 PARENT_SCOPE)
endif()
endfunction()
function(absl_internal_dll_targets) function(absl_internal_dll_targets)
cmake_parse_arguments(ABSL_INTERNAL_DLL cmake_parse_arguments(ABSL_INTERNAL_DLL
"" ""
...@@ -564,9 +675,12 @@ function(absl_internal_dll_targets) ...@@ -564,9 +675,12 @@ function(absl_internal_dll_targets)
set(_deps "") set(_deps "")
foreach(dep IN LISTS ABSL_INTERNAL_DLL_DEPS) foreach(dep IN LISTS ABSL_INTERNAL_DLL_DEPS)
absl_internal_dll_contains(TARGET ${dep} OUTPUT _contains) absl_internal_dll_contains(TARGET ${dep} OUTPUT _dll_contains)
if (_contains) absl_internal_test_dll_contains(TARGET ${dep} OUTPUT _test_dll_contains)
if (_dll_contains)
list(APPEND _deps abseil_dll) list(APPEND _deps abseil_dll)
elseif (_test_dll_contains)
list(APPEND _deps abseil_test_dll)
else() else()
list(APPEND _deps ${dep}) list(APPEND _deps ${dep})
endif() endif()
...@@ -578,26 +692,50 @@ function(absl_internal_dll_targets) ...@@ -578,26 +692,50 @@ function(absl_internal_dll_targets)
endfunction() endfunction()
function(absl_make_dll) function(absl_make_dll)
cmake_parse_arguments(ABSL_INTERNAL_MAKE_DLL
""
"TEST"
""
${ARGN}
)
if (ABSL_INTERNAL_MAKE_DLL_TEST)
set(_dll "abseil_test_dll")
set(_dll_files ${ABSL_INTERNAL_TEST_DLL_FILES})
set(_dll_libs "abseil_dll" "GTest::gtest" "GTest::gmock")
set(_dll_compile_definiations "GTEST_LINKED_AS_SHARED_LIBRARY=1")
set(_dll_includes ${GMOCK_INCLUDE_DIRS} ${GTEST_INCLUDE_DIRS})
else()
set(_dll "abseil_dll")
set(_dll_files ${ABSL_INTERNAL_DLL_FILES})
set(_dll_libs "")
set(_dll_compile_definiations "")
set(_dll_includes "")
endif()
add_library( add_library(
abseil_dll ${_dll}
SHARED SHARED
"${ABSL_INTERNAL_DLL_FILES}" ${_dll_files}
) )
target_link_libraries( target_link_libraries(
abseil_dll ${_dll}
PRIVATE PRIVATE
${_dll_libs}
${ABSL_DEFAULT_LINKOPTS} ${ABSL_DEFAULT_LINKOPTS}
) )
set_property(TARGET abseil_dll PROPERTY LINKER_LANGUAGE "CXX") set_property(TARGET ${_dll} PROPERTY LINKER_LANGUAGE "CXX")
target_include_directories( target_include_directories(
abseil_dll ${_dll}
PUBLIC PUBLIC
"$<BUILD_INTERFACE:${ABSL_COMMON_INCLUDE_DIRS}>" "$<BUILD_INTERFACE:${ABSL_COMMON_INCLUDE_DIRS}>"
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
PRIVATE
${_dll_includes}
) )
target_compile_options( target_compile_options(
abseil_dll ${_dll}
PRIVATE PRIVATE
${ABSL_DEFAULT_COPTS} ${ABSL_DEFAULT_COPTS}
) )
...@@ -614,23 +752,25 @@ function(absl_make_dll) ...@@ -614,23 +752,25 @@ function(absl_make_dll)
endforeach() endforeach()
string(REPLACE ";" " " PC_LINKOPTS "${ABSL_CC_LIB_LINKOPTS}") string(REPLACE ";" " " PC_LINKOPTS "${ABSL_CC_LIB_LINKOPTS}")
FILE(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/lib/pkgconfig/abseil_dll.pc" CONTENT "\ FILE(GENERATE OUTPUT "${CMAKE_BINARY_DIR}/lib/pkgconfig/${_dll}.pc" CONTENT "\
prefix=${CMAKE_INSTALL_PREFIX}\n\ prefix=${CMAKE_INSTALL_PREFIX}\n\
exec_prefix=\${prefix}\n\ exec_prefix=\${prefix}\n\
libdir=${CMAKE_INSTALL_FULL_LIBDIR}\n\ libdir=${CMAKE_INSTALL_FULL_LIBDIR}\n\
includedir=${CMAKE_INSTALL_FULL_INCLUDEDIR}\n\ includedir=${CMAKE_INSTALL_FULL_INCLUDEDIR}\n\
\n\ \n\
Name: abseil_dll\n\ Name: ${_dll}\n\
Description: Abseil DLL library\n\ Description: Abseil DLL library\n\
URL: https://abseil.io/\n\ URL: https://abseil.io/\n\
Version: ${absl_VERSION}\n\ Version: ${absl_VERSION}\n\
Libs: -L\${libdir} ${PC_LINKOPTS} $<$<NOT:$<BOOL:${ABSL_CC_LIB_IS_INTERFACE}>>:-labseil_dll>\n\ Libs: -L\${libdir} ${PC_LINKOPTS} $<$<NOT:$<BOOL:${ABSL_CC_LIB_IS_INTERFACE}>>:-labseil_dll>\n\
Cflags: -I\${includedir}${PC_CFLAGS}\n") Cflags: -I\${includedir}${PC_CFLAGS}\n")
INSTALL(FILES "${CMAKE_BINARY_DIR}/lib/pkgconfig/abseil_dll.pc" INSTALL(FILES "${CMAKE_BINARY_DIR}/lib/pkgconfig/${_dll}.pc"
DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig") DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
target_compile_definitions( target_compile_definitions(
abseil_dll ${_dll}
PUBLIC
GTEST_LINKED_AS_SHARED_LIBRARY=1
PRIVATE PRIVATE
ABSL_BUILD_DLL ABSL_BUILD_DLL
NOMINMAX NOMINMAX
...@@ -657,7 +797,7 @@ Cflags: -I\${includedir}${PC_CFLAGS}\n") ...@@ -657,7 +797,7 @@ Cflags: -I\${includedir}${PC_CFLAGS}\n")
set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD_REQUIRED ON) set_property(TARGET ${_NAME} PROPERTY CXX_STANDARD_REQUIRED ON)
endif() endif()
install(TARGETS abseil_dll EXPORT ${PROJECT_NAME}Targets install(TARGETS ${_dll} EXPORT ${PROJECT_NAME}Targets
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
......
...@@ -132,10 +132,12 @@ function(absl_cc_library) ...@@ -132,10 +132,12 @@ function(absl_cc_library)
if (${ABSL_BUILD_DLL}) if (${ABSL_BUILD_DLL})
if(ABSL_ENABLE_INSTALL) if(ABSL_ENABLE_INSTALL)
absl_internal_dll_contains(TARGET ${_NAME} OUTPUT _in_dll) absl_internal_dll_contains(TARGET ${_NAME} OUTPUT _in_dll)
absl_internal_test_dll_contains(TARGET ${_NAME} OUTPUT _in_test_dll)
else() else()
absl_internal_dll_contains(TARGET ${ABSL_CC_LIB_NAME} OUTPUT _in_dll) absl_internal_dll_contains(TARGET ${ABSL_CC_LIB_NAME} OUTPUT _in_dll)
absl_internal_test_dll_contains(TARGET ${ABSL_CC_LIB_NAME} OUTPUT _in_test_dll)
endif() endif()
if (${_in_dll}) if (${_in_dll} OR ${_in_test_dll})
# This target should be replaced by the DLL # This target should be replaced by the DLL
set(_build_type "dll") set(_build_type "dll")
set(ABSL_CC_LIB_IS_INTERFACE 1) set(ABSL_CC_LIB_IS_INTERFACE 1)
......
...@@ -38,4 +38,7 @@ add_subdirectory(utility) ...@@ -38,4 +38,7 @@ add_subdirectory(utility)
if (${ABSL_BUILD_DLL}) if (${ABSL_BUILD_DLL})
absl_make_dll() absl_make_dll()
if (${ABSL_BUILD_TEST_HELPERS})
absl_make_dll(TEST ON)
endif()
endif() endif()
...@@ -23,11 +23,11 @@ namespace absl { ...@@ -23,11 +23,11 @@ namespace absl {
ABSL_NAMESPACE_BEGIN ABSL_NAMESPACE_BEGIN
namespace log_internal { namespace log_internal {
ABSL_CONST_INIT const std::array<char, 7> kCharNull{ ABSL_DLL ABSL_CONST_INIT const std::array<char, 7> kCharNull{
{'(', 'n', 'u', 'l', 'l', ')', '\0'}}; {'(', 'n', 'u', 'l', 'l', ')', '\0'}};
ABSL_CONST_INIT const std::array<signed char, 7> kSignedCharNull{ ABSL_DLL ABSL_CONST_INIT const std::array<signed char, 7> kSignedCharNull{
{'(', 'n', 'u', 'l', 'l', ')', '\0'}}; {'(', 'n', 'u', 'l', 'l', ')', '\0'}};
ABSL_CONST_INIT const std::array<unsigned char, 7> kUnsignedCharNull{ ABSL_DLL ABSL_CONST_INIT const std::array<unsigned char, 7> kUnsignedCharNull{
{'(', 'n', 'u', 'l', 'l', ')', '\0'}}; {'(', 'n', 'u', 'l', 'l', ')', '\0'}};
} // namespace log_internal } // namespace log_internal
......
...@@ -34,9 +34,11 @@ namespace absl { ...@@ -34,9 +34,11 @@ namespace absl {
ABSL_NAMESPACE_BEGIN ABSL_NAMESPACE_BEGIN
namespace log_internal { namespace log_internal {
ABSL_CONST_INIT extern const std::array<char, 7> kCharNull; ABSL_DLL ABSL_CONST_INIT extern const std::array<char, 7> kCharNull;
ABSL_CONST_INIT extern const std::array<signed char, 7> kSignedCharNull; ABSL_DLL ABSL_CONST_INIT extern const std::array<signed char, 7>
ABSL_CONST_INIT extern const std::array<unsigned char, 7> kUnsignedCharNull; kSignedCharNull;
ABSL_DLL ABSL_CONST_INIT extern const std::array<unsigned char, 7>
kUnsignedCharNull;
template <typename T> template <typename T>
struct NullGuard final { struct NullGuard final {
......
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