我尝试让 MinGw 在 Windows 上工作。
@silvergasp 或@Ghostrider,因为您参与了在这个帖子中,我尝试做类似的事情也许您可以提供帮助。我尝试使用本地安装的 MinGw 并将其配置为工具链。 这只是了解如何设置嵌入式工具链的第一步。 但当我尝试遵循这个教程并尝试适应它时,我失败了。
cc_toolchain_config.bzl
load("@bazel_tools//tools/build_defs/cc:action_names.bzl", "ACTION_NAMES")
load(
"@bazel_tools//tools/cpp:cc_toolchain_config_lib.bzl",
"feature",
"flag_group",
"flag_set",
"tool_path",
"action_config",
"tool",
)
all_link_actions = [
ACTION_NAMES.cpp_link_executable,
ACTION_NAMES.cpp_link_dynamic_library,
ACTION_NAMES.cpp_link_nodeps_dynamic_library,
]
def _impl(ctx):
tool_paths = [
tool_path(
name = "gcc",
path = "false",
#path = "C:\\MinGW\\bin\\gcc.exe", # Error 1
),
tool_path(
name = "ld",
path = "false",
#path = "C:\\MinGW\\bin\\ld.exe", # Error 1
),
tool_path(
name = "ar",
path = "false",
),
tool_path(
name = "cpp",
path = "false",
),
tool_path(
name = "gcov",
path = "false",
),
tool_path(
name = "nm",
path = "false",
),
tool_path(
name = "objdump",
path = "false",
),
tool_path(
name = "strip",
path = "false",
),
]
features = [
feature(
name = "default_linker_flags",
enabled = True,
flag_sets = [
flag_set(
actions = all_link_actions,
flag_groups = ([
flag_group(
flags = [
"-lstdc++",
],
),
]),
),
],
),
]
action_configs = [
action_config (
action_name = ACTION_NAMES.c_compile,
tools = [
# NEW label type tool field introduced in #10967
tool(
# tool = ctx.executable.my_ld),
path = "C:\\MinGW\\bin\\gcc.exe"
)
],
),
action_config (
action_name = ACTION_NAMES.cpp_link_executable,
tools = [
# NEW label type tool field introduced in #10967
tool(
# tool = ctx.executable.my_ld,
path = "C:\\MinGW\\bin\\ld.exe"
)
],
),
]
return cc_common.create_cc_toolchain_config_info(
ctx = ctx,
features = features, # NEW
cxx_builtin_include_directories = [
"C:\\MinGW\\lib\\gcc\\mingw32\\6.3.0\\include",
"C:\\MinGW\\include",
],
toolchain_identifier = "local",
host_system_name = "local",
target_system_name = "local",
target_cpu = "k8",
target_libc = "unknown",
compiler = "mingw",
abi_version = "unknown",
abi_libc_version = "unknown",
tool_paths = tool_paths,
action_configs = action_configs,
)
cc_toolchain_config = rule(
implementation = _impl,
attrs = {},
provides = [CcToolchainConfigInfo],
)
当我尝试提供 tool_path.path 的路径时,我收到 # 错误 1。
D:\BazelBuild\examples\cpp-tutorial\stage1>bazel build --config=mingw_config //main:hello-world
Analyzing: target //main:hello-world (0 packages loaded, 0 targets configured)
FATAL: bazel crashed due to an internal error. Printing stack trace:
java.lang.RuntimeException: Unrecoverable error while evaluating node 'ConfiguredTargetKey{label=//toolchain:x86_toolchain_config, config=BuildConfigurationValue.Key[02e79dd9de174d25399e85bf1b0833ded09d49738442a403231bf1994cd72e28]}' (requested by nodes 'ConfiguredTargetKey{label=//toolchain:x86_toolchain, config=BuildConfigurationValue.Key[02e79dd9de174d25399e85bf1b0833ded09d49738442a403231bf1994cd72e28]}')
at com.google.devtools.build.skyframe.AbstractParallelEvaluator$Evaluate.run(AbstractParallelEvaluator.java:674)
at com.google.devtools.build.lib.concurrent.AbstractQueueVisitor$WrappedRunnable.run(AbstractQueueVisitor.java:382)
at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(Unknown Source)
at java.base/java.util.concurrent.ForkJoinTask.doExec(Unknown Source)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(Unknown Source)
at java.base/java.util.concurrent.ForkJoinPool.scan(Unknown Source)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(Unknown Source)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(Unknown Source)
Caused by: net.starlark.java.eval.Starlark$UncheckedEvalException: IllegalStateException thrown during Starlark evaluation (//toolchain:x86_toolchain_config)
at <starlark>.create_cc_toolchain_config_info(<builtin>:0)
at <starlark>._impl(D:/bazelbuild/examples/cpp-tutorial/stage1/toolchain/cc_toolchain_config.bzl:73)
Caused by: java.lang.IllegalStateException: com.google.protobuf.TextFormat$ParseException: 4:16: Invalid escape sequence: '\M'
at com.google.devtools.build.lib.rules.cpp.CppActionConfigs.getLegacyActionConfigs(CppActionConfigs.java:1372)
at com.google.devtools.build.lib.rules.cpp.CcModule.ccToolchainConfigInfoFromStarlark(CcModule.java:1250)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at net.starlark.java.eval.MethodDescriptor.call(MethodDescriptor.java:162)
at net.starlark.java.eval.BuiltinFunction.fastcall(BuiltinFunction.java:77)
at net.starlark.java.eval.Starlark.fastcall(Starlark.java:619)
at net.starlark.java.eval.Eval.evalCall(Eval.java:672)
at net.starlark.java.eval.Eval.eval(Eval.java:489)
at net.starlark.java.eval.Eval.execReturn(Eval.java:249)
at net.starlark.java.eval.Eval.exec(Eval.java:288)
at net.starlark.java.eval.Eval.execStatements(Eval.java:82)
at net.starlark.java.eval.Eval.execFunctionBody(Eval.java:66)
at net.starlark.java.eval.StarlarkFunction.fastcall(StarlarkFunction.java:191)
at net.starlark.java.eval.Starlark.fastcall(Starlark.java:619)
at com.google.devtools.build.lib.analysis.starlark.StarlarkRuleConfiguredTargetUtil.buildRule(StarlarkRuleConfiguredTargetUtil.java:99)
at com.google.devtools.build.lib.analysis.ConfiguredTargetFactory.createRule(ConfiguredTargetFactory.java:353)
...
当我尝试通过行动提供它时,我得到了这个。
D:\BazelBuild\examples\cpp-tutorial\stage1_toolchain_1>bazelisk build --config=asmjs //main:hello-world
Starting local Bazel server and connecting to it...
INFO: Analyzed target //main:hello-world (38 packages loaded, 162 targets configured).
INFO: Found 1 target...
ERROR: D:/bazelbuild/examples/cpp-tutorial/stage1_toolchain_1/main/BUILD:3:10: Compiling main/hello-world.cc failed: missing input file '//toolchain:empty'
ERROR: D:/bazelbuild/examples/cpp-tutorial/stage1_toolchain_1/main/BUILD:3:10: Compiling main/hello-world.cc failed: 1 input file(s) do not exist
Target //main:hello-world failed to build
Use --verbose_failures to see the command lines of failed build steps.
ERROR: D:/bazelbuild/examples/cpp-tutorial/stage1_toolchain_1/main/BUILD:3:10 Compiling main/hello-world.cc failed: 1 input file(s) do not exist
INFO: Elapsed time: 3.749s, Critical Path: 0.02s
INFO: 1 process: 1 internal.
FAILED: Build did NOT complete successfully
如果您能为我指明正确的方向,那就太好了。 第二个问题是,是否有任何教程展示如何使用本地安装的工具/exe,而不将其包装在脚本中?
对我来说,在工具链文件夹中创建“空”文件解决了这个问题。所以请创建
“
查看这些问题: https://github.com/bazelbuild/bazel/issues/12856 https://github.com/bazelbuild/bazel/issues/16247