Skip to content

Commit 1e81607

Browse files
committed
Do not create empty libraries
1 parent d36271c commit 1e81607

File tree

6 files changed

+21
-69
lines changed

6 files changed

+21
-69
lines changed

haskell/cabal.bzl

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -604,7 +604,6 @@ def _haskell_cabal_library_impl(ctx):
604604
transitive = [dep_info.deps_hs_libraries],
605605
order = "topological",
606606
),
607-
empty_hs_libraries = dep_info.empty_hs_libraries,
608607
interface_dirs = depset([interfaces_dir], transitive = [dep_info.interface_dirs]),
609608
deps_interface_dirs = dep_info.deps_interface_dirs,
610609
compile_flags = [],
@@ -892,7 +891,6 @@ def _haskell_cabal_binary_impl(ctx):
892891
import_dirs = sets.make(),
893892
hs_libraries = dep_info.hs_libraries,
894893
deps_hs_libraries = dep_info.deps_hs_libraries,
895-
empty_hs_libraries = dep_info.empty_hs_libraries,
896894
interface_dirs = dep_info.interface_dirs,
897895
deps_interface_dirs = dep_info.deps_interface_dirs,
898896
compile_flags = [],

haskell/experimental/private/module.bzl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,7 +354,6 @@ def _build_haskell_module(
354354
dep_info.hs_libraries,
355355
dep_info.deps_hs_libraries,
356356
narrowed_deps_info.deps_hs_libraries,
357-
narrowed_deps_info.empty_hs_libraries,
358357
object_inputs,
359358
]
360359
# libraries and object inputs are only needed if the module uses TH

haskell/private/actions/package.bzl

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def package(
6464
exposed_modules: List of exposed modules.
6565
other_modules: List of hidden modules.
6666
my_pkg_id: Package id object for this package.
67-
has_hs_library: Whether hs-libraries should be non-null.
67+
has_hs_library: Whether hs-libraries should be created.
6868
empty_libs_dir: Directory name where the empty library should be.
6969
If empty, this is assumed to be a package description
7070
for a real library. See Note [Empty Libraries] in haskell_impl.bzl.
@@ -91,9 +91,7 @@ def package(
9191

9292
pkgroot_lib_path = paths.join("${pkgroot}", empty_libs_dir)
9393

94-
# Create a file from which ghc-pkg will create the actual package
95-
# from.
96-
write_package_conf(hs, conf_file, {
94+
config = {
9795
"name": my_pkg_id.package_name,
9896
"version": my_pkg_id.version,
9997
"id": pkg_id.to_string(my_pkg_id),
@@ -103,12 +101,20 @@ def package(
103101
"import-dirs": [import_dir],
104102
"library-dirs": [pkgroot_lib_path] + extra_lib_dirs,
105103
"dynamic-library-dirs": [pkgroot_lib_path] + extra_dynamic_lib_dirs,
106-
"hs-libraries": [pkg_id.library_name(hs, my_pkg_id)] if has_hs_library else [],
107104
"extra-libraries": extra_libs,
108105
"depends": hs.package_ids,
109106
# TODO[AH] Add haskell_module modules
110107
"exposed-modules": exposed_modules,
111-
})
108+
}
109+
110+
if has_hs_library:
111+
config.update({
112+
"hs-libraries": [pkg_id.library_name(hs, my_pkg_id)],
113+
})
114+
115+
# Create a file from which ghc-pkg will create the actual package
116+
# from.
117+
write_package_conf(hs, conf_file, config)
112118

113119
cache_file = ghc_pkg_recache(hs, posix, conf_file)
114120

haskell/private/dependencies.bzl

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,6 @@ def gather_dep_info(name, deps):
3737
for dep in deps
3838
if HaskellInfo in dep
3939
])
40-
empty_hs_libraries = depset(transitive = [
41-
dep[HaskellInfo].empty_hs_libraries
42-
for dep in deps
43-
if HaskellInfo in dep
44-
])
4540
interface_dirs = depset(transitive = [
4641
dep[HaskellInfo].interface_dirs
4742
for dep in deps
@@ -87,7 +82,6 @@ def gather_dep_info(name, deps):
8782
version_macros = sets.make(),
8883
hs_libraries = hs_libraries,
8984
deps_hs_libraries = deps_hs_libraries,
90-
empty_hs_libraries = empty_hs_libraries,
9185
interface_dirs = interface_dirs,
9286
deps_interface_dirs = deps_interface_dirs,
9387
source_files = source_files,
@@ -110,7 +104,6 @@ def gather_dep_info(name, deps):
110104
version_macros = set.mutable_union(acc.version_macros, binfo.version_macros),
111105
hs_libraries = depset(transitive = [acc.hs_libraries, binfo.hs_libraries]),
112106
deps_hs_libraries = depset(transitive = [acc.deps_hs_libraries, binfo.deps_hs_libraries]),
113-
empty_hs_libraries = depset(transitive = [acc.empty_hs_libraries, binfo.empty_hs_libraries]),
114107
interface_dirs = acc.interface_dirs,
115108
deps_interface_dirs = acc.deps_interface_dirs,
116109
import_dirs = import_dirs,
@@ -135,7 +128,6 @@ def gather_dep_info(name, deps):
135128
compile_flags = acc.compile_flags,
136129
hs_libraries = acc.hs_libraries,
137130
deps_hs_libraries = acc.deps_hs_libraries,
138-
empty_hs_libraries = acc.empty_hs_libraries,
139131
extra_source_files = acc.extra_source_files,
140132
interface_dirs = acc.interface_dirs,
141133
deps_interface_dirs = acc.deps_interface_dirs,

haskell/private/haskell_impl.bzl

Lines changed: 9 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -53,18 +53,18 @@ load("//haskell/experimental/private:module.bzl", "build_haskell_modules", "get_
5353

5454
# Note [Empty Libraries]
5555
#
56-
# GHC 8.10.x wants to load the shared libraries corresponding to packages needed
57-
# for running TemplateHaskell splices. It wants to do this even when all the
58-
# necessary object files are passed in the command line.
59-
#
60-
# In order to satisfy GHC, and yet avoid passing the linked library as input, we
61-
# create a ficticious package which points to an empty shared library. The
62-
# ficticious and the real package share the same interface files.
56+
# GHC wants to load the shared libraries given in `extra-libraries` or
57+
# `hs-libraries` fields of package config files corresponding to packages needed
58+
# for running TemplateHaskell splices.
6359
#
6460
# Avoiding to pass the real shared library as input is necessary when building
6561
# individual modules with haskell_module, otherwise building the module would
6662
# need to wait until all of the modules of library dependencies have been built.
6763
#
64+
# In order to achieve that, we create a fictitious package which does not refer
65+
# to a library file at all. The fictitious and the real package share the same
66+
# interface files.
67+
#
6868
# See Note [Narrowed Dependencies] for an overview of what this feature is
6969
# needed for.
7070

@@ -395,41 +395,6 @@ def _haskell_binary_common_impl(ctx, is_test):
395395
)),
396396
]
397397

398-
def _create_empty_library(hs, cc, posix, my_pkg_id, with_shared, with_profiling, empty_libs_dir):
399-
"""See Note [Empty Libraries]"""
400-
dep_info = gather_dep_info("haskell_module-empty_lib", [])
401-
empty_c = hs.actions.declare_file("empty.c")
402-
hs.actions.write(empty_c, "")
403-
404-
static_library = link_library_static(
405-
hs,
406-
cc,
407-
posix,
408-
dep_info,
409-
depset([empty_c]),
410-
my_pkg_id,
411-
with_profiling = with_profiling,
412-
libdir = empty_libs_dir,
413-
)
414-
libs = [static_library]
415-
416-
if with_shared:
417-
dynamic_library = link_library_dynamic(
418-
hs,
419-
cc,
420-
posix,
421-
dep_info,
422-
depset(),
423-
depset([empty_c]),
424-
my_pkg_id,
425-
[],
426-
None,
427-
empty_libs_dir,
428-
)
429-
libs = [dynamic_library, static_library]
430-
431-
return libs
432-
433398
def haskell_library_impl(ctx):
434399
hs = haskell_context(ctx)
435400
deps = ctx.attr.deps + ctx.attr.exports + ctx.attr.narrowed_deps
@@ -589,8 +554,8 @@ def haskell_library_impl(ctx):
589554
exposed_modules,
590555
other_modules,
591556
my_pkg_id,
592-
non_empty,
593-
empty_libs_dir,
557+
has_hs_library = False,
558+
empty_libs_dir = empty_libs_dir,
594559
)
595560

