Add ability to specify DLL dir (#939)
This commit is contained in:
parent
21b0c40493
commit
cfe19aae68
|
@ -18,17 +18,15 @@ cmake(
|
||||||
"CMAKE_MACOSX_RPATH": "True",
|
"CMAKE_MACOSX_RPATH": "True",
|
||||||
},
|
},
|
||||||
lib_source = ":srcs",
|
lib_source = ":srcs",
|
||||||
|
out_interface_libs = select({
|
||||||
|
"//:windows": ["libhello.lib"],
|
||||||
|
"//conditions:default": [],
|
||||||
|
}),
|
||||||
out_shared_libs = select({
|
out_shared_libs = select({
|
||||||
"//:macos": ["libhello.dylib"],
|
"//:macos": ["libhello.dylib"],
|
||||||
"//:windows": ["libhello.dll"],
|
"//:windows": ["libhello.dll"],
|
||||||
"//conditions:default": ["libhello.so"],
|
"//conditions:default": ["libhello.so"],
|
||||||
}),
|
}),
|
||||||
# TODO: The `.dll` is installed in the `bin` directory. To account for this, windows
|
|
||||||
# moves it to the `lib` directory. The rules should account for this case.
|
|
||||||
postfix_script = select({
|
|
||||||
"//:windows": "cp -p $$INSTALLDIR$$/bin/libhello.dll $$INSTALLDIR$$/lib",
|
|
||||||
"//conditions:default": None,
|
|
||||||
}),
|
|
||||||
)
|
)
|
||||||
|
|
||||||
cc_test(
|
cc_test(
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 2.8.4)
|
cmake_minimum_required(VERSION 2.8.4)
|
||||||
|
|
||||||
|
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
|
||||||
|
|
||||||
project(hellolib LANGUAGES C)
|
project(hellolib LANGUAGES C)
|
||||||
|
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
|
@ -151,6 +151,11 @@ CC_EXTERNAL_RULE_ATTRIBUTES = {
|
||||||
doc = "Optional names of additional directories created by the build that should be declared as bazel action outputs",
|
doc = "Optional names of additional directories created by the build that should be declared as bazel action outputs",
|
||||||
mandatory = False,
|
mandatory = False,
|
||||||
),
|
),
|
||||||
|
"out_dll_dir": attr.string(
|
||||||
|
doc = "Optional name of the output subdirectory with the dll files, defaults to 'bin'.",
|
||||||
|
mandatory = False,
|
||||||
|
default = "bin",
|
||||||
|
),
|
||||||
"out_headers_only": attr.bool(
|
"out_headers_only": attr.bool(
|
||||||
doc = "Flag variable to indicate that the library produces only headers",
|
doc = "Flag variable to indicate that the library produces only headers",
|
||||||
mandatory = False,
|
mandatory = False,
|
||||||
|
@ -502,6 +507,7 @@ def cc_external_rule_impl(ctx, attrs):
|
||||||
externally_built = ForeignCcArtifactInfo(
|
externally_built = ForeignCcArtifactInfo(
|
||||||
gen_dir = installdir_copy.file,
|
gen_dir = installdir_copy.file,
|
||||||
bin_dir_name = attrs.out_bin_dir,
|
bin_dir_name = attrs.out_bin_dir,
|
||||||
|
dll_dir_name = attrs.out_dll_dir,
|
||||||
lib_dir_name = attrs.out_lib_dir,
|
lib_dir_name = attrs.out_lib_dir,
|
||||||
include_dir_name = attrs.out_include_dir,
|
include_dir_name = attrs.out_include_dir,
|
||||||
)
|
)
|
||||||
|
@ -741,7 +747,7 @@ def _define_outputs(ctx, attrs, lib_name):
|
||||||
|
|
||||||
libraries = LibrariesToLinkInfo(
|
libraries = LibrariesToLinkInfo(
|
||||||
static_libraries = _declare_out(ctx, lib_name, attrs.out_lib_dir, static_libraries),
|
static_libraries = _declare_out(ctx, lib_name, attrs.out_lib_dir, static_libraries),
|
||||||
shared_libraries = _declare_out(ctx, lib_name, attrs.out_lib_dir, attr_shared_libs),
|
shared_libraries = _declare_out(ctx, lib_name, attrs.out_dll_dir if targets_windows(ctx, None) else attrs.out_lib_dir, attr_shared_libs),
|
||||||
interface_libraries = _declare_out(ctx, lib_name, attrs.out_lib_dir, attr_interface_libs),
|
interface_libraries = _declare_out(ctx, lib_name, attrs.out_lib_dir, attr_interface_libs),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ Can not be used as a top-level provider.
|
||||||
Instances of ForeignCcArtifactInfo are encapsulated in a depset [ForeignCcDepsInfo::artifacts](#ForeignCcDepsInfo-artifacts).""",
|
Instances of ForeignCcArtifactInfo are encapsulated in a depset [ForeignCcDepsInfo::artifacts](#ForeignCcDepsInfo-artifacts).""",
|
||||||
fields = {
|
fields = {
|
||||||
"bin_dir_name": "Bin directory, relative to install directory",
|
"bin_dir_name": "Bin directory, relative to install directory",
|
||||||
|
"dll_dir_name": "DLL directory, relative to install directory",
|
||||||
"gen_dir": "Install directory",
|
"gen_dir": "Install directory",
|
||||||
"include_dir_name": "Include directory, relative to install directory",
|
"include_dir_name": "Include directory, relative to install directory",
|
||||||
"lib_dir_name": "Lib directory, relative to install directory",
|
"lib_dir_name": "Lib directory, relative to install directory",
|
||||||
|
|
Loading…
Reference in New Issue