# Copyright 2013-2020 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 import * 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: http://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', 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') 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: for __compiler in spack.compilers.supported_compilers(): if __compiler != 'gcc': conflicts('+kernel-module', when='%{0}'.format(__compiler), msg='Linux kernel module must be compiled with gcc') 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.extend('--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)