Skip to content

Commit

Permalink
Merge branch 'gz-msgs10' into azeey/rel_paths
Browse files Browse the repository at this point in the history
  • Loading branch information
azeey authored Apr 8, 2024
2 parents 930df62 + 1f080a4 commit 08f8cfc
Show file tree
Hide file tree
Showing 14 changed files with 765 additions and 324 deletions.
185 changes: 153 additions & 32 deletions BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,41 @@ load(
"GZ_FEATURES",
"GZ_ROOT",
"GZ_VISIBILITY",
"gz_configure_file",
"gz_configure_header",
"gz_export_header",
"gz_include_header",
)
load(
"@gz//bazel/lint:lint.bzl",
"add_lint_tests",
)
load(
"@gz//msgs/tools:gz_msgs_generate.bzl",
"get_proto_headers",
"gz_msgs_generate",
"gz_proto_factory",
"gz_proto_library",
)
load("@rules_license//rules:license.bzl", "license")

package(
default_applicable_licenses = [GZ_ROOT + "msgs:license"],
default_visibility = GZ_VISIBILITY,
features = GZ_FEATURES,
)

licenses(["notice"]) # Apache-2.0
license(
name = "license",
package_name = "gz-msgs",
)

licenses(["notice"])

exports_files(["LICENSE"])

gz_configure_header(
name = "msgs_config_hh",
src = "include/gz/msgs/config.hh.in",
src = "core/include/gz/msgs/config.hh.in",
out = "include/gz/msgs/config.hh",
cmakelists = ["CMakeLists.txt"],
package = "msgs",
)
Expand All @@ -37,43 +50,29 @@ gz_export_header(
)

public_headers_no_gen = glob([
"include/gz/msgs/*.hh",
"include/gz/msgs/detail/*.hh",
"core/include/gz/msgs/*.hh",
"core/include/gz/msgs/convert/*.hh",
"core/include/gz/msgs/detail/*.hh",
])

protos = glob(["proto/gz/msgs/*.proto"])

gz_include_header(
name = "messagetypes_hh_genrule",
out = "include/gz/msgs/MessageTypes.hh",
hdrs = get_proto_headers(protos),
strip_prefix = ["gz_msgs"],
)

gz_include_header(
name = "msgs_hh_genrule",
out = "include/gz/msgs.hh",
hdrs = public_headers_no_gen + [
"include/gz/msgs/config.hh",
"include/gz/msgs/Export.hh",
"include/gz/msgs/MessageTypes.hh",
],
)

public_headers = public_headers_no_gen + [
"include/gz/msgs/config.hh",
"include/gz/msgs/Export.hh",
"include/gz/msgs/MessageTypes.hh",
"include/gz/msgs.hh",
]

