diff options
author | Kjetil Orbekk <kj@orbekk.com> | 2022-12-27 19:56:00 -0500 |
---|---|---|
committer | Kjetil Orbekk <kj@orbekk.com> | 2022-12-27 19:58:45 -0500 |
commit | 4c474b2ee6716d5c067ae20903e374073cefaa3d (patch) | |
tree | 9be4d721eda7417497e2187cccbaddf8b274e6ac /flake.nix | |
parent | 21b7b57336cd3bf7bd328ada38c6069a48504f85 (diff) |
Create nix packages for project
Diffstat (limited to 'flake.nix')
-rw-r--r-- | flake.nix | 171 |
1 files changed, 99 insertions, 72 deletions
@@ -1,81 +1,108 @@ { inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + crane.url = "github:ipetkov/crane"; + crane.inputs.nixpkgs.follows = "nixpkgs"; flake-utils.url = "github:numtide/flake-utils"; - nixpkgs.url = "nixpkgs"; + rust-overlay = { + url = "github:oxalica/rust-overlay"; + inputs = { + nixpkgs.follows = "nixpkgs"; + flake-utils.follows = "flake-utils"; + }; + }; }; - # TODO: Stuff to include in rust development environment: - # - trunk - # - cargo-watch - # - sqlx-cli - outputs = { self, nixpkgs, flake-utils }: - flake-utils.lib.eachDefaultSystem (system: - let pkgs = nixpkgs.legacyPackages.${system}; - in { - packages.databaseImage = pkgs.dockerTools.buildImage { - name = "bridge-database"; - contents = [ pkgs.shadow pkgs.postgresql_12 pkgs.bashInteractive pkgs.busybox ]; - tag = "latest"; + outputs = { self, nixpkgs, crane, flake-utils, rust-overlay, ... }: + let + systems = with flake-utils.lib.system; [x86_64-linux x86_64-darwin aarch64-linux aarch64-darwin]; + in + flake-utils.lib.eachSystem systems (system: + let + pkgs = import nixpkgs { + inherit system; + overlays = [ (import rust-overlay) ]; + }; - runAsRoot = '' - #!${pkgs.stdenv.shell} - ${pkgs.dockerTools.shadowSetup} - useradd postgres - mkdir -p /var/lib/postgres - chown postgres /var/lib/postgres - su postgres -c 'initdb -D /var/lib/postgres/data' - ''; + craneLib = crane.lib.${system}; - config = { - Cmd = [ "/bin/su" "postgres" "-c" "/bin/postgres -D /var/lib/postgres/data" ]; - }; - }; + buildInputs = with pkgs; [ + trunk + cargo-wasi + openssl + pkg-config + wasm-bindgen-cli + ]; - devShell = pkgs.mkShell { - buildInputs = with pkgs; [ - podman-compose - stdenv - postgresql - openssl - pkg-config - llvmPackages_latest.llvm - llvmPackages_latest.bintools - zlib.out - rustup - rust-analyzer - #xorriso - #grub2 - #qemu - llvmPackages_latest.lld - #python3 - ]; - RUSTC_VERSION = pkgs.lib.readFile ./rust-toolchain; - # https://github.com/rust-lang/rust-bindgen#environment-variables - LIBCLANG_PATH = - pkgs.lib.makeLibraryPath [ pkgs.llvmPackages_latest.libclang.lib ]; - HISTFILE = toString ./.history; - shellHook = '' - export PATH=$PATH:~/.cargo/bin - export PATH=$PATH:~/.rustup/toolchains/$RUSTC_VERSION-x86_64-unknown-linux-gnu/bin/ - ''; - # Add libvmi precompiled library to rustc search path - # RUSTFLAGS = (builtins.map (a: ''-L ${a}/lib'') [ - # pkgs.libvmi - # ]); - # Add libvmi, glibc, clang, glib headers to bindgen search path - BINDGEN_EXTRA_CLANG_ARGS = - # Includes with normal include path - (builtins.map (a: ''-I"${a}/include"'') [ - # pkgs.libvmi - pkgs.glibc.dev - ]) - # Includes with special directory paths - ++ [ - '' - -I"${pkgs.llvmPackages_latest.libclang.lib}/lib/clang/${pkgs.llvmPackages_latest.libclang.version}/include"'' - ''-I"${pkgs.glib.dev}/include/glib-2.0"'' - "-I${pkgs.glib.out}/lib/glib-2.0/include/" - ]; - }; - }); + rustWithWasmTarget = pkgs.rust-bin.stable.latest.default.override { + targets = [ "wasm32-unknown-unknown" "wasm32-wasi" ]; + }; + + craneLibWithWasmTarget = (crane.mkLib pkgs).overrideToolchain rustWithWasmTarget; + + commonArgs = { + inherit buildInputs; + src = craneLib.cleanCargoSource ./.; + }; + + commonArgsForWasm = commonArgs // { + doCheck = false; + }; + + cargoArtifactsForServer = craneLib.buildDepsOnly (commonArgs // { + cargoExtraArgs = "--workspace --exclude webapp"; + }); + + cargoArtifactsForWasm = craneLibWithWasmTarget.buildDepsOnly (commonArgsForWasm // { + cargoExtraArgs = "--workspace --exclude server --target wasm32-unknown-unknown"; + }); + + in + { + # TODO add checks: + # - cargo sqlx prepare --merged --check + checks.sqlx-prepare = craneLib.mkCargoDerivation (commonArgs // { + cargoArtifacts = cargoArtifactsForServer; + buildInputs = commonArgs.buildInputs ++ [ pkgs.sqlx-cli ]; + buildPhaseCargoCommand = "cargo sqlx prepare --merged --check"; + }); + + checks.fmt = craneLib.cargoFmt { + inherit (commonArgs) src; + }; + packages.bridge-server = craneLib.buildPackage (commonArgs // { + src = ./.; + }); + + packages.bridge-webapp = craneLibWithWasmTarget.buildPackage (commonArgsForWasm // { + cargoArtifacts = cargoArtifactsForWasm; + src = ./.; + cargoExtraArgs = "--target wasm32-unknown-unknown"; + buildPhaseCargoCommand = '' + pushd webapp + echo Running trunk from directory $PWD + trunk build + popd + ''; + installPhaseCommand = '' + mkdir -p $out + cp -r webapp/dist/* $out + ''; + }); + + devShells.default = pkgs.mkShell { + inputsFrom = builtins.attrValues self.packages; + nativeBuildInputs = with pkgs; [ + cargo + cargo-watch + rustfmt + sqlx-cli + podman-compose + postgresql + rust-analyzer + pkg-config + openssl + ]; + }; + }); } |