diff --git a/default.nix b/default.nix index cb6306556..e75b486aa 100644 --- a/default.nix +++ b/default.nix @@ -1,10 +1,60 @@ let - pkgs = import (fetchTarball { + nixpkgsFn = import (fetchTarball { url = https://github.com/NixOS/nixpkgs/archive/642499faefb17c3d36e074cf35b189f75ba43ee2.tar.gz; sha256 = "16j7gl3gg839fy54z5v4aap8lgf1ffih5swmfk62zskk30nwzfbi"; - }) {}; + }); + + # nixcrpkgs = import (fetchTarball { + # url = https://github.com/DavidEGrayson/nixcrpkgs/archive/606e5fac74204643c8ca48dd73ce239b2f821d69.tar.gz; + # sha256 = "19dn7i200xsv8s92kxymv3nd87jncmp3ki8pw77v2rxfvn8ldg34"; + # }) {}; + + nixpkgs = nixpkgsFn {}; + + targets = { + windows = { + config = "x86_64-pc-mingw32"; + libc = "msvcrt"; + platform = {}; + openssl.system = "mingw"; + }; + + iphone = { + config = "aarch64-apple-ios"; + # config = "aarch64-apple-darwin14"; + sdkVer = "10.2"; + xcodeVer = "8.2"; + xcodePlatform = "iPhoneOS"; + useiOSPrebuilt = true; + platform = {}; + }; + + android = { + config = "armv7a-unknown-linux-androideabi"; + sdkVer = "24"; + ndkVer = "18b"; + platform = nixpkgs.platforms.armv7a-android; + useAndroidPrebuilt = true; + }; + + raspberryPi = rec { + config = "armv6l-unknown-linux-gnueabihf"; + platform = nixpkgs.platforms.raspberrypi; + }; + + raspberryPi2 = { + config = "armv7l-unknown-linux-gnueabihf"; + platform = nixpkgs.platforms.armv7l-hf-multiplatform; + }; + }; + + nimbus = pkgs: pkgs.callPackage ./nix/nimbus.nix {}; + + mapAttrs = nixpkgs.lib.attrsets.mapAttrs; + crossPackages = mapAttrs (target: conf: nixpkgsFn { crossSystem = conf; }) targets; + crossBulds = mapAttrs (target: packages: nimbus packages) crossPackages; in -import ./nix/nimbus.nix { inherit pkgs; } +(nimbus nixpkgs) // crossBulds diff --git a/nix/nim.nix b/nix/nim.nix index 0191cbaad..cae1909ee 100644 --- a/nix/nim.nix +++ b/nix/nim.nix @@ -1,4 +1,5 @@ -{ stdenv, lib, makeWrapper, git, nodejs, openssl, pcre, readline, sqlite }: +{ stdenv, lib, makeWrapper, git, clang, nodejs, openssl, pcre, readline, sqlite }: + let csources = fetchTarball { url = https://github.com/nim-lang/csources/archive/b56e49bbedf62db22eb26388f98262e2948b2cbc.tar.gz; @@ -44,23 +45,23 @@ in stdenv.mkDerivation rec { # used for bootstrapping, but koch insists on moving the nim compiler around # as part of building it, so it cannot be read-only - buildInputs = [ + buildInputs = [ makeWrapper nodejs - openssl pcre readline sqlite git + clang openssl pcre readline sqlite git ]; - buildPhase = '' + buildPhase = '' export HOME=$TMP mkdir -p dist cp -r ${nimble} dist/nimble cp -r ${csources} csources chmod 755 $(find csources dist/nimble -type d) cd csources - sh build.sh + CC="clang" LD="clang" sh build.sh cd .. - bin/nim c -d:release koch.nim - ./koch boot -d:release - ./koch tools -d:release + bin/nim c --cc:clang -d:release koch.nim + ./koch boot --cc:clang -d:release + ./koch tools --cc:clang -d:release ''; installPhase = '' diff --git a/nix/nimbus.nix b/nix/nimbus.nix index 3bfcf7017..2d22db76e 100644 --- a/nix/nimbus.nix +++ b/nix/nimbus.nix @@ -1,8 +1,7 @@ -{ pkgs ? import { } }: +{ stdenv, callPackage, sqlite, clang, rocksdb }: let - stdenv = pkgs.stdenv; - nim = pkgs.callPackage ./nim.nix {}; + nim = callPackage ./nim.nix {}; makeLibraryPath = stdenv.lib.makeLibraryPath; in @@ -15,11 +14,11 @@ stdenv.mkDerivation rec { description = "An Ethereum 2.0 Sharding Client for Resource-Restricted Devices"; homepage = https://github.com/status-im/nimbus; license = [licenses.asl20]; - platforms = platforms.unix; + platforms = platforms.unix ++ platforms.windows; }; src = ./.; - buildInputs = [pkgs.clang nim pkgs.rocksdb pkgs.sqlite]; + buildInputs = [clang nim rocksdb sqlite]; LD_LIBRARY_PATH = "${makeLibraryPath buildInputs}"; }