Skip to content

Commit bcd0ec4

Browse files
authored
msvc: fix make var for windows deps (#1324)
1 parent aaedbc0 commit bcd0ec4

File tree

5 files changed

+32
-13
lines changed

5 files changed

+32
-13
lines changed

foreign_cc/configure.bzl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
build tool
33
"""
44

5+
load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain")
56
load(
67
"//foreign_cc/private:cc_toolchain_util.bzl",
78
"get_flags_info",
@@ -82,6 +83,9 @@ def _create_configure_script(configureParameters):
8283
if xcompile_options:
8384
configure_options.extend(xcompile_options)
8485

86+
cc_toolchain = find_cpp_toolchain(ctx)
87+
is_msvc = cc_toolchain.compiler == "msvc-cl"
88+
8589
configure = create_configure_script(
8690
workspace_name = ctx.workspace_name,
8791
tools = tools,
@@ -108,6 +112,7 @@ def _create_configure_script(configureParameters):
108112
make_args = args,
109113
executable_ldflags_vars = ctx.attr.executable_ldflags_vars,
110114
shared_ldflags_vars = ctx.attr.shared_ldflags_vars,
115+
is_msvc = is_msvc,
111116
)
112117
return define_install_prefix + configure
113118

foreign_cc/make.bzl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
"""A rule for building projects using the [GNU Make](https://www.gnu.org/software/make/) build tool"""
22

3+
load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain")
34
load(
45
"//foreign_cc/private:cc_toolchain_util.bzl",
56
"get_flags_info",
@@ -66,6 +67,9 @@ def _create_make_script(configureParameters):
6667
install_prefix = ctx.attr.install_prefix,
6768
))
6869

70+
cc_toolchain = find_cpp_toolchain(ctx)
71+
is_msvc = cc_toolchain.compiler == "msvc-cl"
72+
6973
return create_make_script(
7074
workspace_name = ctx.workspace_name,
7175
tools = tools,
@@ -81,6 +85,7 @@ def _create_make_script(configureParameters):
8185
make_install_prefix = ctx.attr.install_prefix,
8286
executable_ldflags_vars = ctx.attr.executable_ldflags_vars,
8387
shared_ldflags_vars = ctx.attr.shared_ldflags_vars,
88+
is_msvc = is_msvc,
8489
)
8590

8691
def _attrs():

foreign_cc/private/configure_script.bzl

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ def create_configure_script(
2828
make_targets,
2929
make_args,
3030
executable_ldflags_vars,
31-
shared_ldflags_vars):
31+
shared_ldflags_vars,
32+
is_msvc):
3233
ext_build_dirs = inputs.ext_build_dirs
3334

3435
script = pkgconfig_script(ext_build_dirs)
@@ -73,15 +74,17 @@ def create_configure_script(
7374
).lstrip())
7475

7576
script.append("##mkdirs## $$BUILD_TMPDIR$$/$$INSTALL_PREFIX$$")
77+
78+
make_commands = []
7679
script.append("{env_vars} {prefix}\"{configure}\" {prefix_flag}$$BUILD_TMPDIR$$/$$INSTALL_PREFIX$$ {user_options}".format(
77-
env_vars = get_make_env_vars(workspace_name, tools, flags, env_vars, deps, inputs),
80+
env_vars = get_make_env_vars(workspace_name, tools, flags, env_vars, deps, inputs, is_msvc, make_commands),
7881
prefix = configure_prefix,
7982
configure = configure_path,
8083
prefix_flag = prefix_flag,
8184
user_options = " ".join(user_options),
8285
))
8386

84-
ldflags_make_vars = get_ldflags_make_vars(executable_ldflags_vars, shared_ldflags_vars, workspace_name, flags, env_vars, deps, inputs)
87+
ldflags_make_vars = get_ldflags_make_vars(executable_ldflags_vars, shared_ldflags_vars, workspace_name, flags, env_vars, deps, inputs, is_msvc)
8588

8689
make_commands = []
8790
for target in make_targets:

