mirror of
https://github.com/protobuf-c/protobuf-c.git
synced 2024-12-26 21:04:23 +08:00
Fixing static lib generation on MSVC
Signed-off-by: MiguelBarro <miguelbarro@eprosima.com>
This commit is contained in:
parent
fa86fddbd0
commit
01bd9bed77
@ -5,8 +5,118 @@ SET(PACKAGE_URL https://github.com/protobuf-c/protobuf-c)
|
|||||||
SET(PACKAGE_DESCRIPTION "Protocol Buffers implementation in C")
|
SET(PACKAGE_DESCRIPTION "Protocol Buffers implementation in C")
|
||||||
|
|
||||||
CMAKE_MINIMUM_REQUIRED(VERSION 3.10 FATAL_ERROR)
|
CMAKE_MINIMUM_REQUIRED(VERSION 3.10 FATAL_ERROR)
|
||||||
|
cmake_policy(SET CMP0074 NEW)
|
||||||
|
cmake_policy(SET CMP0091 NEW)
|
||||||
|
|
||||||
PROJECT(protobuf-c)
|
PROJECT(protobuf-c C CXX)
|
||||||
|
|
||||||
|
if (MSVC AND NOT BUILD_SHARED_LIBS)
|
||||||
|
SET(Protobuf_USE_STATIC_LIBS ON)
|
||||||
|
endif (MSVC AND NOT BUILD_SHARED_LIBS)
|
||||||
|
|
||||||
|
FIND_PACKAGE(Protobuf REQUIRED)
|
||||||
|
INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIR})
|
||||||
|
|
||||||
|
# for static protobuf libraries include the dependencies
|
||||||
|
if (Protobuf_USE_STATIC_LIBS)
|
||||||
|
find_package(absl REQUIRED)
|
||||||
|
|
||||||
|
set(protobuf_ABSL_USED_TARGETS
|
||||||
|
absl::log_severity
|
||||||
|
absl::raw_logging_internal
|
||||||
|
absl::spinlock_wait
|
||||||
|
absl::malloc_internal
|
||||||
|
absl::base
|
||||||
|
absl::throw_delegate
|
||||||
|
absl::scoped_set_env
|
||||||
|
absl::strerror
|
||||||
|
absl::hashtablez_sampler
|
||||||
|
absl::raw_hash_set
|
||||||
|
absl::crc_cpu_detect
|
||||||
|
absl::crc_internal
|
||||||
|
absl::crc32c
|
||||||
|
absl::crc_cord_state
|
||||||
|
absl::stacktrace
|
||||||
|
absl::symbolize
|
||||||
|
absl::examine_stack
|
||||||
|
absl::failure_signal_handler
|
||||||
|
absl::debugging_internal
|
||||||
|
absl::demangle_internal
|
||||||
|
absl::leak_check
|
||||||
|
absl::flags_program_name
|
||||||
|
absl::flags_config
|
||||||
|
absl::flags_marshalling
|
||||||
|
absl::flags_commandlineflag_internal
|
||||||
|
absl::flags_commandlineflag
|
||||||
|
absl::flags_private_handle_accessor
|
||||||
|
absl::flags_reflection
|
||||||
|
absl::flags_internal
|
||||||
|
absl::flags
|
||||||
|
absl::flags_usage_internal
|
||||||
|
absl::flags_usage
|
||||||
|
absl::flags_parse
|
||||||
|
absl::hash
|
||||||
|
absl::city
|
||||||
|
absl::low_level_hash
|
||||||
|
absl::log_internal_check_op
|
||||||
|
absl::log_internal_conditions
|
||||||
|
absl::log_internal_format
|
||||||
|
absl::log_internal_globals
|
||||||
|
absl::log_internal_proto
|
||||||
|
absl::log_internal_message
|
||||||
|
absl::log_internal_log_sink_set
|
||||||
|
absl::log_internal_nullguard
|
||||||
|
absl::die_if_null
|
||||||
|
absl::log_flags
|
||||||
|
absl::log_globals
|
||||||
|
absl::log_initialize
|
||||||
|
absl::log_entry
|
||||||
|
absl::log_sink
|
||||||
|
absl::log_internal_fnmatch
|
||||||
|
absl::int128
|
||||||
|
absl::exponential_biased
|
||||||
|
absl::periodic_sampler
|
||||||
|
absl::random_distributions
|
||||||
|
absl::random_seed_gen_exception
|
||||||
|
absl::random_seed_sequences
|
||||||
|
absl::random_internal_seed_material
|
||||||
|
absl::random_internal_pool_urbg
|
||||||
|
absl::random_internal_platform
|
||||||
|
absl::random_internal_randen
|
||||||
|
absl::random_internal_randen_slow
|
||||||
|
absl::random_internal_randen_hwaes
|
||||||
|
absl::random_internal_randen_hwaes_impl
|
||||||
|
absl::random_internal_distribution_test_util
|
||||||
|
absl::status
|
||||||
|
absl::statusor
|
||||||
|
absl::string_view
|
||||||
|
absl::strings
|
||||||
|
absl::strings_internal
|
||||||
|
absl::str_format_internal
|
||||||
|
absl::cord_internal
|
||||||
|
absl::cordz_functions
|
||||||
|
absl::cordz_handle
|
||||||
|
absl::cordz_info
|
||||||
|
absl::cordz_sample_token
|
||||||
|
absl::cord
|
||||||
|
absl::graphcycles_internal
|
||||||
|
absl::kernel_timeout_internal
|
||||||
|
absl::synchronization
|
||||||
|
absl::time
|
||||||
|
absl::civil_time
|
||||||
|
absl::time_zone
|
||||||
|
absl::bad_any_cast_impl
|
||||||
|
absl::bad_optional_access
|
||||||
|
absl::bad_variant_access
|
||||||
|
)
|
||||||
|
|
||||||
|
find_package(utf8_range REQUIRED)
|
||||||
|
|
||||||
|
set(protobuf_UTF8_USED_TARGETS
|
||||||
|
utf8_range::utf8_validity
|
||||||
|
utf8_range::utf8_range
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
#options
|
#options
|
||||||
option(BUILD_PROTOC "Build protoc-gen-c" ON)
|
option(BUILD_PROTOC "Build protoc-gen-c" ON)
|
||||||
@ -37,6 +147,12 @@ if(MSVC)
|
|||||||
# using Visual Studio C++
|
# using Visual Studio C++
|
||||||
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4267 /wd4244")
|
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /wd4267 /wd4244")
|
||||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4267 /wd4244")
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4267 /wd4244")
|
||||||
|
|
||||||
|
# Allow matching protobuf runtime dependency
|
||||||
|
if(NOT BUILD_SHARED_LIBS)
|
||||||
|
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
||||||
|
endif(NOT BUILD_SHARED_LIBS)
|
||||||
|
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
get_filename_component(MAIN_DIR ${CMAKE_CURRENT_SOURCE_DIR} PATH)
|
get_filename_component(MAIN_DIR ${CMAKE_CURRENT_SOURCE_DIR} PATH)
|
||||||
@ -58,6 +174,8 @@ target_include_directories(protobuf-c
|
|||||||
IF (MSVC AND BUILD_SHARED_LIBS)
|
IF (MSVC AND BUILD_SHARED_LIBS)
|
||||||
TARGET_COMPILE_DEFINITIONS(protobuf-c PRIVATE -DPROTOBUF_C_EXPORT)
|
TARGET_COMPILE_DEFINITIONS(protobuf-c PRIVATE -DPROTOBUF_C_EXPORT)
|
||||||
ENDIF (MSVC AND BUILD_SHARED_LIBS)
|
ENDIF (MSVC AND BUILD_SHARED_LIBS)
|
||||||
|
target_link_libraries(protobuf-c ${protobuf_ABSL_USED_TARGETS} ${protobuf_UTF8_USED_TARGETS})
|
||||||
|
target_compile_features(protobuf-c PRIVATE cxx_std_17)
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(${MAIN_DIR})
|
INCLUDE_DIRECTORIES(${MAIN_DIR})
|
||||||
INCLUDE_DIRECTORIES(${MAIN_DIR}/protobuf-c)
|
INCLUDE_DIRECTORIES(${MAIN_DIR}/protobuf-c)
|
||||||
@ -65,13 +183,6 @@ INCLUDE_DIRECTORIES(${MAIN_DIR}/protobuf-c)
|
|||||||
IF(BUILD_PROTOC)
|
IF(BUILD_PROTOC)
|
||||||
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) # for generated files
|
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) # for generated files
|
||||||
|
|
||||||
if (MSVC AND NOT BUILD_SHARED_LIBS)
|
|
||||||
SET(Protobuf_USE_STATIC_LIBS ON)
|
|
||||||
endif (MSVC AND NOT BUILD_SHARED_LIBS)
|
|
||||||
|
|
||||||
FIND_PACKAGE(Protobuf REQUIRED)
|
|
||||||
INCLUDE_DIRECTORIES(${PROTOBUF_INCLUDE_DIR})
|
|
||||||
|
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
if (MSVC AND NOT BUILD_SHARED_LIBS)
|
if (MSVC AND NOT BUILD_SHARED_LIBS)
|
||||||
@ -105,7 +216,14 @@ target_include_directories(protoc-gen-c
|
|||||||
$<BUILD_INTERFACE:${MAIN_DIR}>
|
$<BUILD_INTERFACE:${MAIN_DIR}>
|
||||||
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||||
)
|
)
|
||||||
target_link_libraries(protoc-gen-c protobuf::libprotoc protobuf::libprotobuf)
|
target_link_libraries(protoc-gen-c
|
||||||
|
protobuf::libprotoc
|
||||||
|
protobuf::libprotobuf
|
||||||
|
${protobuf_ABSL_USED_TARGETS}
|
||||||
|
${protobuf_UTF8_USED_TARGETS}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_compile_features(protoc-gen-c PRIVATE cxx_std_17)
|
||||||
|
|
||||||
IF (MSVC AND BUILD_SHARED_LIBS)
|
IF (MSVC AND BUILD_SHARED_LIBS)
|
||||||
TARGET_COMPILE_DEFINITIONS(protoc-gen-c PRIVATE -DPROTOBUF_USE_DLLS)
|
TARGET_COMPILE_DEFINITIONS(protoc-gen-c PRIVATE -DPROTOBUF_USE_DLLS)
|
||||||
@ -138,7 +256,11 @@ ADD_CUSTOM_COMMAND(OUTPUT t/test-full.pb.cc t/test-full.pb.h
|
|||||||
GENERATE_TEST_SOURCES(${TEST_DIR}/test-full.proto t/test-full.pb-c.c t/test-full.pb-c.h)
|
GENERATE_TEST_SOURCES(${TEST_DIR}/test-full.proto t/test-full.pb-c.c t/test-full.pb-c.h)
|
||||||
|
|
||||||
ADD_EXECUTABLE(cxx-generate-packed-data ${TEST_DIR}/generated-code2/cxx-generate-packed-data.cc t/test-full.pb.h t/test-full.pb.cc protobuf-c/protobuf-c.pb.cc protobuf-c/protobuf-c.pb.h)
|
ADD_EXECUTABLE(cxx-generate-packed-data ${TEST_DIR}/generated-code2/cxx-generate-packed-data.cc t/test-full.pb.h t/test-full.pb.cc protobuf-c/protobuf-c.pb.cc protobuf-c/protobuf-c.pb.h)
|
||||||
TARGET_LINK_LIBRARIES(cxx-generate-packed-data ${PROTOBUF_LIBRARY})
|
TARGET_LINK_LIBRARIES(cxx-generate-packed-data
|
||||||
|
${PROTOBUF_LIBRARY}
|
||||||
|
${protobuf_ABSL_USED_TARGETS}
|
||||||
|
${protobuf_UTF8_USED_TARGETS}
|
||||||
|
)
|
||||||
IF (MSVC AND BUILD_SHARED_LIBS)
|
IF (MSVC AND BUILD_SHARED_LIBS)
|
||||||
TARGET_COMPILE_DEFINITIONS(cxx-generate-packed-data PRIVATE -DPROTOBUF_USE_DLLS)
|
TARGET_COMPILE_DEFINITIONS(cxx-generate-packed-data PRIVATE -DPROTOBUF_USE_DLLS)
|
||||||
ENDIF (MSVC AND BUILD_SHARED_LIBS)
|
ENDIF (MSVC AND BUILD_SHARED_LIBS)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user