128 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			128 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{
 | 
						|
  stdenv
 | 
						|
, lib
 | 
						|
, fetchFromGitHub
 | 
						|
, automake
 | 
						|
, autoconf
 | 
						|
, libtool
 | 
						|
, pkg-config
 | 
						|
, numactl
 | 
						|
, hwloc
 | 
						|
, papi
 | 
						|
, boost
 | 
						|
, ovni
 | 
						|
, enableDebug ? false
 | 
						|
, enableJemalloc ? true
 | 
						|
, jemallocNanos6 ? null
 | 
						|
, cachelineBytes ? 64
 | 
						|
, enableGlibcxxDebug ? false
 | 
						|
, enablePapi ? stdenv.hostPlatform == stdenv.buildPlatform # Disabled when cross-compiling
 | 
						|
, useGit ? false
 | 
						|
, gitUrl ? "ssh://git@bscpm04.bsc.es/nanos6/nanos6"
 | 
						|
, gitBranch ? "master"
 | 
						|
, gitCommit ? "f82762b66c82b5174a8eaad33f6c2f335ac759b4"
 | 
						|
}:
 | 
						|
 | 
						|
assert enableJemalloc -> (jemallocNanos6 != null);
 | 
						|
 | 
						|
with lib;
 | 
						|
 | 
						|
let
 | 
						|
  release = rec {
 | 
						|
    version = "4.3";
 | 
						|
    src = fetchFromGitHub {
 | 
						|
      owner = "bsc-pm";
 | 
						|
      repo = "nanos6";
 | 
						|
      rev = "version-${version}";
 | 
						|
      hash = "sha256-/c6WiKBsAo/01uvMRmjv0PMucbrgvaGmbxlPE6q+dfE=";
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  git = rec {
 | 
						|
    version = src.shortRev;
 | 
						|
    src = builtins.fetchGit {
 | 
						|
      url = gitUrl;
 | 
						|
      ref = gitBranch;
 | 
						|
      rev = gitCommit;
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  source = if (useGit) then git else release;
 | 
						|
 | 
						|
  isCross = stdenv.hostPlatform != stdenv.buildPlatform;
 | 
						|
in
 | 
						|
  stdenv.mkDerivation (source // {
 | 
						|
    pname = "nanos6";
 | 
						|
 | 
						|
    prePatch = ''
 | 
						|
      patchShebangs scripts/generate_config.sh
 | 
						|
      patchShebangs autogen.sh
 | 
						|
    '';
 | 
						|
 | 
						|
    enableParallelBuilding = true;
 | 
						|
 | 
						|
    preConfigure = ''
 | 
						|
      export CACHELINE_WIDTH=${toString cachelineBytes}
 | 
						|
      ./autogen.sh
 | 
						|
    '' + lib.optionalString (useGit) ''
 | 
						|
      export NANOS6_GIT_VERSION=${gitCommit}
 | 
						|
      export NANOS6_GIT_BRANCH=${gitBranch}
 | 
						|
    '';
 | 
						|
 | 
						|
    configureFlags = [
 | 
						|
      "--with-hwloc=${hwloc}"
 | 
						|
      "--disable-all-instrumentations"
 | 
						|
      "--enable-ovni-instrumentation"
 | 
						|
      "--with-ovni=${ovni}"
 | 
						|
      "--with-boost=${boost.dev}"
 | 
						|
    ] ++
 | 
						|
      (optional enableJemalloc "--with-jemalloc=${jemallocNanos6}") ++
 | 
						|
      (optional enableGlibcxxDebug "CXXFLAGS=-D_GLIBCXX_DEBUG") ++
 | 
						|
      (optional isCross "--with-symbol-resolution=ifunc");
 | 
						|
 | 
						|
    postConfigure = lib.optionalString (!enableDebug) ''
 | 
						|
      # Disable debug
 | 
						|
      sed -i 's/\([a-zA-Z0-9_]*nanos6_debug[a-zA-Z0-9_]*\)\s*[+]\?=.*/\1 =/g' Makefile.am
 | 
						|
    '';
 | 
						|
 | 
						|
    # The "bindnow" flags are incompatible with ifunc resolution mechanism. We
 | 
						|
    # disable all by default, which includes bindnow.
 | 
						|
    hardeningDisable = [ "all" ];
 | 
						|
 | 
						|
    # Keep debug symbols in the debug variant of the library
 | 
						|
    dontStrip = enableDebug;
 | 
						|
    separateDebugInfo = true;
 | 
						|
 | 
						|
    nativeBuildInputs = [
 | 
						|
      autoconf
 | 
						|
      automake
 | 
						|
      libtool
 | 
						|
      pkg-config
 | 
						|
 | 
						|
      # TODO: papi_version is needed for configure:
 | 
						|
      # ./configure: line 27378: papi_version: command not found
 | 
						|
      # This probably breaks cross-compilation
 | 
						|
    ] ++ lib.optionals enablePapi [ papi ];
 | 
						|
 | 
						|
    buildInputs = [
 | 
						|
      boost
 | 
						|
      numactl
 | 
						|
      hwloc
 | 
						|
      ovni
 | 
						|
    ] ++ lib.optionals enablePapi [ papi ];
 | 
						|
 | 
						|
    # Create a script that sets NANOS6_HOME
 | 
						|
    postInstall = ''
 | 
						|
      mkdir -p $out/nix-support
 | 
						|
      echo "export NANOS6_HOME=$out" >> $out/nix-support/setup-hook
 | 
						|
    '';
 | 
						|
 | 
						|
    meta = with lib; {
 | 
						|
      homepage = "https://github.com/bsc-pm/nanos6";
 | 
						|
      description = "Nanos6 runtime for OmpSs-2" +
 | 
						|
        optionalString (enableDebug) " (with debug symbols)";
 | 
						|
      platforms = platforms.linux;
 | 
						|
      license = licenses.gpl3;
 | 
						|
    };
 | 
						|
  })
 |