diff options
Diffstat (limited to 'tests/core/cgo/BUILD.bazel')
-rw-r--r-- | tests/core/cgo/BUILD.bazel | 474 |
1 files changed, 474 insertions, 0 deletions
diff --git a/tests/core/cgo/BUILD.bazel b/tests/core/cgo/BUILD.bazel new file mode 100644 index 00000000..cc12203f --- /dev/null +++ b/tests/core/cgo/BUILD.bazel @@ -0,0 +1,474 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library", "go_test") +load("@io_bazel_rules_go//go/tools/bazel_testing:def.bzl", "go_bazel_test") + +go_test( + name = "opts_test", + srcs = ["adder_test.go"], + embed = [":opts"], +) + +genrule( + name = "generate_header_copts", + outs = ["generated_copts/generated_copts.h"], + cmd = "echo '#define GENERATED_COPTS 1' >$@", +) + +genrule( + name = "generate_header_cppopts", + outs = ["generated_cppopts/generated_cppopts.h"], + cmd = "echo '#define GENERATED_CPPOPTS 1' >$@", +) + +genrule( + name = "generate_header_cxxopts", + outs = ["generated_cxxopts/generated_cxxopts.h"], + cmd = "echo '#define GENERATED_CXXOPTS 1' >$@", +) + +cc_library( + name = "generated_headers", + hdrs = [ + "generated_copts/generated_copts.h", + "generated_cppopts/generated_cppopts.h", + "generated_cxxopts/generated_cxxopts.h", + ], +) + +COPTS_INCLUDE_PREFIX = (package_name() if repository_name() == "@" else "external/%s/%s" % ( + repository_name()[1:], + package_name(), +)) + +go_library( + name = "opts", + srcs = [ + "add.c", + "add.cpp", + "add.h", + "adder.go", + ] + select({ + "@io_bazel_rules_go//go/platform:darwin": [ + "add.m", + "add.mm", + ], + "//conditions:default": [], + }), + cdeps = [":generated_headers"], + cgo = True, + copts = [ + "-DRULES_GO_C", + "-I$(GENDIR)/%s/generated_copts" % COPTS_INCLUDE_PREFIX, + "-DDOLLAR_SIGN_C=$$", # the dollar sign should be escaped + ], + cppopts = [ + "-DRULES_GO_CPP", + "-I$(GENDIR)/%s/generated_cppopts" % COPTS_INCLUDE_PREFIX, + "-DDOLLAR_SIGN_CPP=$$", # the dollar sign should be escaped + ], + cxxopts = [ + "-DRULES_GO_CXX", + "-I$(GENDIR)/%s/generated_cxxopts" % COPTS_INCLUDE_PREFIX, + "-DDOLLAR_SIGN_CXX=$$", # the dollar sign should be escaped + ], + importpath = "github.com/bazelbuild/rules_go/tests/core/cxx", +) + +go_test( + name = "dylib_test", + srcs = ["dylib_test.go"], + embed = [":dylib_client"], + rundir = ".", + tags = ["manual"], # //tests/core/cgo:generate_imported_dylib.sh must be run first +) + +go_library( + name = "dylib_client", + srcs = ["dylib_client.go"], + cdeps = select({ + "@io_bazel_rules_go//go/platform:darwin": [":darwin_imported_dylib"], + "//conditions:default": [":linux_imported_dylib"], + # TODO(jayconrod): Support windows, skip others. + }), + cgo = True, + importpath = "github.com/bazelbuild/rules_go/tests/core/cgo/dylib", + tags = ["manual"], +) + +cc_import( + name = "darwin_imported_dylib", + shared_library = "libimported.dylib", + tags = ["manual"], +) + +cc_import( + name = "linux_imported_dylib", + shared_library = ":libimported.so", + tags = ["manual"], +) + +go_test( + name = "generated_dylib_test", + srcs = ["dylib_test.go"], + embed = [":generated_dylib_client"], + rundir = ".", +) + +go_library( + name = "generated_dylib_client", + srcs = ["dylib_client.go"], + cdeps = select({ + "@io_bazel_rules_go//go/platform:darwin": [":darwin_imported_generated_dylib"], + "//conditions:default": [":linux_imported_generated_dylib"], + # TODO(jayconrod): Support windows, skip others. + }), + cgo = True, + importpath = "github.com/bazelbuild/rules_go/tests/core/cgo/dylib", +) + +cc_import( + name = "darwin_imported_generated_dylib", + shared_library = ":libimported_generated.dylib", + tags = ["manual"], +) + +cc_binary( + name = "libimported_generated.dylib", + srcs = ["imported.c"], + linkopts = ["-Wl,-install_name,@rpath/libimported_generated.dylib"], + linkshared = True, + tags = ["manual"], +) + +cc_import( + name = "linux_imported_generated_dylib", + shared_library = ":libimported_generated.so", + tags = ["manual"], +) + +cc_binary( + name = "libimported_generated.so", + srcs = ["imported.c"], + linkshared = True, + tags = ["manual"], +) + +# //tests/core/cgo:generate_imported_dylib.sh must be run first +go_test( + name = "versioned_dylib_test", + srcs = ["dylib_test.go"], + embed = [":versioned_dylib_client"], + rundir = ".", + target_compatible_with = select({ + "@platforms//os:osx": [], + "@platforms//os:linux": [], + "//conditions:default": ["@platforms//:incompatible"], + }), +) + +go_library( + name = "versioned_dylib_client", + srcs = ["dylib_client.go"], + cdeps = select({ + "@io_bazel_rules_go//go/platform:darwin": [":darwin_imported_versioned_dylib"], + "//conditions:default": [":linux_imported_versioned_dylib"], + # TODO(jayconrod): Support windows, skip others. + }), + cgo = True, + importpath = "github.com/bazelbuild/rules_go/tests/core/cgo/dylib", + tags = ["manual"], +) + +cc_import( + name = "linux_imported_versioned_dylib", + shared_library = "libversioned.so.2", + tags = ["manual"], +) + +cc_import( + name = "darwin_imported_versioned_dylib", + shared_library = "libversioned.2.dylib", + tags = ["manual"], +) + +go_test( + name = "oracle_convention_darwin_dylib_test", + srcs = ["dylib_test.go"], + embed = [":oracle_convention_darwin_dylib_client"], + rundir = ".", + target_compatible_with = ["@platforms//os:macos"], +) + +go_library( + name = "oracle_convention_darwin_dylib_client", + srcs = ["dylib_client.go"], + cdeps = [":oracle_convention_darwin_dylib"], + cgo = True, + importpath = "github.com/bazelbuild/rules_go/tests/core/cgo/dylib", + target_compatible_with = ["@platforms//os:macos"], +) + +# //tests/core/cgo:generate_imported_dylib.sh must be run first +cc_library( + name = "oracle_convention_darwin_dylib", + srcs = [ + "libversioned.dylib", + "libversioned.dylib.2", + ], + target_compatible_with = ["@platforms//os:macos"], +) + +go_test( + name = "generated_versioned_dylib_test", + srcs = ["dylib_test.go"], + embed = [":generated_versioned_dylib_client"], + rundir = ".", +) + +go_library( + name = "generated_versioned_dylib_client", + srcs = ["dylib_client.go"], + cdeps = select({ + # This test exists just for versioned `.so`s on Linux, + # but we can reuse the above test's dylib so it passes on darwin, + # where filename suffixes are not used for library version. + "@io_bazel_rules_go//go/platform:darwin": [":darwin_imported_generated_dylib"], + "//conditions:default": [":linux_imported_generated_versioned_dylib"], + # TODO(jayconrod): Support windows, skip others. + }), + cgo = True, + importpath = "github.com/bazelbuild/rules_go/tests/core/cgo/dylib", +) + +cc_library( + name = "linux_imported_generated_versioned_dylib", + srcs = [":libimported_generated.so.2"], + linkstatic = False, + tags = ["manual"], +) + +cc_binary( + name = "libimported_generated.so.2", + srcs = ["imported.c"], + linkshared = True, + tags = ["manual"], +) + +go_test( + name = "cc_libs_test", + srcs = [ + "cc_libs_common.go", + "cc_libs_darwin_test.go", + "cc_libs_linux_test.go", + ], + data = [ + ":c_srcs", + ":cc_deps", + ":cc_srcs", + ":pure", + ], + deps = ["//go/tools/bazel:go_default_library"], +) + +go_binary( + name = "pure", + srcs = ["pure.go"], + out = "pure_bin", + cgo = True, + pure = "on", +) + +go_binary( + name = "c_srcs", + srcs = [ + "foo.c", + "foo.go", + ], + out = "c_srcs_bin", + cgo = True, +) + +go_binary( + name = "cc_srcs", + srcs = [ + "bar.cc", + "bar.go", + ], + out = "cc_srcs_bin", + cgo = True, +) + +go_binary( + name = "cc_deps", + srcs = ["bar.go"], + out = "cc_deps_bin", + cdeps = [":bar_dep"], + cgo = True, +) + +cc_library( + name = "bar_dep", + srcs = ["bar.cc"], +) + +go_test( + name = "race_test", + srcs = [ + "race_off.c", + "race_off.go", + "race_on.c", + "race_on.go", + "race_test.go", + ], + cgo = True, + race = "on", +) + +go_test( + name = "tag_test", + srcs = ["tag_test.go"], + data = [ + ":tag_cgo_bin", + ":tag_pure_bin", + ], + rundir = ".", + deps = ["//go/tools/bazel:go_default_library"], +) + +go_binary( + name = "tag_pure_bin", + srcs = [ + "tag_pure.go", + "tag_pure_err.c", + "tag_pure_err.go", + ], + cgo = True, + pure = "on", +) + +go_binary( + name = "tag_cgo_bin", + srcs = [ + "tag_cgo.go", + "tag_cgo_err.go", + ], + cgo = True, + pure = "off", +) + +go_test( + name = "cgo_link_test", + srcs = [ + "cgo_link_test.go", + "cgo_ref.go", + ], + cdeps = [":cgo_link_dep"], + cgo = True, +) + +cc_library( + name = "cgo_link_dep", + srcs = ["cgo_link_dep.c"], +) + +go_test( + name = "split_import_test", + srcs = [ + "split_import_i_test.go", + "split_import_x_test.go", + ], + embed = [":split_import_a"], + deps = [":split_import_b"], +) + +go_library( + name = "split_import_a", + srcs = ["split_import_a.go"], + importpath = "github.com/bazelbuild/rules_go/tests/core/cgo/split_import/a", +) + +go_library( + name = "split_import_b", + srcs = ["split_import_b.go"], + importpath = "github.com/bazelbuild/rules_go/tests/core/cgo/split_import/b", + deps = [ + ":split_import_a", + ":split_import_cgo", + ], +) + +go_library( + name = "split_import_cgo", + srcs = ["split_import_cgo.go"], + cdeps = [":split_import_c"], + cgo = True, + importpath = "github.com/bazelbuild/rules_go/tests/core/cgo/split_import/cgo", +) + +cc_library( + name = "split_import_c", + srcs = ["split_import_c.c"], + hdrs = ["split_import_c.h"], +) + +go_bazel_test( + name = "external_includes_test", + srcs = ["external_includes_test.go"], +) + +go_library( + name = "use_external_symbol", + srcs = ["use_external_symbol.go"], + cgo = True, + importpath = "github.com/bazelbuild/rules_go/tests/core/cgo/use_external_symbol", + tags = ["manual"], +) + +go_binary( + name = "provide_external_symbol", + srcs = ["provide_external_symbol.go"], + cgo = True, + target_compatible_with = select({ + "@platforms//os:osx": [], + "@platforms//os:linux": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + deps = [":use_external_symbol"], +) + +cc_library( + name = "native_dep", + srcs = ["native_dep.c"], + hdrs = ["native_dep.h"], + # Force static linking to ensure that the build doesn't succeed by + # accidentally picking up the shared library in the search path. + linkstatic = True, +) + +go_library( + name = "transitive_dep", + srcs = ["transitive_dep.go"], + cdeps = [":native_dep"], + cgo = True, + importpath = "github.com/bazelbuild/rules_go/tests/core/cgo/transitive_dep", +) + +go_library( + name = "direct_dep", + srcs = ["direct_dep.go"], + importpath = "github.com/bazelbuild/rules_go/tests/core/cgo/direct_dep", + deps = [":transitive_dep"], +) + +go_binary( + name = "use_transitive_symbol", + srcs = ["use_transitive_symbol.go"], + cgo = True, + linkmode = "c-archive", + deps = [":direct_dep"], +) + +cc_binary( + name = "use_c_symbol_through_go", + srcs = ["use_c_symbol_through_go.c"], + deps = [":use_transitive_symbol"], +) |