Compare commits
	
		
			30 Commits
		
	
	
		
			pkgs/tasyc
			...
			master
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| fc69ef3217 | |||
| 1d025f7a38 | |||
| 7989779c8f | |||
| 7d721084a7 | |||
| 796d34a549 | |||
| 5ff1b1343b | |||
| c5cc13fad8 | |||
| 2e09314a7e | |||
| 217d9c1fc0 | |||
| f47ab7757e | |||
| 4b265c071e | |||
| 019826d09e | |||
| a294daf7e3 | |||
| a7018250ca | |||
| e3d1785285 | |||
| ab86243a07 | |||
| 14f2393d30 | |||
| f115d611e7 | |||
| 4261d327c6 | |||
| 4685c36e2f | |||
| c6c788f1e2 | |||
| 606386d006 | |||
| 1fba0a14a8 | |||
| d6621e939a | |||
| 67726c1d44 | |||
| a971ed6a54 | |||
| 06581e455c | |||
| dd7f24f455 | |||
| 64e2c39582 | |||
| 98d17b19d3 | 
| @ -12,4 +12,9 @@ jobs: | |||||||
|     runs-on: native |     runs-on: native | ||||||
|     steps: |     steps: | ||||||
|       - uses: https://gitea.com/ScMi1/checkout@v1.4 |       - uses: https://gitea.com/ScMi1/checkout@v1.4 | ||||||
|       - run: nix build -L --no-link --print-out-paths .#bsc-ci.all |       - run: nix build -L --no-link --print-out-paths .#bsc.ci.all | ||||||
|  |   build:cross: | ||||||
|  |     runs-on: native | ||||||
|  |     steps: | ||||||
|  |       - uses: https://gitea.com/ScMi1/checkout@v1.4 | ||||||
|  |       - run: nix build -L --no-link --print-out-paths .#bsc.ci.cross | ||||||
|  | |||||||
							
								
								
									
										30
									
								
								doc/maintainers.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								doc/maintainers.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | |||||||
|  | # Maintainers | ||||||
|  | 
 | ||||||
