parent
173554146f
commit
fa4d70fad6
9 changed files with 3415 additions and 0 deletions
@ -0,0 +1,106 @@ |
||||
# Copyright (c) 2009-2021, Google LLC |
||||
# All rights reserved. |
||||
# |
||||
# Redistribution and use in source and binary forms, with or without |
||||
# modification, are permitted provided that the following conditions are met: |
||||
# * Redistributions of source code must retain the above copyright |
||||
# notice, this list of conditions and the following disclaimer. |
||||
# * Redistributions in binary form must reproduce the above copyright |
||||
# notice, this list of conditions and the following disclaimer in the |
||||
# documentation and/or other materials provided with the distribution. |
||||
# * Neither the name of Google LLC nor the |
||||
# names of its contributors may be used to endorse or promote products |
||||
# derived from this software without specific prior written permission. |
||||
# |
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
# DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY |
||||
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
||||
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
load( |
||||
":build_defs.bzl", |
||||
"generated_file_staleness_test", |
||||
) |
||||
load( |
||||
"//bazel:build_defs.bzl", |
||||
"make_shell_script", |
||||
) |
||||
|
||||
licenses(["notice"]) |
||||
|
||||
exports_files(["staleness_test.py"]) |
||||
|
||||
py_library( |
||||
name = "staleness_test_lib", |
||||
testonly = 1, |
||||
srcs = ["staleness_test_lib.py"], |
||||
) |
||||
|
||||
py_binary( |
||||
name = "make_cmakelists", |
||||
srcs = ["make_cmakelists.py"], |
||||
) |
||||
|
||||
genrule( |
||||
name = "gen_cmakelists", |
||||
srcs = [ |
||||
"//:BUILD", |
||||
"//:WORKSPACE", |
||||
"//:cmake_files", |
||||
":cmake_files", |
||||
], |
||||
outs = ["generated-in/CMakeLists.txt"], |
||||
cmd = "$(location :make_cmakelists) $@", |
||||
tools = [":make_cmakelists"], |
||||
) |
||||
|
||||
genrule( |
||||
name = "copy_protos", |
||||
srcs = ["//:descriptor_upb_proto"], |
||||
outs = [ |
||||
"generated-in/google/protobuf/descriptor.upb.c", |
||||
"generated-in/google/protobuf/descriptor.upb.h", |
||||
], |
||||
cmd = "cp $(SRCS) $(@D)/generated-in/google/protobuf", |
||||
) |
||||
|
||||
generated_file_staleness_test( |
||||
name = "test_generated_files", |
||||
outs = [ |
||||
"CMakeLists.txt", |
||||
"google/protobuf/descriptor.upb.c", |
||||
"google/protobuf/descriptor.upb.h", |
||||
], |
||||
generated_pattern = "generated-in/%s", |
||||
) |
||||
|
||||
# Test the CMake build ######################################################### |
||||
|
||||
filegroup( |
||||
name = "cmake_files", |
||||
srcs = glob([ |
||||
"**/*", |
||||
]), |
||||
) |
||||
|
||||
make_shell_script( |
||||
name = "gen_run_cmake_build", |
||||
out = "run_cmake_build.sh", |
||||
contents = "find . && mkdir build && cd build && cmake ../cmake && make -j8 && make test", |
||||
) |
||||
|
||||
sh_test( |
||||
name = "cmake_build", |
||||
srcs = ["run_cmake_build.sh"], |
||||
data = [ |
||||
":cmake_files", |
||||
"//:cmake_files", |
||||
], |
||||
deps = ["@bazel_tools//tools/bash/runfiles"], |
||||
) |
@ -0,0 +1,129 @@ |
||||
# This file was generated from BUILD using tools/make_cmakelists.py. |
||||
|
||||
cmake_minimum_required(VERSION 3.1) |
||||
|
||||
if(${CMAKE_VERSION} VERSION_LESS 3.12) |
||||
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) |
||||
else() |
||||
cmake_policy(VERSION 3.12) |
||||
endif() |
||||
|
||||
cmake_minimum_required (VERSION 3.0) |
||||
cmake_policy(SET CMP0048 NEW) |
||||
|
||||
project(upb) |
||||
set(CMAKE_C_STANDARD 99) |
||||
|
||||
|
||||
# Prevent CMake from setting -rdynamic on Linux (!!). |
||||
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") |
||||
SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") |
||||
|
||||
# Set default build type. |
||||
if(NOT CMAKE_BUILD_TYPE) |
||||
message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.") |
||||
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING |
||||
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." |
||||
FORCE) |
||||
endif() |
||||
|
||||
# When using Ninja, compiler output won't be colorized without this. |
||||
include(CheckCXXCompilerFlag) |
||||
CHECK_CXX_COMPILER_FLAG(-fdiagnostics-color=always SUPPORTS_COLOR_ALWAYS) |
||||
if(SUPPORTS_COLOR_ALWAYS) |
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always") |
||||
endif() |
||||
|
||||
# Implement ASAN/UBSAN options |
||||
if(UPB_ENABLE_ASAN) |
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") |
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") |
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") |
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address") |
||||
endif() |
||||
|
||||
if(UPB_ENABLE_UBSAN) |
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined") |
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") |
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") |
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address") |
||||
endif() |
||||
|
||||
include_directories(..) |
||||
include_directories(../cmake) |
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR}) |
||||
|
||||
if(APPLE) |
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -undefined dynamic_lookup -flat_namespace") |
||||
elseif(UNIX) |
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id") |
||||
endif() |
||||
|
||||
enable_testing() |
||||
|
||||
add_library(port INTERFACE) |
||||
add_library(upb |
||||
../upb/decode.c |
||||
../upb/decode_internal.h |
||||
../upb/encode.c |
||||
../upb/msg.c |
||||
../upb/msg_internal.h |
||||
../upb/table.c |
||||
../upb/table_internal.h |
||||
../upb/upb.c |
||||
../upb/upb_internal.h |
||||
../upb/decode.h |
||||
../upb/encode.h |
||||
../upb/msg.h |
||||
../upb/upb.h |
||||
../upb/upb.hpp) |
||||
target_link_libraries(upb |
||||
fastdecode |
||||
port) |
||||
add_library(fastdecode |
||||
../upb/decode_internal.h |
||||
../upb/decode_fast.c |
||||
../upb/decode_fast.h |
||||
../upb/msg.h |
||||
../upb/msg_internal.h |
||||
../upb/upb_internal.h) |
||||
target_link_libraries(fastdecode |
||||
port |
||||
table) |
||||
add_library(generated_code_support__only_for_generated_code_do_not_use__i_give_permission_to_break_me INTERFACE) |
||||
target_link_libraries(generated_code_support__only_for_generated_code_do_not_use__i_give_permission_to_break_me INTERFACE |
||||
table |
||||
upb) |
||||
add_library(reflection |
||||
../upb/def.c |
||||
../upb/msg.h |
||||
../upb/reflection.c |
||||
../upb/def.h |
||||
../upb/def.hpp |
||||
../upb/reflection.h |
||||
../upb/reflection.hpp) |
||||
target_link_libraries(reflection |
||||
descriptor_upb_proto |
||||
port |
||||
table |
||||
upb) |
||||
add_library(textformat |
||||
../upb/text_encode.c |
||||
../upb/text_encode.h) |
||||
target_link_libraries(textformat |
||||
port |
||||
reflection) |
||||
add_library(json |
||||
../upb/json_decode.c |
||||
../upb/json_encode.c |
||||
../upb/json_decode.h |
||||
../upb/json_encode.h) |
||||
target_link_libraries(json |
||||
port |
||||
reflection |
||||
upb) |
||||
add_library(table INTERFACE) |
||||
target_link_libraries(table INTERFACE |
||||
port) |
||||
|
||||
|
@ -0,0 +1,23 @@ |
||||
|
||||
# upb CMake build (EXPERIMENTAL) |
||||
|
||||
upb's CMake support is experimental. The core library builds successfully |
||||
under CMake, and this is verified by the Bazel tests in this directory. |
||||
However there is no support for building the upb compiler or for generating |
||||
.upb.c/upb.h files. This means upb's CMake support is incomplete at best, |
||||
unless your application is intended to be purely reflective. |
||||
|
||||
If you find this CMake setup useful in its current state, please consider |
||||
filing an issue so we know. If you have suggestions for how it could be |
||||
more useful (and particularly if you can contribute some code for it) |
||||
please feel free to file an issue for that too. Do keep in mind that upb |
||||
does not currently provide any ABI stability, so we want to avoid providing |
||||
a shared library. |
||||
|
||||
The CMakeLists.txt is generated from the Bazel BUILD files using the Python |
||||
scripts in this directory. We want to avoid having two separate sources of |
||||
truth that both need to be updated when a file is added or removed. |
||||
|
||||
This directory also contains some generated files that would be created |
||||
on the fly during a Bazel build. These are automaticaly kept in sync by |
||||
the Bazel test `//cmake:test_generated_files`. |
@ -0,0 +1,68 @@ |
||||
# Copyright (c) 2009-2021, Google LLC |
||||
# All rights reserved. |
||||
# |
||||
# Redistribution and use in source and binary forms, with or without |
||||
# modification, are permitted provided that the following conditions are met: |
||||
# * Redistributions of source code must retain the above copyright |
||||
# notice, this list of conditions and the following disclaimer. |
||||
# * Redistributions in binary form must reproduce the above copyright |
||||
# notice, this list of conditions and the following disclaimer in the |
||||
# documentation and/or other materials provided with the distribution. |
||||
# * Neither the name of Google LLC nor the |
||||
# names of its contributors may be used to endorse or promote products |
||||
# derived from this software without specific prior written permission. |
||||
# |
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
# DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY |
||||
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
||||
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
def generated_file_staleness_test(name, outs, generated_pattern): |
||||
"""Tests that checked-in file(s) match the contents of generated file(s). |
||||
|
||||
The resulting test will verify that all output files exist and have the |
||||
correct contents. If the test fails, it can be invoked with --fix to |
||||
bring the checked-in files up to date. |
||||
|
||||
Args: |
||||
name: Name of the rule. |
||||
outs: the checked-in files that are copied from generated files. |
||||
generated_pattern: the pattern for transforming each "out" file into a |
||||
generated file. For example, if generated_pattern="generated/%s" then |
||||
a file foo.txt will look for generated file generated/foo.txt. |
||||
""" |
||||
|
||||
script_name = name + ".py" |
||||
script_src = ":staleness_test.py" |
||||
|
||||
# Filter out non-existing rules so Blaze doesn't error out before we even |
||||
# run the test. |
||||
existing_outs = native.glob(include = outs) |
||||
|
||||
# The file list contains a few extra bits of information at the end. |
||||
# These get unpacked by the Config class in staleness_test_lib.py. |
||||
file_list = outs + [generated_pattern, native.package_name() or ".", name] |
||||
|
||||
native.genrule( |
||||
name = name + "_makescript", |
||||
outs = [script_name], |
||||
srcs = [script_src], |
||||
testonly = 1, |
||||
cmd = "cat $(location " + script_src + ") > $@; " + |
||||
"sed -i.bak -e 's|INSERT_FILE_LIST_HERE|" + "\\\n ".join(file_list) + "|' $@", |
||||
) |
||||
|
||||
native.py_test( |
||||
name = name, |
||||
srcs = [script_name], |
||||
data = existing_outs + [generated_pattern % file for file in outs], |
||||
deps = [ |
||||
":staleness_test_lib", |
||||
], |
||||
) |
@ -0,0 +1,486 @@ |
||||
/* This file was generated by upbc (the upb compiler) from the input
|
||||
* file: |
||||
* |
||||
* google/protobuf/descriptor.proto |
||||
* |
||||
* Do not edit -- your changes will be discarded when the file is |
||||
* regenerated. */ |
||||
|
||||
#include <stddef.h> |
||||
#include "upb/msg_internal.h" |
||||
#include "google/protobuf/descriptor.upb.h" |
||||
|
||||
#include "upb/port_def.inc" |
||||
|
||||
static const upb_msglayout *const google_protobuf_FileDescriptorSet_submsgs[1] = { |
||||
&google_protobuf_FileDescriptorProto_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_FileDescriptorSet__fields[1] = { |
||||
{1, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_FileDescriptorSet_msginit = { |
||||
&google_protobuf_FileDescriptorSet_submsgs[0], |
||||
&google_protobuf_FileDescriptorSet__fields[0], |
||||
UPB_SIZE(8, 8), 1, false, 1, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_FileDescriptorProto_submsgs[6] = { |
||||
&google_protobuf_DescriptorProto_msginit, |
||||
&google_protobuf_EnumDescriptorProto_msginit, |
||||
&google_protobuf_FieldDescriptorProto_msginit, |
||||
&google_protobuf_FileOptions_msginit, |
||||
&google_protobuf_ServiceDescriptorProto_msginit, |
||||
&google_protobuf_SourceCodeInfo_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_FileDescriptorProto__fields[12] = { |
||||
{1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, |
||||
{2, UPB_SIZE(12, 24), 2, 0, 12, _UPB_MODE_SCALAR}, |
||||
{3, UPB_SIZE(36, 72), 0, 0, 12, _UPB_MODE_ARRAY}, |
||||
{4, UPB_SIZE(40, 80), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
{5, UPB_SIZE(44, 88), 0, 1, 11, _UPB_MODE_ARRAY}, |
||||
{6, UPB_SIZE(48, 96), 0, 4, 11, _UPB_MODE_ARRAY}, |
||||
{7, UPB_SIZE(52, 104), 0, 2, 11, _UPB_MODE_ARRAY}, |
||||
{8, UPB_SIZE(28, 56), 3, 3, 11, _UPB_MODE_SCALAR}, |
||||
{9, UPB_SIZE(32, 64), 4, 5, 11, _UPB_MODE_SCALAR}, |
||||
{10, UPB_SIZE(56, 112), 0, 0, 5, _UPB_MODE_ARRAY}, |
||||
{11, UPB_SIZE(60, 120), 0, 0, 5, _UPB_MODE_ARRAY}, |
||||
{12, UPB_SIZE(20, 40), 5, 0, 12, _UPB_MODE_SCALAR}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_FileDescriptorProto_msginit = { |
||||
&google_protobuf_FileDescriptorProto_submsgs[0], |
||||
&google_protobuf_FileDescriptorProto__fields[0], |
||||
UPB_SIZE(64, 128), 12, false, 12, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_DescriptorProto_submsgs[7] = { |
||||
&google_protobuf_DescriptorProto_msginit, |
||||
&google_protobuf_DescriptorProto_ExtensionRange_msginit, |
||||
&google_protobuf_DescriptorProto_ReservedRange_msginit, |
||||
&google_protobuf_EnumDescriptorProto_msginit, |
||||
&google_protobuf_FieldDescriptorProto_msginit, |
||||
&google_protobuf_MessageOptions_msginit, |
||||
&google_protobuf_OneofDescriptorProto_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_DescriptorProto__fields[10] = { |
||||
{1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, |
||||
{2, UPB_SIZE(16, 32), 0, 4, 11, _UPB_MODE_ARRAY}, |
||||
{3, UPB_SIZE(20, 40), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
{4, UPB_SIZE(24, 48), 0, 3, 11, _UPB_MODE_ARRAY}, |
||||
{5, UPB_SIZE(28, 56), 0, 1, 11, _UPB_MODE_ARRAY}, |
||||
{6, UPB_SIZE(32, 64), 0, 4, 11, _UPB_MODE_ARRAY}, |
||||
{7, UPB_SIZE(12, 24), 2, 5, 11, _UPB_MODE_SCALAR}, |
||||
{8, UPB_SIZE(36, 72), 0, 6, 11, _UPB_MODE_ARRAY}, |
||||
{9, UPB_SIZE(40, 80), 0, 2, 11, _UPB_MODE_ARRAY}, |
||||
{10, UPB_SIZE(44, 88), 0, 0, 12, _UPB_MODE_ARRAY}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_DescriptorProto_msginit = { |
||||
&google_protobuf_DescriptorProto_submsgs[0], |
||||
&google_protobuf_DescriptorProto__fields[0], |
||||
UPB_SIZE(48, 96), 10, false, 10, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_DescriptorProto_ExtensionRange_submsgs[1] = { |
||||
&google_protobuf_ExtensionRangeOptions_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_DescriptorProto_ExtensionRange__fields[3] = { |
||||
{1, UPB_SIZE(4, 4), 1, 0, 5, _UPB_MODE_SCALAR}, |
||||
{2, UPB_SIZE(8, 8), 2, 0, 5, _UPB_MODE_SCALAR}, |
||||
{3, UPB_SIZE(12, 16), 3, 0, 11, _UPB_MODE_SCALAR}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_DescriptorProto_ExtensionRange_msginit = { |
||||
&google_protobuf_DescriptorProto_ExtensionRange_submsgs[0], |
||||
&google_protobuf_DescriptorProto_ExtensionRange__fields[0], |
||||
UPB_SIZE(16, 24), 3, false, 3, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_DescriptorProto_ReservedRange__fields[2] = { |
||||
{1, UPB_SIZE(4, 4), 1, 0, 5, _UPB_MODE_SCALAR}, |
||||
{2, UPB_SIZE(8, 8), 2, 0, 5, _UPB_MODE_SCALAR}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_DescriptorProto_ReservedRange_msginit = { |
||||
NULL, |
||||
&google_protobuf_DescriptorProto_ReservedRange__fields[0], |
||||
UPB_SIZE(16, 16), 2, false, 2, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_ExtensionRangeOptions_submsgs[1] = { |
||||
&google_protobuf_UninterpretedOption_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_ExtensionRangeOptions__fields[1] = { |
||||
{999, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_ExtensionRangeOptions_msginit = { |
||||
&google_protobuf_ExtensionRangeOptions_submsgs[0], |
||||
&google_protobuf_ExtensionRangeOptions__fields[0], |
||||
UPB_SIZE(8, 8), 1, false, 0, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_FieldDescriptorProto_submsgs[1] = { |
||||
&google_protobuf_FieldOptions_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_FieldDescriptorProto__fields[11] = { |
||||
{1, UPB_SIZE(24, 24), 1, 0, 12, _UPB_MODE_SCALAR}, |
||||
{2, UPB_SIZE(32, 40), 2, 0, 12, _UPB_MODE_SCALAR}, |
||||
{3, UPB_SIZE(12, 12), 3, 0, 5, _UPB_MODE_SCALAR}, |
||||
{4, UPB_SIZE(4, 4), 4, 0, 14, _UPB_MODE_SCALAR}, |
||||
{5, UPB_SIZE(8, 8), 5, 0, 14, _UPB_MODE_SCALAR}, |
||||
{6, UPB_SIZE(40, 56), 6, 0, 12, _UPB_MODE_SCALAR}, |
||||
{7, UPB_SIZE(48, 72), 7, 0, 12, _UPB_MODE_SCALAR}, |
||||
{8, UPB_SIZE(64, 104), 8, 0, 11, _UPB_MODE_SCALAR}, |
||||
{9, UPB_SIZE(16, 16), 9, 0, 5, _UPB_MODE_SCALAR}, |
||||
{10, UPB_SIZE(56, 88), 10, 0, 12, _UPB_MODE_SCALAR}, |
||||
{17, UPB_SIZE(20, 20), 11, 0, 8, _UPB_MODE_SCALAR}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_FieldDescriptorProto_msginit = { |
||||
&google_protobuf_FieldDescriptorProto_submsgs[0], |
||||
&google_protobuf_FieldDescriptorProto__fields[0], |
||||
UPB_SIZE(72, 112), 11, false, 10, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_OneofDescriptorProto_submsgs[1] = { |
||||
&google_protobuf_OneofOptions_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_OneofDescriptorProto__fields[2] = { |
||||
{1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, |
||||
{2, UPB_SIZE(12, 24), 2, 0, 11, _UPB_MODE_SCALAR}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_OneofDescriptorProto_msginit = { |
||||
&google_protobuf_OneofDescriptorProto_submsgs[0], |
||||
&google_protobuf_OneofDescriptorProto__fields[0], |
||||
UPB_SIZE(16, 32), 2, false, 2, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_EnumDescriptorProto_submsgs[3] = { |
||||
&google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit, |
||||
&google_protobuf_EnumOptions_msginit, |
||||
&google_protobuf_EnumValueDescriptorProto_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_EnumDescriptorProto__fields[5] = { |
||||
{1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, |
||||
{2, UPB_SIZE(16, 32), 0, 2, 11, _UPB_MODE_ARRAY}, |
||||
{3, UPB_SIZE(12, 24), 2, 1, 11, _UPB_MODE_SCALAR}, |
||||
{4, UPB_SIZE(20, 40), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
{5, UPB_SIZE(24, 48), 0, 0, 12, _UPB_MODE_ARRAY}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_EnumDescriptorProto_msginit = { |
||||
&google_protobuf_EnumDescriptorProto_submsgs[0], |
||||
&google_protobuf_EnumDescriptorProto__fields[0], |
||||
UPB_SIZE(32, 64), 5, false, 5, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_EnumDescriptorProto_EnumReservedRange__fields[2] = { |
||||
{1, UPB_SIZE(4, 4), 1, 0, 5, _UPB_MODE_SCALAR}, |
||||
{2, UPB_SIZE(8, 8), 2, 0, 5, _UPB_MODE_SCALAR}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_EnumDescriptorProto_EnumReservedRange_msginit = { |
||||
NULL, |
||||
&google_protobuf_EnumDescriptorProto_EnumReservedRange__fields[0], |
||||
UPB_SIZE(16, 16), 2, false, 2, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_EnumValueDescriptorProto_submsgs[1] = { |
||||
&google_protobuf_EnumValueOptions_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_EnumValueDescriptorProto__fields[3] = { |
||||
{1, UPB_SIZE(8, 8), 1, 0, 12, _UPB_MODE_SCALAR}, |
||||
{2, UPB_SIZE(4, 4), 2, 0, 5, _UPB_MODE_SCALAR}, |
||||
{3, UPB_SIZE(16, 24), 3, 0, 11, _UPB_MODE_SCALAR}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_EnumValueDescriptorProto_msginit = { |
||||
&google_protobuf_EnumValueDescriptorProto_submsgs[0], |
||||
&google_protobuf_EnumValueDescriptorProto__fields[0], |
||||
UPB_SIZE(24, 32), 3, false, 3, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_ServiceDescriptorProto_submsgs[2] = { |
||||
&google_protobuf_MethodDescriptorProto_msginit, |
||||
&google_protobuf_ServiceOptions_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_ServiceDescriptorProto__fields[3] = { |
||||
{1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, |
||||
{2, UPB_SIZE(16, 32), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
{3, UPB_SIZE(12, 24), 2, 1, 11, _UPB_MODE_SCALAR}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_ServiceDescriptorProto_msginit = { |
||||
&google_protobuf_ServiceDescriptorProto_submsgs[0], |
||||
&google_protobuf_ServiceDescriptorProto__fields[0], |
||||
UPB_SIZE(24, 48), 3, false, 3, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_MethodDescriptorProto_submsgs[1] = { |
||||
&google_protobuf_MethodOptions_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_MethodDescriptorProto__fields[6] = { |
||||
{1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, |
||||
{2, UPB_SIZE(12, 24), 2, 0, 12, _UPB_MODE_SCALAR}, |
||||
{3, UPB_SIZE(20, 40), 3, 0, 12, _UPB_MODE_SCALAR}, |
||||
{4, UPB_SIZE(28, 56), 4, 0, 11, _UPB_MODE_SCALAR}, |
||||
{5, UPB_SIZE(1, 1), 5, 0, 8, _UPB_MODE_SCALAR}, |
||||
{6, UPB_SIZE(2, 2), 6, 0, 8, _UPB_MODE_SCALAR}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_MethodDescriptorProto_msginit = { |
||||
&google_protobuf_MethodDescriptorProto_submsgs[0], |
||||
&google_protobuf_MethodDescriptorProto__fields[0], |
||||
UPB_SIZE(32, 64), 6, false, 6, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_FileOptions_submsgs[1] = { |
||||
&google_protobuf_UninterpretedOption_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_FileOptions__fields[21] = { |
||||
{1, UPB_SIZE(20, 24), 1, 0, 12, _UPB_MODE_SCALAR}, |
||||
{8, UPB_SIZE(28, 40), 2, 0, 12, _UPB_MODE_SCALAR}, |
||||
{9, UPB_SIZE(4, 4), 3, 0, 14, _UPB_MODE_SCALAR}, |
||||
{10, UPB_SIZE(8, 8), 4, 0, 8, _UPB_MODE_SCALAR}, |
||||
{11, UPB_SIZE(36, 56), 5, 0, 12, _UPB_MODE_SCALAR}, |
||||
{16, UPB_SIZE(9, 9), 6, 0, 8, _UPB_MODE_SCALAR}, |
||||
{17, UPB_SIZE(10, 10), 7, 0, 8, _UPB_MODE_SCALAR}, |
||||
{18, UPB_SIZE(11, 11), 8, 0, 8, _UPB_MODE_SCALAR}, |
||||
{20, UPB_SIZE(12, 12), 9, 0, 8, _UPB_MODE_SCALAR}, |
||||
{23, UPB_SIZE(13, 13), 10, 0, 8, _UPB_MODE_SCALAR}, |
||||
{27, UPB_SIZE(14, 14), 11, 0, 8, _UPB_MODE_SCALAR}, |
||||
{31, UPB_SIZE(15, 15), 12, 0, 8, _UPB_MODE_SCALAR}, |
||||
{36, UPB_SIZE(44, 72), 13, 0, 12, _UPB_MODE_SCALAR}, |
||||
{37, UPB_SIZE(52, 88), 14, 0, 12, _UPB_MODE_SCALAR}, |
||||
{39, UPB_SIZE(60, 104), 15, 0, 12, _UPB_MODE_SCALAR}, |
||||
{40, UPB_SIZE(68, 120), 16, 0, 12, _UPB_MODE_SCALAR}, |
||||
{41, UPB_SIZE(76, 136), 17, 0, 12, _UPB_MODE_SCALAR}, |
||||
{42, UPB_SIZE(16, 16), 18, 0, 8, _UPB_MODE_SCALAR}, |
||||
{44, UPB_SIZE(84, 152), 19, 0, 12, _UPB_MODE_SCALAR}, |
||||
{45, UPB_SIZE(92, 168), 20, 0, 12, _UPB_MODE_SCALAR}, |
||||
{999, UPB_SIZE(100, 184), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_FileOptions_msginit = { |
||||
&google_protobuf_FileOptions_submsgs[0], |
||||
&google_protobuf_FileOptions__fields[0], |
||||
UPB_SIZE(104, 192), 21, false, 1, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_MessageOptions_submsgs[1] = { |
||||
&google_protobuf_UninterpretedOption_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_MessageOptions__fields[5] = { |
||||
{1, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR}, |
||||
{2, UPB_SIZE(2, 2), 2, 0, 8, _UPB_MODE_SCALAR}, |
||||
{3, UPB_SIZE(3, 3), 3, 0, 8, _UPB_MODE_SCALAR}, |
||||
{7, UPB_SIZE(4, 4), 4, 0, 8, _UPB_MODE_SCALAR}, |
||||
{999, UPB_SIZE(8, 8), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_MessageOptions_msginit = { |
||||
&google_protobuf_MessageOptions_submsgs[0], |
||||
&google_protobuf_MessageOptions__fields[0], |
||||
UPB_SIZE(16, 16), 5, false, 3, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_FieldOptions_submsgs[1] = { |
||||
&google_protobuf_UninterpretedOption_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_FieldOptions__fields[7] = { |
||||
{1, UPB_SIZE(4, 4), 1, 0, 14, _UPB_MODE_SCALAR}, |
||||
{2, UPB_SIZE(12, 12), 2, 0, 8, _UPB_MODE_SCALAR}, |
||||
{3, UPB_SIZE(13, 13), 3, 0, 8, _UPB_MODE_SCALAR}, |
||||
{5, UPB_SIZE(14, 14), 4, 0, 8, _UPB_MODE_SCALAR}, |
||||
{6, UPB_SIZE(8, 8), 5, 0, 14, _UPB_MODE_SCALAR}, |
||||
{10, UPB_SIZE(15, 15), 6, 0, 8, _UPB_MODE_SCALAR}, |
||||
{999, UPB_SIZE(16, 16), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_FieldOptions_msginit = { |
||||
&google_protobuf_FieldOptions_submsgs[0], |
||||
&google_protobuf_FieldOptions__fields[0], |
||||
UPB_SIZE(24, 24), 7, false, 3, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_OneofOptions_submsgs[1] = { |
||||
&google_protobuf_UninterpretedOption_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_OneofOptions__fields[1] = { |
||||
{999, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_OneofOptions_msginit = { |
||||
&google_protobuf_OneofOptions_submsgs[0], |
||||
&google_protobuf_OneofOptions__fields[0], |
||||
UPB_SIZE(8, 8), 1, false, 0, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_EnumOptions_submsgs[1] = { |
||||
&google_protobuf_UninterpretedOption_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_EnumOptions__fields[3] = { |
||||
{2, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR}, |
||||
{3, UPB_SIZE(2, 2), 2, 0, 8, _UPB_MODE_SCALAR}, |
||||
{999, UPB_SIZE(4, 8), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_EnumOptions_msginit = { |
||||
&google_protobuf_EnumOptions_submsgs[0], |
||||
&google_protobuf_EnumOptions__fields[0], |
||||
UPB_SIZE(8, 16), 3, false, 0, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_EnumValueOptions_submsgs[1] = { |
||||
&google_protobuf_UninterpretedOption_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_EnumValueOptions__fields[2] = { |
||||
{1, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR}, |
||||
{999, UPB_SIZE(4, 8), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_EnumValueOptions_msginit = { |
||||
&google_protobuf_EnumValueOptions_submsgs[0], |
||||
&google_protobuf_EnumValueOptions__fields[0], |
||||
UPB_SIZE(8, 16), 2, false, 1, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_ServiceOptions_submsgs[1] = { |
||||
&google_protobuf_UninterpretedOption_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_ServiceOptions__fields[2] = { |
||||
{33, UPB_SIZE(1, 1), 1, 0, 8, _UPB_MODE_SCALAR}, |
||||
{999, UPB_SIZE(4, 8), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_ServiceOptions_msginit = { |
||||
&google_protobuf_ServiceOptions_submsgs[0], |
||||
&google_protobuf_ServiceOptions__fields[0], |
||||
UPB_SIZE(8, 16), 2, false, 0, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_MethodOptions_submsgs[1] = { |
||||
&google_protobuf_UninterpretedOption_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_MethodOptions__fields[3] = { |
||||
{33, UPB_SIZE(8, 8), 1, 0, 8, _UPB_MODE_SCALAR}, |
||||
{34, UPB_SIZE(4, 4), 2, 0, 14, _UPB_MODE_SCALAR}, |
||||
{999, UPB_SIZE(12, 16), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_MethodOptions_msginit = { |
||||
&google_protobuf_MethodOptions_submsgs[0], |
||||
&google_protobuf_MethodOptions__fields[0], |
||||
UPB_SIZE(16, 24), 3, false, 0, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_UninterpretedOption_submsgs[1] = { |
||||
&google_protobuf_UninterpretedOption_NamePart_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_UninterpretedOption__fields[7] = { |
||||
{2, UPB_SIZE(56, 80), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
{3, UPB_SIZE(32, 32), 1, 0, 12, _UPB_MODE_SCALAR}, |
||||
{4, UPB_SIZE(8, 8), 2, 0, 4, _UPB_MODE_SCALAR}, |
||||
{5, UPB_SIZE(16, 16), 3, 0, 3, _UPB_MODE_SCALAR}, |
||||
{6, UPB_SIZE(24, 24), 4, 0, 1, _UPB_MODE_SCALAR}, |
||||
{7, UPB_SIZE(40, 48), 5, 0, 12, _UPB_MODE_SCALAR}, |
||||
{8, UPB_SIZE(48, 64), 6, 0, 12, _UPB_MODE_SCALAR}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_UninterpretedOption_msginit = { |
||||
&google_protobuf_UninterpretedOption_submsgs[0], |
||||
&google_protobuf_UninterpretedOption__fields[0], |
||||
UPB_SIZE(64, 96), 7, false, 0, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_UninterpretedOption_NamePart__fields[2] = { |
||||
{1, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, |
||||
{2, UPB_SIZE(1, 1), 2, 0, 8, _UPB_MODE_SCALAR}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_UninterpretedOption_NamePart_msginit = { |
||||
NULL, |
||||
&google_protobuf_UninterpretedOption_NamePart__fields[0], |
||||
UPB_SIZE(16, 32), 2, false, 2, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_SourceCodeInfo_submsgs[1] = { |
||||
&google_protobuf_SourceCodeInfo_Location_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_SourceCodeInfo__fields[1] = { |
||||
{1, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_SourceCodeInfo_msginit = { |
||||
&google_protobuf_SourceCodeInfo_submsgs[0], |
||||
&google_protobuf_SourceCodeInfo__fields[0], |
||||
UPB_SIZE(8, 8), 1, false, 1, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_SourceCodeInfo_Location__fields[5] = { |
||||
{1, UPB_SIZE(20, 40), 0, 0, 5, _UPB_MODE_ARRAY | _UPB_MODE_IS_PACKED}, |
||||
{2, UPB_SIZE(24, 48), 0, 0, 5, _UPB_MODE_ARRAY | _UPB_MODE_IS_PACKED}, |
||||
{3, UPB_SIZE(4, 8), 1, 0, 12, _UPB_MODE_SCALAR}, |
||||
{4, UPB_SIZE(12, 24), 2, 0, 12, _UPB_MODE_SCALAR}, |
||||
{6, UPB_SIZE(28, 56), 0, 0, 12, _UPB_MODE_ARRAY}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_SourceCodeInfo_Location_msginit = { |
||||
NULL, |
||||
&google_protobuf_SourceCodeInfo_Location__fields[0], |
||||
UPB_SIZE(32, 64), 5, false, 4, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout *const google_protobuf_GeneratedCodeInfo_submsgs[1] = { |
||||
&google_protobuf_GeneratedCodeInfo_Annotation_msginit, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_GeneratedCodeInfo__fields[1] = { |
||||
{1, UPB_SIZE(0, 0), 0, 0, 11, _UPB_MODE_ARRAY}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_GeneratedCodeInfo_msginit = { |
||||
&google_protobuf_GeneratedCodeInfo_submsgs[0], |
||||
&google_protobuf_GeneratedCodeInfo__fields[0], |
||||
UPB_SIZE(8, 8), 1, false, 1, 255, |
||||
}; |
||||
|
||||
static const upb_msglayout_field google_protobuf_GeneratedCodeInfo_Annotation__fields[4] = { |
||||
{1, UPB_SIZE(20, 32), 0, 0, 5, _UPB_MODE_ARRAY | _UPB_MODE_IS_PACKED}, |
||||
{2, UPB_SIZE(12, 16), 1, 0, 12, _UPB_MODE_SCALAR}, |
||||
{3, UPB_SIZE(4, 4), 2, 0, 5, _UPB_MODE_SCALAR}, |
||||
{4, UPB_SIZE(8, 8), 3, 0, 5, _UPB_MODE_SCALAR}, |
||||
}; |
||||
|
||||
const upb_msglayout google_protobuf_GeneratedCodeInfo_Annotation_msginit = { |
||||
NULL, |
||||
&google_protobuf_GeneratedCodeInfo_Annotation__fields[0], |
||||
UPB_SIZE(24, 48), 4, false, 4, 255, |
||||
}; |
||||
|
||||
#include "upb/port_undef.inc" |
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,313 @@ |
||||
#!/usr/bin/python |
||||
# |
||||
# Copyright (c) 2009-2021, Google LLC |
||||
# All rights reserved. |
||||
# |
||||
# Redistribution and use in source and binary forms, with or without |
||||
# modification, are permitted provided that the following conditions are met: |
||||
# * Redistributions of source code must retain the above copyright |
||||
# notice, this list of conditions and the following disclaimer. |
||||
# * Redistributions in binary form must reproduce the above copyright |
||||
# notice, this list of conditions and the following disclaimer in the |
||||
# documentation and/or other materials provided with the distribution. |
||||
# * Neither the name of Google LLC nor the |
||||
# names of its contributors may be used to endorse or promote products |
||||
# derived from this software without specific prior written permission. |
||||
# |
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
# DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY |
||||
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
||||
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
"""TODO(haberman): DO NOT SUBMIT without one-line documentation for make_cmakelists. |
||||
|
||||
TODO(haberman): DO NOT SUBMIT without a detailed description of make_cmakelists. |
||||
""" |
||||
|
||||
from __future__ import absolute_import |
||||
from __future__ import division |
||||
from __future__ import print_function |
||||
|
||||
import sys |
||||
import textwrap |
||||
import os |
||||
|
||||
def StripColons(deps): |
||||
return map(lambda x: x[1:], deps) |
||||
|
||||
def IsSourceFile(name): |
||||
return name.endswith(".c") or name.endswith(".cc") |
||||
|
||||
class BuildFileFunctions(object): |
||||
def __init__(self, converter): |
||||
self.converter = converter |
||||
|
||||
def _add_deps(self, kwargs, keyword=""): |
||||
if "deps" not in kwargs: |
||||
return |
||||
self.converter.toplevel += "target_link_libraries(%s%s\n %s)\n" % ( |
||||
kwargs["name"], |
||||
keyword, |
||||
"\n ".join(StripColons(kwargs["deps"])) |
||||
) |
||||
|
||||
def load(self, *args): |
||||
pass |
||||
|
||||
def cc_library(self, **kwargs): |
||||
if kwargs["name"].endswith("amalgamation"): |
||||
return |
||||
if kwargs["name"] == "upbc_generator": |
||||
return |
||||
if kwargs["name"] == "lupb": |
||||
return |
||||
files = kwargs.get("srcs", []) + kwargs.get("hdrs", []) |
||||
found_files = [] |
||||
for file in files: |
||||
if os.path.isfile(file): |
||||
found_files.append("../" + file) |
||||
elif os.path.isfile("cmake/" + file): |
||||
found_files.append("../cmake/" + file) |
||||
else: |
||||
print("Warning: no such file: " + file) |
||||
|
||||
if list(filter(IsSourceFile, files)): |
||||
# Has sources, make this a normal library. |
||||
self.converter.toplevel += "add_library(%s\n %s)\n" % ( |
||||
kwargs["name"], |
||||
"\n ".join(found_files) |
||||
) |
||||
self._add_deps(kwargs) |
||||
else: |
||||
# Header-only library, have to do a couple things differently. |
||||
# For some info, see: |
||||
# http://mariobadr.com/creating-a-header-only-library-with-cmake.html |
||||
self.converter.toplevel += "add_library(%s INTERFACE)\n" % ( |
||||
kwargs["name"] |
||||
) |
||||
self._add_deps(kwargs, " INTERFACE") |
||||
|
||||
def cc_binary(self, **kwargs): |
||||
pass |
||||
|
||||
def cc_test(self, **kwargs): |
||||
# Disable this until we properly support upb_proto_library(). |
||||
# self.converter.toplevel += "add_executable(%s\n %s)\n" % ( |
||||
# kwargs["name"], |
||||
# "\n ".join(kwargs["srcs"]) |
||||
# ) |
||||
# self.converter.toplevel += "add_test(NAME %s COMMAND %s)\n" % ( |
||||
# kwargs["name"], |
||||
# kwargs["name"], |
||||
# ) |
||||
|
||||
# if "data" in kwargs: |
||||
# for data_dep in kwargs["data"]: |
||||
# self.converter.toplevel += textwrap.dedent("""\ |
||||
# add_custom_command( |
||||
# TARGET %s POST_BUILD |
||||
# COMMAND ${CMAKE_COMMAND} -E copy |
||||
# ${CMAKE_SOURCE_DIR}/%s |
||||
# ${CMAKE_CURRENT_BINARY_DIR}/%s)\n""" % ( |
||||
# kwargs["name"], data_dep, data_dep |
||||
# )) |
||||
|
||||
# self._add_deps(kwargs) |
||||
pass |
||||
|
||||
def py_library(self, **kwargs): |
||||
pass |
||||
|
||||
def py_binary(self, **kwargs): |
||||
pass |
||||
|
||||
def lua_proto_library(self, **kwargs): |
||||
pass |
||||
|
||||
def sh_test(self, **kwargs): |
||||
pass |
||||
|
||||
def make_shell_script(self, **kwargs): |
||||
pass |
||||
|
||||
def exports_files(self, files, **kwargs): |
||||
pass |
||||
|
||||
def proto_library(self, **kwargs): |
||||
pass |
||||
|
||||
def cc_proto_library(self, **kwargs): |
||||
pass |
||||
|
||||
def generated_file_staleness_test(self, **kwargs): |
||||
pass |
||||
|
||||
def upb_amalgamation(self, **kwargs): |
||||
pass |
||||
|
||||
def upb_proto_library(self, **kwargs): |
||||
pass |
||||
|
||||
def upb_proto_library_copts(self, **kwargs): |
||||
pass |
||||
|
||||
def upb_proto_reflection_library(self, **kwargs): |
||||
pass |
||||
|
||||
def upb_proto_srcs(self, **kwargs): |
||||
pass |
||||
|
||||
def genrule(self, **kwargs): |
||||
pass |
||||
|
||||
def config_setting(self, **kwargs): |
||||
pass |
||||
|
||||
def upb_fasttable_enabled(self, **kwargs): |
||||
pass |
||||
|
||||
def select(self, arg_dict): |
||||
return [] |
||||
|
||||
def glob(self, *args): |
||||
return [] |
||||
|
||||
def licenses(self, *args): |
||||
pass |
||||
|
||||
def filegroup(self, **kwargs): |
||||
pass |
||||
|
||||
def map_dep(self, arg): |
||||
return arg |
||||
|
||||
|
||||
class WorkspaceFileFunctions(object): |
||||
def __init__(self, converter): |
||||
self.converter = converter |
||||
|
||||
def load(self, *args): |
||||
pass |
||||
|
||||
def workspace(self, **kwargs): |
||||
self.converter.prelude += "project(%s)\n" % (kwargs["name"]) |
||||
self.converter.prelude += "set(CMAKE_C_STANDARD 99)\n" |
||||
|
||||
def http_archive(self, **kwargs): |
||||
pass |
||||
|
||||
def git_repository(self, **kwargs): |
||||
pass |
||||
|
||||
def new_git_repository(self, **kwargs): |
||||
pass |
||||
|
||||
def bazel_version_repository(self, **kwargs): |
||||
pass |
||||
|
||||
def upb_deps(self): |
||||
pass |
||||
|
||||
|
||||
class Converter(object): |
||||
def __init__(self): |
||||
self.prelude = "" |
||||
self.toplevel = "" |
||||
self.if_lua = "" |
||||
|
||||
def convert(self): |
||||
return self.template % { |
||||
"prelude": converter.prelude, |
||||
"toplevel": converter.toplevel, |
||||
} |
||||
|
||||
template = textwrap.dedent("""\ |
||||
# This file was generated from BUILD using tools/make_cmakelists.py. |
||||
|
||||
cmake_minimum_required(VERSION 3.1) |
||||
|
||||
if(${CMAKE_VERSION} VERSION_LESS 3.12) |
||||
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}) |
||||
else() |
||||
cmake_policy(VERSION 3.12) |
||||
endif() |
||||
|
||||
cmake_minimum_required (VERSION 3.0) |
||||
cmake_policy(SET CMP0048 NEW) |
||||
|
||||
%(prelude)s |
||||
|
||||
# Prevent CMake from setting -rdynamic on Linux (!!). |
||||
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "") |
||||
SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") |
||||
|
||||
# Set default build type. |
||||
if(NOT CMAKE_BUILD_TYPE) |
||||
message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.") |
||||
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING |
||||
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." |
||||
FORCE) |
||||
endif() |
||||
|
||||
# When using Ninja, compiler output won't be colorized without this. |
||||
include(CheckCXXCompilerFlag) |
||||
CHECK_CXX_COMPILER_FLAG(-fdiagnostics-color=always SUPPORTS_COLOR_ALWAYS) |
||||
if(SUPPORTS_COLOR_ALWAYS) |
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always") |
||||
endif() |
||||
|
||||
# Implement ASAN/UBSAN options |
||||
if(UPB_ENABLE_ASAN) |
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address") |
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") |
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") |
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address") |
||||
endif() |
||||
|
||||
if(UPB_ENABLE_UBSAN) |
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=undefined") |
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address") |
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") |
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address") |
||||
endif() |
||||
|
||||
include_directories(..) |
||||
include_directories(../cmake) |
||||
include_directories(${CMAKE_CURRENT_BINARY_DIR}) |
||||
|
||||
if(APPLE) |
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -undefined dynamic_lookup -flat_namespace") |
||||
elseif(UNIX) |
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--build-id") |
||||
endif() |
||||
|
||||
enable_testing() |
||||
|
||||
%(toplevel)s |
||||
|
||||
""") |
||||
|
||||
data = {} |
||||
converter = Converter() |
||||
|
||||
def GetDict(obj): |
||||
ret = {} |
||||
ret["UPB_DEFAULT_COPTS"] = [] # HACK |
||||
for k in dir(obj): |
||||
if not k.startswith("_"): |
||||
ret[k] = getattr(obj, k); |
||||
return ret |
||||
|
||||
globs = GetDict(converter) |
||||
|
||||
exec(open("WORKSPACE").read(), GetDict(WorkspaceFileFunctions(converter))) |
||||
exec(open("BUILD").read(), GetDict(BuildFileFunctions(converter))) |
||||
|
||||
with open(sys.argv[1], "w") as f: |
||||
f.write(converter.convert()) |
@ -0,0 +1,57 @@ |
||||
#!/usr/bin/python |
||||
# |
||||
# Copyright (c) 2009-2021, Google LLC |
||||
# All rights reserved. |
||||
# |
||||
# Redistribution and use in source and binary forms, with or without |
||||
# modification, are permitted provided that the following conditions are met: |
||||
# * Redistributions of source code must retain the above copyright |
||||
# notice, this list of conditions and the following disclaimer. |
||||
# * Redistributions in binary form must reproduce the above copyright |
||||
# notice, this list of conditions and the following disclaimer in the |
||||
# documentation and/or other materials provided with the distribution. |
||||
# * Neither the name of Google LLC nor the |
||||
# names of its contributors may be used to endorse or promote products |
||||
# derived from this software without specific prior written permission. |
||||
# |
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
# DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY |
||||
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
||||
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
"""The py_test() script for generated_file_staleness_test() rules. |
||||
|
||||
Note that this file is preprocessed! The INSERT_<...> text below is replaced |
||||
with the actual list of files before we actually run the script. |
||||
""" |
||||
|
||||
from __future__ import absolute_import |
||||
|
||||
from cmake import staleness_test_lib |
||||
import unittest |
||||
import sys |
||||
|
||||
file_list = """ |
||||
INSERT_FILE_LIST_HERE |
||||
""".split() |
||||
|
||||
config = staleness_test_lib.Config(file_list) |
||||
|
||||
|
||||
class TestFilesMatch(unittest.TestCase): |
||||
|
||||
def testFilesMatch(self): |
||||
errors = staleness_test_lib.CheckFilesMatch(config) |
||||
self.assertFalse(errors, errors) |
||||
|
||||
|
||||
if len(sys.argv) > 1 and sys.argv[1] == "--fix": |
||||
staleness_test_lib.FixFiles(config) |
||||
else: |
||||
unittest.main() |
@ -0,0 +1,186 @@ |
||||
#!/usr/bin/python |
||||
# |
||||
# Copyright (c) 2009-2021, Google LLC |
||||
# All rights reserved. |
||||
# |
||||
# Redistribution and use in source and binary forms, with or without |
||||
# modification, are permitted provided that the following conditions are met: |
||||
# * Redistributions of source code must retain the above copyright |
||||
# notice, this list of conditions and the following disclaimer. |
||||
# * Redistributions in binary form must reproduce the above copyright |
||||
# notice, this list of conditions and the following disclaimer in the |
||||
# documentation and/or other materials provided with the distribution. |
||||
# * Neither the name of Google LLC nor the |
||||
# names of its contributors may be used to endorse or promote products |
||||
# derived from this software without specific prior written permission. |
||||
# |
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
||||
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
# DISCLAIMED. IN NO EVENT SHALL Google LLC BE LIABLE FOR ANY |
||||
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
||||
# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
|
||||
"""Shared code for validating generated_file_staleness_test() rules. |
||||
|
||||
This code is used by test scripts generated from |
||||
generated_file_staleness_test() rules. |
||||
""" |
||||
|
||||
from __future__ import absolute_import |
||||
from __future__ import print_function |
||||
|
||||
import sys |
||||
import os |
||||
from shutil import copyfile |
||||
|
||||
|
||||
class _FilePair(object): |
||||
"""Represents a single (target, generated) file pair.""" |
||||
|
||||
def __init__(self, target, generated): |
||||
self.target = target |
||||
self.generated = generated |
||||
|
||||
|
||||
class Config(object): |
||||
"""Represents the configuration for a single staleness test target.""" |
||||
|
||||
def __init__(self, file_list): |
||||
# Duplicate to avoid modifying our arguments. |
||||
file_list = list(file_list) |
||||
|
||||
# The file list contains a few other bits of information at the end. |
||||
# This is packed by the code in build_defs.bzl. |
||||
self.target_name = file_list.pop() |
||||
self.package_name = file_list.pop() |
||||
self.pattern = file_list.pop() |
||||
|
||||
self.file_list = file_list |
||||
|
||||
|
||||
def _GetFilePairs(config): |
||||
"""Generates the list of file pairs. |
||||
|
||||
Args: |
||||
config: a Config object representing this target's config. |
||||
|
||||
Returns: |
||||
A list of _FilePair objects. |
||||
""" |
||||
|
||||
ret = [] |
||||
|
||||
has_bazel_genfiles = os.path.exists("bazel-bin") |
||||
|
||||
for filename in config.file_list: |
||||
target = os.path.join(config.package_name, filename) |
||||
generated = os.path.join(config.package_name, config.pattern % filename) |
||||
if has_bazel_genfiles: |
||||
generated = os.path.join("bazel-bin", generated) |
||||
|
||||
# Generated files should always exist. Blaze should guarantee this before |
||||
# we are run. |
||||
if not os.path.isfile(generated): |
||||
print("Generated file '%s' does not exist." % generated) |
||||
print("Please run this command to generate it:") |
||||
print(" bazel build %s:%s" % (config.package_name, config.target_name)) |
||||
sys.exit(1) |
||||
ret.append(_FilePair(target, generated)) |
||||
|
||||
return ret |
||||
|
||||
|
||||
def _GetMissingAndStaleFiles(file_pairs): |
||||
"""Generates lists of missing and stale files. |
||||
|
||||
Args: |
||||
file_pairs: a list of _FilePair objects. |
||||
|
||||
Returns: |
||||
missing_files: a list of _FilePair objects representing missing files. |
||||
These target files do not exist at all. |
||||
stale_files: a list of _FilePair objects representing stale files. |
||||
These target files exist but have stale contents. |
||||
""" |
||||
|
||||
missing_files = [] |
||||
stale_files = [] |
||||
|
||||
for pair in file_pairs: |
||||
if not os.path.isfile(pair.target): |
||||
missing_files.append(pair) |
||||
continue |
||||
|
||||
with open(pair.generated) as g, open(pair.target) as t: |
||||
if g.read() != t.read(): |
||||
stale_files.append(pair) |
||||
|
||||
return missing_files, stale_files |
||||
|
||||
|
||||
def _CopyFiles(file_pairs): |
||||
"""Copies all generated files to the corresponding target file. |
||||
|
||||
The target files must be writable already. |
||||
|
||||
Args: |
||||
file_pairs: a list of _FilePair objects that we want to copy. |
||||
""" |
||||
|
||||
for pair in file_pairs: |
||||
target_dir = os.path.dirname(pair.target) |
||||
if not os.path.isdir(target_dir): |
||||
os.makedirs(target_dir) |
||||
copyfile(pair.generated, pair.target) |
||||
|
||||
|
||||
def FixFiles(config): |
||||
"""Implements the --fix option: overwrites missing or out-of-date files. |
||||
|
||||
Args: |
||||
config: the Config object for this test. |
||||
""" |
||||
|
||||
file_pairs = _GetFilePairs(config) |
||||
missing_files, stale_files = _GetMissingAndStaleFiles(file_pairs) |
||||
|
||||
_CopyFiles(stale_files + missing_files) |
||||
|
||||
|
||||
def CheckFilesMatch(config): |
||||
"""Checks whether each target file matches the corresponding generated file. |
||||
|
||||
Args: |
||||
config: the Config object for this test. |
||||
|
||||
Returns: |
||||
None if everything matches, otherwise a string error message. |
||||
""" |
||||
|
||||
diff_errors = [] |
||||
|
||||
file_pairs = _GetFilePairs(config) |
||||
missing_files, stale_files = _GetMissingAndStaleFiles(file_pairs) |
||||
|
||||
for pair in missing_files: |
||||
diff_errors.append("File %s does not exist" % pair.target) |
||||
continue |
||||
|
||||
for pair in stale_files: |
||||
diff_errors.append("File %s is out of date" % pair.target) |
||||
|
||||
if diff_errors: |
||||
error_msg = "Files out of date!\n\n" |
||||
error_msg += "To fix run THIS command:\n" |
||||
error_msg += " bazel-bin/%s/%s --fix\n\n" % (config.package_name, |
||||
config.target_name) |
||||
error_msg += "Errors:\n" |
||||
error_msg += " " + "\n ".join(diff_errors) |
||||
return error_msg |
||||
else: |
||||
return None |
Loading…
Reference in new issue