diff --git a/cmake/make_cmakelists.py b/cmake/make_cmakelists.py index d64c14f6..ad3597c3 100755 --- a/cmake/make_cmakelists.py +++ b/cmake/make_cmakelists.py @@ -316,10 +316,136 @@ class Converter(object): set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id") endif() + if (MSVC) + add_compile_options(/wd4146 /wd4703 -D_CRT_SECURE_NO_WARNINGS) + endif() + enable_testing() + set(CMAKE_CXX_STANDARD 11) + + if (VCPKG_UPB_BUILD_CODEGEN) + find_package(absl CONFIG REQUIRED) + find_package(protobuf CONFIG REQUIRED) + + if (ABSL_USE_CXX17) + message(STATUS "Found absl uses CXX17, enable CXX17 feature.") + set(CMAKE_CXX_STANDARD 17) + endif() + endif() + + add_library(descriptor_upb_proto) + + add_library(utf8_range + ../third_party/utf8_range/naive.c + ../third_party/utf8_range/range2-neon.c + ../third_party/utf8_range/range2-sse.c + ../third_party/utf8_range/utf8_range.h + ) + %(toplevel)s + set(UPB_DESCRIPTOR_PROTO "${VCPKG_UPB_HOST_INCLUDE_DIR}/google/protobuf/descriptor.proto") + if (VCPKG_UPB_BUILD_CODEGEN) + set(UPB_CODEGEN_TARGETS protoc-gen-upb protoc-gen-upbdefs) + + add_executable(protoc-gen-upbdefs + ../upbc/common.h + ../upbc/common.cc + ../upbc/protoc-gen-upbdefs.cc + ) + target_link_libraries(protoc-gen-upbdefs PRIVATE + absl::flat_hash_map + absl::strings + protobuf::libprotobuf + protobuf::libprotoc + ) + + add_executable(protoc-gen-upb + ../upbc/common.h + ../upbc/common.cc + ../upbc/protoc-gen-upb.cc + ) + target_link_libraries(protoc-gen-upb PRIVATE + mini_table + port + upb + absl::flat_hash_map + absl::flat_hash_set + absl::strings + protobuf::libprotobuf + protobuf::libprotoc + ) + + set(PROTOC_PROGRAM "\$") + set(PROTOC_GEN_UPB_PROGRAM "\$") + set(PROTOC_GEN_UPBDEFS_PROGRAM "\$") + else() + find_program(PROTOC_PROGRAM protoc) + find_program(PROTOC_GEN_UPB_PROGRAM protoc-gen-upb) + find_program(PROTOC_GEN_UPBDEFS_PROGRAM protoc-gen-upbdefs) + endif() + + set(UPB_DESCRIPTOR_SOURCES + "${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/descriptor.upb.h" + "${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/descriptor.upb.c" + "${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/descriptor.upbdefs.h" + "${CMAKE_CURRENT_BINARY_DIR}/google/protobuf/descriptor.upbdefs.c" + ) + + add_custom_command( + OUTPUT ${UPB_DESCRIPTOR_SOURCES} + DEPENDS "${UPB_DESCRIPTOR_PROTO}" + COMMAND + "${PROTOC_PROGRAM}" + "-I${VCPKG_UPB_HOST_INCLUDE_DIR}" + "--plugin=protoc-gen-upb=${PROTOC_GEN_UPB_PROGRAM}" + "--plugin=protoc-gen-upbdefs=${PROTOC_GEN_UPBDEFS_PROGRAM}" + "--upb_out=${CMAKE_CURRENT_BINARY_DIR}" + "--upbdefs_out=${CMAKE_CURRENT_BINARY_DIR}" + "${UPB_DESCRIPTOR_PROTO}" + ) + + target_sources(descriptor_upb_proto PRIVATE ${UPB_DESCRIPTOR_SOURCES}) + + set_target_properties(reflection PROPERTIES OUTPUT_NAME upb_reflection) + set_target_properties(fastdecode PROPERTIES OUTPUT_NAME upb_fastdecode) + set_target_properties(textformat PROPERTIES OUTPUT_NAME upb_textformat) + set_target_properties(json PROPERTIES OUTPUT_NAME upb_json) + set_target_properties(utf8_range PROPERTIES OUTPUT_NAME upb_utf8_range) + set_target_properties(mini_table PROPERTIES OUTPUT_NAME upb_mini_table) + set_target_properties(extension_registry PROPERTIES OUTPUT_NAME upb_extension_registry) + set_target_properties(collections PROPERTIES OUTPUT_NAME upb_collections) + + install( + DIRECTORY ../upb + DESTINATION include + FILES_MATCHING + PATTERN "*.h" + PATTERN "*.hpp" + PATTERN "*.inc" + PATTERN "*.int.h" + ) + target_include_directories(upb PUBLIC $) + install(TARGETS + upb + utf8_range + fastdecode + json + port + table + descriptor_upb_proto + reflection + textformat + mini_table_internal + mini_table + extension_registry + collections + ${UPB_CODEGEN_TARGETS} + EXPORT upb-config + ) + install(EXPORT upb-config NAMESPACE upb:: DESTINATION share/upb) + """) data = {}