| """ | 
 | This is a simple windows_dll_library rule for builing a DLL Windows | 
 | that can be depended on by other cc rules. | 
 |  | 
 | Example usage: | 
 |   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"], | 
 |   ) | 
 | """ | 
 |  | 
 | load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_import", "cc_library") | 
 |  | 
 | def windows_dll_library( | 
 |         name, | 
 |         srcs = [], | 
 |         deps = [], | 
 |         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 | 
 |     cc_binary( | 
 |         name = dll_name, | 
 |         srcs = srcs + hdrs, | 
 |         deps = deps, | 
 |         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. | 
 |     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 | 
 |     cc_library( | 
 |         name = name, | 
 |         hdrs = hdrs, | 
 |         visibility = visibility, | 
 |         deps = deps + [ | 
 |             ":" + import_target_name, | 
 |         ], | 
 |     ) |