From 11a4034556f8611820025beee07672579b672389 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Tue, 24 Jan 2023 12:38:39 -0500 Subject: nix & build housekeeping, alternative D compilers --- org/config_nix.org | 117 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 100 insertions(+), 17 deletions(-) (limited to 'org/config_nix.org') diff --git a/org/config_nix.org b/org/config_nix.org index 5cbff2a..21aff72 100644 --- a/org/config_nix.org +++ b/org/config_nix.org @@ -79,6 +79,7 @@ nix show-derivation /nix/store/q7n14bm8j5vzm62qaraczdb4bpyf59vv-spine-0.11.1.drv #+HEADER: :tangle ../.envrc #+BEGIN_SRC sh use flake . +#use flake .#default NIX_ENFORCE_PURITY=1 NixDirEnvVersion="2.2.0" if ! has nix_direnv_version || ! nix_direnv_version ${NixDirEnvVersion}; then @@ -86,9 +87,32 @@ if ! has nix_direnv_version || ! nix_direnv_version ${NixDirEnvVersion}; then # source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/${NixDirEnvVersion}/direnvrc" "sha256-0000000000000000000000000000000000000000000=" source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/${NixDirEnvVersion}/direnvrc" "sha256-5EwyKnkJNQeXrRkYbwwRBcXbibosCJqyIUuz9Xq+LRc=" fi +# reload when these files change +watch_file flake.lock +watch_file flake.nix +nix flake update && nix flake check --show-trace && nix flake show if [ -f .envrc-local ]; then source_env_if_exists .envrc-local || source .envrc-local fi +echo " + +- nix flake update && nix flake check --show-trace && nix flake show && nix develop .#devShell + +- nix build .#default --print-build-logs +- nix build .#spine-search-ldc --print-build-logs +- nix build .#spine-search-dmd --print-build-logs +- nix build .#spine-search-gdc --print-build-logs + +nix-shell '' -A nix --pure + +nix run .#default --print-build-logs + +nix develop --build .#default --print-build-logs + +nix shell .#default --print-build-logs --command spine -v +nix shell .#default --print-build-logs --command spine --very-verbose --epub --html --html-link-search --html-link-curate --curate --output=\"\$SpineOUT\" ./markup/pod +nix shell .#default --print-build-logs --command spine --very-verbose --html --html-link-search --html-link-curate --curate --sqlite-update --sqlite-db-filename=\"spine.search.db\" --cgi-sqlite-search-filename=\"spine_search\" --sqlite-db-path=\"\$SpineDBpath\" --output=\"\$SpineOUT\" ./markup/pod +" #+END_SRC **** .envrc-local CHECK MODIFY @@ -98,11 +122,6 @@ fi #+HEADER: :tangle ../.envrc-local_ #+HEADER: :noweb yes #+BEGIN_SRC sh -# reload when these files change -watch_file flake.lock -watch_file flake.nix -nix flake update; nix flake check; nix flake show -#use flake .#default export NIX_PATH=/nix/var/nix/profiles/per-user/root/channels/nixos #export NIX_PATH=nixpkgs=/srv/nix/nixpkgs export DFLAGS="-O2 -inline -boundscheck=on -color=on" @@ -172,8 +191,9 @@ postInstall: inputs.flake-utils.url = "github:numtide/flake-utils"; outputs = { self, nixpkgs, flake-utils }: let + pname = "spine_search"; version = "<>"; - supportedSystems = [ "x86_64-linux" ]; # [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; + supportedSystems = [ "x86_64-linux" ]; # [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; forAllSystems = nixpkgs.lib.genAttrs supportedSystems; nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); # nixpkgs instantiated for supported system types. in { @@ -181,22 +201,80 @@ postInstall: let pkgs = nixpkgsFor.${system}; in with pkgs; { default = stdenv.mkDerivation { - pname = "spine_search"; + inherit pname; inherit version; executable = true; src = self; shell = ./default.nix; devEnv = ./devenv.nix; buildInputs = [ sqlite ]; - nativeBuildInputs = [ dub ldc ]; # [ dub dmd ]; [ dub ldc ]; [ dub gdc ]; - <> + nativeBuildInputs = [ dub dmd ldc gdc gnumake ]; # [ dub dmd ]; [ dub ldc ]; [ dub gdc ]; + buildPhase = '' + runHook preBuild + for DC_ in dmd ldmd2 ldc2 gdc gdmd; do + echo "- check for D compiler $DC_" + DC=$(type -P $DC_ || echo "") + if [ ! "$DC" == "" ]; then break; fi + done + if [ "$DC" == "" ]; then exit "Error: could not find D compiler"; fi + echo "$DC_ used as D compiler to build $pname" + dub build --compiler=$DC --build=$DC_ --combined --skip-registry=all + runHook postBuild + ''; + <> + }; + spine-search-dmd = stdenv.mkDerivation { + inherit pname; + inherit version; + meta.mainProgram = "spine_search-dmd"; + executable = true; + src = self; + buildInputs = [ sqlite ]; + nativeBuildInputs = [ dub dmd gnumake ]; + buildPhase = '' + runHook preBuild + dub build --compiler=$(type -P dmd) --build=dmd --combined --skip-registry=all + runHook postBuild + ''; + <> + }; + spine-search-ldc = stdenv.mkDerivation { + inherit pname; + inherit version; + meta.mainProgram = "spine_search-ldc"; + executable = true; + src = self; + buildInputs = [ sqlite ]; + nativeBuildInputs = [ dub ldc gnumake ]; + buildPhase = '' + runHook preBuild + dub build --compiler=$(type -P ldc2) --build=ldc2 --combined --skip-registry=all + runHook postBuild + ''; + <> + }; + spine-search-gdc = stdenv.mkDerivation { + inherit pname; + inherit version; + meta.mainProgram = "spine_search-gdc"; + executable = true; + src = self; + buildInputs = [ sqlite ]; + nativeBuildInputs = [ dub gdc gnumake ]; + buildPhase = '' + runHook preBuild + dub build --compiler=$(type -P gdc) --build=gdc --combined --skip-registry=all + runHook postBuild + ''; + <> }; #vendorSha256 = "sha256-0Q00000000000000000000000000000000000000000="; }); devShells = forAllSystems (system: let pkgs = nixpkgsFor.${system}; in with pkgs; { - devShell = mkShell { buildInputs = [ git dub dmd ldc gdc sqlite ]; }; + devShell = mkShell { }; + #devShell = mkShell { buildInputs = [ git dub dmd ldc gdc sqlite ]; }; }); }; } @@ -245,10 +323,10 @@ postInstall: outputs = { <> }: let version = "<>"; - supportedSystems = [ "x86_64-linux" ]; # [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; - # helper function to generate an attrset '{ x86_64-linux = f "x86_64-linux"; ... }'. + supportedSystems = [ "x86_64-linux" ]; # [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; + # helper function to generate an attrset '{ x86_64-linux = f "x86_64-linux"; ... }'. forAllSystems = nixpkgs.lib.genAttrs supportedSystems; - nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); # nixpkgs instantiated for supported system types. + nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); # nixpkgs instantiated for supported system types. <> in { packages = forAllSystems (system: @@ -379,9 +457,14 @@ buildPhase = '' dub build --compiler=$DC --build=$DC_ --combined --skip-registry=all runHook postBuild ''; +<> +#+END_SRC + +#+NAME: flake_phases_other_than_buildPhase +#+HEADER: :noweb yes +#+BEGIN_SRC nix checkPhase = '' runHook preCheck - HOME="$PWD" dub test --combined --skip-registry=all runHook postCheck ''; @@ -486,7 +569,7 @@ mkShell { nix shell --print-build-logs - nix develop - nix develop --build .#default --print-build-logs + nix develop --build .#default --print-build-logs nix develop --build -f derivation.nix -I .envrc --print-build-logs nix develop ; eval \$buildPhase @@ -765,10 +848,10 @@ pkgs.callPackage ./derivation.nix {} #+HEADER: :tangle ../devenv.nix #+HEADER: :tangle-mode (identity #o755) #+BEGIN_SRC nix -{ pkgs ? import { }, name ? "user-env" }: with pkgs; +{ pkgs ? import { }, name ? "user-env" }: with pkgs; buildEnv { inherit name; - extraOutputsToInstall = [ "out" "man" "lib" ]; # to get all needed symlinks + extraOutputsToInstall = [ "out" "man" "lib" ]; # to get all needed symlinks paths = [ #nix # if not on NixOS, this is needed direnv -- cgit v1.2.3