Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ module(
bazel_dep(name = "bazel_lib", version = "3.0.0")
bazel_dep(name = "bazel_features", version = "1.32.0")
bazel_dep(name = "bazel_skylib", version = "1.8.1")
bazel_dep(name = "curl", version = "8.8.0.bcr.3")
bazel_dep(name = "package_metadata", version = "0.0.5")
bazel_dep(name = "platforms", version = "0.0.11")
bazel_dep(name = "rules_cc", version = "0.2.0")
Expand Down
10 changes: 2 additions & 8 deletions d/private/rules/cc_toolchain.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,8 @@ _UNSUPPORTED_FEATURES = [
]

_LINKER_OPTIONS_DENYLIST = {
# Don't link C++ libraries
"-lstdc++": None,
"-lc++": None,
"-lc++abi": None,
# libm and libobjc are added by the D compiler already, so suppress them here, to avoid warnings
"-lm": None,
"-lobjc": None,
"-fobjc-link-runtime": None,
# d-runtime uses __start/__stop_minfo
"-Wl,--gc-sections": None,
# --target is passed by the D compiler
"--target=": None,
# --target passed by the D compiler conflicts with -mmacosx-version-min set by cc_toolchain
Expand Down
39 changes: 26 additions & 13 deletions d/private/rules/common.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -112,24 +112,38 @@ def compilation_action(ctx, target_type = TARGET_TYPE.LIBRARY):
The provider containing the compilation information.
"""
toolchain = ctx.toolchains["//d:toolchain_type"].d_toolchain_info
c_deps = [d[CcInfo] for d in ctx.attr.deps if CcInfo in d]
c_linker_inputs = [
cc_deps = [d[CcInfo] for d in ctx.attr.deps if CcInfo in d]
cc_linker_inputs = [
linker_input
for dep in c_deps
for dep in cc_deps
for linker_input in dep.linking_context.linker_inputs.to_list()
]
c_libraries = depset([
cc_libraries = depset([
lib.pic_static_library if lib.pic_static_library else lib.static_library
for li in c_linker_inputs
for li in cc_linker_inputs
for lib in li.libraries
], order = "topological")
fix_linker_flags = {
"-pthread": "-lpthread",
}
cc_linker_flags = depset([
fix_linker_flags.get(flag, flag)
for li in cc_linker_inputs
for flag in li.user_link_flags
])
d_deps = [d[DInfo] for d in ctx.attr.deps if DInfo in d]
compiler_flags = depset(ctx.attr.dopts, transitive = [d.compiler_flags for d in d_deps])
compiler_flags = depset(
ctx.attr.dopts,
transitive = [d.compiler_flags for d in d_deps],
)
imports = depset(
[paths.join(ctx.label.workspace_root, ctx.label.package, imp) for imp in ctx.attr.imports],
transitive = [d.imports for d in d_deps],
)
linker_flags = depset(ctx.attr.linkopts, transitive = [d.linker_flags for d in d_deps])
linker_flags = depset(
ctx.attr.linkopts,
transitive = [d.linker_flags for d in d_deps] + [cc_linker_flags],
)
string_imports = depset(
([paths.join(ctx.label.workspace_root, ctx.label.package)] if ctx.files.string_srcs else []) +
[paths.join(ctx.label.workspace_root, ctx.label.package, imp) for imp in ctx.attr.string_imports],
Expand All @@ -144,15 +158,15 @@ def compilation_action(ctx, target_type = TARGET_TYPE.LIBRARY):
args.add_all(toolchain.compiler_flags)
args.add_all(compiler_flags.to_list())
args.add_all(versions.to_list(), format_each = "-version=%s")
args.add_all(toolchain.linker_flags)
args.add_all(linker_flags.to_list(), format_each = "-L=%s")
output = None
cc_toolchain = None
env = ctx.var
if target_type in [TARGET_TYPE.BINARY, TARGET_TYPE.TEST]:
args.add_all(toolchain.linker_flags)
args.add_all(linker_flags.to_list(), format_each = "-L=%s")
for dep in d_deps:
args.add_all(dep.libraries)
args.add_all(c_libraries)
args.add_all(cc_libraries)
if target_type == TARGET_TYPE.TEST:
args.add_all(["-main", "-unittest"])
output = ctx.actions.declare_file(_binary_name(ctx, ctx.label.name))
Expand Down Expand Up @@ -183,7 +197,7 @@ def compilation_action(ctx, target_type = TARGET_TYPE.LIBRARY):

transitive_library_inputs = []
if target_type != TARGET_TYPE.LIBRARY:
transitive_library_inputs += [d.libraries for d in d_deps] + [c_libraries]
transitive_library_inputs += [d.libraries for d in d_deps] + [cc_libraries]
inputs = depset(
direct = ctx.files.srcs + ctx.files.string_srcs,
transitive = [toolchain.d_compiler[DefaultInfo].default_runfiles.files] +
Expand Down Expand Up @@ -219,8 +233,7 @@ def compilation_action(ctx, target_type = TARGET_TYPE.LIBRARY):
libraries = depset(
[] if ctx.attr.source_only else [output],
order = "topological",
transitive = [d.libraries for d in d_deps] +
[c_libraries],
transitive = [d.libraries for d in d_deps] + [cc_libraries],
),
linker_flags = linker_flags,
string_imports = depset(
Expand Down
7 changes: 6 additions & 1 deletion d/private/sdk/BUILD.dmd.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,12 @@ d_toolchain(
"-L--export-dynamic",
],
"@platforms//os:macos": ["-L-L{D_COMPILER_ROOT}/osx/lib"],
"@platforms//os:windows": ["-L/LIBPATH:{D_COMPILER_ROOT}/windows/lib64"],
"@platforms//os:windows": [
"-L/LIBPATH:{D_COMPILER_ROOT}/windows/lib64",
"-L/DEFAULTLIB:msvcrt.lib",
"-L/NODEFAULTLIB:libcmt",
"-L/INCREMENTAL:NO",
],
}),
rdmd_tool = ":rdmd",
)
3 changes: 1 addition & 2 deletions tools/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,14 @@ d_library(
"curl_downloader.d",
"integrity_hash.d",
],
linkopts = ["-lcurl"],
visibility = ["//dub:__subpackages__"],
deps = ["@curl"],
)

d_binary(
name = "generate_compiler_versions_bzl",
srcs = [
"generate_compiler_versions_bzl.d",
],
tags = ["manual"], # Not built by default; 'curl' dependency may not be available on all platforms.
deps = [":d_utils"],
)
Loading