|  | ## Role of a maintainer | ||||||
|  | The responsibilities of maintainers are quite lax, and similar in spirit to | ||||||
|  | [nixpkgs' maintainers][1]: | ||||||
|  | 
 | ||||||
|  |     The main responsibility of a maintainer is to keep the packages they | ||||||
|  |     maintain in a functioning state, and keep up with updates. In order to do | ||||||
|  |     that, they are empowered to make decisions over the packages they maintain. | ||||||
|  | 
 | ||||||
|  |     That being said, the maintainer is not alone in proposing changes to the | ||||||
|  |     packages. Anybody (both bots and humans) can send PRs to bump or tweak the | ||||||
|  |     package. | ||||||
|  | 
 | ||||||
|  | In practice, this means that when updating or proposing changes to a package, | ||||||
|  | we will notify maintainers by mentioning them in Gitea so they can test changes | ||||||
|  | and give feedback. | ||||||
|  | 
 | ||||||
|  | Since we do bi-yearly release cycles, there is no expectation from maintainers | ||||||
|  | to update packages at each upstream release. Nevertheless, on each release cycle | ||||||
|  | we may request help from maintainers when updating or testing their packages. | ||||||
|  | 
 | ||||||
|  | ## Becoming a maintainer | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | You'll have to add yourself in the `maintainers.nix` list; your username should | ||||||
|  | match your `bsc.es` email. Then you can add yourself to the `meta.maintainers` | ||||||
|  | of any package you are interested in maintaining. | ||||||
|  | 
 | ||||||
|  | [1]: [https://github.com/NixOS/nixpkgs/tree/nixos-25.05/maintainers] | ||||||
							
								
								
									
										82
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										82
									
								
								flake.lock
									
									
									
										generated
									
									
									
								
							| @ -1,71 +1,5 @@ | |||||||
| { | { | ||||||
|   "nodes": { |   "nodes": { | ||||||
|     "agenix": { |  | ||||||
|       "inputs": { |  | ||||||
|         "darwin": "darwin", |  | ||||||
|         "home-manager": "home-manager", |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "nixpkgs" |  | ||||||
|         ], |  | ||||||
|         "systems": "systems" |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1750173260, |  | ||||||
|         "narHash": "sha256-9P1FziAwl5+3edkfFcr5HeGtQUtrSdk/MksX39GieoA=", |  | ||||||
|         "owner": "ryantm", |  | ||||||
|         "repo": "agenix", |  | ||||||
|         "rev": "531beac616433bac6f9e2a19feb8e99a22a66baf", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "ryantm", |  | ||||||
|         "repo": "agenix", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "darwin": { |  | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "agenix", |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1744478979, |  | ||||||
|         "narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=", |  | ||||||
|         "owner": "lnl7", |  | ||||||
|         "repo": "nix-darwin", |  | ||||||
|         "rev": "43975d782b418ebf4969e9ccba82466728c2851b", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "lnl7", |  | ||||||
|         "ref": "master", |  | ||||||
|         "repo": "nix-darwin", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "home-manager": { |  | ||||||
|       "inputs": { |  | ||||||
|         "nixpkgs": [ |  | ||||||
|           "agenix", |  | ||||||
|           "nixpkgs" |  | ||||||
|         ] |  | ||||||
|       }, |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1745494811, |  | ||||||
|         "narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=", |  | ||||||
|         "owner": "nix-community", |  | ||||||
|         "repo": "home-manager", |  | ||||||
|         "rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "nix-community", |  | ||||||
|         "repo": "home-manager", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "nixpkgs": { |     "nixpkgs": { | ||||||
|       "locked": { |       "locked": { | ||||||
|         "lastModified": 1752436162, |         "lastModified": 1752436162, | ||||||
| @ -84,24 +18,8 @@ | |||||||
|     }, |     }, | ||||||
|     "root": { |     "root": { | ||||||
|       "inputs": { |       "inputs": { | ||||||
|         "agenix": "agenix", |  | ||||||
|         "nixpkgs": "nixpkgs" |         "nixpkgs": "nixpkgs" | ||||||
|       } |       } | ||||||
|     }, |  | ||||||
|     "systems": { |  | ||||||
|       "locked": { |  | ||||||
|         "lastModified": 1681028828, |  | ||||||
|         "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", |  | ||||||
|         "owner": "nix-systems", |  | ||||||
|         "repo": "default", |  | ||||||
|         "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", |  | ||||||
|         "type": "github" |  | ||||||
|       }, |  | ||||||
|       "original": { |  | ||||||
|         "owner": "nix-systems", |  | ||||||
|         "repo": "default", |  | ||||||
|         "type": "github" |  | ||||||
|       } |  | ||||||
|     } |     } | ||||||
|   }, |   }, | ||||||
|   "root": "root", |   "root": "root", | ||||||
|  | |||||||
							
								
								
									
										16
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								flake.nix
									
									
									
									
									
								
							| @ -1,15 +1,13 @@ | |||||||
| { | { | ||||||
|   inputs = { |   inputs = { | ||||||
|     nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05"; |     nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05"; | ||||||
|     agenix.url = "github:ryantm/agenix"; |  | ||||||
|     agenix.inputs.nixpkgs.follows = "nixpkgs"; |  | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   outputs = { self, nixpkgs, agenix, ... }: |   outputs = { self, nixpkgs, ... }: | ||||||
| let | let | ||||||
|   mkConf = name: nixpkgs.lib.nixosSystem { |   mkConf = name: nixpkgs.lib.nixosSystem { | ||||||
|     system = "x86_64-linux"; |     system = "x86_64-linux"; | ||||||
|     specialArgs = { inherit nixpkgs agenix; theFlake = self; }; |     specialArgs = { inherit nixpkgs; theFlake = self; }; | ||||||
|     modules = [ "${self.outPath}/m/${name}/configuration.nix" ]; |     modules = [ "${self.outPath}/m/${name}/configuration.nix" ]; | ||||||
|   }; |   }; | ||||||
|   # For now we only support x86 |   # For now we only support x86 | ||||||
| @ -42,11 +40,13 @@ in | |||||||
|     # full nixpkgs with our overlay applied |     # full nixpkgs with our overlay applied | ||||||
|     legacyPackages.${system} = pkgs; |     legacyPackages.${system} = pkgs; | ||||||
| 
 | 
 | ||||||
|     hydraJobs = { |     hydraJobs = self.legacyPackages.${system}.bsc.hydraJobs; | ||||||
|       inherit (self.legacyPackages.${system}.bsc-ci) tests pkgs cross; |  | ||||||
|     }; |  | ||||||
| 
 | 
 | ||||||
|     # propagate nixpkgs lib, so we can do bscpkgs.lib |     # propagate nixpkgs lib, so we can do bscpkgs.lib | ||||||
|     inherit (nixpkgs) lib; |     lib = nixpkgs.lib // { | ||||||
|  |       maintainers = nixpkgs.lib.maintainers // { | ||||||
|  |         bsc = import ./pkgs/maintainers.nix; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|     ./base/hw.nix |     ./base/hw.nix | ||||||
|     ./base/net.nix |     ./base/net.nix | ||||||
|     ./base/nix.nix |     ./base/nix.nix | ||||||
|  |     ./base/sys-devices.nix | ||||||
|     ./base/ntp.nix |     ./base/ntp.nix | ||||||
|     ./base/rev.nix |     ./base/rev.nix | ||||||
|     ./base/ssh.nix |     ./base/ssh.nix | ||||||
|  | |||||||
| @ -1,9 +1,8 @@ | |||||||
| { agenix, ... }: | { pkgs, ... }: | ||||||
| 
 | 
 | ||||||
| { | { | ||||||
|   imports = [ agenix.nixosModules.default ]; |   imports = [ ../../module/agenix.nix ]; | ||||||
| 
 | 
 | ||||||
|   environment.systemPackages = [ |   # Add agenix to system packages | ||||||
|     agenix.packages.x86_64-linux.default |   environment.systemPackages = [ pkgs.agenix ]; | ||||||
|   ]; |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -5,8 +5,8 @@ | |||||||
|     vim wget git htop tmux pciutils tcpdump ripgrep nix-index nixos-option |     vim wget git htop tmux pciutils tcpdump ripgrep nix-index nixos-option | ||||||
|     nix-diff ipmitool freeipmi ethtool lm_sensors cmake gnumake file tree |     nix-diff ipmitool freeipmi ethtool lm_sensors cmake gnumake file tree | ||||||
|     ncdu config.boot.kernelPackages.perf ldns pv |     ncdu config.boot.kernelPackages.perf ldns pv | ||||||
|     # From bsckgs overlay |     # From jungle overlay | ||||||
|     osumb |     osumb nixgen | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   programs.direnv.enable = true; |   programs.direnv.enable = true; | ||||||
|  | |||||||
							
								
								
									
										9
									
								
								m/common/base/sys-devices.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								m/common/base/sys-devices.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | { | ||||||
|  |   nix.settings.system-features = [ "sys-devices" ]; | ||||||
|  | 
 | ||||||
|  |   programs.nix-required-mounts.enable = true; | ||||||
|  |   programs.nix-required-mounts.allowedPatterns.sys-devices.paths = [ | ||||||
|  |     "/sys/devices/system/cpu" | ||||||
|  |     "/sys/devices/system/node" | ||||||
|  |   ]; | ||||||
|  | } | ||||||
| @ -180,6 +180,19 @@ | |||||||
|           "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFmMqKqPg4uocNOr3O41kLbZMOMJn3m2ZdN1JvTR96z3 bsccns@arnau-bsc" |           "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFmMqKqPg4uocNOr3O41kLbZMOMJn3m2ZdN1JvTR96z3 bsccns@arnau-bsc" | ||||||
|         ]; |         ]; | ||||||
|       }; |       }; | ||||||
|  | 
 | ||||||
|  |       aaguirre = { | ||||||
|  |         uid = 9655; | ||||||
|  |         isNormalUser = true; | ||||||
|  |         home = "/home/Computational/aaguirre"; | ||||||
|  |         description = "Alejandro Aguirre"; | ||||||
|  |         group = "Computational"; | ||||||
|  |         hosts = [ "apex" "hut" ]; | ||||||
|  |         hashedPassword = "$6$TXRXQT6jjBvxkxU6$E.sh5KspAm1qeG5Ct7OPHpo8REmbGDwjFGvqeGgTVz3GASGOAnPL7UMZsMAsAKBoahOw.v8LNno6XGrTEPzZH1"; | ||||||
|  |         openssh.authorizedKeys.keys = [ | ||||||
|  |           "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOlRX7ZCnqtUJYCxKgWmgSrFCYuA2LHY96rVwqxXPl86 aaguirre@BSC-8488184117" | ||||||
|  |         ]; | ||||||
|  |       }; | ||||||
|     }; |     }; | ||||||
| 
 | 
 | ||||||
|     groups = { |     groups = { | ||||||
|  | |||||||
| @ -93,20 +93,4 @@ | |||||||
|     wantedBy = [ "multi-user.target" ]; |     wantedBy = [ "multi-user.target" ]; | ||||||
|     serviceConfig.ExecStart = script; |     serviceConfig.ExecStart = script; | ||||||
|   }; |   }; | ||||||
| 
 |  | ||||||
|   # Only allow SSH connections from users who have a SLURM allocation |  | ||||||
|   # See: https://slurm.schedmd.com/pam_slurm_adopt.html |  | ||||||
|   security.pam.services.sshd.rules.account.slurm = { |  | ||||||
|     control = "required"; |  | ||||||
|     enable = true; |  | ||||||
|     modulePath = "${pkgs.slurm}/lib/security/pam_slurm_adopt.so"; |  | ||||||
|     args = [ "log_level=debug5" ]; |  | ||||||
|     order = 999999; # Make it last one |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   # Disable systemd session (pam_systemd.so) as it will conflict with the |  | ||||||
|   # pam_slurm_adopt.so module. What happens is that the shell is first adopted |  | ||||||
|   # into the slurmstepd task and then into the systemd session, which is not |  | ||||||
|   # what we want, otherwise it will linger even if all jobs are gone. |  | ||||||
|   security.pam.services.sshd.startSession = lib.mkForce false; |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -17,6 +17,7 @@ | |||||||
|     ./postgresql.nix |     ./postgresql.nix | ||||||
|     ./nginx.nix |     ./nginx.nix | ||||||
|     ./p.nix |     ./p.nix | ||||||
|  |     ./ompss2-timer.nix | ||||||
|     #./pxe.nix |     #./pxe.nix | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -29,6 +29,9 @@ | |||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  |   # Allow gitea user to send mail | ||||||
|  |   users.users.gitea.extraGroups = [ "mail-robot" ]; | ||||||
|  | 
 | ||||||
|   services.gitea-actions-runner.instances = { |   services.gitea-actions-runner.instances = { | ||||||
|     runrun = { |     runrun = { | ||||||
|       enable = true; |       enable = true; | ||||||
|  | |||||||
| @ -1,8 +1,11 @@ | |||||||
| { config, lib, ... }: | { config, lib, ... }: | ||||||
| { | { | ||||||
|  |   # Robot user that can see the password to send mail from jungle-robot | ||||||
|  |   users.groups.mail-robot = {}; | ||||||
|  | 
 | ||||||
|   age.secrets.jungleRobotPassword = { |   age.secrets.jungleRobotPassword = { | ||||||
|     file = ../../secrets/jungle-robot-password.age; |     file = ../../secrets/jungle-robot-password.age; | ||||||
|     group = "gitea"; |     group = "mail-robot"; | ||||||
|     mode = "440"; |     mode = "440"; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -4,8 +4,8 @@ let | |||||||
|     name = "jungle-web"; |     name = "jungle-web"; | ||||||
|     src = pkgs.fetchgit { |     src = pkgs.fetchgit { | ||||||
|       url = "https://jungle.bsc.es/git/rarias/jungle-website.git"; |       url = "https://jungle.bsc.es/git/rarias/jungle-website.git"; | ||||||
|       rev = "739bf0175a7f05380fe7ad7023ff1d60db1710e1"; |       rev = "52abaf4d71652a9ef77a0b098db14ca33bffff4c"; | ||||||
|       hash = "sha256-ea5DzhYTzZ9TmqD+x95rdNdLbxPnBluqlYH2NmBYmc4="; |       hash = "sha256-/ul9GazbOrOkmlvSgDz/+2W+V+ir5725Y7mVLc3rb0M="; | ||||||
|     }; |     }; | ||||||
|     buildInputs = [ pkgs.hugo ]; |     buildInputs = [ pkgs.hugo ]; | ||||||
|     buildPhase = '' |     buildPhase = '' | ||||||
|  | |||||||
							
								
								
									
										85
									
								
								m/hut/ompss2-timer.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								m/hut/ompss2-timer.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,85 @@ | |||||||
|  | { config, pkgs, ... }: | ||||||
|  | { | ||||||
|  |   systemd.timers = { | ||||||
|  |     "ompss2-closing" = { | ||||||
|  |       wantedBy = [ "timers.target" ]; | ||||||
|  |       timerConfig = { | ||||||
|  |         Unit = "ompss2-closing.service"; | ||||||
|  |         OnCalendar = [ "*-03-15 07:00:00" "*-09-15 07:00:00"]; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |     "ompss2-freeze" = { | ||||||
|  |       wantedBy = [ "timers.target" ]; | ||||||
|  |       timerConfig = { | ||||||
|  |         Unit = "ompss2-freeze.service"; | ||||||
|  |         OnCalendar = [ "*-04-15 07:00:00" "*-10-15 07:00:00" ]; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |     "ompss2-release" = { | ||||||
|  |       wantedBy = [ "timers.target" ]; | ||||||
|  |       timerConfig = { | ||||||
|  |         Unit = "ompss2-release.service"; | ||||||
|  |         OnCalendar = [ "*-05-15 07:00:00" "*-11-15 07:00:00" ]; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   systemd.services = | ||||||
|  |   let | ||||||
|  |     closing = pkgs.writeText "closing.txt" | ||||||
|  |     '' | ||||||
|  |       Subject: OmpSs-2 release enters closing period | ||||||
|  | 
 | ||||||
|  |       Hi, | ||||||
|  | 
 | ||||||
|  |       You have one month to merge the remaining features for the next OmpSs-2 | ||||||
|  |       release. Please, identify what needs to be merged and discuss it in the next | ||||||
|  |       OmpSs-2 meeting. | ||||||
|  | 
 | ||||||
|  |       Thanks!, | ||||||
|  |       Jungle robot | ||||||
|  |     ''; | ||||||
|  |     freeze = pkgs.writeText "freeze.txt" | ||||||
|  |     '' | ||||||
|  |       Subject: OmpSs-2 release enters freeze period | ||||||
|  | 
 | ||||||
|  |       Hi, | ||||||
|  | 
 | ||||||
|  |       The period to introduce new features or breaking changes is over, only bug | ||||||
|  |       fixes are allowed now. During this time, please prepare the release notes | ||||||
|  |       to be included in the next OmpSs-2 release. | ||||||
|  | 
 | ||||||
|  |       Thanks!, | ||||||
|  |       Jungle robot | ||||||
|  |     ''; | ||||||
|  |     release = pkgs.writeText "release.txt" | ||||||
|  |     '' | ||||||
|  |       Subject: OmpSs-2 release now | ||||||
|  | 
 | ||||||
|  |       Hi, | ||||||
|  | 
 | ||||||
|  |       The period to introduce bug fixes is now over. Please, proceed to do the | ||||||
|  |       OmpSs-2 release. | ||||||
|  | 
 | ||||||
|  |       Thanks!, | ||||||
|  |       Jungle robot | ||||||
|  |     ''; | ||||||
|  |     mkServ = name: mail: { | ||||||
|  |       "ompss2-${name}" = { | ||||||
|  |         script = '' | ||||||
|  |           set -eu | ||||||
|  |           set -o pipefail | ||||||
|  |           cat ${mail} | ${config.security.wrapperDir}/sendmail star@bsc.es | ||||||
|  |         ''; | ||||||
|  |         serviceConfig = { | ||||||
|  |           Type = "oneshot"; | ||||||
|  |           DynamicUser = true; | ||||||
|  |           Group = "mail-robot"; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  |   in | ||||||
|  |     (mkServ "closing" closing) // | ||||||
|  |     (mkServ "freeze" freeze) // | ||||||
|  |     (mkServ "release" release); | ||||||
|  | } | ||||||
							
								
								
									
										357
									
								
								m/module/agenix.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										357
									
								
								m/module/agenix.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,357 @@ | |||||||
|  | { | ||||||
|  |   config, | ||||||
|  |   options, | ||||||
|  |   lib, | ||||||
|  |   pkgs, | ||||||
|  |   ... | ||||||
|  | }: | ||||||
|  | with lib; | ||||||
|  | let | ||||||
|  |   cfg = config.age; | ||||||
|  | 
 | ||||||
|  |   isDarwin = lib.attrsets.hasAttrByPath [ "environment" "darwinConfig" ] options; | ||||||
|  | 
 | ||||||
|  |   ageBin = config.age.ageBin; | ||||||
|  | 
 | ||||||
|  |   users = config.users.users; | ||||||
|  | 
 | ||||||
|  |   sysusersEnabled = | ||||||
|  |     if isDarwin then | ||||||
|  |       false | ||||||
|  |     else | ||||||
|  |       options.systemd ? sysusers && (config.systemd.sysusers.enable || config.services.userborn.enable); | ||||||
|  | 
 | ||||||
|  |   mountCommand = | ||||||
|  |     if isDarwin then | ||||||
|  |       '' | ||||||
|  |         if ! diskutil info "${cfg.secretsMountPoint}" &> /dev/null; then | ||||||
|  |             num_sectors=1048576 | ||||||
|  |             dev=$(hdiutil attach -nomount ram://"$num_sectors" | sed 's/[[:space:]]*$//') | ||||||
|  |             newfs_hfs -v agenix "$dev" | ||||||
|  |             mount -t hfs -o nobrowse,nodev,nosuid,-m=0751 "$dev" "${cfg.secretsMountPoint}" | ||||||
|  |         fi | ||||||
|  |       '' | ||||||
|  |     else | ||||||
|  |       '' | ||||||
|  |         grep -q "${cfg.secretsMountPoint} ramfs" /proc/mounts || | ||||||
|  |           mount -t ramfs none "${cfg.secretsMountPoint}" -o nodev,nosuid,mode=0751 | ||||||
|  |       ''; | ||||||
|  |   newGeneration = '' | ||||||
|  |     _agenix_generation="$(basename "$(readlink ${cfg.secretsDir})" || echo 0)" | ||||||
|  |     (( ++_agenix_generation )) | ||||||
|  |     echo "[agenix] creating new generation in ${cfg.secretsMountPoint}/$_agenix_generation" | ||||||
|  |     mkdir -p "${cfg.secretsMountPoint}" | ||||||
|  |     chmod 0751 "${cfg.secretsMountPoint}" | ||||||
|  |     ${mountCommand} | ||||||
|  |     mkdir -p "${cfg.secretsMountPoint}/$_agenix_generation" | ||||||
|  |     chmod 0751 "${cfg.secretsMountPoint}/$_agenix_generation" | ||||||
|  |   ''; | ||||||
|  | 
 | ||||||
|  |   chownGroup = if isDarwin then "admin" else "keys"; | ||||||
|  |   # chown the secrets mountpoint and the current generation to the keys group | ||||||
|  |   # instead of leaving it root:root. | ||||||
|  |   chownMountPoint = '' | ||||||
|  |     chown :${chownGroup} "${cfg.secretsMountPoint}" "${cfg.secretsMountPoint}/$_agenix_generation" | ||||||
|  |   ''; | ||||||
|  | 
 | ||||||
|  |   setTruePath = secretType: '' | ||||||
|  |     ${ | ||||||
|  |       if secretType.symlink then | ||||||
|  |         '' | ||||||
|  |           _truePath="${cfg.secretsMountPoint}/$_agenix_generation/${secretType.name}" | ||||||
|  |         '' | ||||||
|  |       else | ||||||
|  |         '' | ||||||
|  |           _truePath="${secretType.path}" | ||||||
|  |         '' | ||||||
|  |     } | ||||||
|  |   ''; | ||||||
|  | 
 | ||||||
|  |   installSecret = secretType: '' | ||||||
|  |     ${setTruePath secretType} | ||||||
|  |     echo "decrypting '${secretType.file}' to '$_truePath'..." | ||||||
|  |     TMP_FILE="$_truePath.tmp" | ||||||
|  | 
 | ||||||
|  |     IDENTITIES=() | ||||||
|  |     for identity in ${toString cfg.identityPaths}; do | ||||||
|  |       test -r "$identity" || continue | ||||||
|  |       test -s "$identity" || continue | ||||||
|  |       IDENTITIES+=(-i) | ||||||
|  |       IDENTITIES+=("$identity") | ||||||
|  |     done | ||||||
|  | 
 | ||||||
|  |     test "''${#IDENTITIES[@]}" -eq 0 && echo "[agenix] WARNING: no readable identities found!" | ||||||
|  | 
 | ||||||
|  |     mkdir -p "$(dirname "$_truePath")" | ||||||
|  |     [ "${secretType.path}" != "${cfg.secretsDir}/${secretType.name}" ] && mkdir -p "$(dirname "${secretType.path}")" | ||||||
|  |     ( | ||||||
|  |       umask u=r,g=,o= | ||||||
|  |       test -f "${secretType.file}" || echo '[agenix] WARNING: encrypted file ${secretType.file} does not exist!' | ||||||
|  |       test -d "$(dirname "$TMP_FILE")" || echo "[agenix] WARNING: $(dirname "$TMP_FILE") does not exist!" | ||||||
|  |       LANG=${ | ||||||
|  |         config.i18n.defaultLocale or "C" | ||||||
|  |       } ${ageBin} --decrypt "''${IDENTITIES[@]}" -o "$TMP_FILE" "${secretType.file}" | ||||||
|  |     ) | ||||||
|  |     chmod ${secretType.mode} "$TMP_FILE" | ||||||
|  |     mv -f "$TMP_FILE" "$_truePath" | ||||||
|  | 
 | ||||||
|  |     ${optionalString secretType.symlink '' | ||||||
|  |       [ "${secretType.path}" != "${cfg.secretsDir}/${secretType.name}" ] && ln -sfT "${cfg.secretsDir}/${secretType.name}" "${secretType.path}" | ||||||
|  |     ''} | ||||||
|  |   ''; | ||||||
|  | 
 | ||||||
|  |   testIdentities = map (path: '' | ||||||
|  |     test -f ${path} || echo '[agenix] WARNING: config.age.identityPaths entry ${path} not present!' | ||||||
|  |   '') cfg.identityPaths; | ||||||
|  | 
 | ||||||
|  |   cleanupAndLink = '' | ||||||
|  |     _agenix_generation="$(basename "$(readlink ${cfg.secretsDir})" || echo 0)" | ||||||
|  |     (( ++_agenix_generation )) | ||||||
|  |     echo "[agenix] symlinking new secrets to ${cfg.secretsDir} (generation $_agenix_generation)..." | ||||||
|  |     ln -sfT "${cfg.secretsMountPoint}/$_agenix_generation" ${cfg.secretsDir} | ||||||
|  | 
 | ||||||
|  |     (( _agenix_generation > 1 )) && { | ||||||
|  |     echo "[agenix] removing old secrets (generation $(( _agenix_generation - 1 )))..." | ||||||
|  |     rm -rf "${cfg.secretsMountPoint}/$(( _agenix_generation - 1 ))" | ||||||
|  |     } | ||||||
|  |   ''; | ||||||
|  | 
 | ||||||
|  |   installSecrets = builtins.concatStringsSep "\n" ( | ||||||
|  |     [ "echo '[agenix] decrypting secrets...'" ] | ||||||
|  |     ++ testIdentities | ||||||
|  |     ++ (map installSecret (builtins.attrValues cfg.secrets)) | ||||||
|  |     ++ [ cleanupAndLink ] | ||||||
|  |   ); | ||||||
|  | 
 | ||||||
|  |   chownSecret = secretType: '' | ||||||
|  |     ${setTruePath secretType} | ||||||
|  |     chown ${secretType.owner}:${secretType.group} "$_truePath" | ||||||
|  |   ''; | ||||||
|  | 
 | ||||||
|  |   chownSecrets = builtins.concatStringsSep "\n" ( | ||||||
|  |     [ "echo '[agenix] chowning...'" ] | ||||||
|  |     ++ [ chownMountPoint ] | ||||||
|  |     ++ (map chownSecret (builtins.attrValues cfg.secrets)) | ||||||
|  |   ); | ||||||
|  | 
 | ||||||
|  |   secretType = types.submodule ( | ||||||
|  |     { config, ... }: | ||||||
|  |     { | ||||||
|  |       options = { | ||||||
|  |         name = mkOption { | ||||||
|  |           type = types.str; | ||||||
|  |           default = config._module.args.name; | ||||||
|  |           defaultText = literalExpression "config._module.args.name"; | ||||||
|  |           description = '' | ||||||
|  |             Name of the file used in {option}`age.secretsDir` | ||||||
|  |           ''; | ||||||
|  |         }; | ||||||
|  |         file = mkOption { | ||||||
|  |           type = types.path; | ||||||
|  |           description = '' | ||||||
|  |             Age file the secret is loaded from. | ||||||
|  |           ''; | ||||||
|  |         }; | ||||||
|  |         path = mkOption { | ||||||
|  |           type = types.str; | ||||||
|  |           default = "${cfg.secretsDir}/${config.name}"; | ||||||
|  |           defaultText = literalExpression '' | ||||||
|  |             "''${cfg.secretsDir}/''${config.name}" | ||||||
|  |           ''; | ||||||
|  |           description = '' | ||||||
|  |             Path where the decrypted secret is installed. | ||||||
|  |           ''; | ||||||
|  |         }; | ||||||
|  |         mode = mkOption { | ||||||
|  |           type = types.str; | ||||||
|  |           default = "0400"; | ||||||
|  |           description = '' | ||||||
|  |             Permissions mode of the decrypted secret in a format understood by chmod. | ||||||
|  |           ''; | ||||||
|  |         }; | ||||||
|  |         owner = mkOption { | ||||||
|  |           type = types.str; | ||||||
|  |           default = "0"; | ||||||
|  |           description = '' | ||||||
|  |             User of the decrypted secret. | ||||||
|  |           ''; | ||||||
|  |         }; | ||||||
|  |         group = mkOption { | ||||||
|  |           type = types.str; | ||||||
|  |           default = users.${config.owner}.group or "0"; | ||||||
|  |           defaultText = literalExpression '' | ||||||
|  |             users.''${config.owner}.group or "0" | ||||||
|  |           ''; | ||||||
|  |           description = '' | ||||||
|  |             Group of the decrypted secret. | ||||||
|  |           ''; | ||||||
|  |         }; | ||||||
|  |         symlink = mkEnableOption "symlinking secrets to their destination" // { | ||||||
|  |           default = true; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     } | ||||||
|  |   ); | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   imports = [ | ||||||
|  |     (mkRenamedOptionModule [ "age" "sshKeyPaths" ] [ "age" "identityPaths" ]) | ||||||
|  |   ]; | ||||||
|  | 
 | ||||||
|  |   options.age = { | ||||||
|  |     ageBin = mkOption { | ||||||
|  |       type = types.str; | ||||||
|  |       default = "${pkgs.age}/bin/age"; | ||||||
|  |       defaultText = literalExpression '' | ||||||
|  |         "''${pkgs.age}/bin/age" | ||||||
|  |       ''; | ||||||
|  |       description = '' | ||||||
|  |         The age executable to use. | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  |     secrets = mkOption { | ||||||
|  |       type = types.attrsOf secretType; | ||||||
|  |       default = { }; | ||||||
|  |       description = '' | ||||||
|  |         Attrset of secrets. | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  |     secretsDir = mkOption { | ||||||
|  |       type = types.path; | ||||||
|  |       default = "/run/agenix"; | ||||||
|  |       description = '' | ||||||
|  |         Folder where secrets are symlinked to | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  |     secretsMountPoint = mkOption { | ||||||
|  |       type = | ||||||
|  |         types.addCheck types.str ( | ||||||
|  |           s: | ||||||
|  |           (builtins.match "[ \t\n]*" s) == null # non-empty | ||||||
|  |           && (builtins.match ".+/" s) == null | ||||||
|  |         ) # without trailing slash | ||||||
|  |         // { | ||||||
|  |           description = "${types.str.description} (with check: non-empty without trailing slash)"; | ||||||
|  |         }; | ||||||
|  |       default = "/run/agenix.d"; | ||||||
|  |       description = '' | ||||||
|  |         Where secrets are created before they are symlinked to {option}`age.secretsDir` | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  |     identityPaths = mkOption { | ||||||
|  |       type = types.listOf types.path; | ||||||
|  |       default = | ||||||
|  |         if isDarwin then | ||||||
|  |           [ | ||||||
|  |             "/etc/ssh/ssh_host_ed25519_key" | ||||||
|  |             "/etc/ssh/ssh_host_rsa_key" | ||||||
|  |           ] | ||||||
|  |         else if (config.services.openssh.enable or false) then | ||||||
|  |           map (e: e.path) ( | ||||||
|  |             lib.filter (e: e.type == "rsa" || e.type == "ed25519") config.services.openssh.hostKeys | ||||||
|  |           ) | ||||||
|  |         else | ||||||
|  |           [ ]; | ||||||
|  |       defaultText = literalExpression '' | ||||||
|  |         if isDarwin | ||||||
|  |         then [ | ||||||
|  |           "/etc/ssh/ssh_host_ed25519_key" | ||||||
|  |           "/etc/ssh/ssh_host_rsa_key" | ||||||
|  |         ] | ||||||
|  |         else if (config.services.openssh.enable or false) | ||||||
|  |         then map (e: e.path) (lib.filter (e: e.type == "rsa" || e.type == "ed25519") config.services.openssh.hostKeys) | ||||||
|  |         else []; | ||||||
|  |       ''; | ||||||
|  |       description = '' | ||||||
|  |         Path to SSH keys to be used as identities in age decryption. | ||||||
|  |       ''; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   config = mkIf (cfg.secrets != { }) (mkMerge [ | ||||||
|  |     { | ||||||
|  |       assertions = [ | ||||||
|  |         { | ||||||
|  |           assertion = cfg.identityPaths != [ ]; | ||||||
|  |           message = "age.identityPaths must be set, for example by enabling openssh."; | ||||||
|  |         } | ||||||
|  |       ]; | ||||||
|  |     } | ||||||
|  |     (optionalAttrs (!isDarwin) { | ||||||
|  |       # When using sysusers we no longer be started as an activation script | ||||||
|  |       # because those are started in initrd while sysusers is started later. | ||||||
|  |       systemd.services.agenix-install-secrets = mkIf sysusersEnabled { | ||||||
|  |         wantedBy = [ "sysinit.target" ]; | ||||||
|  |         after = [ "systemd-sysusers.service" ]; | ||||||
|  |         unitConfig.DefaultDependencies = "no"; | ||||||
|  | 
 | ||||||
|  |         path = [ pkgs.mount ]; | ||||||
|  |         serviceConfig = { | ||||||
|  |           Type = "oneshot"; | ||||||
|  |           ExecStart = pkgs.writeShellScript "agenix-install" (concatLines [ | ||||||
|  |             newGeneration | ||||||
|  |             installSecrets | ||||||
|  |             chownSecrets | ||||||
|  |           ]); | ||||||
|  |           RemainAfterExit = true; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  | 
 | ||||||
|  |       # Create a new directory full of secrets for symlinking (this helps | ||||||
|  |       # ensure removed secrets are actually removed, or at least become | ||||||
|  |       # invalid symlinks). | ||||||
|  |       system.activationScripts = mkIf (!sysusersEnabled) { | ||||||
|  |         agenixNewGeneration = { | ||||||
|  |           text = newGeneration; | ||||||
|  |           deps = [ | ||||||
|  |             "specialfs" | ||||||
|  |           ]; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         agenixInstall = { | ||||||
|  |           text = installSecrets; | ||||||
|  |           deps = [ | ||||||
|  |             "agenixNewGeneration" | ||||||
|  |             "specialfs" | ||||||
|  |           ]; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         # So user passwords can be encrypted. | ||||||
|  |         users.deps = [ "agenixInstall" ]; | ||||||
|  | 
 | ||||||
|  |         # Change ownership and group after users and groups are made. | ||||||
|  |         agenixChown = { | ||||||
|  |           text = chownSecrets; | ||||||
|  |           deps = [ | ||||||
|  |             "users" | ||||||
|  |             "groups" | ||||||
|  |           ]; | ||||||
|  |         }; | ||||||
|  | 
 | ||||||
|  |         # So other activation scripts can depend on agenix being done. | ||||||
|  |         agenix = { | ||||||
|  |           text = ""; | ||||||
|  |           deps = [ "agenixChown" ]; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }) | ||||||
|  | 
 | ||||||
|  |     (optionalAttrs isDarwin { | ||||||
|  |       launchd.daemons.activate-agenix = { | ||||||
|  |         script = '' | ||||||
|  |           set -e | ||||||
|  |           set -o pipefail | ||||||
|  |           export PATH="${pkgs.gnugrep}/bin:${pkgs.coreutils}/bin:@out@/sw/bin:/usr/bin:/bin:/usr/sbin:/sbin" | ||||||
|  |           ${newGeneration} | ||||||
|  |           ${installSecrets} | ||||||
|  |           ${chownSecrets} | ||||||
|  |           exit 0 | ||||||
|  |         ''; | ||||||
|  |         serviceConfig = { | ||||||
|  |           RunAtLoad = true; | ||||||
|  |           KeepAlive.SuccessfulExit = false; | ||||||
|  |         }; | ||||||
|  |       }; | ||||||
|  |     }) | ||||||
|  |   ]); | ||||||
|  | } | ||||||
| @ -1,4 +1,4 @@ | |||||||
| { lib, ... }: | { lib, pkgs, ... }: | ||||||
| 
 | 
 | ||||||
| { | { | ||||||
|   imports = [ |   imports = [ | ||||||
| @ -21,4 +21,20 @@ | |||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   services.slurm.client.enable = true; |   services.slurm.client.enable = true; | ||||||
|  | 
 | ||||||
|  |   # Only allow SSH connections from users who have a SLURM allocation | ||||||
|  |   # See: https://slurm.schedmd.com/pam_slurm_adopt.html | ||||||
|  |   security.pam.services.sshd.rules.account.slurm = { | ||||||
|  |     control = "required"; | ||||||
|  |     enable = true; | ||||||
|  |     modulePath = "${pkgs.slurm}/lib/security/pam_slurm_adopt.so"; | ||||||
|  |     args = [ "log_level=debug5" ]; | ||||||
|  |     order = 999999; # Make it last one | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Disable systemd session (pam_systemd.so) as it will conflict with the | ||||||
|  |   # pam_slurm_adopt.so module. What happens is that the shell is first adopted | ||||||
|  |   # into the slurmstepd task and then into the systemd session, which is not | ||||||
|  |   # what we want, otherwise it will linger even if all jobs are gone. | ||||||
|  |   security.pam.services.sshd.startSession = lib.mkForce false; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,31 +1,6 @@ | |||||||
| { config, pkgs, ... }: | { config, pkgs, ... }: | ||||||
| 
 | 
 | ||||||
| let | { | ||||||
|   suspendProgram = pkgs.writeShellScript "suspend.sh" '' |  | ||||||
|     exec 1>>/var/log/power_save.log 2>>/var/log/power_save.log |  | ||||||
|     set -x |  | ||||||
|     export "PATH=/run/current-system/sw/bin:$PATH" |  | ||||||
|     echo "$(date) Suspend invoked $0 $*" >> /var/log/power_save.log |  | ||||||
|     hosts=$(scontrol show hostnames $1) |  | ||||||
|     for host in $hosts; do |  | ||||||
|       echo Shutting down host: $host |  | ||||||
|       ipmitool -I lanplus -H ''${host}-ipmi -P "" -U "" chassis power off |  | ||||||
|     done |  | ||||||
|   ''; |  | ||||||
| 
 |  | ||||||
|   resumeProgram = pkgs.writeShellScript "resume.sh" '' |  | ||||||
|     exec 1>>/var/log/power_save.log 2>>/var/log/power_save.log |  | ||||||
|     set -x |  | ||||||
|     export "PATH=/run/current-system/sw/bin:$PATH" |  | ||||||
|     echo "$(date) Suspend invoked $0 $*" >> /var/log/power_save.log |  | ||||||
|     hosts=$(scontrol show hostnames $1) |  | ||||||
|     for host in $hosts; do |  | ||||||
|       echo Starting host: $host |  | ||||||
|       ipmitool -I lanplus -H ''${host}-ipmi -P "" -U "" chassis power on |  | ||||||
|     done |  | ||||||
|   ''; |  | ||||||
| 
 |  | ||||||
| in { |  | ||||||
|   services.slurm = { |   services.slurm = { | ||||||
|     controlMachine = "apex"; |     controlMachine = "apex"; | ||||||
|     clusterName = "jungle"; |     clusterName = "jungle"; | ||||||
| @ -59,16 +34,6 @@ in { | |||||||
|       # the resources. Use the task/cgroup plugin to enable process containment. |       # the resources. Use the task/cgroup plugin to enable process containment. | ||||||
|       TaskPlugin=task/affinity,task/cgroup |       TaskPlugin=task/affinity,task/cgroup | ||||||
| 
 | 
 | ||||||
|       # Power off unused nodes until they are requested |  | ||||||
|       SuspendProgram=${suspendProgram} |  | ||||||
|       SuspendTimeout=60 |  | ||||||
|       ResumeProgram=${resumeProgram} |  | ||||||
|       ResumeTimeout=300 |  | ||||||
|       SuspendExcNodes=fox |  | ||||||
| 
 |  | ||||||
|       # Turn the nodes off after 1 hour of inactivity |  | ||||||
|       SuspendTime=3600 |  | ||||||
| 
 |  | ||||||
|       # Reduce port range so we can allow only this range in the firewall |       # Reduce port range so we can allow only this range in the firewall | ||||||
|       SrunPortRange=60000-61000 |       SrunPortRange=60000-61000 | ||||||
| 
 | 
 | ||||||
| @ -86,9 +51,7 @@ in { | |||||||
|       # when a task runs (srun) so we can ssh early. |       # when a task runs (srun) so we can ssh early. | ||||||
|       PrologFlags=Alloc,Contain,X11 |       PrologFlags=Alloc,Contain,X11 | ||||||
| 
 | 
 | ||||||
|       # LaunchParameters=ulimit_pam_adopt will set RLIMIT_RSS in processes |       LaunchParameters=use_interactive_step | ||||||
|       # adopted by the external step, similar to tasks running in regular steps |  | ||||||
|       # LaunchParameters=ulimit_pam_adopt |  | ||||||
|       SlurmdDebug=debug5 |       SlurmdDebug=debug5 | ||||||
|       #DebugFlags=Protocol,Cgroup |       #DebugFlags=Protocol,Cgroup | ||||||
|     ''; |     ''; | ||||||
|  | |||||||
| @ -4,8 +4,8 @@ let | |||||||
|     name = "jungle-web"; |     name = "jungle-web"; | ||||||
|     src = pkgs.fetchgit { |     src = pkgs.fetchgit { | ||||||
|       url = "https://jungle.bsc.es/git/rarias/jungle-website.git"; |       url = "https://jungle.bsc.es/git/rarias/jungle-website.git"; | ||||||
|       rev = "739bf0175a7f05380fe7ad7023ff1d60db1710e1"; |       rev = "52abaf4d71652a9ef77a0b098db14ca33bffff4c"; | ||||||
|       hash = "sha256-ea5DzhYTzZ9TmqD+x95rdNdLbxPnBluqlYH2NmBYmc4="; |       hash = "sha256-/ul9GazbOrOkmlvSgDz/+2W+V+ir5725Y7mVLc3rb0M="; | ||||||
|     }; |     }; | ||||||
|     buildInputs = [ pkgs.hugo ]; |     buildInputs = [ pkgs.hugo ]; | ||||||
|     buildPhase = '' |     buildPhase = '' | ||||||
|  | |||||||
							
								
								
									
										81
									
								
								overlay.nix
									
									
									
									
									
								
							
							
						
						
									
										81
									
								
								overlay.nix
									
									
									
									
									
								
							| @ -7,6 +7,7 @@ let | |||||||
|   callPackage = final.callPackage; |   callPackage = final.callPackage; | ||||||
| 
 | 
 | ||||||
|   bscPkgs = { |   bscPkgs = { | ||||||
|  |     agenix = prev.callPackage ./pkgs/agenix/default.nix { }; | ||||||
|     amd-uprof = prev.callPackage ./pkgs/amd-uprof/default.nix { }; |     amd-uprof = prev.callPackage ./pkgs/amd-uprof/default.nix { }; | ||||||
|     bench6 = callPackage ./pkgs/bench6/default.nix { }; |     bench6 = callPackage ./pkgs/bench6/default.nix { }; | ||||||
|     bigotes = callPackage ./pkgs/bigotes/default.nix { }; |     bigotes = callPackage ./pkgs/bigotes/default.nix { }; | ||||||
| @ -18,11 +19,7 @@ let | |||||||
|     cudainfo = prev.callPackage ./pkgs/cudainfo/default.nix { }; |     cudainfo = prev.callPackage ./pkgs/cudainfo/default.nix { }; | ||||||
|     #extrae = callPackage ./pkgs/extrae/default.nix { }; # Broken and outdated |     #extrae = callPackage ./pkgs/extrae/default.nix { }; # Broken and outdated | ||||||
|     gpi-2 = callPackage ./pkgs/gpi-2/default.nix { }; |     gpi-2 = callPackage ./pkgs/gpi-2/default.nix { }; | ||||||
|     intel-apt = callPackage ./pkgs/intel-oneapi/packages.nix { }; |  | ||||||
|     intelPackages_2023 = callPackage ./pkgs/intel-oneapi/2023.nix { }; |     intelPackages_2023 = callPackage ./pkgs/intel-oneapi/2023.nix { }; | ||||||
|     intelPackages_2024 = final.intel-apt.hpckit_2024; |  | ||||||
|     intelPackages_2025 = final.intel-apt.hpckit_2025; |  | ||||||
|     intelPackages = final.intelPackages_2025; |  | ||||||
|     jemallocNanos6 = callPackage ./pkgs/nanos6/jemalloc.nix { }; |     jemallocNanos6 = callPackage ./pkgs/nanos6/jemalloc.nix { }; | ||||||
|     # FIXME: Extend this to all linuxPackages variants. Open problem, see: |     # FIXME: Extend this to all linuxPackages variants. Open problem, see: | ||||||
|     # https://discourse.nixos.org/t/whats-the-right-way-to-make-a-custom-kernel-module-available/4636 |     # https://discourse.nixos.org/t/whats-the-right-way-to-make-a-custom-kernel-module-available/4636 | ||||||
| @ -40,12 +37,12 @@ let | |||||||
|     nanos6 = callPackage ./pkgs/nanos6/default.nix { }; |     nanos6 = callPackage ./pkgs/nanos6/default.nix { }; | ||||||
|     nanos6Debug = final.nanos6.override { enableDebug = true; }; |     nanos6Debug = final.nanos6.override { enableDebug = true; }; | ||||||
|     nixtools = callPackage ./pkgs/nixtools/default.nix { }; |     nixtools = callPackage ./pkgs/nixtools/default.nix { }; | ||||||
|  |     nixgen = callPackage ./pkgs/nixgen/default.nix { }; | ||||||
|     # Broken because of pkgsStatic.libcap |     # Broken because of pkgsStatic.libcap | ||||||
|     # See: https://github.com/NixOS/nixpkgs/pull/268791 |     # See: https://github.com/NixOS/nixpkgs/pull/268791 | ||||||
|     #nix-wrap = callPackage ./pkgs/nix-wrap/default.nix { }; |     #nix-wrap = callPackage ./pkgs/nix-wrap/default.nix { }; | ||||||
|     nodes = callPackage ./pkgs/nodes/default.nix { }; |     nodes = callPackage ./pkgs/nodes/default.nix { }; | ||||||
|     nosv = callPackage ./pkgs/nosv/default.nix { }; |     nosv = callPackage ./pkgs/nosv/default.nix { }; | ||||||
|     oneMath = callPackage ./pkgs/onemath/default.nix { }; |  | ||||||
|     openmp = callPackage ./pkgs/llvm-ompss2/openmp.nix { monorepoSrc = final.clangOmpss2Unwrapped.src; version = final.clangOmpss2Unwrapped.version; }; |     openmp = callPackage ./pkgs/llvm-ompss2/openmp.nix { monorepoSrc = final.clangOmpss2Unwrapped.src; version = final.clangOmpss2Unwrapped.version; }; | ||||||
|     openmpv = final.openmp.override { enableNosv = true; enableOvni = true; }; |     openmpv = final.openmp.override { enableNosv = true; enableOvni = true; }; | ||||||
|     osumb = callPackage ./pkgs/osu/default.nix { }; |     osumb = callPackage ./pkgs/osu/default.nix { }; | ||||||
| @ -55,6 +52,7 @@ let | |||||||
|     prometheus-slurm-exporter = prev.callPackage ./pkgs/slurm-exporter/default.nix { }; |     prometheus-slurm-exporter = prev.callPackage ./pkgs/slurm-exporter/default.nix { }; | ||||||
|     #pscom = callPackage ./pkgs/parastation/pscom.nix { }; # Unmaintaned |     #pscom = callPackage ./pkgs/parastation/pscom.nix { }; # Unmaintaned | ||||||
|     #psmpi = callPackage ./pkgs/parastation/psmpi.nix { }; # Unmaintaned |     #psmpi = callPackage ./pkgs/parastation/psmpi.nix { }; # Unmaintaned | ||||||
|  |     slurm = import ./pkgs/slurm/default.nix { slurm = prev.slurm; }; | ||||||
|     sonar = callPackage ./pkgs/sonar/default.nix { }; |     sonar = callPackage ./pkgs/sonar/default.nix { }; | ||||||
|     stdenvClangOmpss2 = final.stdenv.override { cc = final.clangOmpss2; allowedRequisites = null; }; |     stdenvClangOmpss2 = final.stdenv.override { cc = final.clangOmpss2; allowedRequisites = null; }; | ||||||
|     stdenvClangOmpss2Nanos6 = final.stdenv.override { cc = final.clangOmpss2Nanos6; allowedRequisites = null; }; |     stdenvClangOmpss2Nanos6 = final.stdenv.override { cc = final.clangOmpss2Nanos6; allowedRequisites = null; }; | ||||||
| @ -62,19 +60,15 @@ let | |||||||
|     stdenvClangOmpss2NodesOmpv = final.stdenv.override { cc = final.clangOmpss2NodesOmpv; allowedRequisites = null; }; |     stdenvClangOmpss2NodesOmpv = final.stdenv.override { cc = final.clangOmpss2NodesOmpv; allowedRequisites = null; }; | ||||||
|     tagaspi = callPackage ./pkgs/tagaspi/default.nix { }; |     tagaspi = callPackage ./pkgs/tagaspi/default.nix { }; | ||||||
|     tampi = callPackage ./pkgs/tampi/default.nix { }; |     tampi = callPackage ./pkgs/tampi/default.nix { }; | ||||||
|     tasycl = callPackage ./pkgs/tasycl/default.nix { }; |  | ||||||
|     tasycl-acpp = callPackage ./pkgs/tasycl/default.nix { useIntel = false; }; |  | ||||||
|     upc-qaire-exporter = prev.callPackage ./pkgs/upc-qaire-exporter/default.nix { }; |     upc-qaire-exporter = prev.callPackage ./pkgs/upc-qaire-exporter/default.nix { }; | ||||||
|     wxparaver = callPackage ./pkgs/paraver/default.nix { }; |     wxparaver = callPackage ./pkgs/paraver/default.nix { }; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   tests = rec { |   tests = rec { | ||||||
|     #hwloc = callPackage ./test/bugs/hwloc.nix { }; # Broken, no /sys |     hwloc = callPackage ./test/bugs/hwloc.nix { }; | ||||||
|     #sigsegv = callPackage ./test/reproducers/sigsegv.nix { }; |     #sigsegv = callPackage ./test/reproducers/sigsegv.nix { }; | ||||||
|     hello-c = callPackage ./test/compilers/hello-c.nix { }; |     hello-c = callPackage ./test/compilers/hello-c.nix { }; | ||||||
|     hello-cpp = callPackage ./test/compilers/hello-cpp.nix { }; |     hello-cpp = callPackage ./test/compilers/hello-cpp.nix { }; | ||||||
|     hello-sycl = callPackage ./test/compilers/hello-sycl.nix { }; |  | ||||||
|     hello-syclompss = callPackage ./test/compilers/icpx-ompss2.nix { }; |  | ||||||
|     lto = callPackage ./test/compilers/lto.nix { }; |     lto = callPackage ./test/compilers/lto.nix { }; | ||||||
|     asan = callPackage ./test/compilers/asan.nix { }; |     asan = callPackage ./test/compilers/asan.nix { }; | ||||||
|     intel2023-icx-c   = hello-c.override   { stdenv = final.intelPackages_2023.stdenv; }; |     intel2023-icx-c   = hello-c.override   { stdenv = final.intelPackages_2023.stdenv; }; | ||||||
| @ -84,13 +78,6 @@ let | |||||||
|     intel2023-ifort   = callPackage ./test/compilers/hello-f.nix { |     intel2023-ifort   = callPackage ./test/compilers/hello-f.nix { | ||||||
|       stdenv = final.intelPackages_2023.stdenv-ifort; |       stdenv = final.intelPackages_2023.stdenv-ifort; | ||||||
|     }; |     }; | ||||||
|     intel2024-icx-c   = hello-c.override   { stdenv = final.intelPackages_2024.stdenv; }; |  | ||||||
|     intel2025-icx-c   = hello-c.override   { stdenv = final.intelPackages_2025.stdenv; }; |  | ||||||
|     intel2024-icx-cpp = hello-cpp.override { stdenv = final.intelPackages_2024.stdenv; }; |  | ||||||
|     intel2025-icx-cpp = hello-cpp.override { stdenv = final.intelPackages_2025.stdenv; }; |  | ||||||
|     # intel2023-sycl    = hello-sycl.override { intelPackages = final.intelPackages_2023; }; # broken |  | ||||||
|     intel2024-sycl    = hello-sycl.override { intelPackages = final.intelPackages_2024; }; |  | ||||||
|     intel2025-sycl    = hello-sycl.override { intelPackages = final.intelPackages_2025; }; |  | ||||||
|     clangOmpss2-lto   = lto.override       { stdenv = final.stdenvClangOmpss2Nanos6; }; |     clangOmpss2-lto   = lto.override       { stdenv = final.stdenvClangOmpss2Nanos6; }; | ||||||
|     clangOmpss2-asan  = asan.override      { stdenv = final.stdenvClangOmpss2Nanos6; }; |     clangOmpss2-asan  = asan.override      { stdenv = final.stdenvClangOmpss2Nanos6; }; | ||||||
|     clangOmpss2-task  = callPackage ./test/compilers/ompss2.nix { |     clangOmpss2-task  = callPackage ./test/compilers/ompss2.nix { | ||||||
| @ -110,12 +97,20 @@ let | |||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   pkgs = filterAttrs (_: isDerivation) bscPkgs; |   # For now, only build toplevel packages in CI/Hydra | ||||||
|  |   pkgsTopLevel = filterAttrs (_: isDerivation) bscPkgs; | ||||||
| 
 | 
 | ||||||
|   crossTargets = [ "riscv64" ]; |   # Native build in that platform doesn't imply cross build works | ||||||
|   cross = prev.lib.genAttrs crossTargets (target: |   canCrossCompile = platform: default: pkg: | ||||||
|     final.pkgsCross.${target}.bsc-ci.pkgs |     (isDerivation pkg) && | ||||||
|   ); |     # If meta.cross is undefined, use default | ||||||
|  |     (pkg.meta.cross or default) && | ||||||
|  |     (meta.availableOn final.pkgsCross.${platform}.stdenv.hostPlatform pkg); | ||||||
|  | 
 | ||||||
|  |   # For now only RISC-V | ||||||
|  |   crossSet = genAttrs [ "riscv64" ] (platform: | ||||||
|  |     filterAttrs (_: canCrossCompile platform true) | ||||||
|  |       final.pkgsCross.${platform}.bsc.pkgsTopLevel); | ||||||
| 
 | 
 | ||||||
|   buildList = name: paths: |   buildList = name: paths: | ||||||
|     final.runCommandLocal name { } '' |     final.runCommandLocal name { } '' | ||||||
| @ -129,22 +124,38 @@ let | |||||||
|       printf '%s\n' $deps >$out |       printf '%s\n' $deps >$out | ||||||
|     ''; |     ''; | ||||||
| 
 | 
 | ||||||
|   crossList = builtins.mapAttrs (t: v: buildList t (builtins.attrValues v)) cross; |   pkgsList = buildList "ci-pkgs" (builtins.attrValues pkgsTopLevel); | ||||||
| 
 |   testsList = buildList "ci-tests" (collect isDerivation tests); | ||||||
|   pkgsList = buildList "ci-pkgs" (builtins.attrValues pkgs); |   allList = buildList' "ci-all" [ pkgsList testsList ]; | ||||||
|   testList = buildList "ci-tests" (collect isDerivation tests); |   # For now only RISC-V | ||||||
| 
 |   crossList = buildList "ci-cross" | ||||||
|   all = buildList' "ci-all" [ pkgsList testList ]; |     (filter | ||||||
|  |       (canCrossCompile "riscv64" false) # opt-in (pkgs with: meta.cross = true) | ||||||
|  |         (builtins.attrValues crossSet.riscv64)); | ||||||
| 
 | 
 | ||||||
| in bscPkgs // { | in bscPkgs // { | ||||||
|   # Prevent accidental usage of bsc attribute | 
 | ||||||
|   bsc = throw "the bsc attribute is deprecated, packages are now in the root"; |   lib = prev.lib // { | ||||||
|  |     maintainers = prev.lib.maintainers // { | ||||||
|  |       bsc = import ./pkgs/maintainers.nix; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   # Prevent accidental usage of bsc-ci attribute | ||||||
|  |   bsc-ci = throw "the bsc-ci attribute is deprecated, use bsc.ci"; | ||||||
| 
 | 
 | ||||||
|   # Internal for our CI tests |   # Internal for our CI tests | ||||||
|   bsc-ci = { |   bsc = { | ||||||
|     inherit pkgs pkgsList; |     # CI targets for nix build | ||||||
|     inherit tests testList; |     ci = { pkgs = pkgsList; tests = testsList; all = allList; cross = crossList; }; | ||||||
|     inherit cross crossList; | 
 | ||||||
|     inherit all; |     # Direct access to package sets | ||||||
|  |     tests = tests; | ||||||
|  |     pkgs = bscPkgs; | ||||||
|  |     pkgsTopLevel = pkgsTopLevel; | ||||||
|  |     cross = crossSet; | ||||||
|  | 
 | ||||||
|  |     # Hydra uses attribute sets of pkgs | ||||||
|  |     hydraJobs = { tests = tests; pkgs = pkgsTopLevel; cross = crossSet; }; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										212
									
								
								pkgs/agenix/agenix.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										212
									
								
								pkgs/agenix/agenix.sh
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,212 @@ | |||||||
|  | #!/usr/bin/env bash | ||||||
|  | set -Eeuo pipefail | ||||||
|  | 
 | ||||||
|  | PACKAGE="agenix" | ||||||
|  | 
 | ||||||
|  | function show_help () { | ||||||
|  |   echo "$PACKAGE - edit and rekey age secret files" | ||||||
|  |   echo " " | ||||||
|  |   echo "$PACKAGE -e FILE [-i PRIVATE_KEY]" | ||||||
|  |   echo "$PACKAGE -r [-i PRIVATE_KEY]" | ||||||
|  |   echo ' ' | ||||||
|  |   echo 'options:' | ||||||
|  |   echo '-h, --help                show help' | ||||||
|  |   # shellcheck disable=SC2016 | ||||||
|  |   echo '-e, --edit FILE           edits FILE using $EDITOR' | ||||||
|  |   echo '-r, --rekey               re-encrypts all secrets with specified recipients' | ||||||
|  |   echo '-d, --decrypt FILE        decrypts FILE to STDOUT' | ||||||
|  |   echo '-i, --identity            identity to use when decrypting' | ||||||
|  |   echo '-v, --verbose             verbose output' | ||||||
|  |   echo ' ' | ||||||
|  |   echo 'FILE an age-encrypted file' | ||||||
|  |   echo ' ' | ||||||
|  |   echo 'PRIVATE_KEY a path to a private SSH key used to decrypt file' | ||||||
|  |   echo ' ' | ||||||
|  |   echo 'EDITOR environment variable of editor to use when editing FILE' | ||||||
|  |   echo ' ' | ||||||
|  |   echo 'If STDIN is not interactive, EDITOR will be set to "cp /dev/stdin"' | ||||||
|  |   echo ' ' | ||||||
|  |   echo 'RULES environment variable with path to Nix file specifying recipient public keys.' | ||||||
|  |   echo "Defaults to './secrets.nix'" | ||||||
|  |   echo ' ' | ||||||
|  |   echo "agenix version: @version@" | ||||||
|  |   echo "age binary path: @ageBin@" | ||||||
|  |   echo "age version: $(@ageBin@ --version)" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function warn() { | ||||||
|  |   printf '%s\n' "$*" >&2 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function err() { | ||||||
|  |   warn "$*" | ||||||
|  |   exit 1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | test $# -eq 0 && (show_help && exit 1) | ||||||
|  | 
 | ||||||
|  | REKEY=0 | ||||||
|  | DECRYPT_ONLY=0 | ||||||
|  | DEFAULT_DECRYPT=(--decrypt) | ||||||
|  | 
 | ||||||
|  | while test $# -gt 0; do | ||||||
|  |   case "$1" in | ||||||
|  |     -h|--help) | ||||||
|  |       show_help | ||||||
|  |       exit 0 | ||||||
|  |       ;; | ||||||
|  |     -e|--edit) | ||||||
|  |       shift | ||||||
|  |       if test $# -gt 0; then | ||||||
|  |         export FILE=$1 | ||||||
|  |       else | ||||||
|  |         echo "no FILE specified" | ||||||
|  |         exit 1 | ||||||
|  |       fi | ||||||
|  |       shift | ||||||
|  |       ;; | ||||||
|  |     -i|--identity) | ||||||
|  |       shift | ||||||
|  |       if test $# -gt 0; then | ||||||
|  |         DEFAULT_DECRYPT+=(--identity "$1") | ||||||
|  |       else | ||||||
|  |         echo "no PRIVATE_KEY specified" | ||||||
|  |         exit 1 | ||||||
|  |       fi | ||||||
|  |       shift | ||||||
|  |       ;; | ||||||
|  |     -r|--rekey) | ||||||
|  |       shift | ||||||
|  |       REKEY=1 | ||||||
|  |       ;; | ||||||
|  |     -d|--decrypt) | ||||||
|  |       shift | ||||||
|  |       DECRYPT_ONLY=1 | ||||||
|  |       if test $# -gt 0; then | ||||||
|  |         export FILE=$1 | ||||||
|  |       else | ||||||
|  |         echo "no FILE specified" | ||||||
|  |         exit 1 | ||||||
|  |       fi | ||||||
|  |       shift | ||||||
|  |       ;; | ||||||
|  |     -v|--verbose) | ||||||
|  |       shift | ||||||
|  |       set -x | ||||||
|  |       ;; | ||||||
|  |     *) | ||||||
|  |       show_help | ||||||
|  |       exit 1 | ||||||
|  |       ;; | ||||||
|  |   esac | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | RULES=${RULES:-./secrets.nix} | ||||||
|  | function cleanup { | ||||||
|  |     if [ -n "${CLEARTEXT_DIR+x}" ] | ||||||
|  |     then | ||||||
|  |         rm -rf -- "$CLEARTEXT_DIR" | ||||||
|  |     fi | ||||||
|  |     if [ -n "${REENCRYPTED_DIR+x}" ] | ||||||
|  |     then | ||||||
|  |         rm -rf -- "$REENCRYPTED_DIR" | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | trap "cleanup" 0 2 3 15 | ||||||
|  | 
 | ||||||
|  | function keys { | ||||||
|  |     (@nixInstantiate@ --json --eval --strict -E "(let rules = import $RULES; in rules.\"$1\".publicKeys)" | @jqBin@ -r .[]) || exit 1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function armor { | ||||||
|  |     (@nixInstantiate@ --json --eval --strict -E "(let rules = import $RULES; in (builtins.hasAttr \"armor\" rules.\"$1\" && rules.\"$1\".armor))") || exit 1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function decrypt { | ||||||
|  |     FILE=$1 | ||||||
|  |     KEYS=$2 | ||||||
|  |     if [ -z "$KEYS" ] | ||||||
|  |     then | ||||||
|  |         err "There is no rule for $FILE in $RULES." | ||||||
|  |     fi | ||||||
|  | 
 | ||||||
|  |     if [ -f "$FILE" ] | ||||||
|  |     then | ||||||
|  |         DECRYPT=("${DEFAULT_DECRYPT[@]}") | ||||||
|  |         if [[ "${DECRYPT[*]}" != *"--identity"* ]]; then | ||||||
|  |             if [ -f "$HOME/.ssh/id_rsa" ]; then | ||||||
|  |                 DECRYPT+=(--identity "$HOME/.ssh/id_rsa") | ||||||
|  |             fi | ||||||
|  |             if [ -f "$HOME/.ssh/id_ed25519" ]; then | ||||||
|  |                 DECRYPT+=(--identity "$HOME/.ssh/id_ed25519") | ||||||
|  |             fi | ||||||
|  |         fi | ||||||
|  |         if [[ "${DECRYPT[*]}" != *"--identity"* ]]; then | ||||||
|  |           err "No identity found to decrypt $FILE. Try adding an SSH key at $HOME/.ssh/id_rsa or $HOME/.ssh/id_ed25519 or using the --identity flag to specify a file." | ||||||
|  |         fi | ||||||
|  | 
 | ||||||
|  |         @ageBin@ "${DECRYPT[@]}" -- "$FILE" || exit 1 | ||||||
|  |     fi | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function edit { | ||||||
|  |     FILE=$1 | ||||||
|  |     KEYS=$(keys "$FILE") || exit 1 | ||||||
|  |     ARMOR=$(armor "$FILE") || exit 1 | ||||||
|  | 
 | ||||||
|  |     CLEARTEXT_DIR=$(@mktempBin@ -d) | ||||||
|  |     CLEARTEXT_FILE="$CLEARTEXT_DIR/$(basename -- "$FILE")" | ||||||
|  |     DEFAULT_DECRYPT+=(-o "$CLEARTEXT_FILE") | ||||||
|  | 
 | ||||||
|  |     decrypt "$FILE" "$KEYS" || exit 1 | ||||||
|  | 
 | ||||||
|  |     [ ! -f "$CLEARTEXT_FILE" ] || cp -- "$CLEARTEXT_FILE" "$CLEARTEXT_FILE.before" | ||||||
|  | 
 | ||||||
|  |     [ -t 0 ] || EDITOR='cp -- /dev/stdin' | ||||||
|  | 
 | ||||||
|  |     $EDITOR "$CLEARTEXT_FILE" | ||||||
|  | 
 | ||||||
|  |     if [ ! -f "$CLEARTEXT_FILE" ] | ||||||
|  |     then | ||||||
|  |       warn "$FILE wasn't created." | ||||||
|  |       return | ||||||
|  |     fi | ||||||
|  |     [ -f "$FILE" ] && [ "$EDITOR" != ":" ] && @diffBin@ -q -- "$CLEARTEXT_FILE.before" "$CLEARTEXT_FILE" && warn "$FILE wasn't changed, skipping re-encryption." && return | ||||||
|  | 
 | ||||||
|  |     ENCRYPT=() | ||||||
|  |     if [[ "$ARMOR" == "true" ]]; then | ||||||
|  |         ENCRYPT+=(--armor) | ||||||
|  |     fi | ||||||
|  |     while IFS= read -r key | ||||||
|  |     do | ||||||
|  |         if [ -n "$key" ]; then | ||||||
|  |             ENCRYPT+=(--recipient "$key") | ||||||
|  |         fi | ||||||
|  |     done <<< "$KEYS" | ||||||
|  | 
 | ||||||
|  |     REENCRYPTED_DIR=$(@mktempBin@ -d) | ||||||
|  |     REENCRYPTED_FILE="$REENCRYPTED_DIR/$(basename -- "$FILE")" | ||||||
|  | 
 | ||||||
|  |     ENCRYPT+=(-o "$REENCRYPTED_FILE") | ||||||
|  | 
 | ||||||
|  |     @ageBin@ "${ENCRYPT[@]}" <"$CLEARTEXT_FILE" || exit 1 | ||||||
|  | 
 | ||||||
|  |     mkdir -p -- "$(dirname -- "$FILE")" | ||||||
|  | 
 | ||||||
|  |     mv -f -- "$REENCRYPTED_FILE" "$FILE" | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | function rekey { | ||||||
|  |     FILES=$( (@nixInstantiate@ --json --eval -E "(let rules = import $RULES; in builtins.attrNames rules)"  | @jqBin@ -r .[]) || exit 1) | ||||||
|  | 
 | ||||||
|  |     for FILE in $FILES | ||||||
|  |     do | ||||||
|  |         warn "rekeying $FILE..." | ||||||
|  |         EDITOR=: edit "$FILE" | ||||||
|  |         cleanup | ||||||
|  |     done | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | [ $REKEY -eq 1 ] && rekey && exit 0 | ||||||
|  | [ $DECRYPT_ONLY -eq 1 ] && DEFAULT_DECRYPT+=("-o" "-") && decrypt "${FILE}" "$(keys "$FILE")" && exit 0 | ||||||
|  | edit "$FILE" && cleanup && exit 0 | ||||||
							
								
								
									
										66
									
								
								pkgs/agenix/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								pkgs/agenix/default.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,66 @@ | |||||||
|  | { | ||||||
|  |   lib, | ||||||
|  |   stdenv, | ||||||
|  |   age, | ||||||
|  |   jq, | ||||||
|  |   nix, | ||||||
|  |   mktemp, | ||||||
|  |   diffutils, | ||||||
|  |   replaceVars, | ||||||
|  |   ageBin ? "${age}/bin/age", | ||||||
|  |   shellcheck, | ||||||
|  | }: | ||||||
|  | let | ||||||
|  |   bin = "${placeholder "out"}/bin/agenix"; | ||||||
|  | in | ||||||
|  | stdenv.mkDerivation rec { | ||||||
|  |   pname = "agenix"; | ||||||
|  |   version = "0.15.0"; | ||||||
|  |   src = replaceVars ./agenix.sh { | ||||||
|  |     inherit ageBin version; | ||||||
|  |     jqBin = "${jq}/bin/jq"; | ||||||
|  |     nixInstantiate = "${nix}/bin/nix-instantiate"; | ||||||
|  |     mktempBin = "${mktemp}/bin/mktemp"; | ||||||
|  |     diffBin = "${diffutils}/bin/diff"; | ||||||
|  |   }; | ||||||
|  |   dontUnpack = true; | ||||||
|  |   doInstallCheck = true; | ||||||
|  |   installCheckInputs = [ shellcheck ]; | ||||||
|  |   postInstallCheck = '' | ||||||
|  |     shellcheck ${bin} | ||||||
|  |     ${bin} -h | grep ${version} | ||||||
|  | 
 | ||||||
|  |     test_tmp=$(mktemp -d 2>/dev/null || mktemp -d -t 'mytmpdir') | ||||||
|  |     export HOME="$test_tmp/home" | ||||||
|  |     export NIX_STORE_DIR="$test_tmp/nix/store" | ||||||
|  |     export NIX_STATE_DIR="$test_tmp/nix/var" | ||||||
|  |     mkdir -p "$HOME" "$NIX_STORE_DIR" "$NIX_STATE_DIR" | ||||||
|  |     function cleanup { | ||||||
|  |       rm -rf "$test_tmp" | ||||||
|  |     } | ||||||
|  |     trap "cleanup" 0 2 3 15 | ||||||
|  | 
 | ||||||
|  |     mkdir -p $HOME/.ssh | ||||||
|  |     cp -r "${./example}" $HOME/secrets | ||||||
|  |     chmod -R u+rw $HOME/secrets | ||||||
|  |     ( | ||||||
|  |     umask u=rw,g=r,o=r | ||||||
|  |     cp ${./example_keys/user1.pub} $HOME/.ssh/id_ed25519.pub | ||||||
|  |     chown $UID $HOME/.ssh/id_ed25519.pub | ||||||
|  |     ) | ||||||
|  |     ( | ||||||
|  |     umask u=rw,g=,o= | ||||||
|  |     cp ${./example_keys/user1} $HOME/.ssh/id_ed25519 | ||||||
|  |     chown $UID $HOME/.ssh/id_ed25519 | ||||||
|  |     ) | ||||||
|  | 
 | ||||||
|  |     cd $HOME/secrets | ||||||
|  |     test $(${bin} -d secret1.age) = "hello" | ||||||
|  |   ''; | ||||||
|  | 
 | ||||||
|  |   installPhase = '' | ||||||
|  |     install -D $src ${bin} | ||||||
|  |   ''; | ||||||
|  | 
 | ||||||
|  |   meta.description = "age-encrypted secrets for NixOS"; | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								pkgs/agenix/example/-leading-hyphen-filename.age
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								pkgs/agenix/example/-leading-hyphen-filename.age
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | age-encryption.org/v1 | ||||||
|  | -> ssh-ed25519 V3XmEA zirqdzZZ1E+sedBn7fbEHq4ntLEkokZ4GctarBBOHXY | ||||||
|  | Rvs5YHaAUeCZyNwPedubPcHClWYIuXXWA5zadXPWY6w | ||||||
|  | -> ssh-ed25519 KLPP8w BVp4rDkOYSQyn8oVeHFeinSqW+pdVtxBF9+5VM1yORY | ||||||
|  | bMwppAi8Nhz0328taU4AzUkTVyWtSLvFZG6c5W/Fs78 | ||||||
|  | --- xCbqLhXAcOziO2wmbjTiSQfZvt5Rlsc4SCvF+iEzpQA | ||||||
|  | ôKB£î/²ZÅÈrÙ%¾à4¡´—Mq5×Ô_ÌÂÝ’‹†ã„Ò11ܨqM;& ¢‡LríÂÒføû”]>N | ||||||
							
								
								
									
										7
									
								
								pkgs/agenix/example/armored-secret.age
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								pkgs/agenix/example/armored-secret.age
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | -----BEGIN AGE ENCRYPTED FILE----- | ||||||
|  | YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IHNzaC1lZDI1NTE5IFYzWG1FQSBpZkZW | ||||||
|  | aFpLNnJxc0VUMHRmZ2dZS0pjMGVENnR3OHd5K0RiT1RjRUhibFZBCnN5UG5vUjA3 | ||||||
|  | SXpsNGtiVUw4T0tIVFo5Wkk5QS9NQlBndzVvektiQ0ozc0kKLS0tIGxyY1Q4dEZ1 | ||||||
|  | VGZEanJyTFNta2JNRmpZb2FnK2JyS1hSVml1UGdMNWZKQXMKYla+wTXcRedyZoEb | ||||||
|  | LVWaSx49WoUTU0KBPJg9RArxaeC23GoCDzR/aM/1DvYU | ||||||
|  | -----END AGE ENCRYPTED FILE----- | ||||||
							
								
								
									
										9
									
								
								pkgs/agenix/example/passwordfile-user1.age
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								pkgs/agenix/example/passwordfile-user1.age
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | |||||||
|  | age-encryption.org/v1 | ||||||
|  | -> ssh-ed25519 KLPP8w s1DYZRlZuSsyhmZCF1lFB+E9vB8bZ/+ZhBRlx8nprwE | ||||||
|  | nmYVCsVBrX2CFXXPU+D+bbkkIe/foofp+xoUrg9DHZw | ||||||
|  | -> ssh-ed25519 V3XmEA Pwv3oCwcY0DX8rY48UNfsj9RumWsn4dbgorYHCwObgI | ||||||
|  | FKxRYkL3JHtJxUwymWDF0rAtJ33BivDI6IfPsfumM90 | ||||||
|  | -> V'v(/u$-grease em/Vgf 2qDuk | ||||||
|  | 7I3iiQLPGi1COML9u/JeYkr7EqbSLoU | ||||||
|  | --- 57WJRigUGtmcObrssS3s4PvmR8wgh1AOC/ijJn1s3xI | ||||||
|  | <EFBFBD>'K©Æ·Y&‘7GÆOÝòFj±kÆXç«BnuJöê:9Ê(’ÙÏX¬#¼AíÄÞÃÚ§j’,ê_ÈþÝ?ÝZ“¥vœ¹V’96]oks~%£c	Îe^CÅ%JQ5€<H¢z}îCý,°pŒ¿*!W§§ÈA±ºÒ…dC¼K)¿¢-žy | ||||||
							
								
								
									
										
											BIN
										
									
								
								pkgs/agenix/example/secret1.age
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								pkgs/agenix/example/secret1.age
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										5
									
								
								pkgs/agenix/example/secret2.age
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								pkgs/agenix/example/secret2.age
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | age-encryption.org/v1 | ||||||
|  | -> ssh-ed25519 V3XmEA OB4+1FbPhQ3r6iGksM7peWX5it8NClpXIq/o5nnP7GA | ||||||
|  | FmHVUj+A5i5+bDFgySQskmlvynnosJiWUTJmBRiNA9I | ||||||
|  | --- tP+3mFVtd7ogVu1Lkboh55zoi5a77Ht08Uc/QuIviv4 | ||||||
|  | ¤¬Xæ{”ïOŠ£èätMXxÔvÓª(¬IÁmyPÇï¸è+3²S3i | ||||||
							
								
								
									
										23
									
								
								pkgs/agenix/example/secrets.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								pkgs/agenix/example/secrets.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | |||||||
|  | let | ||||||
|  |   user1 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL0idNvgGiucWgup/mP78zyC23uFjYq0evcWdjGQUaBH"; | ||||||
|  |   system1 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPJDyIr/FSz1cJdcoW69R+NrWzwGK/+3gJpqD1t8L2zE"; | ||||||
|  | in | ||||||
|  | { | ||||||
|  |   "secret1.age".publicKeys = [ | ||||||
|  |     user1 | ||||||
|  |     system1 | ||||||
|  |   ]; | ||||||
|  |   "secret2.age".publicKeys = [ user1 ]; | ||||||
|  |   "passwordfile-user1.age".publicKeys = [ | ||||||
|  |     user1 | ||||||
|  |     system1 | ||||||
|  |   ]; | ||||||
|  |   "-leading-hyphen-filename.age".publicKeys = [ | ||||||
|  |     user1 | ||||||
|  |     system1 | ||||||
|  |   ]; | ||||||
|  |   "armored-secret.age" = { | ||||||
|  |     publicKeys = [ user1 ]; | ||||||
|  |     armor = true; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										7
									
								
								pkgs/agenix/example_keys/system1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								pkgs/agenix/example_keys/system1
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | -----BEGIN OPENSSH PRIVATE KEY----- | ||||||
|  | b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW | ||||||
|  | QyNTUxOQAAACDyQ8iK/xUs9XCXXKFuvUfja1s8Biv/t4Caag9bfC9sxAAAAJA3yvCWN8rw | ||||||
|  | lgAAAAtzc2gtZWQyNTUxOQAAACDyQ8iK/xUs9XCXXKFuvUfja1s8Biv/t4Caag9bfC9sxA | ||||||
|  | AAAEA+J2V6AG1NriAIvnNKRauIEh1JE9HSdhvKJ68a5Fm0w/JDyIr/FSz1cJdcoW69R+Nr | ||||||
|  | WzwGK/+3gJpqD1t8L2zEAAAADHJ5YW50bUBob21lMQE= | ||||||
|  | -----END OPENSSH PRIVATE KEY----- | ||||||
							
								
								
									
										1
									
								
								pkgs/agenix/example_keys/system1.pub
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								pkgs/agenix/example_keys/system1.pub
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPJDyIr/FSz1cJdcoW69R+NrWzwGK/+3gJpqD1t8L2zE | ||||||
							
								
								
									
										7
									
								
								pkgs/agenix/example_keys/user1
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								pkgs/agenix/example_keys/user1
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | -----BEGIN OPENSSH PRIVATE KEY----- | ||||||
|  | b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW | ||||||
|  | QyNTUxOQAAACC9InTb4BornFoLqf5j+/M8gtt7hY2KtHr3FnYxkFGgRwAAAJC2JJ8htiSf | ||||||
|  | IQAAAAtzc2gtZWQyNTUxOQAAACC9InTb4BornFoLqf5j+/M8gtt7hY2KtHr3FnYxkFGgRw | ||||||
|  | AAAEDxt5gC/s53IxiKAjfZJVCCcFIsdeERdIgbYhLO719+Kb0idNvgGiucWgup/mP78zyC | ||||||
|  | 23uFjYq0evcWdjGQUaBHAAAADHJ5YW50bUBob21lMQE= | ||||||
|  | -----END OPENSSH PRIVATE KEY----- | ||||||
							
								
								
									
										1
									
								
								pkgs/agenix/example_keys/user1.pub
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								pkgs/agenix/example_keys/user1.pub
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL0idNvgGiucWgup/mP78zyC23uFjYq0evcWdjGQUaBH | ||||||
							
								
								
									
										23
									
								
								pkgs/agenix/update.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								pkgs/agenix/update.sh
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,23 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | 
 | ||||||
|  | set -e | ||||||
|  | 
 | ||||||
|  | # All operations are done relative to root | ||||||
|  | GITROOT=$(git rev-parse --show-toplevel) | ||||||
|  | cd "$GITROOT" | ||||||
|  | 
 | ||||||
|  | REVISION=${1:-main} | ||||||
|  | 
 | ||||||
|  | TMPCLONE=$(mktemp -d) | ||||||
|  | trap "rm -rf ${TMPCLONE}" EXIT | ||||||
|  | 
 | ||||||
|  | git clone https://github.com/ryantm/agenix.git --revision="$REVISION" "$TMPCLONE" --depth=1 | ||||||
|  | 
 | ||||||
|  | cp "${TMPCLONE}/pkgs/agenix.sh" pkgs/agenix/agenix.sh | ||||||
|  | cp "${TMPCLONE}/pkgs/agenix.nix" pkgs/agenix/default.nix | ||||||
|  | sed -i 's#../example#./example#' pkgs/agenix/default.nix | ||||||
|  | 
 | ||||||
|  | cp "${TMPCLONE}/example/"* pkgs/agenix/example/ | ||||||
|  | cp "${TMPCLONE}/example_keys/"* pkgs/agenix/example_keys/ | ||||||
|  | 
 | ||||||
|  | cp "${TMPCLONE}/modules/age.nix" m/module/agenix.nix | ||||||
| @ -86,4 +86,13 @@ in | |||||||
|       patchelf --add-needed libnuma.so $out/bin/AMDuProfPcm |       patchelf --add-needed libnuma.so $out/bin/AMDuProfPcm | ||||||
|       set +x |       set +x | ||||||
|     ''; |     ''; | ||||||
|  | 
 | ||||||
|  |     meta = { | ||||||
|  |       description = "Performance analysis tool-suite for x86 based applications"; | ||||||
|  |       homepage = "https://www.amd.com/es/developer/uprof.html"; | ||||||
|  |       platforms = [ "x86_64-linux" ]; | ||||||
|  |       license = lib.licenses.unfree; | ||||||
|  |       maintainers = with lib.maintainers.bsc; [ rarias varcila ]; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -29,5 +29,7 @@ in stdenv.mkDerivation { | |||||||
|     description = "AMD Power Profiler Driver"; |     description = "AMD Power Profiler Driver"; | ||||||
|     homepage = "https://www.amd.com/es/developer/uprof.html"; |     homepage = "https://www.amd.com/es/developer/uprof.html"; | ||||||
|     platforms = lib.platforms.linux; |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.unfree; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rarias varcila ]; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| { | { | ||||||
|   stdenv |   stdenv | ||||||
|  | , lib | ||||||
| , bigotes | , bigotes | ||||||
| , cmake | , cmake | ||||||
| , clangOmpss2 | , clangOmpss2 | ||||||
| @ -58,4 +59,12 @@ stdenv.mkDerivation rec { | |||||||
|   ]; |   ]; | ||||||
|   hardeningDisable = [ "all" ]; |   hardeningDisable = [ "all" ]; | ||||||
|   dontStrip = true; |   dontStrip = true; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://gitlab.pm.bsc.es/rarias/bench6"; | ||||||
|  |     description = "Set of micro-benchmarks for OmpSs-2 and several mini-apps"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.gpl3Plus; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| { | { | ||||||
|   stdenv |   stdenv | ||||||
|  | , lib | ||||||
| , fetchFromGitHub | , fetchFromGitHub | ||||||
| , cmake | , cmake | ||||||
| }: | }: | ||||||
| @ -14,4 +15,12 @@ stdenv.mkDerivation { | |||||||
|     sha256 = "sha256-ktxM3pXiL8YXSK+/IKWYadijhYXqGoLY6adLk36iigE="; |     sha256 = "sha256-ktxM3pXiL8YXSK+/IKWYadijhYXqGoLY6adLk36iigE="; | ||||||
|   }; |   }; | ||||||
|   nativeBuildInputs = [ cmake ]; |   nativeBuildInputs = [ cmake ]; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://github.com/rodarima/bigotes"; | ||||||
|  |     description = "Versatile benchmark tool"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.gpl3Plus; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| { | { | ||||||
|   stdenv |   stdenv | ||||||
|  | , lib | ||||||
| , cudatoolkit | , cudatoolkit | ||||||
| , cudaPackages | , cudaPackages | ||||||
| , autoAddDriverRunpath | , autoAddDriverRunpath | ||||||
| @ -40,4 +41,9 @@ stdenv.mkDerivation (finalAttrs: { | |||||||
|     ''; |     ''; | ||||||
|     installPhase = "touch $out"; |     installPhase = "touch $out"; | ||||||
|   }; |   }; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     platforms = [ "x86_64-linux" ]; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |   }; | ||||||
| }) | }) | ||||||
|  | |||||||
| @ -20,6 +20,7 @@ | |||||||
| #, python3Packages | #, python3Packages | ||||||
| , installShellFiles | , installShellFiles | ||||||
| , symlinkJoin | , symlinkJoin | ||||||
|  | , enablePapi ? stdenv.hostPlatform == stdenv.buildPlatform # Disabled when cross-compiling | ||||||
| }: | }: | ||||||
| 
 | 
 | ||||||
| let | let | ||||||
| @ -87,7 +88,7 @@ stdenv.mkDerivation rec { | |||||||
|       --enable-sampling |       --enable-sampling | ||||||
|       --with-unwind=${libunwind.dev} |       --with-unwind=${libunwind.dev} | ||||||
|       --with-xml-prefix=${libxml2.dev} |       --with-xml-prefix=${libxml2.dev} | ||||||
|       --with-papi=${papi} |       ${lib.optionalString enablePapi "--with-papi=${papi}"} | ||||||
|       ${if (mpi != null) then ''--with-mpi=${mpi}'' |       ${if (mpi != null) then ''--with-mpi=${mpi}'' | ||||||
|         else ''--without-mpi''} |         else ''--without-mpi''} | ||||||
|       --without-dyninst) |       --without-dyninst) | ||||||
| @ -110,4 +111,13 @@ stdenv.mkDerivation rec { | |||||||
| #    then [ "--enable-openmp" ] | #    then [ "--enable-openmp" ] | ||||||
| #    else [] | #    else [] | ||||||
| #  ); | #  ); | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://github.com/bsc-performance-tools/extrae"; | ||||||
|  |     description = "Instrumentation framework to generate execution traces of the most used parallel runtimes"; | ||||||
|  |     maintainers = [ ]; | ||||||
|  |     broken = true; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.lgpl21Plus; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| { | { | ||||||
|   stdenv |   stdenv | ||||||
|  | , lib | ||||||
| , fetchurl | , fetchurl | ||||||
| , symlinkJoin | , symlinkJoin | ||||||
| , slurm | , slurm | ||||||
| @ -52,4 +53,12 @@ stdenv.mkDerivation rec { | |||||||
|   buildInputs = [ slurm mpiAll rdma-core-all autoconf automake libtool rsync gfortran ]; |   buildInputs = [ slurm mpiAll rdma-core-all autoconf automake libtool rsync gfortran ]; | ||||||
| 
 | 
 | ||||||
|   hardeningDisable = [ "all" ]; |   hardeningDisable = [ "all" ]; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://pm.bsc.es/gitlab/interoperability/extern/GPI-2"; | ||||||
|  |     description = "GPI-2 extended for supporting Task-Aware GASPI (TAGASPI) library"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.gpl3Plus; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| { stdenv | { stdenv | ||||||
|  | , lib | ||||||
| , fetchurl | , fetchurl | ||||||
| , rpmextract | , rpmextract | ||||||
| , autoPatchelfHook | , autoPatchelfHook | ||||||
| @ -59,4 +60,12 @@ stdenv.mkDerivation rec { | |||||||
|       rm $out/lib/*.dbg |       rm $out/lib/*.dbg | ||||||
|     popd |     popd | ||||||
|   ''; |   ''; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://www.intel.com/content/www/us/en/developer/tools/overview.html"; | ||||||
|  |     description = "Intel compiler"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.unfree; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -145,4 +145,12 @@ in | |||||||
|       popd |       popd | ||||||
|     ''; |     ''; | ||||||
| 
 | 
 | ||||||
|  |     meta = { | ||||||
|  |       homepage = "https://www.intel.com/content/www/us/en/developer/tools/overview.html"; | ||||||
|  |       description = "Intel compiler"; | ||||||
|  |       maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |       platforms = lib.platforms.linux; | ||||||
|  |       license = lib.licenses.unfree; | ||||||
|  |     }; | ||||||
|  | 
 | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| { stdenv | { stdenv | ||||||
|  | , lib | ||||||
| , rpmextract | , rpmextract | ||||||
| , gcc | , gcc | ||||||
| , zlib | , zlib | ||||||
| @ -101,4 +102,12 @@ stdenv.mkDerivation rec { | |||||||
|     patchelf --set-rpath "$out/lib:${rdma-core}/lib:${libpsm2}/lib" $out/lib/libfabric.so |     patchelf --set-rpath "$out/lib:${rdma-core}/lib:${libpsm2}/lib" $out/lib/libfabric.so | ||||||
|     echo "Patched RPATH in libfabric.so to: $(patchelf --print-rpath $out/lib/libfabric.so)" |     echo "Patched RPATH in libfabric.so to: $(patchelf --print-rpath $out/lib/libfabric.so)" | ||||||
|   ''; |   ''; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://www.intel.com/content/www/us/en/developer/tools/overview.html"; | ||||||
|  |     description = "Intel MPI"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.unfree; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -26,6 +26,13 @@ | |||||||
| 
 | 
 | ||||||
| let | let | ||||||
| 
 | 
 | ||||||
|  |   meta = { | ||||||
|  |     description = "Intel oneapi hpckit package component"; | ||||||
|  |     homepage = "https://www.intel.com/content/www/us/en/developer/tools/oneapi/hpc-toolkit-download.html"; | ||||||
|  |     license = lib.licenses.unfree; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ abonerib ]; | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|   gcc = gcc13; |   gcc = gcc13; | ||||||
| 
 | 
 | ||||||
|   v = { |   v = { | ||||||
| @ -35,19 +42,45 @@ let | |||||||
|     mpi      = "2021.9.0"; |     mpi      = "2021.9.0"; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   findMatch = name: |   aptPackageIndex = stdenv.mkDerivation { | ||||||
|   let |     name = "intel-oneapi-packages"; | ||||||
|     aptPackages = builtins.fromJSON (builtins.readFile ./packages.json); |     srcs = [ | ||||||
|     matches = lib.filter (x: name == x.pname) aptPackages; |       # Run update.sh to update the package lists | ||||||
|     n = lib.length matches; |       ./amd64-packages ./all-packages | ||||||
|     match = builtins.traceVerbose (name + " -- ${builtins.toString n}") (builtins.head matches); |     ]; | ||||||
|  |     phases = [ "installPhase" ]; | ||||||
|  |     installPhase = '' | ||||||
|  |       awk -F': ' '\ | ||||||
|  |         BEGIN   { print "[ {" } \ | ||||||
|  |         NR>1 && /^Package: / { print "} {"; } \ | ||||||
|  |         /: /    { printf "%s = \"%s\";\n", $1, $2 } \ | ||||||
|  |         END     { print "} ]" }' $srcs > $out | ||||||
|  |     ''; | ||||||
|  |   }; | ||||||
| 
 | 
 | ||||||
|     apthost = "https://apt.repos.intel.com/oneapi/"; |   aptPackages = import aptPackageIndex; | ||||||
|  | 
 | ||||||
|  |   apthost = "https://apt.repos.intel.com/oneapi/"; | ||||||
|  | 
 | ||||||
|  |   getSum = pkgList: name: | ||||||
|  |   let | ||||||
|  |     matches = lib.filter (x: name == x.Package) pkgList; | ||||||
|  |     #n = lib.length matches; | ||||||
|  |     #match = builtins.trace (name + " -- ${builtins.toString n}") (lib.elemAt matches 0); | ||||||
|  |     match = lib.elemAt matches 0; | ||||||
|   in |   in | ||||||
|     { |     match.SHA256; | ||||||
|       url = apthost + match.filename; | 
 | ||||||
|       sha256 = match.sha256; |   getUrl = pkgList: name: | ||||||
|     }; |   let | ||||||
|  |     matches = lib.filter (x: name == x.Package) pkgList; | ||||||
|  |     #match = assert lib.length matches == 1; lib.elemAt matches 0; | ||||||
|  |     n = lib.length matches; | ||||||
|  |     match = | ||||||
|  |       #builtins.trace (name + " -- n=${builtins.toString n}") | ||||||
|  |       (lib.elemAt matches 0); | ||||||
|  |   in | ||||||
|  |     apthost + match.Filename; | ||||||
| 
 | 
 | ||||||
|   uncompressDebs = debs: name: stdenv.mkDerivation { |   uncompressDebs = debs: name: stdenv.mkDerivation { | ||||||
|     name = name; |     name = name; | ||||||
| @ -61,11 +94,16 @@ let | |||||||
|         dpkg -x $src $out |         dpkg -x $src $out | ||||||
|       done |       done | ||||||
|     ''; |     ''; | ||||||
|  | 
 | ||||||
|  |     inherit meta; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   joinDebs = name: names: |   joinDebs = name: names: | ||||||
|   let |   let | ||||||
|     debs = builtins.map (x: builtins.fetchurl (findMatch x)) names; |     urls = builtins.map (x: getUrl aptPackages x) names; | ||||||
|  |     sums = builtins.map (x: getSum aptPackages x) names; | ||||||
|  |     getsrc = url: sha256: builtins.fetchurl { inherit url sha256; }; | ||||||
|  |     debs = lib.zipListsWith getsrc urls sums; | ||||||
|   in |   in | ||||||
|     uncompressDebs debs "${name}-source"; |     uncompressDebs debs "${name}-source"; | ||||||
| 
 | 
 | ||||||
| @ -116,6 +154,8 @@ let | |||||||
|         sed -i "s:I_MPI_SUBSTITUTE_INSTALLDIR:$out:g" "$i" |         sed -i "s:I_MPI_SUBSTITUTE_INSTALLDIR:$out:g" "$i" | ||||||
|       done |       done | ||||||
|     ''; |     ''; | ||||||
|  | 
 | ||||||
|  |     inherit meta; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   intel-tbb = stdenv.mkDerivation rec { |   intel-tbb = stdenv.mkDerivation rec { | ||||||
| @ -154,6 +194,8 @@ let | |||||||
|         rsync -a lib/intel64/gcc4.8/ $out/lib/ |         rsync -a lib/intel64/gcc4.8/ $out/lib/ | ||||||
|       popd |       popd | ||||||
|     ''; |     ''; | ||||||
|  | 
 | ||||||
|  |     inherit meta; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   intel-compiler-shared = stdenv.mkDerivation rec { |   intel-compiler-shared = stdenv.mkDerivation rec { | ||||||
| @ -211,6 +253,8 @@ let | |||||||
|         popd |         popd | ||||||
|       popd |       popd | ||||||
|     ''; |     ''; | ||||||
|  | 
 | ||||||
|  |     inherit meta; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -276,6 +320,8 @@ let | |||||||
|         ln -s $out/lib $out/lib_lin |         ln -s $out/lib $out/lib_lin | ||||||
|       popd |       popd | ||||||
|     ''; |     ''; | ||||||
|  | 
 | ||||||
|  |     inherit meta; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   intel-compiler = stdenv.mkDerivation rec { |   intel-compiler = stdenv.mkDerivation rec { | ||||||
| @ -363,6 +409,8 @@ let | |||||||
|         rsync -a documentation/en/man/common/ $out/share/man/ |         rsync -a documentation/en/man/common/ $out/share/man/ | ||||||
|       popd |       popd | ||||||
|     ''; |     ''; | ||||||
|  | 
 | ||||||
|  |     inherit meta; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   wrapIntel = { cc, mygcc, extraBuild ? "", extraInstall ? "" }: |   wrapIntel = { cc, mygcc, extraBuild ? "", extraInstall ? "" }: | ||||||
| @ -424,7 +472,7 @@ let | |||||||
|     ''; |     ''; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   ifort-wrapper = wrapIntel { |   ifort-wrapper = wrapIntel rec { | ||||||
|     cc = intel-compiler-fortran; |     cc = intel-compiler-fortran; | ||||||
|     mygcc = gcc; |     mygcc = gcc; | ||||||
|     extraBuild = '' |     extraBuild = '' | ||||||
|  | |||||||
							
								
								
									
										8769
									
								
								pkgs/intel-oneapi/all-packages
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8769
									
								
								pkgs/intel-oneapi/all-packages
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										34075
									
								
								pkgs/intel-oneapi/amd64-packages
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34075
									
								
								pkgs/intel-oneapi/amd64-packages
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @ -1,205 +0,0 @@ | |||||||
| { lib |  | ||||||
| , stdenv |  | ||||||
| , callPackage |  | ||||||
| , dpkg |  | ||||||
| , fetchurl |  | ||||||
| , recurseIntoAttrs |  | ||||||
| 
 |  | ||||||
| , sqlite |  | ||||||
| , elfutils |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| let |  | ||||||
|   inherit (builtins) |  | ||||||
|     elem attrNames attrValues concatMap filter fromJSON getAttr groupBy head isNull listToAttrs map mapAttrs readFile replaceStrings splitVersion ; |  | ||||||
|   inherit (lib) |  | ||||||
|     converge findFirst groupBy' hasPrefix optional pipe take toInt toList versionAtLeast versionOlder ; |  | ||||||
| 
 |  | ||||||
|   aptData = fromJSON (readFile ./packages.json); |  | ||||||
| 
 |  | ||||||
|   # Compare versions in debian control file syntax |  | ||||||
|   # See: https://www.debian.org/doc/debian-policy/ch-relationships.html#syntax-of-relationship-fields |  | ||||||
|   # |  | ||||||
|   # NOTE: this is not a proper version comparison |  | ||||||
|   # |  | ||||||
|   # A proper version solver, should aggregate dependencies with the same name |  | ||||||
|   # and compute the constraint (e.g. a (>= 2) a (<< 5) -> 2 <= a << 5) |  | ||||||
|   # |  | ||||||
|   # But in the intel repo, there are no such "duplicated" dependencies to specify |  | ||||||
|   # upper limits, which leads to issues when intel-hpckit-2021 depends on things |  | ||||||
|   # like intel-basekit >= 2021.1.0-2403 and we end up installing the newest |  | ||||||
|   # basekit instead of the one from 2021. |  | ||||||
|   # |  | ||||||
|   # To mitigate this, >= is set to take the latest version with matching major |  | ||||||
|   # and minor (only revision and patch are allowed to change) |  | ||||||
|   compareVersions = got: kind: want: |  | ||||||
|     let |  | ||||||
|       g0 = take 2 (splitVersion got); |  | ||||||
|       w0 = take 2 (splitVersion want); |  | ||||||
|     in if isNull want then true |  | ||||||
|     else if kind == "=" then got == want |  | ||||||
|     else if kind == "<<" then versionOlder got want |  | ||||||
|     else if kind == "<=" then versionAtLeast want got |  | ||||||
|     else if kind == ">>" then versionOlder want got |  | ||||||
|     else if kind == ">=" then (g0 == w0) && versionAtLeast got want # always match major version |  | ||||||
|     else throw "unknown operation: ${kind}"; |  | ||||||
| 
 |  | ||||||
|   findMatching = { pname, kind, version }: |  | ||||||
|     findFirst (x: pname == x.pname && compareVersions x.version kind version) null aptData; |  | ||||||
| 
 |  | ||||||
|   isIntel = pkg: (hasPrefix "intel-" pkg.pname); |  | ||||||
| 
 |  | ||||||
|   expandDeps = pkg: (map findMatching (filter isIntel pkg.dependencies)) ++ (optional (pkg.size != 0) pkg); |  | ||||||
| 
 |  | ||||||
|   # get the oldest by major version. If they have the same major version, take |  | ||||||
|   # the newest. This prevents most issues with resolutions |  | ||||||
|   # versionOlder b a -> true if b is older than a (b `older` a) |  | ||||||
|   getNewerInMajor = a: b: let |  | ||||||
|     va = a.version; |  | ||||||
|     vb = b.version; |  | ||||||
|     va0 = head (splitVersion va); |  | ||||||
|     vb0 = head (splitVersion vb); |  | ||||||
|   in |  | ||||||
|   if isNull a then b |  | ||||||
|   else if va0 != vb0 then |  | ||||||
|     if va0 > vb0 then b else a |  | ||||||
|   else if versionOlder vb va then a else b; |  | ||||||
|   removeDups = l: attrValues (groupBy' getNewerInMajor null (getAttr "provides") l); |  | ||||||
| 
 |  | ||||||
|   _resolveDeps = converge (l: removeDups (concatMap expandDeps l)); |  | ||||||
|   resolveDeps = pkg: let deps = _resolveDeps (toList pkg); |  | ||||||
|       namedDeps = (map (x: "${x.pname}-${x.version}") deps); |  | ||||||
|     in builtins.traceVerbose (builtins.deepSeq namedDeps namedDeps) deps; |  | ||||||
| 
 |  | ||||||
|   blacklist = [ |  | ||||||
|     "intel-basekit-env" |  | ||||||
|     "intel-basekit-getting-started" |  | ||||||
|     "intel-hpckit-env" |  | ||||||
|     "intel-hpckit-getting-started" |  | ||||||
|     "intel-oneapi-advisor" |  | ||||||
|     "intel-oneapi-common-licensing" |  | ||||||
|     "intel-oneapi-common-oneapi-vars" |  | ||||||
|     "intel-oneapi-common-vars" |  | ||||||
|     "intel-oneapi-compiler-cpp-eclipse-cfg" |  | ||||||
|     "intel-oneapi-compiler-dpcpp-eclipse-cfg" |  | ||||||
|     "intel-oneapi-condaindex" |  | ||||||
|     "intel-oneapi-dev-utilities-eclipse-cfg" |  | ||||||
|     "intel-oneapi-dpcpp-ct-eclipse-cfg" |  | ||||||
|     "intel-oneapi-eclipse-ide" |  | ||||||
|     "intel-oneapi-hpc-toolkit-getting-started" |  | ||||||
|     "intel-oneapi-icc-eclipse-plugin-cpp" |  | ||||||
|     "intel-oneapi-vtune" |  | ||||||
|     "intel-oneapi-vtune-eclipse-plugin-vtune" |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   isInBlacklist = pkg: elem pkg.provides blacklist; |  | ||||||
|   removeBlacklist = filter (e: !(isInBlacklist e)); |  | ||||||
| 
 |  | ||||||
|   dpkgExtractAll = pname: version: {srcs, deps}: stdenv.mkDerivation { |  | ||||||
|     inherit pname version srcs; |  | ||||||
| 
 |  | ||||||
|     nativeBuildInputs = [ dpkg ]; |  | ||||||
|     phases = [ "installPhase" ]; |  | ||||||
| 
 |  | ||||||
|     passthru = { inherit deps; }; |  | ||||||
| 
 |  | ||||||
|     installPhase = '' |  | ||||||
|       mkdir -p $out |  | ||||||
|       for src in $srcs; do |  | ||||||
|         echo "Unpacking $src" |  | ||||||
|         dpkg -x $src $out |  | ||||||
|       done |  | ||||||
|     ''; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   apthost = "https://apt.repos.intel.com/oneapi/"; |  | ||||||
|   fetchDeb = p: fetchurl { url = apthost + p.filename; inherit (p) sha256; }; |  | ||||||
| 
 |  | ||||||
|   buildIntel = pkg: pipe pkg [ |  | ||||||
|     resolveDeps |  | ||||||
|     removeBlacklist |  | ||||||
|     (l: {srcs = map fetchDeb l; deps = l; }) |  | ||||||
|     (dpkgExtractAll "${pkg.provides}-extracted" pkg.version) |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   findHpcKit = year: findMatching { pname = "intel-hpckit"; kind = "<<"; version = toString (year+1); }; |  | ||||||
|   years = map toInt (attrNames components); |  | ||||||
| 
 |  | ||||||
|   patchIntel = callPackage ./patch_intel.nix { }; |  | ||||||
| 
 |  | ||||||
|   # Version information for each hpckit. This is used to normalize the paths |  | ||||||
|   # so that files are in $out/{bin,lib,include...} instead of all over the place |  | ||||||
|   # in $out/opt/intel/oneapi/*/*/{...}. |  | ||||||
|   # |  | ||||||
|   # The most important is the compiler component, which is used to build the |  | ||||||
|   # stdenv for the hpckit. |  | ||||||
|   # |  | ||||||
|   # NOTE: this have to be manually specified, so we can avoid IFD. To add a |  | ||||||
|   # new version, add a new field with an empty attrset, (e.g. "2026" = {}; ), |  | ||||||
|   # build hpckit_2026.unpatched and use the values from |  | ||||||
|   # result/opt/intel/oneapi/* to populate the attrset. |  | ||||||
|   # |  | ||||||
|   # WARN: if there are more than one version in the folders of the unpatched |  | ||||||
|   # components, our dependency resolution hacks have probably failed and the |  | ||||||
|   # package set may be broken. |  | ||||||
|   components = { |  | ||||||
|     "2025" = { |  | ||||||
|       ishmem = "1.4"; |  | ||||||
|       pti = "0.13"; |  | ||||||
|       tcm = "1.4"; |  | ||||||
|       umf = "0.11"; |  | ||||||
| 
 |  | ||||||
|       ccl = "2021.16"; |  | ||||||
|       compiler = "2025.2"; |  | ||||||
|       dal = "2025.8"; |  | ||||||
|       debugger = "2025.2"; |  | ||||||
|       dev-utilities = "2025.2"; |  | ||||||
|       dnnl = "2025.2"; |  | ||||||
|       dpcpp-ct = "2025.2"; |  | ||||||
|       dpl = "2022.9"; |  | ||||||
|       ipp = "2022.2"; |  | ||||||
|       ippcp = "2025.2"; |  | ||||||
|       mkl = "2025.2"; |  | ||||||
|       mpi = "2021.16"; |  | ||||||
|       tbb = "2022.2"; |  | ||||||
|     }; |  | ||||||
|     "2024" = { |  | ||||||
|       tcm = "1.1"; |  | ||||||
| 
 |  | ||||||
|       ccl = "2021.13"; |  | ||||||
|       compiler = "2024.2"; |  | ||||||
|       dal = "2024.6"; |  | ||||||
|       debugger = "2024.2"; |  | ||||||
|       dev-utilities = "2024.2"; |  | ||||||
|       diagnostics = "2024.2"; |  | ||||||
|       dnnl = "2024.2"; |  | ||||||
|       dpcpp-ct = "2024.2"; |  | ||||||
|       dpl = "2022.6"; |  | ||||||
|       ipp = "2021.12"; |  | ||||||
|       ippcp = "2021.12"; |  | ||||||
|       mkl = "2024.2"; |  | ||||||
|       mpi = "2021.13"; |  | ||||||
|       tbb = "2021.13"; |  | ||||||
| 
 |  | ||||||
|       extraPackages = [ |  | ||||||
|         sqlite |  | ||||||
|         elfutils |  | ||||||
|       ]; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   replaceDots = replaceStrings ["."] ["_"]; |  | ||||||
| 
 |  | ||||||
| in recurseIntoAttrs (listToAttrs (map (year: let |  | ||||||
|       year_str = toString year; |  | ||||||
|     in { |  | ||||||
|       name = "hpckit_${year_str}"; |  | ||||||
|       value = patchIntel {unpatched = buildIntel (findHpcKit year); components = components.${year_str}; }; |  | ||||||
|   }) years)) // { |  | ||||||
|   apt = pipe aptData [ |  | ||||||
|     (groupBy (p: replaceDots p.provides)) |  | ||||||
|     (mapAttrs (_: l: listToAttrs (map (pkg: { name = replaceDots ("v" + pkg.version); value = pkg; }) l))) |  | ||||||
|   ] ; |  | ||||||
| 
 |  | ||||||
|   inherit resolveDeps patchIntel buildIntel; |  | ||||||
| } |  | ||||||
| @ -1,179 +0,0 @@ | |||||||
| { stdenvNoCC |  | ||||||
| , lib |  | ||||||
| , symlinkJoin |  | ||||||
| , autoPatchelfHook |  | ||||||
| , wrapCCWith |  | ||||||
| , overrideCC |  | ||||||
| , gcc13 |  | ||||||
| , gcc13Stdenv |  | ||||||
| , hwloc |  | ||||||
| , libelf |  | ||||||
| , libffi_3_3 |  | ||||||
| , libpsm2 |  | ||||||
| , libuuid |  | ||||||
| , libxml2 |  | ||||||
| , numactl |  | ||||||
| , ocl-icd |  | ||||||
| , openssl |  | ||||||
| , python3 |  | ||||||
| , rdma-core |  | ||||||
| , ucx |  | ||||||
| , zlib |  | ||||||
| , makeOverridable |  | ||||||
| , recurseIntoAttrs |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| makeOverridable ( |  | ||||||
| { |  | ||||||
|   unpatched, |  | ||||||
|   components ? { }, |  | ||||||
|   extraPackages ? components.extraPackages or [] |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| let |  | ||||||
|   inherit (builtins) attrValues filter mapAttrs removeAttrs; |  | ||||||
| 
 |  | ||||||
|   gcc = gcc13; |  | ||||||
|   stdenv = gcc13Stdenv; |  | ||||||
| 
 |  | ||||||
|   __components = removeAttrs components ["extraPackages"]; |  | ||||||
|   _components = __components; |  | ||||||
|   # _components = lib.traceSeqN 2 { |  | ||||||
|   #   inherit unpatched __components; |  | ||||||
|   #   deps = builtins.map (x: "${x.pname}-${x.version}") unpatched.deps; |  | ||||||
|   # } __components; |  | ||||||
| 
 |  | ||||||
|   wrapIntel = { cc, extraBuildCommands ? "", extraInstall ? "", ... }@args: |  | ||||||
|     let |  | ||||||
|       targetConfig = stdenv.targetPlatform.config; |  | ||||||
|     in (wrapCCWith { |  | ||||||
|       inherit cc; |  | ||||||
|       extraBuildCommands = '' |  | ||||||
|         echo "-L${gcc.cc}/lib/gcc/${targetConfig}/${gcc.version}" >> $out/nix-support/cc-ldflags |  | ||||||
|         echo "-L${gcc.cc.lib}/lib" >> $out/nix-support/cc-ldflags |  | ||||||
|         echo "-L${cc}/lib" >> $out/nix-support/cc-ldflags |  | ||||||
| 
 |  | ||||||
|         # echo "--gcc-toolchain=${gcc.cc}" >> $out/nix-support/libcxx-cxxflags |  | ||||||
|         echo "--gcc-toolchain=${gcc.cc}" >> $out/nix-support/cc-cflags |  | ||||||
| 
 |  | ||||||
|         # For some reason, If we don't resolve the realpath things go wrong |  | ||||||
|         for stddef in ${cc}/lib/clang/*/include/stddef.h ; do |  | ||||||
|           dir=$(dirname $(realpath "$stddef")) |  | ||||||
|           echo "-isystem $dir" >> $out/nix-support/cc-cflags |  | ||||||
|         done |  | ||||||
| 
 |  | ||||||
|         echo "-isystem ${cc}/include" >> $out/nix-support/cc-cflags |  | ||||||
|         echo "-isystem ${cc}/include/intel64" >> $out/nix-support/cc-cflags |  | ||||||
| 
 |  | ||||||
|         for dir in ${gcc.cc}/lib/gcc/${targetConfig}/*/include; do |  | ||||||
|           echo "-isystem $dir" >> $out/nix-support/cc-cflags |  | ||||||
|         done |  | ||||||
| 
 |  | ||||||
|         for dir in ${gcc.cc}/include/c++/*; do |  | ||||||
|           echo "-isystem $dir" >> $out/nix-support/libcxx-cxxflags |  | ||||||
|         done |  | ||||||
|         for dir in ${gcc.cc}/include/c++/*/${targetConfig}; do |  | ||||||
|           echo "-isystem $dir" >> $out/nix-support/libcxx-cxxflags |  | ||||||
|         done |  | ||||||
| 
 |  | ||||||
|         # FIXME: We should find a better way to modify the PATH instead of using |  | ||||||
|         # this ugly hack. See https://jungle.bsc.es/git/rarias/bscpkgs/issues/9 |  | ||||||
|         echo 'path_backup="${gcc.cc}/bin:$path_backup"' >> $out/nix-support/cc-wrapper-hook |  | ||||||
| 
 |  | ||||||
|         # Disable hardening by default |  | ||||||
|         echo "" > $out/nix-support/add-hardening.sh |  | ||||||
|       '' + extraBuildCommands; |  | ||||||
|     } // (removeAttrs args ["cc" "extraBuildCommands" "extraInstall"]) |  | ||||||
|     ).overrideAttrs (old: { |  | ||||||
|       installPhase = old.installPhase + extraInstall; |  | ||||||
|     }); |  | ||||||
| 
 |  | ||||||
| in |  | ||||||
| stdenvNoCC.mkDerivation (finalAttrs: { |  | ||||||
|   pname = lib.removeSuffix "-extracted" unpatched.pname; |  | ||||||
|   inherit (unpatched) version; |  | ||||||
|   src = unpatched; |  | ||||||
| 
 |  | ||||||
|   phases = [ "installPhase" "fixupPhase" ]; |  | ||||||
|   buildInputs = [ |  | ||||||
|     libffi_3_3 |  | ||||||
|     libelf |  | ||||||
|     libxml2 |  | ||||||
|     hwloc |  | ||||||
|     numactl |  | ||||||
|     libuuid |  | ||||||
|     libpsm2 |  | ||||||
|     zlib |  | ||||||
|     ocl-icd |  | ||||||
|     rdma-core |  | ||||||
|     ucx |  | ||||||
|     openssl |  | ||||||
|     python3 |  | ||||||
|     stdenv.cc.cc.lib |  | ||||||
|   ] ++ extraPackages; |  | ||||||
| 
 |  | ||||||
|   autoPatchelfIgnoreMissingDeps = [ "libhwloc.so.5" "libcuda.so.1" "libze_loader.so.1" ]; |  | ||||||
| 
 |  | ||||||
|   # There are broken symlinks that go outside packages, ignore them |  | ||||||
|   dontCheckForBrokenSymlinks = true; |  | ||||||
| 
 |  | ||||||
|   nativeBuildInputs = [ autoPatchelfHook ]; |  | ||||||
|   installPhase = '' |  | ||||||
|     cp -r $src/opt/intel/oneapi/ $out |  | ||||||
|   ''; |  | ||||||
| 
 |  | ||||||
|   passthru = let |  | ||||||
|     pkgs = mapAttrs |  | ||||||
|       (folder: version: symlinkJoin { |  | ||||||
|         pname = "intel-${folder}"; |  | ||||||
|         inherit version; |  | ||||||
|         paths = ["${finalAttrs.finalPackage}/${folder}/${version}"]; |  | ||||||
|       }) |  | ||||||
|       _components; |  | ||||||
|   in pkgs // { |  | ||||||
|     inherit unpatched; |  | ||||||
|     pkgs = recurseIntoAttrs pkgs; |  | ||||||
|     components = _components; |  | ||||||
| 
 |  | ||||||
|     # This contains all packages properly symlinked into toplevel directories |  | ||||||
|     # in $out. |  | ||||||
|     # |  | ||||||
|     # NOTE: there are clashes with packages that have symlinks outside their |  | ||||||
|     # scope (libtcm and env/vars.sh) |  | ||||||
|     all = symlinkJoin { |  | ||||||
|       pname = finalAttrs.finalPackage + "-symlinked"; |  | ||||||
|       inherit (finalAttrs.finalPackage) version; |  | ||||||
|       paths = filter lib.isDerivation (attrValues finalAttrs.finalPackage.pkgs); |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     stdenv = overrideCC stdenv finalAttrs.finalPackage.cc; |  | ||||||
| 
 |  | ||||||
|     cc = wrapIntel { |  | ||||||
|       cc = finalAttrs.finalPackage.pkgs.compiler; |  | ||||||
|       extraBuildCommands = '' |  | ||||||
|         wrap icx  $wrapper $ccPath/icx |  | ||||||
|         wrap icpx $wrapper $ccPath/icpx |  | ||||||
|         wrap ifx  $wrapper $ccPath/ifx |  | ||||||
| 
 |  | ||||||
|         ln -s $out/bin/icpx $out/bin/c++ |  | ||||||
|         ln -s $out/bin/icx  $out/bin/cc |  | ||||||
| 
 |  | ||||||
|         # Use this to detect when a compiler subprocess is called |  | ||||||
|         # from icpx (--fsycl-host-compiler) |  | ||||||
|         echo 'export "NIX_CC_WRAPPER_INTEL=1"' >> $out/nix-support/cc-wrapper-hook |  | ||||||
| 
 |  | ||||||
|         sed -i 's/.*isCxx=0/isCxx=1/' $out/bin/icpx |  | ||||||
| 
 |  | ||||||
|         # oneMath looks for sycl libraries in bin/../lib |  | ||||||
|         ln -s ${finalAttrs.finalPackage.pkgs.compiler}/lib $out/lib |  | ||||||
|         ln -s ${finalAttrs.finalPackage.pkgs.compiler}/include $out/include |  | ||||||
|       ''; |  | ||||||
|       extraInstall = '' |  | ||||||
|         export named_cc="icx" |  | ||||||
|         export named_cxx="icpx" |  | ||||||
|         export named_fc="ifx" |  | ||||||
|       ''; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
| })) |  | ||||||
| @ -1,29 +0,0 @@ | |||||||
| #!/usr/bin/env -S jq -f |  | ||||||
| 
 |  | ||||||
| def extract_fields: { |  | ||||||
|         pname : .Package, |  | ||||||
|         version : .Version, |  | ||||||
|         provides : .Package | sub("[0-9.-]*$"; ""), |  | ||||||
|         filename : .Filename, |  | ||||||
|         size : ."Installed-Size" | tonumber, |  | ||||||
|         sha256 : .SHA256, |  | ||||||
|         dependencies : .Depends, |  | ||||||
|     } ; |  | ||||||
| 
 |  | ||||||
| # parses dependencies into a list of [{.pname, .kind, .version}] |  | ||||||
| # some dependencies do not have a version specified, in which case, kind = version = null |  | ||||||
| # |  | ||||||
| # example dependencies: |  | ||||||
| # intel-oneapi-common-vars (>= 2023.0.0-25325), intel-oneapi-common-licensing-2023.0.0 |  | ||||||
| 
 |  | ||||||
| def split_dependencies : map(try(.dependencies |= split(",\\s?"; "")) // .dependencies |= []) ; |  | ||||||
| 
 |  | ||||||
| def match_version : capture("(?<pname>[a-zA-Z0-9_\\-.]*) *(\\((?<kind>[<>=]*) *(?<version>.*)\\))?"; "") ; |  | ||||||
| 
 |  | ||||||
| def parse_dependencies : map_values(.dependencies.[] |= match_version) ; |  | ||||||
| 
 |  | ||||||
| def sort_version_decreasing : sort_by(.version | split("[-.]"; "") | map(tonumber)) | reverse ; |  | ||||||
| 
 |  | ||||||
| map(extract_fields) | split_dependencies | parse_dependencies | sort_version_decreasing |  | ||||||
| 
 |  | ||||||
| # [.[] | select(.pname == "intel-hpckit") | .version] |  | ||||||
| @ -1,29 +0,0 @@ | |||||||
| #!/usr/bin/env -S awk -f |  | ||||||
| 
 |  | ||||||
| BEGIN   { |  | ||||||
|     FS=": " |  | ||||||
| 
 |  | ||||||
|     prev_empty=1 |  | ||||||
|     t="  " |  | ||||||
| 
 |  | ||||||
|     print "[ {" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| !NF { # empty line, update separator so next non empty line closes the dict |  | ||||||
|     prev_empty=1 |  | ||||||
|     t="},\n{ " |  | ||||||
|     next # skip line (we won't match anything else) |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| { |  | ||||||
|     printf t "\"%s\" : \"%s\"\n", $1, $2 |  | ||||||
| 
 |  | ||||||
|     if (prev_empty) { |  | ||||||
|         # we were the first after a group of empty lines, following ones have to |  | ||||||
|         # have a comma |  | ||||||
|         prev_empty=0 |  | ||||||
|         t=", " |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| END     { print "} ]" } |  | ||||||
| @ -1,11 +1,4 @@ | |||||||
| #!/bin/sh | #!/bin/sh | ||||||
| 
 | 
 | ||||||
| out_64=$(mktemp intel-api.64.XXXXXX) | curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-amd64/Packages -o amd64-packages | ||||||
| out_all=$(mktemp intel-api.all.XXXXXX) | curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-all/Packages -o all-packages | ||||||
| trap 'rm -f "$out_64" "$out_all"' EXIT INT HUP |  | ||||||
| 
 |  | ||||||
| curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-amd64/Packages -o "$out_64" |  | ||||||
| curl https://apt.repos.intel.com/oneapi/dists/all/main/binary-all/Packages -o "$out_all" |  | ||||||
| 
 |  | ||||||
| # NOTE: we use `jq -r tostring` to minify the json (3.2Mb -> 2.3Mb) |  | ||||||
| cat "$out_64" "$out_all" | ./toJson.awk | ./process.jq | jq -r tostring >packages.json |  | ||||||
|  | |||||||
| @ -16,19 +16,19 @@ | |||||||
| , useGit ? false | , useGit ? false | ||||||
| , gitUrl ? "ssh://git@bscpm04.bsc.es/llvm-ompss/llvm-mono.git" | , gitUrl ? "ssh://git@bscpm04.bsc.es/llvm-ompss/llvm-mono.git" | ||||||
| , gitBranch ? "master" | , gitBranch ? "master" | ||||||
| , gitCommit ? "880e2341c56bad1dc14e8c369fb3356bec19018e" | , gitCommit ? "872ba63f86edaefc9787984ef3fae9f2f94e0124" # github-release-2025.11 | ||||||
| }: | }: | ||||||
| 
 | 
 | ||||||
| let | let | ||||||
|   stdenv = llvmPackages_latest.stdenv; |   stdenv = llvmPackages_latest.stdenv; | ||||||
| 
 | 
 | ||||||
|   release = rec { |   release = rec { | ||||||
|     version = "2025.06"; |     version = "2025.11"; | ||||||
|     src = fetchFromGitHub { |     src = fetchFromGitHub { | ||||||
|       owner = "bsc-pm"; |       owner = "bsc-pm"; | ||||||
|       repo = "llvm"; |       repo = "llvm"; | ||||||
|       rev = "refs/tags/github-release-${version}"; |       rev = "refs/tags/github-release-${version}"; | ||||||
|       hash = "sha256-ww9PpRmtz/M9IyLiZ8rAehx2UW4VpQt+svf4XfKBzKo="; |       hash = "sha256-UgwMTUkM9Z87dDH205swZFBeFhrcbLAxginViG40pBM="; | ||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
| @ -126,4 +126,12 @@ in stdenv.mkDerivation { | |||||||
| # nanos6 installation, but this is would require a recompilation of clang each | # nanos6 installation, but this is would require a recompilation of clang each | ||||||
| # time nanos6 is changed. Better to use the environment variable NANOS6_HOME, | # time nanos6 is changed. Better to use the environment variable NANOS6_HOME, | ||||||
| # and specify nanos6 at run time. | # and specify nanos6 at run time. | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://gitlab.pm.bsc.es/llvm-ompss/llvm-mono"; | ||||||
|  |     description = "C language family frontend for LLVM (for OmpSs-2)"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rpenacob ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = [ lib.licenses.asl20 lib.licenses.llvm-exception ]; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -2,9 +2,7 @@ | |||||||
|   stdenv |   stdenv | ||||||
| , lib | , lib | ||||||
| , gcc | , gcc | ||||||
| , gcc13 |  | ||||||
| , clangOmpss2Unwrapped | , clangOmpss2Unwrapped | ||||||
| , writeShellScript |  | ||||||
| , openmp ? null | , openmp ? null | ||||||
| , wrapCCWith | , wrapCCWith | ||||||
| , llvmPackages_latest | , llvmPackages_latest | ||||||
| @ -39,7 +37,10 @@ let | |||||||
|   inherit gcc; |   inherit gcc; | ||||||
|   cc = clangOmpss2Unwrapped; |   cc = clangOmpss2Unwrapped; | ||||||
|   gccVersion = with versions; let v = gcc.version; in concatStringsSep "." [(major v) (minor v) (patch v)]; |   gccVersion = with versions; let v = gcc.version; in concatStringsSep "." [(major v) (minor v) (patch v)]; | ||||||
| 
 | in wrapCCWith { | ||||||
|  |   inherit cc bintools; | ||||||
|  |   # extraPackages adds packages to depsTargetTargetPropagated | ||||||
|  |   extraPackages = optional (openmp != null) openmp; | ||||||
|   extraBuildCommands = '' |   extraBuildCommands = '' | ||||||
|     echo "-target ${targetConfig}" >> $out/nix-support/cc-cflags |     echo "-target ${targetConfig}" >> $out/nix-support/cc-cflags | ||||||
|     echo "-B${gcc.cc}/lib/gcc/${targetConfig}/${gccVersion}" >> $out/nix-support/cc-cflags |     echo "-B${gcc.cc}/lib/gcc/${targetConfig}/${gccVersion}" >> $out/nix-support/cc-cflags | ||||||
| @ -56,52 +57,14 @@ let | |||||||
|     echo "--gcc-toolchain=${gcc}" >> $out/nix-support/cc-cflags |     echo "--gcc-toolchain=${gcc}" >> $out/nix-support/cc-cflags | ||||||
| 
 | 
 | ||||||
|     wrap clang++  $wrapper $ccPath/clang++ |     wrap clang++  $wrapper $ccPath/clang++ | ||||||
|  | 
 | ||||||
|  |   '' + optionalString (openmp != null) '' | ||||||
|  |     echo "export OPENMP_RUNTIME=${ompname}" >> $out/nix-support/cc-wrapper-hook | ||||||
|  |   '' + optionalString (ompss2rt != null) '' | ||||||
|  |     echo "export OMPSS2_RUNTIME=${rtname}" >> $out/nix-support/cc-wrapper-hook | ||||||
|  |     echo "export ${homevar}=${ompss2rt}"   >> $out/nix-support/cc-wrapper-hook | ||||||
|  |   '' + optionalString (ompss2rt != null && ompss2rt.pname == "nodes") '' | ||||||
|  |     echo "export NOSV_HOME=${ompss2rt.nosv}" >> $out/nix-support/cc-wrapper-hook | ||||||
|   ''; |   ''; | ||||||
|  | } | ||||||
| 
 | 
 | ||||||
|   envExports = lib.optionalString (openmp != null) '' |  | ||||||
|       echo "export OPENMP_RUNTIME=${ompname}" >> $out/nix-support/cc-wrapper-hook |  | ||||||
|     '' + optionalString (ompss2rt != null) '' |  | ||||||
|       echo "export OMPSS2_RUNTIME=${rtname}" >> $out/nix-support/cc-wrapper-hook |  | ||||||
|       echo "export ${homevar}=${ompss2rt}"   >> $out/nix-support/cc-wrapper-hook |  | ||||||
|     '' + optionalString (ompss2rt != null && ompss2rt.pname == "nodes") '' |  | ||||||
|       echo "export NOSV_HOME=${ompss2rt.nosv}" >> $out/nix-support/cc-wrapper-hook |  | ||||||
|     ''; |  | ||||||
| 
 |  | ||||||
|   extraPackages = optional (openmp != null) openmp; |  | ||||||
| 
 |  | ||||||
|   wrappedCC = wrapCCWith { |  | ||||||
|     # extraPackages adds packages to depsTargetTargetPropagated |  | ||||||
|     inherit cc bintools extraPackages; |  | ||||||
|     extraBuildCommands = extraBuildCommands + envExports; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   resetIntelCCFlags = let tconf = builtins.replaceStrings ["-"] ["_"] targetConfig; |  | ||||||
|   in writeShellScript "remove-intel.sh" '' |  | ||||||
|     if [ "''${NIX_CC_WRAPPER_INTEL:-0}" = 1 ]; then |  | ||||||
|       unset NIX_CFLAGS_COMPILE_${tconf} |  | ||||||
|       unset NIX_CC_WRAPPER_FLAGS_SET_${tconf} |  | ||||||
| 
 |  | ||||||
|       if (( "''${NIX_DEBUG:-0}" >= 1 )); then |  | ||||||
|         echo "ompss2: cleaned NIX_CFLAGS_COMPILE_${tconf} (invokation from intel compiler detected)" |  | ||||||
|       fi |  | ||||||
|     fi |  | ||||||
|   ''; |  | ||||||
| 
 |  | ||||||
|   intelExtraBuildCommands = '' |  | ||||||
|     sed -i 's|# Flirting.*|source ${resetIntelCCFlags}\n\n&|' $out/bin/clang |  | ||||||
|     sed -i 's|# Flirting.*|source ${resetIntelCCFlags}\n\n&|' $out/bin/clang++ |  | ||||||
|   ''; |  | ||||||
| 
 |  | ||||||
|   wrappedCCIntel = wrapCCWith { |  | ||||||
|     inherit bintools extraPackages; |  | ||||||
|     cc = cc.override { gcc = gcc13; }; # Intel uses gcc13, so we have to match it |  | ||||||
|     gccForLibs = gcc13; |  | ||||||
|     # extraPackages adds packages to depsTargetTargetPropagated |  | ||||||
|     extraBuildCommands = intelExtraBuildCommands + envExports; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
| in wrappedCC.overrideAttrs (oldAttrs: { |  | ||||||
|     passthru = oldAttrs.passthru // { |  | ||||||
|       forIcpx = wrappedCCIntel; |  | ||||||
|     }; |  | ||||||
|   }) |  | ||||||
|  | |||||||
| @ -74,5 +74,13 @@ stdenv.mkDerivation rec { | |||||||
|   passthru = { |   passthru = { | ||||||
|     inherit nosv; |     inherit nosv; | ||||||
|   }; |   }; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://gitlab.pm.bsc.es/llvm-ompss/llvm-mono"; | ||||||
|  |     description = "Support for the OpenMP language (with nOS-V)"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rpenacob ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = [ lib.licenses.asl20 lib.licenses.llvm-exception ]; | ||||||
|  |   }; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -35,13 +35,16 @@ stdenv.mkDerivation rec { | |||||||
|       CFLAGS=-Wno-implicit-int |       CFLAGS=-Wno-implicit-int | ||||||
|       CPPFLAGS=-I${libtirpc.dev}/include/tirpc |       CPPFLAGS=-I${libtirpc.dev}/include/tirpc | ||||||
|       LDFLAGS=-ltirpc |       LDFLAGS=-ltirpc | ||||||
|  |       CC=$CC | ||||||
|  |       AR=$AR | ||||||
|     ) |     ) | ||||||
|   ''; |   ''; | ||||||
| 
 | 
 | ||||||
|   meta = { |   meta = { | ||||||
|     description = "lmbench"; |     description = "lmbench"; | ||||||
|     homepage = "http://www.bitmover.com/lmbench/"; |     homepage = "https://github.com/intel/lmbench"; | ||||||
|     maintainers = [ ]; |     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|     platforms = lib.platforms.all; |     platforms = lib.platforms.all; | ||||||
|  |     license = lib.licenses.gpl2Plus; | ||||||
|   }; |   }; | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										7
									
								
								pkgs/maintainers.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								pkgs/maintainers.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | builtins.mapAttrs (name: value: { email = name + "@bsc.es"; } // value) { | ||||||
|  |   abonerib.name = "Aleix Boné"; | ||||||
|  |   arocanon.name = "Aleix Roca"; | ||||||
|  |   rarias.name = "Rodrigo Arias"; | ||||||
|  |   rpenacob.name = "Raúl Peñacoba"; | ||||||
|  |   varcila.name = "Vincent Arcila"; | ||||||
|  | } | ||||||
| @ -1,5 +1,6 @@ | |||||||
| { | { | ||||||
|   stdenv |   stdenv | ||||||
|  | , lib | ||||||
| , fetchFromGitHub | , fetchFromGitHub | ||||||
| , autoreconfHook | , autoreconfHook | ||||||
| , nanos6 | , nanos6 | ||||||
| @ -62,4 +63,12 @@ stdenv.mkDerivation rec { | |||||||
| # Fails with "memory exhausted" with bison 3.7.1 | # Fails with "memory exhausted" with bison 3.7.1 | ||||||
| #    "--enable-bison-regeneration" | #    "--enable-bison-regeneration" | ||||||
|   ]; |   ]; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://github.com/bsc-pm/mcxx"; | ||||||
|  |     description = "C/C++/Fortran source-to-source compilation infrastructure aimed at fast prototyping"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rpenacob ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.gpl3Plus; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| { | { | ||||||
|   stdenv |   stdenv | ||||||
|  | , lib | ||||||
| , fetchFromGitHub | , fetchFromGitHub | ||||||
| , autoreconfHook | , autoreconfHook | ||||||
| , nanos6 | , nanos6 | ||||||
| @ -57,4 +58,12 @@ stdenv.mkDerivation rec { | |||||||
| # Fails with "memory exhausted" with bison 3.7.1 | # Fails with "memory exhausted" with bison 3.7.1 | ||||||
| #    "--enable-bison-regeneration" | #    "--enable-bison-regeneration" | ||||||
|   ]; |   ]; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://github.com/bsc-pm/mcxx"; | ||||||
|  |     description = "C/C++/Fortran source-to-source compilation infrastructure aimed at fast prototyping"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rpenacob ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.gpl3Plus; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| { stdenv | { stdenv | ||||||
|  | , lib | ||||||
| , fetchgit | , fetchgit | ||||||
| , autoreconfHook | , autoreconfHook | ||||||
| , nanos6 | , nanos6 | ||||||
| @ -56,4 +57,12 @@ stdenv.mkDerivation rec { | |||||||
|   #preBuild = '' |   #preBuild = '' | ||||||
|   #  make generate_builtins_ia32 GXX_X86_BUILTINS=${gcc}/bin/g++ |   #  make generate_builtins_ia32 GXX_X86_BUILTINS=${gcc}/bin/g++ | ||||||
|   #''; |   #''; | ||||||
|  |   # | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://github.com/bsc-pm/mcxx"; | ||||||
|  |     description = "C/C++/Fortran source-to-source compilation infrastructure aimed at fast prototyping"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.gpl3Plus; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -33,4 +33,8 @@ in mpich.overrideAttrs (old: { | |||||||
|     "FCFLAGS=-fallow-argument-mismatch" |     "FCFLAGS=-fallow-argument-mismatch" | ||||||
|   ]; |   ]; | ||||||
|   hardeningDisable = [ "all" ]; |   hardeningDisable = [ "all" ]; | ||||||
|  | 
 | ||||||
|  |   meta = old.meta // { | ||||||
|  |     maintainers = old.meta.maintainers ++ (with lib.maintainers.bsc; [ rarias ]); | ||||||
|  |   }; | ||||||
| }) | }) | ||||||
|  | |||||||
| @ -16,6 +16,7 @@ | |||||||
| , jemallocNanos6 ? null | , jemallocNanos6 ? null | ||||||
| , cachelineBytes ? 64 | , cachelineBytes ? 64 | ||||||
| , enableGlibcxxDebug ? false | , enableGlibcxxDebug ? false | ||||||
|  | , enablePapi ? stdenv.hostPlatform == stdenv.buildPlatform # Disabled when cross-compiling | ||||||
| , useGit ? false | , useGit ? false | ||||||
| , gitUrl ? "ssh://git@bscpm04.bsc.es/nanos6/nanos6" | , gitUrl ? "ssh://git@bscpm04.bsc.es/nanos6/nanos6" | ||||||
| , gitBranch ? "master" | , gitBranch ? "master" | ||||||
| @ -47,6 +48,8 @@ let | |||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   source = if (useGit) then git else release; |   source = if (useGit) then git else release; | ||||||
|  | 
 | ||||||
|  |   isCross = stdenv.hostPlatform != stdenv.buildPlatform; | ||||||
| in | in | ||||||
|   stdenv.mkDerivation (source // { |   stdenv.mkDerivation (source // { | ||||||
|     pname = "nanos6"; |     pname = "nanos6"; | ||||||
| @ -71,9 +74,13 @@ in | |||||||
|       "--disable-all-instrumentations" |       "--disable-all-instrumentations" | ||||||
|       "--enable-ovni-instrumentation" |       "--enable-ovni-instrumentation" | ||||||
|       "--with-ovni=${ovni}" |       "--with-ovni=${ovni}" | ||||||
|  |       "--with-boost=${boost.dev}" | ||||||
|     ] ++ |     ] ++ | ||||||
|       (optional enableJemalloc "--with-jemalloc=${jemallocNanos6}") ++ |       (optional enableJemalloc "--with-jemalloc=${jemallocNanos6}") ++ | ||||||
|       (optional enableGlibcxxDebug "CXXFLAGS=-D_GLIBCXX_DEBUG"); |       (optional enableGlibcxxDebug "CXXFLAGS=-D_GLIBCXX_DEBUG") ++ | ||||||
|  |       # Most nanos6 api symbols are resolved at runtime, so prefer | ||||||
|  |       # ifunc by default | ||||||
|  |       (optional isCross "--with-symbol-resolution=ifunc"); | ||||||
| 
 | 
 | ||||||
|     postConfigure = lib.optionalString (!enableDebug) '' |     postConfigure = lib.optionalString (!enableDebug) '' | ||||||
|       # Disable debug |       # Disable debug | ||||||
| @ -97,16 +104,14 @@ in | |||||||
|       # TODO: papi_version is needed for configure: |       # TODO: papi_version is needed for configure: | ||||||
|       # ./configure: line 27378: papi_version: command not found |       # ./configure: line 27378: papi_version: command not found | ||||||
|       # This probably breaks cross-compilation |       # This probably breaks cross-compilation | ||||||
|       papi |     ] ++ lib.optionals enablePapi [ papi ]; | ||||||
|     ]; |  | ||||||
| 
 | 
 | ||||||
|     buildInputs = [ |     buildInputs = [ | ||||||
|       boost |       boost | ||||||
|       numactl |       numactl | ||||||
|       hwloc |       hwloc | ||||||
|       papi |  | ||||||
|       ovni |       ovni | ||||||
|     ]; |     ] ++ lib.optionals enablePapi [ papi ]; | ||||||
| 
 | 
 | ||||||
|     # Create a script that sets NANOS6_HOME |     # Create a script that sets NANOS6_HOME | ||||||
|     postInstall = '' |     postInstall = '' | ||||||
| @ -114,11 +119,12 @@ in | |||||||
|       echo "export NANOS6_HOME=$out" >> $out/nix-support/setup-hook |       echo "export NANOS6_HOME=$out" >> $out/nix-support/setup-hook | ||||||
|     ''; |     ''; | ||||||
| 
 | 
 | ||||||
|     meta = with lib; { |     meta = { | ||||||
|       homepage = "https://github.com/bsc-pm/nanos6"; |       homepage = "https://github.com/bsc-pm/nanos6"; | ||||||
|       description = "Nanos6 runtime for OmpSs-2" + |       description = "Nanos6 runtime for OmpSs-2" + | ||||||
|         optionalString (enableDebug) " (with debug symbols)"; |         optionalString (enableDebug) " (with debug symbols)"; | ||||||
|       platforms = platforms.linux; |       maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|       license = licenses.gpl3; |       platforms = lib.platforms.linux; | ||||||
|  |       license = lib.licenses.gpl3Plus; | ||||||
|     }; |     }; | ||||||
|   }) |   }) | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| { jemalloc }: | { jemalloc, lib }: | ||||||
| 
 | 
 | ||||||
| jemalloc.overrideAttrs (old: { | jemalloc.overrideAttrs (old: { | ||||||
|   configureFlags = old.configureFlags ++ [ |   configureFlags = old.configureFlags ++ [ | ||||||
| @ -8,5 +8,6 @@ jemalloc.overrideAttrs (old: { | |||||||
|   hardeningDisable = [ "all" ]; |   hardeningDisable = [ "all" ]; | ||||||
|   meta = old.meta // { |   meta = old.meta // { | ||||||
|     description = old.meta.description + " (for Nanos6)"; |     description = old.meta.description + " (for Nanos6)"; | ||||||
|  |     maintainers = (old.meta.maintainers or []) ++ (with lib.maintainers.bsc; [ rarias ]); | ||||||
|   }; |   }; | ||||||
| }) | }) | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| { | { | ||||||
|   stdenv |   stdenv | ||||||
|  | , lib | ||||||
| , bashInteractive | , bashInteractive | ||||||
| , busybox | , busybox | ||||||
| , nix | , nix | ||||||
| @ -86,5 +87,14 @@ stdenv.mkDerivation rec { | |||||||
|     mkdir -p $out/share |     mkdir -p $out/share | ||||||
|     cp ${nix_conf} $out/share/nix.conf |     cp ${nix_conf} $out/share/nix.conf | ||||||
|   ''; |   ''; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = null; | ||||||
|  |     description = "nix bubblewrap wrapper"; | ||||||
|  |     maintainers = [ ]; | ||||||
|  |     broken = true; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.mit; | ||||||
|  |   }; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										22
									
								
								pkgs/nixgen/default.nix
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pkgs/nixgen/default.nix
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | |||||||
|  | { | ||||||
|  |   stdenv | ||||||
|  | , lib | ||||||
|  | }: | ||||||
|  | 
 | ||||||
|  | stdenv.mkDerivation { | ||||||
|  |   pname = "nixgen"; | ||||||
|  |   version = "0.0.1"; | ||||||
|  |   src = ./nixgen; | ||||||
|  |   dontUnpack = true; | ||||||
|  |   phases = [ "installPhase" ]; | ||||||
|  |   installPhase = '' | ||||||
|  |     mkdir -p $out/bin | ||||||
|  |     cp -a $src $out/bin/nixgen | ||||||
|  |   ''; | ||||||
|  |   meta = { | ||||||
|  |     description = "Quickly generate flake.nix from command line"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.gpl3Plus; | ||||||
|  |   }; | ||||||
|  | } | ||||||
							
								
								
									
										97
									
								
								pkgs/nixgen/nixgen
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										97
									
								
								pkgs/nixgen/nixgen
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,97 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | # | ||||||
|  | # Copyright (c) 2025, Barcelona Supercomputing Center (BSC) | ||||||
|  | # SPDX-License-Identifier: GPL-3.0+ | ||||||
|  | # Author: Rodrigo Arias Mallo <rodrigo.arias@bsc.es> | ||||||
|  | 
 | ||||||
|  | function usage() { | ||||||
|  |   echo "USAGE: nixgen [-f] [package [...]] [-b package [...]]" >&2 | ||||||
|  |   echo "  Generates a flake.nix file with the given packages." >&2 | ||||||
|  |   echo "  After flake.nix is created, use 'nix develop' to enter the shell." >&2 | ||||||
|  |   echo "OPTIONS" >&2 | ||||||
|  |   echo "  -f               Overwrite existing flake.nix (default: no)." >&2 | ||||||
|  |   echo "  packages...      Add these packages to the shell." >&2 | ||||||
|  |   echo "  -b packages...   Add the dependencies needed to build these packages." >&2 | ||||||
|  |   echo "EXAMPLE" >&2 | ||||||
|  |   echo "  $ nixgen ovni bigotes -b nosv tampi" >&2 | ||||||
|  |   echo "  Adds the packages ovni and bigotes as well as all required dependencies" >&2 | ||||||
|  |   echo "  to build nosv and tampi." >&2 | ||||||
|  |   echo "AUTHOR" >&2 | ||||||
|  |   echo "  Rodrigo Arias Mallo <rodrigo.arias@bsc.es>" >&2 | ||||||
|  |   exit 1 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | mode=package | ||||||
|  | packages= | ||||||
|  | inputsFrom= | ||||||
|  | force= | ||||||
|  | 
 | ||||||
|  | if [[ $# -eq 0 ]]; then | ||||||
|  |   usage | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | while [[ $# -gt 0 ]]; do | ||||||
|  |     case $1 in -b) | ||||||
|  |       mode=build | ||||||
|  |       shift | ||||||
|  |       ;; | ||||||
|  |     -f) | ||||||
|  |       force=1 | ||||||
|  |       shift | ||||||
|  |       ;; | ||||||
|  |     -h) | ||||||
|  |       usage | ||||||
|  |       ;; | ||||||
|  |     -*|--*) | ||||||
|  |       echo "error: unknown option $1" >&2 | ||||||
|  |       exit 1 | ||||||
|  |       ;; | ||||||
|  |     *) | ||||||
|  |       if [ "$mode" == "package" ]; then | ||||||
|  |         packages+="${packages:+ }$1" | ||||||
|  |       else | ||||||
|  |         inputsFrom+="${inputsFrom:+ }$1" | ||||||
|  |       fi | ||||||
|  |       shift | ||||||
|  |       ;; | ||||||
|  |   esac | ||||||
|  | done | ||||||
|  | 
 | ||||||
|  | if [ ! "$force" -a -e flake.nix ]; then | ||||||
|  |   echo "error: flake.nix exists, force overwrite with -f" >&2 | ||||||
|  |   exit 1 | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | cat > flake.nix <<EOF | ||||||
|  | { | ||||||
|  |   inputs.jungle.url = "git+https://jungle.bsc.es/git/rarias/jungle"; | ||||||
|  |   outputs = { self, jungle }: | ||||||
|  |   let | ||||||
|  |     nixpkgs = jungle.inputs.nixpkgs; | ||||||
|  |     customOverlay = (final: prev: { | ||||||
|  |       # Example overlay, for now empty | ||||||
|  |     }); | ||||||
|  |     pkgs = import nixpkgs { | ||||||
|  |       system = "x86_64-linux"; | ||||||
|  |       overlays = [ | ||||||
|  |         # Apply jungle overlay to get our BSC custom packages | ||||||
|  |         jungle.outputs.bscOverlay | ||||||
|  |         # And on top apply our local changes to customize for cluster | ||||||
|  |         customOverlay | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  |   in { | ||||||
|  |     devShells.x86_64-linux.default = pkgs.mkShell { | ||||||
|  |       pname = "devshell"; | ||||||
|  |       # Include these packages in the shell | ||||||
|  |       packages = with pkgs; [ | ||||||
|  |         $packages | ||||||
|  |       ]; | ||||||
|  |       # The dependencies needed to build these packages will be also included | ||||||
|  |       inputsFrom = with pkgs; [ | ||||||
|  |         $inputsFrom | ||||||
|  |       ]; | ||||||
|  |     }; | ||||||
|  |   }; | ||||||
|  | } | ||||||
|  | EOF | ||||||
| @ -1,5 +1,6 @@ | |||||||
| { | { | ||||||
|   stdenv |   stdenv | ||||||
|  | , lib | ||||||
| , glibc | , glibc | ||||||
| }: | }: | ||||||
| 
 | 
 | ||||||
| @ -15,4 +16,11 @@ stdenv.mkDerivation rec { | |||||||
|   makeFlags = [ "DESTDIR=$(out)" ]; |   makeFlags = [ "DESTDIR=$(out)" ]; | ||||||
|   preBuild = "env"; |   preBuild = "env"; | ||||||
|   dontPatchShebangs = true; |   dontPatchShebangs = true; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://gitlab.pm.bsc.es/rarias/nixtools"; | ||||||
|  |     description = "nix bubblewrap wrapper"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -3,7 +3,6 @@ | |||||||
| , lib | , lib | ||||||
| , fetchFromGitHub | , fetchFromGitHub | ||||||
| , pkg-config | , pkg-config | ||||||
| , perl |  | ||||||
| , numactl | , numactl | ||||||
| , hwloc | , hwloc | ||||||
| , boost | , boost | ||||||
| @ -11,22 +10,23 @@ | |||||||
| , ovni | , ovni | ||||||
| , nosv | , nosv | ||||||
| , clangOmpss2 | , clangOmpss2 | ||||||
|  | , which | ||||||
| , useGit ? false | , useGit ? false | ||||||
| , gitUrl ? "ssh://git@gitlab-internal.bsc.es/nos-v/nodes.git" | , gitUrl ? "ssh://git@gitlab-internal.bsc.es/nos-v/nodes.git" | ||||||
| , gitBranch ? "master" | , gitBranch ? "master" | ||||||
| , gitCommit ? "6002ec9ae6eb876d962cc34366952a3b26599ba6" | , gitCommit ? "511489e71504a44381e0930562e7ac80ac69a848" # version-1.4 | ||||||
| }: | }: | ||||||
| 
 | 
 | ||||||
| with lib; | with lib; | ||||||
| 
 | 
 | ||||||
| let | let | ||||||
|   release = rec { |   release = rec { | ||||||
|     version = "1.3"; |     version = "1.4"; | ||||||
|     src = fetchFromGitHub { |     src = fetchFromGitHub { | ||||||
|       owner = "bsc-pm"; |       owner = "bsc-pm"; | ||||||
|       repo = "nodes"; |       repo = "nodes"; | ||||||
|       rev = "version-${version}"; |       rev = "version-${version}"; | ||||||
|       hash = "sha256-cFb9pxcjtkMmH0CsGgUO9LTdXDNh7MCqicgGWawLrsU="; |       hash = "sha256-+lR/R0l3fGZO3XG7whMorFW2y2YZ0ZFnLeOHyQYrAsQ="; | ||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
| @ -59,6 +59,7 @@ in | |||||||
|     doCheck = false; |     doCheck = false; | ||||||
|     nativeCheckInputs = [ |     nativeCheckInputs = [ | ||||||
|       clangOmpss2 |       clangOmpss2 | ||||||
|  |       which | ||||||
|     ]; |     ]; | ||||||
| 
 | 
 | ||||||
|     # The "bindnow" flags are incompatible with ifunc resolution mechanism. We |     # The "bindnow" flags are incompatible with ifunc resolution mechanism. We | ||||||
| @ -81,4 +82,12 @@ in | |||||||
|     passthru = { |     passthru = { | ||||||
|       inherit nosv; |       inherit nosv; | ||||||
|     }; |     }; | ||||||
|  | 
 | ||||||
|  |     meta = { | ||||||
|  |       homepage = "https://gitlab.bsc.es/nos-v/nodes"; | ||||||
|  |       description = "Runtime library designed to work on top of the nOS-V runtime"; | ||||||
|  |       maintainers = with lib.maintainers.bsc; [ abonerib rarias ]; | ||||||
|  |       platforms = lib.platforms.linux; | ||||||
|  |       license = lib.licenses.gpl3Plus; | ||||||
|  |     }; | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -7,25 +7,25 @@ | |||||||
| , numactl | , numactl | ||||||
| , hwloc | , hwloc | ||||||
| , papi | , papi | ||||||
| , enablePapi ? true | , enablePapi ? stdenv.hostPlatform == stdenv.buildPlatform # Disabled when cross-compiling | ||||||
| , cacheline ? 64 # bits | , cacheline ? 64 # bits | ||||||
| , ovni ? null | , ovni ? null | ||||||
| , useGit ? false | , useGit ? false | ||||||
| , gitUrl ? "git@gitlab-internal.bsc.es:nos-v/nos-v.git" | , gitUrl ? "git@gitlab-internal.bsc.es:nos-v/nos-v.git" | ||||||
| , gitBranch ? "master" | , gitBranch ? "master" | ||||||
| , gitCommit ? "9f47063873c3aa9d6a47482a82c5000a8c813dd8" | , gitCommit ? "1108e4786b58e0feb9a16fa093010b763eb2f8e8" # version 4.0.0 | ||||||
| }: | }: | ||||||
| 
 | 
 | ||||||
| with lib; | with lib; | ||||||
| 
 | 
 | ||||||
| let | let | ||||||
|   release = rec { |   release = rec { | ||||||
|     version = "3.2.0"; |     version = "4.0.0"; | ||||||
|     src = fetchFromGitHub { |     src = fetchFromGitHub { | ||||||
|       owner = "bsc-pm"; |       owner = "bsc-pm"; | ||||||
|       repo = "nos-v"; |       repo = "nos-v"; | ||||||
|       rev = "${version}"; |       rev = "${version}"; | ||||||
|       hash = "sha256-yaz92426EM8trdkBJlISmAoG9KJCDTvoAW/HKrasvOw="; |       hash = "sha256-llaq73bd/YxLVKNlMebnUHKa4z3sdcsuDUoVwUxNuw8="; | ||||||
|     }; |     }; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
| @ -59,4 +59,12 @@ in | |||||||
|       hwloc |       hwloc | ||||||
|       ovni |       ovni | ||||||
|     ] ++ lib.optionals enablePapi [ papi ]; |     ] ++ lib.optionals enablePapi [ papi ]; | ||||||
|  | 
 | ||||||
|  |     meta = { | ||||||
|  |       homepage = "https://gitlab.bsc.es/nos-v/nos-v"; | ||||||
|  |       description = "Tasking library enables the co-execution of multiple applications with system-wide scheduling and a centralized management of resources"; | ||||||
|  |       maintainers = with lib.maintainers.bsc; [ abonerib rarias ]; | ||||||
|  |       platforms = lib.platforms.linux; | ||||||
|  |       license = lib.licenses.gpl3Plus; | ||||||
|  |     }; | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -1,84 +0,0 @@ | |||||||
| { lib |  | ||||||
| , fetchFromGitHub |  | ||||||
| , cmake |  | ||||||
| , withCFlags |  | ||||||
| , intelPackages |  | ||||||
| 
 |  | ||||||
| , mklSupport ? true |  | ||||||
| 
 |  | ||||||
| , config |  | ||||||
| 
 |  | ||||||
| , cudaSupport ? config.cudaSupport |  | ||||||
| , cudaPackages ? { } |  | ||||||
| 
 |  | ||||||
| , rocmSupport ? config.rocmSupport |  | ||||||
| , hipTargets ? null # only one target at a time supported |  | ||||||
| , rocmPackages ? { } |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| let |  | ||||||
|   # rocmSupport is not enough, we need a specific target |  | ||||||
|   enableHip = rocmSupport && hipTargets != null; |  | ||||||
| 
 |  | ||||||
|   stdenv = withCFlags (lib.optionals cudaSupport [ "--cuda-path=${cudaPackages.cudatoolkit}" ]) intelPackages.stdenv; |  | ||||||
| in |  | ||||||
| 
 |  | ||||||
|   # at least one backend has to be enabled |  | ||||||
|   assert mklSupport || cudaSupport || enableHip; |  | ||||||
| 
 |  | ||||||
| stdenv.mkDerivation rec { |  | ||||||
|   pname = "oneMath"; |  | ||||||
|   version = "0.8"; |  | ||||||
| 
 |  | ||||||
|   src = fetchFromGitHub { |  | ||||||
|     owner = "uxlfoundation"; |  | ||||||
|     repo = "oneMath"; |  | ||||||
|     rev = "v${version}"; |  | ||||||
|     sha256 = "sha256-xK8lKI3oqKlx3xtvdScpMq+HXAuoYCP0BZdkEqnJP5o="; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   cmakeFlags = [ |  | ||||||
|     (lib.cmakeBool "ENABLE_MKLCPU_BACKEND"    mklSupport) |  | ||||||
|     (lib.cmakeBool "ENABLE_MKLGPU_BACKEND"    mklSupport) |  | ||||||
| 
 |  | ||||||
|     (lib.cmakeBool "ENABLE_CUBLAS_BACKEND"    cudaSupport) |  | ||||||
|     (lib.cmakeBool "ENABLE_CUFFT_BACKEND"     cudaSupport) |  | ||||||
|     (lib.cmakeBool "ENABLE_CURAND_BACKEND"    cudaSupport) |  | ||||||
|     (lib.cmakeBool "ENABLE_CUSOLVER_BACKEND"  cudaSupport) |  | ||||||
|     (lib.cmakeBool "ENABLE_CUSPARSE_BACKEND"  cudaSupport) |  | ||||||
| 
 |  | ||||||
|     (lib.cmakeBool "ENABLE_ROCBLAS_BACKEND"   enableHip) |  | ||||||
|     (lib.cmakeBool "ENABLE_ROCFFT_BACKEND"    enableHip) |  | ||||||
|     (lib.cmakeBool "ENABLE_ROCSOLVER_BACKEND" enableHip) |  | ||||||
|     (lib.cmakeBool "ENABLE_ROCRAND_BACKEND"   enableHip) |  | ||||||
|     (lib.cmakeBool "ENABLE_ROCSPARSE_BACKEND" enableHip) |  | ||||||
| 
 |  | ||||||
|     (lib.cmakeBool "BUILD_FUNCTIONAL_TESTS" false) |  | ||||||
|     (lib.cmakeBool "BUILD_EXAMPLES" false) |  | ||||||
|   ] ++ lib.optionals enableHip [ |  | ||||||
|     (lib.cmakeFeature "HIP_TARGETS" hipTargets) |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   nativeBuildInputs = [ cmake ]; |  | ||||||
|   buildInputs = lib.optionals (mklSupport) [ |  | ||||||
|     intelPackages.mkl |  | ||||||
|     intelPackages.tbb |  | ||||||
|   ] ++ lib.optionals (enableHip) [ |  | ||||||
|     rocmPackages.rocmPath |  | ||||||
|     rocmPackages.rocblas |  | ||||||
|     rocmPackages.rocfft |  | ||||||
|     rocmPackages.rocsolver |  | ||||||
|     rocmPackages.rocrand |  | ||||||
|     rocmPackages.rocsparse |  | ||||||
|   ] ++ lib.optionals (cudaSupport) [ |  | ||||||
|     (lib.getDev cudaPackages.cuda_cudart) |  | ||||||
|     cudaPackages.cudatoolkit |  | ||||||
| 
 |  | ||||||
|     cudaPackages.libcublas |  | ||||||
|     cudaPackages.libcurand |  | ||||||
|     cudaPackages.libcufft |  | ||||||
|     cudaPackages.libcusparse |  | ||||||
|     cudaPackages.libcusolver |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -7,7 +7,7 @@ | |||||||
| , useGit ? false | , useGit ? false | ||||||
| , gitBranch ? "master" | , gitBranch ? "master" | ||||||
| , gitUrl ? "ssh://git@bscpm04.bsc.es/rarias/ovni.git" | , gitUrl ? "ssh://git@bscpm04.bsc.es/rarias/ovni.git" | ||||||
| , gitCommit ? "e4f62382076f0cf0b1d08175cf57cc0bc51abc61" | , gitCommit ? "06432668f346c8bdc1006fabc23e94ccb81b0d8b" # version 1.13.0 | ||||||
| , enableDebug ? false | , enableDebug ? false | ||||||
| # Only enable MPI if the build is native (fails on cross-compilation) | # Only enable MPI if the build is native (fails on cross-compilation) | ||||||
| , useMpi ? (stdenv.buildPlatform.canExecute stdenv.hostPlatform) | , useMpi ? (stdenv.buildPlatform.canExecute stdenv.hostPlatform) | ||||||
| @ -15,13 +15,13 @@ | |||||||
| 
 | 
 | ||||||
| let | let | ||||||
|   release = rec { |   release = rec { | ||||||
|     version = "1.12.0"; |     version = "1.13.0"; | ||||||
|     src = fetchFromGitHub { |     src = fetchFromGitHub { | ||||||
|       owner = "bsc-pm"; |       owner = "bsc-pm"; | ||||||
|       repo = "ovni"; |       repo = "ovni"; | ||||||
|       rev = "${version}"; |       rev = "${version}"; | ||||||
|       hash = "sha256-H04JvsVKrdqr3ON7JhU0g17jjlg/jzQ7eTfx9vUNd3E="; |       hash = "sha256-0l2ryIyWNiZqeYdVlnj/WnQGS3xFCY4ICG8JedX424w="; | ||||||
|     } // { shortRev = "a73afcf"; }; |     } // { shortRev = "0643266"; }; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   git = rec { |   git = rec { | ||||||
| @ -55,4 +55,13 @@ in | |||||||
|     doCheck = true; |     doCheck = true; | ||||||
|     checkTarget = "test"; |     checkTarget = "test"; | ||||||
|     hardeningDisable = [ "all" ]; |     hardeningDisable = [ "all" ]; | ||||||
|  | 
 | ||||||
|  |     meta = { | ||||||
|  |       homepage = "https://ovni.readthedocs.io"; | ||||||
|  |       description = "Obtuse but Versatile Nanoscale Instrumentation"; | ||||||
|  |       maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |       platforms = lib.platforms.linux; | ||||||
|  |       license = lib.licenses.gpl3Plus; | ||||||
|  |       cross = true; | ||||||
|  |     }; | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| { | { | ||||||
|   stdenv |   stdenv | ||||||
|  | , lib | ||||||
| , fetchFromGitHub | , fetchFromGitHub | ||||||
| , autoreconfHook | , autoreconfHook | ||||||
| , boost | , boost | ||||||
| @ -88,4 +89,18 @@ stdenv.mkDerivation rec { | |||||||
|     mkdir -p $out/share/man |     mkdir -p $out/share/man | ||||||
|     mv $out/share/doc/wxparaver_help_contents/man $out/share/man/man1 |     mv $out/share/doc/wxparaver_help_contents/man $out/share/man/man1 | ||||||
|   ''; |   ''; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://tools.bsc.es/paraver"; | ||||||
|  |     downloadPage = "https://github.com/bsc-performance-tools/wxparaver"; | ||||||
|  |     description = "Performance analyzer based on event traces"; | ||||||
|  |     longDescription = '' | ||||||
|  |       Trace-based visualization and analysis tool designed to study quantitative | ||||||
|  |       detailed metrics and obtain qualitative knowledge of the performance of | ||||||
|  |       applications, libraries, processors and whole architectures | ||||||
|  |     ''; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.lgpl21Plus; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| { | { | ||||||
|   stdenv |   stdenv | ||||||
|  | , lib | ||||||
| , fetchFromGitHub | , fetchFromGitHub | ||||||
| , autoreconfHook | , autoreconfHook | ||||||
| , boost | , boost | ||||||
| @ -57,4 +58,13 @@ stdenv.mkDerivation rec { | |||||||
|     xml2 |     xml2 | ||||||
|     zlib |     zlib | ||||||
|   ]; |   ]; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://tools.bsc.es/paraver"; | ||||||
|  |     downloadPage = "https://github.com/bsc-performance-tools/paraver-kernel"; | ||||||
|  |     description = "Kernel library used by wxparaver"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.lgpl21Plus; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| { | { | ||||||
|   stdenv |   stdenv | ||||||
|  | , lib | ||||||
| , autoreconfHook | , autoreconfHook | ||||||
| , fetchFromGitHub | , fetchFromGitHub | ||||||
| , ovni | , ovni | ||||||
| @ -27,4 +28,12 @@ stdenv.mkDerivation rec { | |||||||
|     ovni |     ovni | ||||||
|     mpi |     mpi | ||||||
|   ]; |   ]; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://github.com/bsc-pm/sonar"; | ||||||
|  |     description = "Set of runtime libraries which instrument parallel programming models through the ovni instrumentation library"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.mit; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,5 +1,6 @@ | |||||||
| { | { | ||||||
|   stdenv |   stdenv | ||||||
|  | , lib | ||||||
| , fetchFromGitHub | , fetchFromGitHub | ||||||
| , automake | , automake | ||||||
| , autoconf | , autoconf | ||||||
| @ -55,4 +56,12 @@ stdenv.mkDerivation rec { | |||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   hardeningDisable = [ "all" ]; |   hardeningDisable = [ "all" ]; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://github.com/bsc-pm/tagaspi"; | ||||||
|  |     description = "Task-Aware GASPI"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.gpl3Plus; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -61,4 +61,12 @@ in stdenv.mkDerivation { | |||||||
|   configureFlags = optional (enableOvni) "--with-ovni=${ovni}"; |   configureFlags = optional (enableOvni) "--with-ovni=${ovni}"; | ||||||
|   dontDisableStatic = true; |   dontDisableStatic = true; | ||||||
|   hardeningDisable = [ "all" ]; |   hardeningDisable = [ "all" ]; | ||||||
|  | 
 | ||||||
|  |   meta = { | ||||||
|  |     homepage = "https://github.com/bsc-pm/tampi"; | ||||||
|  |     description = "Task-Aware MPI"; | ||||||
|  |     maintainers = with lib.maintainers.bsc; [ rarias ]; | ||||||
|  |     platforms = lib.platforms.linux; | ||||||
|  |     license = lib.licenses.gpl3Plus; | ||||||
|  |   }; | ||||||
| } | } | ||||||
|  | |||||||
| @ -1,87 +0,0 @@ | |||||||
| { |  | ||||||
|   lib, |  | ||||||
|   stdenv, |  | ||||||
|   autoconf, |  | ||||||
|   automake, |  | ||||||
|   autoreconfHook, |  | ||||||
|   boost, |  | ||||||
|   fetchFromGitHub, |  | ||||||
|   gnumake, |  | ||||||
|   libtool, |  | ||||||
|   withCFlags, |  | ||||||
| 
 |  | ||||||
|   useIntel ? true, |  | ||||||
|   adaptivecpp ? null, |  | ||||||
|   intelPackages ? null, |  | ||||||
| 
 |  | ||||||
|   useGit ? false, |  | ||||||
|   gitUrl ? "git@gitlab-internal.bsc.es:task-awareness/tasycl/tasycl.git", |  | ||||||
|   gitBranch ? "main", |  | ||||||
|   gitCommit ? "78f98dcf60a66e0eaa3b4ebcf55be076bec64825", |  | ||||||
| }: |  | ||||||
| 
 |  | ||||||
| assert !useIntel -> adaptivecpp != null; |  | ||||||
| assert useIntel -> intelPackages != null; |  | ||||||
| 
 |  | ||||||
| let |  | ||||||
|   variant = if useIntel then "intel" else "acpp"; |  | ||||||
| 
 |  | ||||||
|   syclStdenv = withCFlags [ "-O3" ] (if useIntel then intelPackages.stdenv else stdenv); |  | ||||||
| 
 |  | ||||||
|   release = rec { |  | ||||||
|     version = "2.1.0"; |  | ||||||
|     src = fetchFromGitHub { |  | ||||||
|       owner = "bsc-pm"; |  | ||||||
|       repo = "tasycl"; |  | ||||||
|       rev = version; |  | ||||||
|       hash = "sha256-0kXnb0lHeQNHR27GTLbJ8xbiICLU8k2+FqEnnFSrzzo="; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   git = rec { |  | ||||||
|     version = src.shortRev; |  | ||||||
|     src = builtins.fetchGit { |  | ||||||
|       url = gitUrl; |  | ||||||
|       ref = gitBranch; |  | ||||||
|       rev = gitCommit; |  | ||||||
|     }; |  | ||||||
|   }; |  | ||||||
| 
 |  | ||||||
|   source = if (useGit) then git else release; |  | ||||||
| 
 |  | ||||||
| in |  | ||||||
| 
 |  | ||||||
| syclStdenv.mkDerivation { |  | ||||||
|   pname = "tasycl-${variant}"; |  | ||||||
|   inherit (source) src version; |  | ||||||
| 
 |  | ||||||
|   enableParallelBuilding = true; |  | ||||||
|   separateDebugInfo = true; |  | ||||||
| 
 |  | ||||||
|   nativeBuildInputs = [ |  | ||||||
|     autoreconfHook |  | ||||||
|     automake |  | ||||||
|     autoconf |  | ||||||
|     libtool |  | ||||||
|     gnumake |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   buildInputs = [ |  | ||||||
|     boost |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   configureFlags = lib.optionals (!useIntel) [ |  | ||||||
|     "CXX=${lib.getExe adaptivecpp}" |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   # add symlinks so we can explicitly link with tasycl-intel / tasycl-acpp |  | ||||||
|   postInstall = '' |  | ||||||
|     pushd $out/lib |  | ||||||
|     for i in libtasycl* ; do |  | ||||||
|       ln -s "$i" "''\${i/tasycl/tasycl-${variant}}" |  | ||||||
|     done |  | ||||||
|     popd |  | ||||||
|   ''; |  | ||||||
| 
 |  | ||||||
|   hardeningDisable = [ "all" ]; |  | ||||||
| } |  | ||||||
| @ -6,6 +6,7 @@ | |||||||
| 
 | 
 | ||||||
| stdenv.mkDerivation { | stdenv.mkDerivation { | ||||||
|   name = "hwloc-test"; |   name = "hwloc-test"; | ||||||
|  |   requiredSystemFeatures = [ "sys-devices" ]; | ||||||
| 
 | 
 | ||||||
|   src = ./.; |   src = ./.; | ||||||
| 
 | 
 | ||||||
| @ -14,7 +15,7 @@ stdenv.mkDerivation { | |||||||
|   buildPhase = '' |   buildPhase = '' | ||||||
|     ls -l /sys |     ls -l /sys | ||||||
|     gcc -lhwloc hwloc.c -o hwloc |     gcc -lhwloc hwloc.c -o hwloc | ||||||
|     strace ./hwloc |     strace ./hwloc > $out | ||||||
|   ''; |   ''; | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -23,9 +23,8 @@ in stdenv.mkDerivation { | |||||||
|   dontUnpack = true; |   dontUnpack = true; | ||||||
|   dontConfigure = true; |   dontConfigure = true; | ||||||
| 
 | 
 | ||||||
|   # nOS-V requires access to /sys/devices to request NUMA information. It will |   # nOS-V requires access to /sys/devices to request NUMA information | ||||||
|   # fail to run otherwise, so we disable the sandbox for this test. |   requiredSystemFeatures = [ "sys-devices" ]; | ||||||
|   __noChroot = true; |  | ||||||
| 
 | 
 | ||||||
|   buildInputs = [ openmp ]; |   buildInputs = [ openmp ]; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -36,9 +36,8 @@ in stdenv.mkDerivation { | |||||||
|   dontUnpack = true; |   dontUnpack = true; | ||||||
|   dontConfigure = true; |   dontConfigure = true; | ||||||
| 
 | 
 | ||||||
|   # nOS-V requires access to /sys/devices to request NUMA information. It will |   # nOS-V requires access to /sys/devices to request NUMA information | ||||||
|   # fail to run otherwise, so we disable the sandbox for this test. |   requiredSystemFeatures = [ "sys-devices" ]; | ||||||
|   __noChroot = true; |  | ||||||
| 
 | 
 | ||||||
|   buildInputs = [ nosv ]; |   buildInputs = [ nosv ]; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -24,9 +24,8 @@ in stdenv.mkDerivation { | |||||||
|   dontUnpack = true; |   dontUnpack = true; | ||||||
|   dontConfigure = true; |   dontConfigure = true; | ||||||
| 
 | 
 | ||||||
|   # nOS-V requires access to /sys/devices to request NUMA information. It will |   # nOS-V requires access to /sys/devices to request NUMA information | ||||||
|   # fail to run otherwise, so we disable the sandbox for this test. |   requiredSystemFeatures = [ "sys-devices" ]; | ||||||
|   __noChroot = true; |  | ||||||
| 
 | 
 | ||||||
|   buildPhase = '' |   buildPhase = '' | ||||||
|     set -x |     set -x | ||||||
|  | |||||||
| @ -1,55 +0,0 @@ | |||||||
| { intelPackages,  writeText, strace }: |  | ||||||
| 
 |  | ||||||
| let |  | ||||||
|   stdenv = intelPackages.stdenv; |  | ||||||
|   hello_sycl = writeText "hello.cpp" '' |  | ||||||
|     #include <sycl/sycl.hpp> |  | ||||||
| 
 |  | ||||||
|     class hello_world; |  | ||||||
| 
 |  | ||||||
|     int main(int argc, char** argv) try { |  | ||||||
|         auto device_selector = sycl::default_selector_v; |  | ||||||
| 
 |  | ||||||
|         sycl::queue queue(device_selector); |  | ||||||
| 
 |  | ||||||
|         std::cout << "Running on: " |  | ||||||
|                   << queue.get_device().get_info<sycl::info::device::name>() |  | ||||||
|                   << std::endl; |  | ||||||
| 
 |  | ||||||
|         queue.submit([&] (sycl::handler& cgh) { |  | ||||||
|             auto os = sycl::stream{128, 128, cgh}; |  | ||||||
|             cgh.single_task<hello_world>([=]() { |  | ||||||
|                 os << "Hello World! (on device)\n"; |  | ||||||
|             }); |  | ||||||
|         }); |  | ||||||
| 
 |  | ||||||
|         return 0; |  | ||||||
|     } catch (sycl::exception &e) { |  | ||||||
|         std::cout << "SYCL exception: " << e.what() << std::endl; |  | ||||||
|         return 0; // we excpect to fail since no devices should be available; |  | ||||||
|     } |  | ||||||
|   ''; |  | ||||||
| in |  | ||||||
| 
 |  | ||||||
| stdenv.mkDerivation { |  | ||||||
|   version = "0.0.1"; |  | ||||||
|   name = "hello-sycl"; |  | ||||||
|   buildInputs = [ stdenv strace ]; |  | ||||||
|   src = hello_sycl; |  | ||||||
|   dontUnpack = true; |  | ||||||
|   dontConfigure = true; |  | ||||||
|   NIX_DEBUG = 0; |  | ||||||
|   buildPhase = '' |  | ||||||
|     cp $src hello.cpp |  | ||||||
|     set -x |  | ||||||
|     echo CXX=$CXX |  | ||||||
|     command -v $CXX |  | ||||||
|     $CXX -fsycl hello.cpp -o hello |  | ||||||
|     ./hello |  | ||||||
|     set +x |  | ||||||
|   ''; |  | ||||||
| 
 |  | ||||||
|   installPhase = '' |  | ||||||
|     touch $out |  | ||||||
|   ''; |  | ||||||
| } |  | ||||||
| @ -1,74 +0,0 @@ | |||||||
| { writeText, intelPackages, nodes, nosv, clangOmpss2Nodes, strace }: |  | ||||||
| 
 |  | ||||||
| let |  | ||||||
|   hello_cpp = writeText "hello.cpp" '' |  | ||||||
|     #include <cstdio> |  | ||||||
|     #include <sycl/sycl.hpp> |  | ||||||
| 
 |  | ||||||
|     int main(int argc, char** argv) try { |  | ||||||
|         sycl::queue queue; |  | ||||||
| 
 |  | ||||||
|         std::cout << "Running on: " |  | ||||||
|                   << queue.get_device().get_info<sycl::info::device::name>() |  | ||||||
|                   << std::endl; |  | ||||||
| 
 |  | ||||||
|         #pragma oss task |  | ||||||
|         queue.submit([&] (sycl::handler& cgh) { |  | ||||||
|             auto os = sycl::stream{128, 128, cgh}; |  | ||||||
|             cgh.single_task<class hello_world>([=]() { |  | ||||||
|                 os << "Hello World! (on device)\n"; |  | ||||||
|             }); |  | ||||||
|         }).wait(); |  | ||||||
| 
 |  | ||||||
|         return 0; |  | ||||||
|     } catch (sycl::exception &e) { |  | ||||||
|         std::cout << "SYCL exception: " << e.what() << std::endl; |  | ||||||
|         return 0; // we expect to fail since no devices should be available; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|   ''; |  | ||||||
| in |  | ||||||
| 
 |  | ||||||
| intelPackages.stdenv.mkDerivation { |  | ||||||
|   version = "0.0.1"; |  | ||||||
|   name = "hello-syclompss"; |  | ||||||
| 
 |  | ||||||
|   src = hello_cpp; |  | ||||||
| 
 |  | ||||||
|   nativeBuildInputs = [ |  | ||||||
|     strace |  | ||||||
|     nodes |  | ||||||
|     nosv |  | ||||||
|   ]; |  | ||||||
| 
 |  | ||||||
|   dontUnpack = true; |  | ||||||
|   dontConfigure = true; |  | ||||||
| 
 |  | ||||||
|   # NODES requires access to /sys/devices to request NUMA information |  | ||||||
|   requiredSystemFeatures = [ "sys-devices" ]; |  | ||||||
| 
 |  | ||||||
|   env.NODES_HOME = nodes; |  | ||||||
| 
 |  | ||||||
|   NIX_DEBUG = 1; |  | ||||||
|   buildPhase = '' |  | ||||||
|     cp $src hello.cpp |  | ||||||
|     set -x |  | ||||||
|     echo CXX=$CXX |  | ||||||
|     echo NODES_HOME=$NODES_HOME |  | ||||||
|     command -v $CXX |  | ||||||
| 
 |  | ||||||
|     icpx -Wno-deprecated-declarations -fsycl \ |  | ||||||
|         -fsycl-host-compiler=${clangOmpss2Nodes.forIcpx}/bin/clang++ \ |  | ||||||
|         -fsycl-host-compiler-options='-Wno-deprecated-declarations -fompss-2=libnodes' \ |  | ||||||
|         -lnodes -lnosv \ |  | ||||||
|         $NODES_HOME/lib/nodes-main-wrapper.o \ |  | ||||||
|         hello.cpp -o hello |  | ||||||
| 
 |  | ||||||
|     ./hello |  | ||||||
|     set +x |  | ||||||
|   ''; |  | ||||||
| 
 |  | ||||||
|   installPhase = '' |  | ||||||
|     touch $out |  | ||||||
|   ''; |  | ||||||
| } |  | ||||||
| @ -25,9 +25,10 @@ stdenv.mkDerivation rec { | |||||||
|   hardeningDisable = [ "all" ]; |   hardeningDisable = [ "all" ]; | ||||||
|   #NIX_DEBUG = 1; |   #NIX_DEBUG = 1; | ||||||
|   buildInputs = [ ]; #strace gdb; |   buildInputs = [ ]; #strace gdb; | ||||||
|   # NODES requires access to /sys/devices to request NUMA information. It will | 
 | ||||||
|   # fail to run otherwise, so we disable the sandbox for this test. |   # NODES requires access to /sys/devices to request NUMA information | ||||||
|   __noChroot = true; |   requiredSystemFeatures = [ "sys-devices" ]; | ||||||
|  | 
 | ||||||
|   buildPhase = '' |   buildPhase = '' | ||||||
|     set -x |     set -x | ||||||
|     #$CC -v |     #$CC -v | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user