blob: 588eef472f7f488e209d7ddd664f3196e8735115 [file] [log] [blame]
filegroup(
name = "srcs",
srcs = glob(["**"]),
visibility = ["//examples:__pkg__"],
)
cc_library(
name = "hello-library-header",
hdrs = ["hello-library.h"],
)
cc_binary(
name = "hellolib.dll",
srcs = [
"hello-library.cpp",
],
# Define COMPILING_DLL to export symbols during compiling the DLL.
# See hello-library.h
copts = ["/DCOMPILING_DLL"],
linkshared = 1,
deps = [
":hello-library-header",
],
)
# **Explicitly link to hellolib.dll**
# Declare hellolib.dll as data dependency and load it explicitly in code.
cc_binary(
name = "hello_world-load-dll-at-runtime",
srcs = [
"hello_world-load-dll-at-runtime.cpp",
],
data = [":hellolib.dll"],
)
# **Implicitly link to hellolib.dll**
# Get the import library for hellolib.dll
filegroup(
name = "hello_lib_import_lib",
srcs = [":hellolib.dll"],
output_group = "interface_library",
)
# Because we cannot directly depend on cc_binary from other cc rules in deps attribute,
# we use cc_import as a bridge to depend on hellolib.dll
cc_import(
name = "hellolib_dll_import",
interface_library = ":hello_lib_import_lib",
shared_library = ":hellolib.dll",
)
# Create a new cc_library to also include the headers needed for hellolib.dll
cc_library(
name = "hellolib_dll",
deps = [
":hello-library-header",
":hellolib_dll_import",
],
)
cc_binary(
name = "hello_world-link-to-dll-via-lib",
srcs = [
"hello_world-link-to-dll-via-lib.cpp",
],
deps = [":hellolib_dll"],
)