diff --git a/docs/reference/toolchain.md b/docs/reference/toolchain.md index f7607f2e..023b129c 100644 --- a/docs/reference/toolchain.md +++ b/docs/reference/toolchain.md @@ -6,14 +6,14 @@ This file declares the `ll_toolchain` rule. ## `ll_toolchain` -
ll_toolchain(name, LL_AMD_INCLUDES, LL_AMD_LIBRARIES, LL_CFLAGS, LL_CUDA_DRIVER, LL_CUDA_RUNTIME,
-             LL_CUDA_TOOLKIT, LL_DYNAMIC_LINKER, LL_LDFLAGS, address_sanitizer, archiver,
-             bitcode_linker, builtin_includes, c_driver, clang_tidy, clang_tidy_runner,
-             compiler_runtime, cov, cpp_abihdrs, cpp_abilib, cpp_driver, cpp_stdhdrs, cpp_stdlib,
-             hip_libraries, hip_runtime, leak_sanitizer, linker, linker_wrapper, llvm_project_deps,
-             machine_code_tool, memory_sanitizer, objcopy, offload_bundler, offload_packager, opt,
-             profdata, profile, rocm_device_libs, symbolizer, thread_sanitizer,
-             undefined_behavior_sanitizer, unwind_library)
+
ll_toolchain(name, LL_AMD_INCLUDES, LL_AMD_LIBRARIES, LL_CFLAGS, LL_CUDA_DRIVER, LL_CUDA_TOOLKIT,
+             LL_DYNAMIC_LINKER, LL_LDFLAGS, address_sanitizer, archiver, bitcode_linker,
+             builtin_includes, c_driver, clang_tidy, clang_tidy_runner, compiler_runtime, cov,
+             cpp_abihdrs, cpp_abilib, cpp_driver, cpp_stdhdrs, cpp_stdlib, hip_libraries, hip_runtime,
+             leak_sanitizer, linker, linker_wrapper, llvm_project_deps, machine_code_tool,
+             memory_sanitizer, objcopy, offload_bundler, offload_packager, opt, profdata, profile,
+             rocm_device_libs, symbolizer, thread_sanitizer, undefined_behavior_sanitizer,
+             unwind_library)
`attributes` @@ -24,7 +24,6 @@ This file declares the `ll_toolchain` rule. | `LL_AMD_LIBRARIES` | Label, optional, defaults to None.

Link search paths for dependencies making use of AMD toolchains.

Affects the `hip_amdgpu` toolchain. | | `LL_CFLAGS` | Label, optional, defaults to None.

Arbitrary flags added to all compile actions. | | `LL_CUDA_DRIVER` | Label, optional, defaults to None.

The path to the CUDA driver.

Affects the `cuda_nvptx` and `hip_nvptx` toolchains. | -| `LL_CUDA_RUNTIME` | Label, optional, defaults to None.

The path to the CUDA runtime.

Affects the `cuda_nvptx` and `hip_nvptx` toolchains. | | `LL_CUDA_TOOLKIT` | Label, optional, defaults to None.

The path to the CUDA toolkit.

Affects the `cuda_nvptx` and `hip_nvptx` toolchains. | | `LL_DYNAMIC_LINKER` | Label, optional, defaults to None.

The linker from the glibc we compile and link against. | | `LL_LDFLAGS` | Label, optional, defaults to None.

