diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..93c55f89 --- /dev/null +++ b/flake.lock @@ -0,0 +1,61 @@ +{ + "nodes": { + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1755186698, + "narHash": "sha256-wNO3+Ks2jZJ4nTHMuks+cxAiVBGNuEBXsT29Bz6HASo=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "fbcf476f790d8a217c3eab4e12033dc4a0f6d23c", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-utils": "flake-utils", + "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", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..6f5b4302 --- /dev/null +++ b/flake.nix @@ -0,0 +1,87 @@ +{ + description = "Development environment & packaging for OpenCL-ICD-Loader"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + flake-utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, flake-utils }: + flake-utils.lib.eachDefaultSystem (system: + let + pkgs = nixpkgs.legacyPackages.${system}; + in rec { + checks.default = self.packages.${system}.default; + checks.pkg-config = self.packages.${system}.default.passthru.tests.pkg-config; + checks.cllayerinfo = self.packages.${system}.default.passthru.tests.cllayerinfo; + + packages.default = pkgs.stdenv.mkDerivation (finalAttrs: rec { + name = "opencl-icd-loader"; + nativeBuildInputs = [ pkgs.cmake pkgs.opencl-headers ]; + + src = ./.; + + cmakeFlags = [ + "-DOCL_ICD_ENABLE_TRACE=ON" + ]; + + doCheck = true; + + passthru.tests = with pkgs; { + pkg-config = pkgs.testers.hasPkgConfigModules { + package = finalAttrs.finalPackage; + moduleNames = [ "OpenCL" ]; + }; + cllayerinfo = pkgs.testers.nixosTest { + name = "cllayerinfo-test"; + nodes.machine = { + environment.systemPackages = [ + self.packages.${system}.default + ]; + }; + + testScript = '' + start_all() + machine.succeed("cllayerinfo") + ''; + }; + }; + }); + + devShells.default = pkgs.mkShell { + buildInputs = [ + pkgs.pkg-config + self.packages.${system}.default.nativeBuildInputs + self.packages.${system}.default + ]; + + doCheck = false; # Disables automatically running tests for `$ nix develop` and direnv + + shellHook = '' + export ZDOTDIR=$(mktemp -d) + cat > "$ZDOTDIR/.zshrc" << 'EOF' + source ~/.zshrc # Source the original ~/.zshrc, required. + + function parse_git_branch { + git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\ ->\ \1/' + } + + function display_jobs_count_if_needed { + local job_count=$(jobs -s | wc -l | tr -d " ") + + if [ $job_count -gt 0 ]; then + echo "%B%F{yellow}%j| "; + fi + } + + # NOTE: Custom prompt with a snowflake: signals we are in `$ nix develop` shell + PROMPT="%F{blue}$(date +%H:%M:%S) $(display_jobs_count_if_needed)%B%F{green}%n %F{blue}%~%F{cyan} ❄%F{yellow}$(parse_git_branch) %f%{$reset_color%}" + EOF + + if [ -z "$DIRENV_IN_ENVRC" ]; then # This makes `$ nix develop` universally working with direnv without infinite loop + exec ${pkgs.zsh}/bin/zsh -i + fi + ''; + }; + }); +}