blob: 437fce83ea2082646dd5b2aeb10d6b22045c2a04 [file] [edit]
set -euo pipefail
source "$(rlocation rules_cc/tests/test_utils.sh)"
source "$(rlocation rules_cc/tests/unittest.bash)"
function test_cc_shared_library_doesnt_link_libs_unnecessarily() {
mkdir -p foo/bar
cat > foo/baz.cc << EOF
#include "foo/baz.h"
int baz() { return 0; }
EOF
cat > foo/baz.h << EOF
int baz();
EOF
cat > foo/foo2.cc << EOF
#include "foo/foo2.h"
int foo2() { return 0; }
EOF
cat > foo/foo2.h << EOF
int foo2();
EOF
cat > foo/foo.cc << EOF
#include "foo/bar/bar.h"
// Included but symbol not used.
#include "foo/baz.h"
#include "foo/foo2.h"
int foo() { return foo2() + bar() + 0; }
EOF
cat > foo/BUILD << EOF
load("@rules_cc//cc:cc_library.bzl", "cc_library")
load("@rules_cc//cc:cc_shared_library.bzl", "cc_shared_library")
cc_library(
name = "foo2",
srcs = ["foo2.cc"],
hdrs = ["foo2.h"],
)
cc_library(
name = "foo",
srcs = ["foo.cc",],
deps = [
":baz",
":foo2",
"//foo/bar",
],
)
cc_library(
name = "baz",
srcs = ["baz.cc",],
hdrs = ["baz.h",],
)
cc_shared_library(
name = "foo_shared",
dynamic_deps = [
"//foo/bar:bar_shared",
],
deps = [
":foo",
],
)
EOF
cat > foo/bar/bar2.cc << EOF
#include "foo/bar/bar2.h"
int bar2() { return 0; }
EOF
echo "int bar2();" > foo/bar/bar2.h
cat > foo/bar/bar.cc << EOF
#include "foo/bar/bar.h"
#include "foo/bar/bar2.h"
int bar() { return bar2() + 0; }
EOF
echo "int bar();" > foo/bar/bar.h
cat > foo/bar/BUILD << EOF
load("@rules_cc//cc:cc_library.bzl", "cc_library")
load("@rules_cc//cc:cc_shared_library.bzl", "cc_shared_library")
package(
default_visibility = [
"//visibility:public",
],
)
cc_library(
name = "bar2",
srcs = ["bar2.cc"],
hdrs = ["bar2.h"],
)
cc_library(
name = "bar",
srcs = ["bar.cc"],
hdrs = ["bar.h"],
deps = [":bar2"],
)
cc_shared_library(
name = "bar_shared",
deps = [":bar"],
)
EOF
bazel build \
--noincompatible_remove_legacy_whole_archive \
--experimental_cc_shared_library \
//foo:foo_shared >& "${TEST_log}" || fail "Expected build to succeed"
so_file="bazel-bin/foo/libfoo_shared.so"
nm -D "$so_file" | grep -q "T _Z3foov" || fail "_Z3foov not linked statically"
nm -D "$so_file" | grep -q "T _Z4foo2v" || fail "_Z4foo2v not linked statically"
nm -D "$so_file" | grep -q "U _Z3barv" || fail "_Z3barv not linked dynamically"
nm -D "$so_file" | grep -q "baz" && fail "baz shoulod not be linked in anyway"
nm -D "$so_file" | grep -q "bar2" && fail "bar2 shoulod not be linked in anyway"
return 0
}
run_suite "Integration tests for cc_shared_library"