Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add workarounds for concretizer #961

Merged
merged 3 commits into from
Jun 19, 2024
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
120 changes: 120 additions & 0 deletions repos/c2sm/packages/xpmem/package.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from spack.package import *


# Identical to spack v0.21.1 except for the part labeled as WORKAROUND
class Xpmem(AutotoolsPackage):
"""XPMEM is a Linux kernel module that enables a process to map the memory
of another process into its virtual address space."""

# The README file of the repository says that the development was
# transferred to a new repository on GitLab: https://gitlab.com/hjelmn/xpmem
# However, it looks like that the repository on GitHub has a more recent
# version of the codebase.
homepage = "https://github.com/hjelmn/xpmem"
url = "https://github.com/hjelmn/xpmem/archive/v2.6.3.tar.gz"
git = "https://github.com/hjelmn/xpmem.git"

maintainers("skosukhin")

version("master", branch="master")

# Versions starting 2.6.4 are neither tagged nor released in the repo
# (the choice of commits is based on the commit history of
# 'kernel/xpmem_private.h'):
version("2.6.5-36", commit="0d0bad4e1d07b38d53ecc8f20786bb1328c446da")
version("2.6.5", commit="4efeed9cbaabe971f3766d67cb108e2c3316d4b8")
version("2.6.4", commit="522054850e4d1479d69f50f7190d1548bf9749fd")

# Released versions:
version("2.6.3",
sha256=
"ee239a32269f33234cdbdb94db29c12287862934c0784328d34aff82a9fa8b54")
version("2.6.2",
sha256=
"2c1a93b4cb20ed73c2093435a7afec513e0e797aa1e49d4d964cc6bdae89d65b")

variant("kernel-module",
default=True,
description="Enable building the kernel module")

# Added RHEL 8.3 kernel support
# Here 2.6.5-36 referes to 2.6.5 version and 36th commit id
patch("xpmem_v2.6.5-36.patch", when="@2.6.5-36", level=1)
patch(
"https://github.com/hjelmn/xpmem/commit/cbd6e5bd3d2a1d3823c335ddcd3c57b94474f578.patch?full_index=1",
sha256=
"75299398b6c15546479bfbb8aa972431f58637fe2f0328196a26738bd7148140",
when="@2.6.5-36",
level=1,
)
patch(
"https://github.com/hjelmn/xpmem/commit/7d346aaf1fdfc24d38cebb4ad107b7f5c43769e9.patch?full_index=1",
sha256=
"6be8c5f33d55c611924d8412253740f6f4b738e6d98e32981fa300d2ccbe99cc",
when="@2.6.5-36",
level=1,
)

depends_on("autoconf", type="build")
depends_on("automake", type="build")
depends_on("libtool", type="build")
depends_on("m4", type="build")

# It will become possible to disable the kernel module only starting 2.6.6:
# https://github.com/hjelmn/xpmem/pull/24
conflicts("~kernel-module", when="@:2.6.5")

# Ideally, we should list all non-Linux-based platforms here:
conflicts("+kernel-module", when="platform=darwin")

# All compilers except for gcc are in conflict with +kernel-module:
#requires("%gcc", when="+kernel-module", msg="Linux kernel module must be compiled with gcc")

#WORKAROUND: The above line is not working as expected.
# The below line tires to express the same thing.
# But it is only true in a context with nvhpc and gcc as the only compilers.
conflicts("%nvhpc", when="+kernel-module")

def autoreconf(self, spec, prefix):
Executable("./autogen.sh")()

@run_before("build")
def override_kernel_compiler(self):
# Override the compiler for kernel module source files. We need
# this additional argument for all installation phases.
if "+kernel-module" in self.spec:
make.add_default_arg("CC={0}".format(spack_cc))

def configure_args(self):
args = []

if "~kernel-module" in self.spec:
# The kernel module is enabled by default. An attempt of explicit
# enabling with '--enable-kernel-module' disables the module.
args.append("--disable-kernel-module")

if self.spec.satisfies("@:2.6.5"):
fmt = self.spec.format
# The following arguments will not be needed starting 2.6.6:
# https://github.com/hjelmn/xpmem/pull/18
args.extend([
fmt("--with-default-prefix={prefix}"),
fmt("--with-module={prefix.share}/Modules/{name}/{version}"),
])

return args

@when("@:2.6.5")
def install(self, spec, prefix):
with working_dir(self.build_directory):
# Override the hardcoded prefix for 'cray-xpmem.conf'
make(
"ldsoconfdir={0}".format(
self.spec.prefix.etc.join("ld.so.conf.d")),
*self.install_targets,
)
15 changes: 15 additions & 0 deletions repos/c2sm/packages/xpmem/xpmem_v2.6.5-36.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
--- xpmem/kernel/xpmem_pfn.c 2021-02-08 22:49:05.321501753 -0800
+++ xpmem.patch/kernel/xpmem_pfn.c 2021-02-08 23:30:30.875309634 -0800
@@ -251,6 +251,12 @@
cpu_to_node(task_cpu(current)) != cpu_to_node(task_cpu(src_task))) {
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0)
saved_mask = current->cpus_mask;
+#elif LINUX_VERSION_CODE == KERNEL_VERSION(4,18, 0)
+ #ifdef RHEL_RELEASE_CODE
+ #if RHEL_RELEASE_CODE >= RHEL_RELEASE_VERSION(8,3)
+ saved_mask = current->cpus_mask;
+ #endif
+ #endif
#else
saved_mask = current->cpus_allowed;
#endif
7 changes: 5 additions & 2 deletions test/system_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,8 @@ def test_install_2024_1_gcc(self):

@pytest.mark.no_daint
def test_install_2024_1_nvhpc(self):
spack_install_and_test('icon @2024.1-1 %nvhpc')
#WORKAROUND: ^libxml2%gcc works around a problem in the concretizer of spack v0.21.1 and /mch-environment/v6
spack_install_and_test('icon @2024.1-1 %nvhpc ^libxml2%gcc')

@pytest.mark.no_daint # libxml2 %nvhpc fails to build
def test_install_conditional_dependencies(self):
Expand All @@ -314,8 +315,10 @@ def test_install_conditional_dependencies(self):
# +eccodes-definitions triggers cosmo-eccodes-definitions
# +mpi triggers mpi
# gpu=openacc+cuda triggers cuda

#WORKAROUND: ^libxml2%gcc works around a problem in the concretizer of spack v0.21.1 and /mch-environment/v6
spack_install_and_test(
'icon @2024.1-1 %nvhpc +coupling +rttov serialization=create +emvorado +mpi gpu=openacc+cuda'
'icon @2024.1-1 %nvhpc +coupling +rttov serialization=create +emvorado +mpi gpu=openacc+cuda ^libxml2%gcc'
)

@pytest.mark.no_daint # no time for that
Expand Down
Loading