blob: 21262ae68821436a432a1bf3ce7c5e37986b8b5f [file] [log] [blame]
# This is a simple windows_dll_library rule for builing a DLL Windows
# that can be depended on by other cc rules.
#
# Example useage:
# windows_dll_library(
# name = "hellolib",
# srcs = [
# "hello-library.cpp",
# ],
# hdrs = ["hello-library.h"],
# # Define COMPILING_DLL to export symbols during compiling the DLL.
# copts = ["/DCOMPILING_DLL"],
# )
#
def windows_dll_library(
name,
srcs = [],
hdrs = [],
visibility = None,
**kwargs):
"""A simple windows_dll_library rule for builing a DLL Windows."""
dll_name = name + ".dll"
import_lib_name = name + "_import_lib"
import_target_name = name + "_dll_import"
# Build the shared library
native.cc_binary(
name = dll_name,
srcs = srcs + hdrs,
linkshared = 1,
**kwargs
)
# Get the import library for the dll
native.filegroup(
name = import_lib_name,
srcs = [":" + dll_name],
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 the dll.
native.cc_import(
name = import_target_name,
interface_library = ":" + import_lib_name,
shared_library = ":" + dll_name,
)
# Create a new cc_library to also include the headers needed for the shared library
native.cc_library(
name = name,
hdrs = hdrs,
visibility = visibility,
deps = [
":" + import_target_name,
],
)