596561
interface_dirs = depset(
@@ -607,8 +572,6 @@ def haskell_library_impl(ctx):
607572
generate_version_macros(ctx, package_name, version),
608573
])
609574

610-
empty_libs = _create_empty_library(hs, cc, posix, my_pkg_id, with_shared, with_profiling, empty_libs_dir)
611-
612575
export_infos = gather_dep_info(ctx.attr.name, ctx.attr.exports)
613576
hs_info = HaskellInfo(
614577
package_databases = depset([cache_file], transitive = [all_deps_info.package_databases]),
@@ -636,10 +599,6 @@ def haskell_library_impl(ctx):
636599
deps_hs_libraries = depset(
637600
transitive = [dep_info.hs_libraries, narrowed_deps_info.deps_hs_libraries],
638601
),
639-
empty_hs_libraries = depset(
640-
direct = empty_libs,
641-
transitive = [all_deps_info.empty_hs_libraries, export_infos.empty_hs_libraries],
642-
),
643602
interface_dirs = depset(transitive = [interface_dirs, export_infos.interface_dirs]),
644603
deps_interface_dirs = depset(transitive = [dep_info.interface_dirs, narrowed_deps_info.deps_interface_dirs]),
645604
compile_flags = c.compile_flags,
@@ -857,7 +816,6 @@ def haskell_import_impl(ctx):
857816
import_dirs = sets.make(),
858817
hs_libraries = depset(),
859818
deps_hs_libraries = depset(),
860-
empty_hs_libraries = depset(),
861819
interface_dirs = depset(),
862820
deps_interface_dirs = depset(),
863821
compile_flags = [],

haskell/providers.bzl

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ HaskellInfo = provider(
1313
"extra_source_files": "Depset of non-Haskell source files.",
1414
"hs_libraries": "Depset of compiled Haskell libraries in all available GHC ways.",
1515
"deps_hs_libraries": "Depset of compiled Haskell libraries belonging to libraries in the deps field of the rule or in the deps field of any transitive dependency (libraries in narrowed_deps are included in transitive dependencies for this sake)",
16-
"empty_hs_libraries": "Depset of compiled empty Haskell libraries in all available GHC ways.",
1716
"interface_dirs": "Depset of interface dirs belonging to the packages.",
1817
"deps_interface_dirs": "Depset of interface dirs belonging to libraries in the deps field of the rule or in the deps field of any transitive dependency (libraries in narrowed_deps are included in transitive dependencies for this sake)",
1918
"compile_flags": "Arguments that were used to compile the code.",

0 commit comments

Comments
 (0)