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"], )