diff --git a/.gitignore b/.gitignore index 7766591..c8d9934 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,7 @@ cabal.project.local bench.html splitmix-hugs hugs.output + +# nix +result +result-* diff --git a/Makefile b/Makefile index 5caba15..c7d1636 100644 --- a/Makefile +++ b/Makefile @@ -34,3 +34,20 @@ generate-mix32 : doctest : perl -i -e 'while () { print unless /package-id base-compat-\d+(\.\d+)*/; }' .ghc.environment.* doctest src + +native: + nix-build -A native.splitmix + +freebsd: + nix-build -A freebsd.splitmix + +android: + nix-build -A android.splitmix + +js: + nix-build -A js.splitmix + +wasm: + nix shell \ + 'gitlab:haskell-wasm/ghc-wasm-meta/7927129e42bcd6a54b9e06e26455803fa4878261?host=gitlab.haskell.org' \ + --command sh -c "wasm32-wasi-cabal update && wasm32-wasi-cabal test all --ghc-options='-single-threaded' --test-wrapper=wasmtime" diff --git a/cabal.project b/cabal.project index c7e29bd..5331712 100644 --- a/cabal.project +++ b/cabal.project @@ -5,3 +5,10 @@ tests: True allow-newer: async-2.2.5:base allow-newer: hashable-1.4.4.0:base allow-newer: hashable-1.4.4.0:containers + +-- Due to error when building 'splitmix-tests': undefined symbol: gethostname +if arch(wasm32) + source-repository-package + type: git + location: https://github.com/haskell-wasm/hostname + tag: 8d110f03b3117af233683ac90b125fcfc767a2ef diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..aa982d7 --- /dev/null +++ b/default.nix @@ -0,0 +1,43 @@ +let + pins = { + # merge ancestor of https://github.com/NixOS/nixpkgs/pull/413046 + nixpkgs = builtins.fetchTarball { + url = "https://github.com/NixOS/nixpkgs/archive/3ea4dc04503b4370e06eca0e43c062c8b11883fa.tar.gz"; + sha256 = "sha256:04ygvidh3l3ls755b2wgl148567n9rnj168s87j03agly5wrf19c"; + }; + }; + + defaultNixpkgs = import pins.nixpkgs {}; + + cachedPackageSetVersion = "ghc" + builtins.replaceStrings ["."] [""] defaultNixpkgs.haskellPackages.ghc.version; + + mkNixpkgs = version: import pins.nixpkgs { + config = { + packageOverrides = nixpkgs: with nixpkgs.haskell.lib.compose; { + haskell = nixpkgs.haskell // { + packages = nixpkgs.haskell.packages // { + "${version}" = nixpkgs.haskell.packages.${version}.override(old: { + overrides = self: super: { + # callCabal2nix is broken because of testu01 being missing so re-use splitmix drv + splitmix = overrideSrc + { src = nixpkgs.lib.sourceFilesBySuffices ./. [ ".hs" ".cabal" ".c" ".md" "LICENSE" ]; } + super.splitmix; + }; + }); + }; + }; + }; + }; + }; + + build = version: getPkgs: ((getPkgs (mkNixpkgs version)).haskell.packages.${version}); + + in { + native = build cachedPackageSetVersion (ps: ps); + + freebsd = build cachedPackageSetVersion (ps: ps.pkgsCross.x86_64-freebsd); + + android = build "ghc910" (ps: ps.pkgsCross.aarch64-android-prebuilt.pkgsStatic); + + js = build "ghc912" (ps: ps.pkgsCross.ghcjs); + }