Arbitrary flags added to all link actions. | diff --git a/ll/BUILD.bazel b/ll/BUILD.bazel index ce730671..a8244a83 100644 --- a/ll/BUILD.bazel +++ b/ll/BUILD.bazel @@ -94,7 +94,6 @@ string_flag( "LL_AMD_INCLUDES", "LL_AMD_LIBRARIES", "LL_CUDA_TOOLKIT", - "LL_CUDA_RUNTIME", "LL_CUDA_DRIVER", # Unset values default to an empty string. @@ -125,11 +124,6 @@ ll_toolchain( ":cuda_nvptx": ":LL_CUDA_DRIVER", "//conditions:default": "LL_UNSET", }), - LL_CUDA_RUNTIME = select({ - ":hip_nvptx": ":LL_CUDA_RUNTIME", - ":cuda_nvptx": ":LL_CUDA_RUNTIME", - "//conditions:default": "LL_UNSET", - }), LL_CUDA_TOOLKIT = select({ ":hip_nvptx": ":LL_CUDA_TOOLKIT", ":cuda_nvptx": ":LL_CUDA_TOOLKIT", diff --git a/ll/args.bzl b/ll/args.bzl index 4766470a..9a168d88 100644 --- a/ll/args.bzl +++ b/ll/args.bzl @@ -484,15 +484,16 @@ def link_executable_args(ctx, in_files, out_file, mode): "cuda_nvptx", "hip_nvptx", ]: - for location in [toolchain.LL_CUDA_TOOLKIT, toolchain.LL_CUDA_RUNTIME]: - if location != "": - args.add(location, format = "-rpath=%s/lib") - args.add(location, format = "-L%s/lib") - - # TODO: Not pretty. With the right nix packages we can probably - # do this more elegantly. - args.add(location, format = "-rpath=%s/lib/stubs") - args.add(location, format = "-L%s/lib/stubs") + # Both the CUDA driver and the CUDA toolkit contain `libcuda.so`. + # Link against `/lib/libcuda.so` at build time, but make + # sure that `/lib/libcuda.so` takes precedence at runtime. + if toolchain.LL_CUDA_DRIVER != "": + args.add(toolchain.LL_CUDA_DRIVER, format = "-rpath=%s/lib") + + if toolchain.LL_CUDA_TOOLKIT != "": + args.add(toolchain.LL_CUDA_TOOLKIT, format = "-rpath=%s/lib") + args.add(toolchain.LL_CUDA_TOOLKIT, format = "-L%s/lib") + args.add(toolchain.LL_CUDA_TOOLKIT, format = "-L%s/lib/stubs") args.add("-lcuda") args.add("-lcudart_static") diff --git a/ll/attributes.bzl b/ll/attributes.bzl index 2daa33dc..2ad865eb 100644 --- a/ll/attributes.bzl +++ b/ll/attributes.bzl @@ -589,12 +589,6 @@ LL_TOOLCHAIN_ATTRS = { Affects the `cuda_nvptx` and `hip_nvptx` toolchains. """, ), - "LL_CUDA_RUNTIME": attr.label( - doc = """The path to the CUDA runtime. - - Affects the `cuda_nvptx` and `hip_nvptx` toolchains. - """, - ), "LL_CUDA_DRIVER": attr.label( doc = """The path to the CUDA driver. diff --git a/ll/toolchain.bzl b/ll/toolchain.bzl index a28531b6..461afa98 100644 --- a/ll/toolchain.bzl +++ b/ll/toolchain.bzl @@ -70,7 +70,6 @@ def _ll_toolchain_impl(ctx): LL_AMD_INCLUDES = ctx.attr.LL_AMD_INCLUDES[BuildSettingInfo].value, LL_AMD_LIBRARIES = ctx.attr.LL_AMD_LIBRARIES[BuildSettingInfo].value, LL_CUDA_TOOLKIT = ctx.attr.LL_CUDA_TOOLKIT[BuildSettingInfo].value, - LL_CUDA_RUNTIME = ctx.attr.LL_CUDA_RUNTIME[BuildSettingInfo].value, LL_CUDA_DRIVER = ctx.attr.LL_CUDA_DRIVER[BuildSettingInfo].value, ), ] diff --git a/modules/defaultLlEnv.nix b/modules/defaultLlEnv.nix index 03c2e703..e52dcd29 100644 --- a/modules/defaultLlEnv.nix +++ b/modules/defaultLlEnv.nix @@ -74,6 +74,5 @@ in # Flags for CUDA dependencies. "LL_CUDA_TOOLKIT=${lib.strings.optionalString pkgs.config.cudaSupport "${cudatoolkit}"}" - "LL_CUDA_RUNTIME=${lib.strings.optionalString pkgs.config.cudaSupport "${cudatoolkit.lib}"}" "LL_CUDA_DRIVER=${lib.strings.optionalString pkgs.config.cudaSupport "${nvidia_x11}"}" ] diff --git a/modules/rules_ll.nix b/modules/rules_ll.nix index 1e68080a..c2bab93d 100644 --- a/modules/rules_ll.nix +++ b/modules/rules_ll.nix @@ -49,9 +49,7 @@ in - `LL_DYNAMIC_LINKER` - `LL_AMD_INCLUDES` - `LL_AMD_LIBRARIES` - - `LL_AMD_RPATHS` - `LL_CUDA_TOOLKIT` - - `LL_CUDA_RUNTIME` - `LL_CUDA_DRIVER` Attempting to set any other value will result in Bazel errors.