foreign_cc/private/make_env_vars.bzl

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@ def get_make_env_vars(
1111
user_vars,
1212
deps,
1313
inputs,
14-
make_commands = []):
14+
is_msvc,
15+
make_commands):
1516
vars = _get_make_variables(workspace_name, tools, flags, user_vars, make_commands)
16-
deps_flags = _define_deps_flags(deps, inputs)
17+
deps_flags = _define_deps_flags(deps, inputs, is_msvc)
1718

1819
# For cross-compilation.
1920
if "RANLIB" not in vars.keys():
@@ -42,27 +43,31 @@ def get_ldflags_make_vars(
4243
flags,
4344
user_vars,
4445
deps,
45-
inputs):
46+
inputs,
47+
is_msvc):
4648
vars = _get_ldflags_vars(executable_ldflags_vars, shared_ldflags_vars, flags, user_vars)
4749

48-
deps_flags = _define_deps_flags(deps, inputs)
50+
deps_flags = _define_deps_flags(deps, inputs, is_msvc)
4951
for key in vars.keys():
5052
vars[key] = vars[key] + deps_flags.libs
5153

5254
return " ".join(["{}=\"{}\""
5355
.format(key, _join_flags_list(workspace_name, vars[key])) for key in vars])
5456

55-
def _define_deps_flags(deps, inputs):
57+
def _define_deps_flags(deps, inputs, is_msvc):
5658
# It is very important to keep the order for the linker => put them into list
5759
lib_dirs = []
5860

61+
# msvc compiler uses -LIBPATH instead of -L
62+
lib_flag = "-LIBPATH:" if is_msvc else "-L"
63+
5964
# Here go libraries built with Bazel
6065
gen_dirs_set = {}
6166
for lib in inputs.libs:
6267
dir_ = lib.dirname
6368
if not gen_dirs_set.get(dir_):
6469
gen_dirs_set[dir_] = 1
65-
lib_dirs.append("-L$$EXT_BUILD_ROOT$$/" + dir_)
70+
lib_dirs.append(lib_flag + "$$EXT_BUILD_ROOT$$/" + dir_)
6671

6772
include_dirs_set = {}
6873
for include_dir in inputs.include_dirs:
@@ -89,7 +94,7 @@ def _define_deps_flags(deps, inputs):
8994

9095
dir_name = artifact.gen_dir.basename
9196
include_dirs.append("-I$$EXT_BUILD_DEPS$$/{}/{}".format(dir_name, artifact.include_dir_name))
92-
lib_dirs.append("-L$$EXT_BUILD_DEPS$$/{}/{}".format(dir_name, artifact.lib_dir_name))
97+
lib_dirs.append(lib_flag + "$$EXT_BUILD_DEPS$$/{}/{}".format(dir_name, artifact.lib_dir_name))
9398

9499
return struct(
95100
libs = lib_dirs,

foreign_cc/private/make_script.bzl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ def create_make_script(
1717
make_args,
1818
make_install_prefix,
1919
executable_ldflags_vars,
20-
shared_ldflags_vars):
20+
shared_ldflags_vars,
21+
is_msvc):
2122
ext_build_dirs = inputs.ext_build_dirs
2223

2324
script = pkgconfig_script(ext_build_dirs)
@@ -26,7 +27,7 @@ def create_make_script(
2627

2728
script.append("##enable_tracing##")
2829

29-
ldflags_make_vars = get_ldflags_make_vars(executable_ldflags_vars, shared_ldflags_vars, workspace_name, flags, env_vars, deps, inputs)
30+
ldflags_make_vars = get_ldflags_make_vars(executable_ldflags_vars, shared_ldflags_vars, workspace_name, flags, env_vars, deps, inputs, is_msvc)
3031

3132
make_commands = []
3233
for target in make_targets:
@@ -39,7 +40,7 @@ def create_make_script(
3940
install_prefix = make_install_prefix,
4041
))
4142

42-
configure_vars = get_make_env_vars(workspace_name, tools, flags, env_vars, deps, inputs, make_commands)
43+
configure_vars = get_make_env_vars(workspace_name, tools, flags, env_vars, deps, inputs, is_msvc, make_commands)
4344

4445
script.extend(["{env_vars} {command}".format(
4546
env_vars = configure_vars,

0 commit comments

Comments
 (0)