Skip to content

Commit

Permalink
Update rules_nixpkgs
Browse files Browse the repository at this point in the history
  • Loading branch information
aherrmann committed Jul 17, 2020
1 parent accd996 commit d015dd5
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 17 deletions.
119 changes: 104 additions & 15 deletions bazel_tools/nixpkgs-hermetic-cc-toolchain.patch
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,23 @@ index 721f64d..3ee682b 100644
Example:

```bzl
diff --git a/nixpkgs/BUILD.bazel b/nixpkgs/BUILD.bazel
index 09fa6aa..f055a77 100644
--- a/nixpkgs/BUILD.bazel
+++ b/nixpkgs/BUILD.bazel
@@ -6,7 +6,11 @@ exports_files([
"nixpkgs.bzl",
])

-filegroup(name = "srcs", srcs = glob(["**"]), visibility = ["//visibility:public"])
+filegroup(
+ name = "srcs",
+ srcs = glob(["**"]),
+ visibility = ["//visibility:public"],
+)

# @bazel_tools//tools does not define a bzl_library itself, instead we are
# supposed to define our own using the @bazel_tools//tools:bzl_srcs filegroup.
diff --git a/nixpkgs/constraints/BUILD.bazel b/nixpkgs/constraints/BUILD.bazel
index 6662530..94678bd 100644
--- a/nixpkgs/constraints/BUILD.bazel
Expand All @@ -214,14 +231,15 @@ index 6662530..94678bd 100644
)

diff --git a/nixpkgs/nixpkgs.bzl b/nixpkgs/nixpkgs.bzl
index fb87da4..9a9ad75 100644
index 5b77c87..5ff9dfa 100644
--- a/nixpkgs/nixpkgs.bzl
+++ b/nixpkgs/nixpkgs.bzl
@@ -1,7 +1,15 @@
@@ -1,12 +1,22 @@
"""Rules for importing Nixpkgs packages."""

+load("@bazel_skylib//lib:paths.bzl", "paths")
+load("@bazel_skylib//lib:sets.bzl", "sets")
+load("@bazel_skylib//lib:versions.bzl", "versions")
load("@bazel_tools//tools/cpp:cc_configure.bzl", "cc_autoconf_impl")
-load("@bazel_tools//tools/cpp:lib_cc_configure.bzl", "get_cpu_value")
+load(
Expand All @@ -233,8 +251,15 @@ index fb87da4..9a9ad75 100644
+load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")

def _nixpkgs_git_repository_impl(repository_ctx):
repository_ctx.file("BUILD")
@@ -70,6 +78,54 @@ nixpkgs_local_repository = repository_rule(
repository_ctx.file(
"BUILD",
- content = 'filegroup(name = "srcs", srcs = glob(["**"]), visibility = ["//visibility:public"])')
+ content = 'filegroup(name = "srcs", srcs = glob(["**"]), visibility = ["//visibility:public"])',
+ )

# Make "@nixpkgs" (syntactic sugar for "@nixpkgs//:nixpkgs") a valid
# label for default.nix.
@@ -72,6 +82,54 @@ nixpkgs_local_repository = repository_rule(
def _is_supported_platform(repository_ctx):
return repository_ctx.which("nix-build") != None

Expand Down Expand Up @@ -289,7 +314,7 @@ index fb87da4..9a9ad75 100644
def _nixpkgs_package_impl(repository_ctx):
repository = repository_ctx.attr.repository
repositories = repository_ctx.attr.repositories
@@ -117,8 +173,9 @@ def _nixpkgs_package_impl(repository_ctx):
@@ -119,8 +177,9 @@ def _nixpkgs_package_impl(repository_ctx):
else:
expr_args = ["-E", "import <nixpkgs> { config = {}; overlays = []; }"]

Expand All @@ -300,7 +325,7 @@ index fb87da4..9a9ad75 100644

expr_args.extend([
"-A",
@@ -133,7 +190,13 @@ def _nixpkgs_package_impl(repository_ctx):
@@ -135,7 +194,13 @@ def _nixpkgs_package_impl(repository_ctx):
"bazel-support/nix-out-link",
])

Expand All @@ -315,7 +340,7 @@ index fb87da4..9a9ad75 100644

for repo in repositories.keys():
path = str(repository_ctx.path(repo).dirname) + "/nix-file-deps"
@@ -206,7 +269,7 @@ def _nixpkgs_package_impl(repository_ctx):
@@ -208,7 +273,7 @@ def _nixpkgs_package_impl(repository_ctx):
if create_build_file_if_needed:
p = repository_ctx.path("BUILD")
if not p.exists:
Expand All @@ -324,15 +349,15 @@ index fb87da4..9a9ad75 100644

_nixpkgs_package = repository_rule(
implementation = _nixpkgs_package_impl,
@@ -220,6 +283,7 @@ _nixpkgs_package = repository_rule(
@@ -222,6 +287,7 @@ _nixpkgs_package = repository_rule(
"build_file": attr.label(),
"build_file_content": attr.string(),
"nixopts": attr.string_list(),
+ "expand_location": attr.bool(default = False),
"quiet": attr.bool(),
"fail_not_supported": attr.bool(default = True, doc = """
If set to True (default) this rule will fail on platforms which do not support Nix (e.g. Windows). If set to False calling this rule will succeed but no output will be generated.
@@ -244,6 +308,329 @@ def nixpkgs_package(*args, **kwargs):
@@ -246,6 +312,352 @@ def nixpkgs_package(*args, **kwargs):
else:
_nixpkgs_package(*args, **kwargs)

Expand Down Expand Up @@ -378,6 +403,7 @@ index fb87da4..9a9ad75 100644
+ "COVERAGE_COMPILE_FLAGS",
+ "COVERAGE_LINK_FLAGS",
+ "SUPPORTS_START_END_LIB",
+ "IS_CLANG",
+ ])
+ actual_keys = sets.make(info.keys())
+ missing_keys = sets.difference(expected_keys, actual_keys)
Expand Down Expand Up @@ -415,7 +441,8 @@ index fb87da4..9a9ad75 100644
+ dbg_compile_flags = info["DBG_COMPILE_FLAGS"],
+ coverage_compile_flags = info["COVERAGE_COMPILE_FLAGS"],
+ coverage_link_flags = info["COVERAGE_LINK_FLAGS"],
+ supports_start_end_lib = info["SUPPORTS_START_END_LIB"] == "True",
+ supports_start_end_lib = info["SUPPORTS_START_END_LIB"] == ["True"],
+ is_clang = info["IS_CLANG"] == ["True"],
+ )
+
+def _nixpkgs_cc_toolchain_config_impl(repository_ctx):
Expand All @@ -440,6 +467,23 @@ index fb87da4..9a9ad75 100644
+ repository_ctx.path(repository_ctx.attr._armeabi_cc_toolchain_config),
+ "armeabi_cc_toolchain_config.bzl",
+ )
+
+ # A module map is required for clang starting from Bazel version 3.3.0.
+ # https://github.com/bazelbuild/bazel/commit/8b9f74649512ee17ac52815468bf3d7e5e71c9fa
+ needs_module_map = info.is_clang and versions.is_at_least("3.3.0", versions.get())
+ if needs_module_map:
+ generate_system_module_map = [
+ repository_ctx.path(repository_ctx.attr._generate_system_module_map),
+ ]
+ repository_ctx.file(
+ "module.modulemap",
+ _execute_or_fail(
+ repository_ctx,
+ generate_system_module_map + info.cxx_builtin_include_directories,
+ "Failed to generate system module map.",
+ ).stdout.strip(),
+ executable = False,
+ )
+ cc_wrapper_src = (
+ repository_ctx.attr._osx_cc_wrapper if darwin else repository_ctx.attr._linux_cc_wrapper
+ )
Expand All @@ -465,6 +509,7 @@ index fb87da4..9a9ad75 100644
+ {
+ "%{cc_toolchain_identifier}": "local",
+ "%{name}": cpu_value,
+ "%{modulemap}": ("\":module.modulemap\"" if needs_module_map else "None"),
+ "%{supports_param_files}": "0" if darwin else "1",
+ "%{cc_compiler_deps}": get_starlark_list(
+ [":builtin_include_directory_paths"] + (
Expand Down Expand Up @@ -507,6 +552,9 @@ index fb87da4..9a9ad75 100644
+ "_armeabi_cc_toolchain_config": attr.label(
+ default = Label("@bazel_tools//tools/cpp:armeabi_cc_toolchain_config.bzl"),
+ ),
+ "_generate_system_module_map": attr.label(
+ default = Label("@bazel_tools//tools/cpp:generate_system_module_map.sh"),
+ ),
+ "_osx_cc_wrapper": attr.label(
+ default = Label("@bazel_tools//tools/cpp:osx_cc_wrapper.sh.tpl"),
+ ),
Expand Down Expand Up @@ -662,7 +710,7 @@ index fb87da4..9a9ad75 100644
def _readlink(repository_ctx, path):
return repository_ctx.path(path).realpath

@@ -323,6 +710,16 @@ def nixpkgs_cc_configure(
@@ -325,6 +737,16 @@ def nixpkgs_cc_configure(
nixopts = []):
"""Use a CC toolchain from Nixpkgs. No-op if not a nix-based platform.

Expand All @@ -681,10 +729,10 @@ index fb87da4..9a9ad75 100644
this rule to specific explicitly which commands the toolchain should
diff --git a/nixpkgs/toolchains/cc.nix b/nixpkgs/toolchains/cc.nix
new file mode 100644
index 0000000..6b1bff4
index 0000000..1e9e089
--- /dev/null
+++ b/nixpkgs/toolchains/cc.nix
@@ -0,0 +1,278 @@
@@ -0,0 +1,284 @@
+with import <nixpkgs> { config = {}; overlays = []; };
+
+{ attribute_path ? null
Expand Down Expand Up @@ -932,6 +980,11 @@ index 0000000..6b1bff4
+ if [[ -x ${cc}/bin/ld.gold ]]; then echo True; else echo False; fi
+ )
+ )
+ IS_CLANG=(
+ $(
+ ${cc}/bin/cc -v 2>&1 | grep -q clang && echo True || echo False
+ )
+ )
+
+ # Write CC_TOOLCHAIN_INFO
+ #
Expand Down Expand Up @@ -962,6 +1015,7 @@ index 0000000..6b1bff4
+ write_info COVERAGE_COMPILE_FLAGS
+ write_info COVERAGE_LINK_FLAGS
+ write_info SUPPORTS_START_END_LIB
+ write_info IS_CLANG
+ ''
diff --git a/nixpkgs/toolchains/go.bzl b/nixpkgs/toolchains/go.bzl
index 79cbb99..d8c6366 100644
Expand Down Expand Up @@ -1005,7 +1059,7 @@ index 79cbb99..d8c6366 100644
name = "nixpkgs_go_toolchain",
repository = repository,
diff --git a/tests/BUILD.bazel b/tests/BUILD.bazel
index 450810b..d86d6a5 100644
index 16866a3..5b75fad 100644
--- a/tests/BUILD.bazel
+++ b/tests/BUILD.bazel
@@ -1,6 +1,7 @@
Expand Down Expand Up @@ -1059,13 +1113,23 @@ index 450810b..d86d6a5 100644
# Test nixpkgs_python_configure() by running some Python code.
test_suite(
name = "python-test",
@@ -86,5 +116,5 @@ sh_test(
@@ -86,7 +116,7 @@ sh_test(
# Test nixpkgs_go_configure()
go_binary(
name = "go-test",
- srcs = ["go-test.go"]
+ srcs = ["go-test.go"],
)

sh_test(
@@ -97,6 +127,6 @@ sh_test(
"//nixpkgs:srcs",
"//tests/invalid_nixpkgs_package:srcs",
"@busybox_static//:bin",
- "@nix-unstable//:bin"
+ "@nix-unstable//:bin",
],
)
diff --git a/tests/cc-test.bzl b/tests/cc-test.bzl
new file mode 100644
index 0000000..8494cc8
Expand Down Expand Up @@ -1131,6 +1195,31 @@ index 0000000..8494cc8
+ test = True,
+ toolchains = ["@rules_cc//cc:toolchain_type"],
+)
diff --git a/tests/invalid_nixpkgs_package/BUILD.bazel b/tests/invalid_nixpkgs_package/BUILD.bazel
index 00cbfea..70ff958 100644
--- a/tests/invalid_nixpkgs_package/BUILD.bazel
+++ b/tests/invalid_nixpkgs_package/BUILD.bazel
@@ -1 +1,5 @@
-filegroup(name = "srcs", srcs = glob(["**"]), visibility = ["//visibility:public"])
+filegroup(
+ name = "srcs",
+ srcs = glob(["**"]),
+ visibility = ["//visibility:public"],
+)
diff --git a/tests/invalid_nixpkgs_package/workspace.bazel b/tests/invalid_nixpkgs_package/workspace.bazel
index c434649..2113a77 100644
--- a/tests/invalid_nixpkgs_package/workspace.bazel
+++ b/tests/invalid_nixpkgs_package/workspace.bazel
@@ -1,5 +1,9 @@
workspace(name = "io_tweag_rules_nixpkgs")

+load("//nixpkgs:repositories.bzl", "rules_nixpkgs_dependencies")
+
+rules_nixpkgs_dependencies()
+
load(
"//nixpkgs:nixpkgs.bzl",
"nixpkgs_local_repository",
diff --git a/tests/location_expansion.nix b/tests/location_expansion.nix
new file mode 100644
index 0000000..8023925
Expand Down
4 changes: 2 additions & 2 deletions deps.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ rules_scala_sha256 = "132cf8eeaab67f3142cec17152b8415901e7fa8396dd585d6334eec21b

rules_haskell_version = "eb16a5401770098a801775ea3a893b09cafe054c"
rules_haskell_sha256 = "2fcab6b01a184435359f6bcbb9403f0457c2a4e0f1b1a4572b9d7f89d2fc5431"
rules_nixpkgs_version = "d3c7bc94fed4001d5375632a936d743dc085c9a1"
rules_nixpkgs_sha256 = "903c6b98aa6a298bf45a6b931e77a3313c40a0cb1b44fa00d9792f9e8aedbb35"
rules_nixpkgs_version = "659cf9db456f5a3c1a5a27747116fc50b709cdab"
rules_nixpkgs_sha256 = "6a76b8004ad94daa9ce7e95d902c790646f8abd598ae9f1b1978fb74a95e9ebd"
buildifier_version = "3.3.0"
buildifier_sha256 = "f11fc80da0681a6d64632a850346ed2d4e5cbb0908306d9a2a2915f707048a10"
zlib_version = "cacf7f1d4e3d44d871b605da3b647f07d718623f"
Expand Down

0 comments on commit d015dd5

Please sign in to comment.