# Custom Gazebo Protoc plugin
cc_binary(
name = "gz_msgs_gen",
srcs = [
"src/Generator.cc",
"src/Generator.hh",
"src/generator_main.cc",
"core/generator_lite/Generator.cc",
"core/generator_lite/Generator.hh",
"core/generator_lite/generator_main.cc",
],
deps = [
"@com_google_protobuf//:protobuf",
Expand All @@ -91,26 +90,51 @@ proto_library(
],
)

gz_msgs_generate(
gz_proto_library(
name = "gzmsgs_cc_proto",
proto_deps = [":gzmsgs_proto"],
deps = [
":gzmsgs_proto",
"@com_google_protobuf//:any_proto",
"@com_google_protobuf//:protobuf",
],
)

gz_proto_factory(
name = "gzmsgs_proto_factory",
cc_output = "core/src/RegisterMsgs.cc",
hh_output = "include/gz/msgs/MessageTypes.hh",
deps = [":gzmsgs_proto"],
)

public_headers = public_headers_no_gen + [
"include/gz/msgs/config.hh",
"include/gz/msgs/Export.hh",
"include/gz/msgs.hh",
"include/gz/msgs/MessageTypes.hh",
]

cc_library(
name = "msgs",
srcs = [
"src/Factory.cc",
"src/Filesystem.cc",
"src/Utility.cc",
":gzmsgs_cc_proto",
"core/src/DynamicFactory.cc",
"core/src/DynamicFactory.hh",
"core/src/Factory.cc",
"core/src/MessageFactory.cc",
"core/src/RegisterMsgs.cc",
"core/src/impl/InstallationDirectories.cc",
],
copts = [
"-Wno-duplicate-decl-specifier",
"-fexceptions",
],
hdrs = public_headers,
includes = ["include"],
includes = [
"core/include",
"core/src",
"include",
],
deps = [
":gzmsgs_cc_proto",
":gzmsgs_proto_factory",
GZ_ROOT + "math",
"@com_google_protobuf//:protobuf",
"@tinyxml2",
Expand Down Expand Up @@ -138,3 +162,100 @@ test_sources = glob(
"@gtest//:gtest_main",
],
) for src in test_sources]

cc_test(
name = "INTEGRATION_headers",
srcs = ["test/integration/headers.cc"],
deps = [
":gzmsgs_cc_proto",
"@gtest",
"@gtest//:gtest_main",
],
)

cc_test(
name = "INTEGRATION_image_msg",
srcs = ["test/integration/image_msg.cc"],
deps = [
":gzmsgs_cc_proto",
"@gtest",
"@gtest//:gtest_main",
],
)

cc_test(
name = "INTEGRATION_Utility",
srcs = ["test/integration/Utility_TEST.cc"],
deps = [
":msgs",
GZ_ROOT + "common/testing",
"@gtest",
"@gtest//:gtest_main",
],
)

cc_test(
name = "INTEGRATION_Factory",
srcs = ["test/integration/Factory_TEST.cc"],
data = ["test/desc/stringmsg.desc"],
defines = [
'GZ_MSGS_TEST_PATH=\\"msgs/test\\"',
],
deps = [
":msgs",
GZ_ROOT + "common/testing",
"@gtest",
"@gtest//:gtest_main",
],
)

cc_test(
name = "INTEGRATION_descriptors",
srcs = ["test/integration/descriptors.cc"],
data = ["test/desc"],
defines = [
'GZ_MSGS_TEST_PATH=\\"msgs/test\\"',
],
deps = [
":msgs",
GZ_ROOT + "common/testing",
"@gtest",
"@gtest//:gtest_main",
],
)

gz_configure_file(
name = "msgs_yaml",
src = "conf/msgs.yaml.in",
out = "msgs.yaml",
defines = [
"PROJECT_NAME_NO_VERSION_LOWER=msgs",
"gz_library_path=msgs/cmdmsgs",
],
package = "msgs",
)

gz_configure_file(
name = "msgs_rb",
src = "core/src/cmd/cmdmsgs.rb.in",
out = "cmdmsgs.rb",
defines = [
"library_location=libgz-msgs.so",
],
package = "msgs",
)

cc_binary(
name = "gz-msgs",
srcs = ["core/src/gz.cc"],
data = [
"cmdmsgs.rb",
"msgs.yaml",
":gzmsgs_proto",
],
linkshared = True,
linkstatic = True,
deps = [":msgs"],
)

add_lint_tests()
116 changes: 116 additions & 0 deletions core/generator_lite/Generator.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
/*
* Copyright 2016 Open Source Robotics Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/

#include <algorithm>
#include <filesystem>
#include <iostream>
#include <fstream>
#include <map>
#include <memory>
#include <sstream>
#include <string>
#include <utility>
#include <vector>

#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 4100 4512 4127 4068 4244 4267 4251 4146)
#endif

#include <google/protobuf/descriptor.h>
#include <google/protobuf/compiler/code_generator.h>
#include <google/protobuf/io/printer.h>
#include <google/protobuf/io/zero_copy_stream.h>
#include <google/protobuf/descriptor.pb.h>

#ifdef _MSC_VER
#pragma warning(pop)
#endif

#include "Generator.hh"

namespace google::protobuf::compiler::cpp {

/////////////////////////////////////////////////
Generator::Generator(const std::string &/*_name*/)
{
}

/////////////////////////////////////////////////
Generator::~Generator() = default;

/////////////////////////////////////////////////
bool Generator::Generate(const FileDescriptor *_file,
const std::string &/*_parameter*/,
OutputDirectory *_generatorContext,
std::string * /*_error*/) const
{
std::string delim = ".proto";
auto headerFilename = _file->name();
auto sourceFilename = _file->name();

{
auto pos = headerFilename.rfind(delim);
headerFilename.replace(pos, delim.size(), ".pb.h");
}
{
auto pos = sourceFilename.rfind(delim);
sourceFilename.replace(pos, delim.size(), ".pb.h");
}

{
auto *output = _generatorContext->OpenForInsert(headerFilename, "includes");
auto printer = io::Printer(output, '$');
printer.Print("#include <memory>\n", "name", "includes");
}

{
auto *output = _generatorContext->OpenForInsert(
headerFilename, "namespace_scope");
auto printer = io::Printer(output, '$');

for (auto i = 0; i < _file->message_type_count(); ++i)
{
const auto *desc = _file->message_type(i);
std::string ptrTypes;

// Define std::unique_ptr types for our messages
ptrTypes += "typedef std::unique_ptr<"
+ desc->name() + "> "
+ desc->name() + "UniquePtr;\n";

// Define const std::unique_ptr types for our messages
ptrTypes += "typedef std::unique_ptr<const "
+ desc->name() + "> Const"
+ desc->name() + "UniquePtr;\n";

// Define std::shared_ptr types for our messages
ptrTypes += "typedef std::shared_ptr<"
+ desc->name() + "> "
+ desc->name() + "SharedPtr;\n";

// Define const std::shared_ptr types for our messages
ptrTypes += "typedef std::shared_ptr<const "
+ desc->name() + "> Const"
+ desc->name() + "SharedPtr;\n";

printer.PrintRaw(ptrTypes.c_str());
}
}
return true;
}
} // namespace google::protobuf::compiler::cpp
Loading

0 comments on commit 08f8cfc

Please sign in to comment.