@@ -1,212 +1,28 @@
11{
22 inputs = {
3− nixpkgs.url =
4− "github:NixOS/nixpkgs?ref=4c0bb97b29ea716c4ced5da385e021caaa55c481";
5− flake-utils.url = "github:numtide/flake-utils";
6− vere = {
7− url = "github:urbit/vere?ref=master";
8− flake = false;
9− };
10− murmur3 = {
11− url = "github:PeterScott/murmur3";
12− flake = false;
13− };
14− urcrypt = {
15− url = "github:urbit/urcrypt?rev=9ae5d604528bc54ae48430f55ebbb17b1ad7956c";
16− flake = false;
17− };
18− pdjson = {
19− url = "github:skeeto/pdjson";
20− flake = false;
21− };
22− softfloat = {
23− url = "github:ucb-bar/berkeley-softfloat-3";
24− flake = false;
25− };
26− sha256 = {
27− url = "github:LekKit/sha256";
28− flake = false;
29− };
30− libaes_siv = {
31− url = "github:dfoxfranke/libaes_siv";
32− flake = false;
33− };
34− nockapp = {
35− url = "github:zorp-corp/nockapp";
36− flake = false;
37− };
38− fenix = {
39− url = "github:nix-community/fenix";
40− inputs.nixpkgs.follows = "nixpkgs";
41− };
3+ nixpkgs.url = "nixpkgs/nixos-unstable";
4+ flake-utils.url = "flake-utils";
5+ fenix.url = "github:nix-community/fenix";
426 };
43− outputs = inputs@{ self, nixpkgs, flake-utils, vere, murmur3, pdjson, sha256
44− , fenix, ... }:
45− flake-utils.lib.eachDefaultSystem (system:
46− let
47− pkgs = import nixpkgs {
48− inherit system;
49− config = { permittedInsecurePackages = [ "openssl-1.1.1w" ]; };
50− };
51− in {
52− packages = rec {
53− nockapp = (let toolchain = fenix.packages.${system}.minimal.toolchain;
54− in pkgs.makeRustPlatform {
55− rustc = toolchain;
56− cargo = toolchain;
57− }).buildRustPackage {
58− doCheck = false;
59− name = "nockapp";
60− src = inputs.nockapp;
61−
62− cargoLock = {
63− lockFile = "${inputs.nockapp}/Cargo.lock";
64− allowBuiltinFetchGit = true;
65− };
66− LIBCLANG_PATH = "${pkgs.libclang.lib}/lib";
67− BINDGEN_EXTRA_CLANG_ARGS = [
68− "-I${pkgs.glibc.dev}/include"
69− "-I${pkgs.libclang.lib}/lib/clang/17/include"
70− ];
71− };
72− urbit-nock = pkgs.runCommand "urbit.nock" { } ''
73− mkdir -p source
74− cp ${./urbit.hoon} source/urbit.hoon
75− ${nockapp}/bin/choo source/urbit.hoon source
76− cp out.jam $out
77− '';
78− gmp = pkgs.runCommand "gmp" {
79− buildInputs = with pkgs; [ gnutar emscripten gcc ];
80− } ''
81− tar xvf ${pkgs.gmp.src}
82− cd "gmp-${pkgs.gmp.version}"
83− mkdir -p $out
84− HOME=$TMPDIR
85− emconfigure ./configure --disable-assembly --host none HOST_CC=gcc --prefix=$out
86− make
87− make install
88− '';
89− libsigsegv = pkgs.libsigsegv.overrideDerivation (old: {
90− configurePhase = ''
91− runHook preConfigure
92−
93− HOME=$TMPDIR
94− ${pkgs.emscripten}/bin/emconfigure ./configure --prefix=$out ${
95− builtins.concatStringsSep " " old.configureFlags
96− }
97−
98− runHook postConfigure
99− '';
100− doCheck = false;
101− });
102− secp256k1 = pkgs.secp256k1.overrideDerivation (old: {
103− configurePhase = ''
104− runHook preConfigure
105−
106− HOME=$TMPDIR
107− ${pkgs.emscripten}/bin/emconfigure ./configure --prefix=$out ${
108− builtins.concatStringsSep " " old.configureFlags
109− }
110−
111− runHook postConfigure
112− '';
113− doCheck = false;
114− });
115− openssl = pkgs.openssl_1_1.overrideDerivation (old: {
116− configurePhase = ''
117− runHook preConfigure
118−
119− HOME=$TMPDIR
120− export CC=${pkgs.emscripten}/bin/emcc
121− ./Configure linux-generic64 no-shared -no-asm no-engine no-tests --prefix=$out
1227
123− runHook postConfigure
124− '';
125−
126− postInstall = ''
127− mkdir -p $bin
128− mv $out/bin $bin/bin
129−
130− mkdir $dev
131− mv $out/include $dev/
132− '';
133− });
134− libaes_siv = pkgs.runCommand "libaes_siv" {
135− buildInputs = with pkgs; [ emscripten ];
136− } ''
137− mkdir -p $out/lib
138− HOME=$TMPDIR
139− emcc -c ${inputs.libaes_siv}/aes_siv.c -I${
140− ./libaes_siv/include
141− } -I${openssl.dev}/include -o $out/lib/aes_siv.o
142− mkdir -p $out/include
143− cp ${inputs.libaes_siv}/aes_siv.h $out/include/aes_siv.h
144− '';
145− urcrypt = pkgs.runCommand "urcrypt" {
146− nativeBuildInputs = with pkgs; [ emscripten ];
147− } ''
148− cp -r ${inputs.urcrypt} src
149− chmod +w -R src
150−
151− rm src/argon2/src/bench.c src/argon2/src/opt.c
152−
153− mkdir -p $out/lib
154− mkdir -p $out/include
155− HOME=$TMPDIR
156− emcc -c src/urcrypt/*.c src/argon2/src/*.c src/argon2/src/blake2/*.c \
157− src/blake3/blake3_portable.c \
158− src/blake3/blake3_dispatch.c \
159− src/ed25519/src/*.c \
160− src/scrypt/*.c src/ge-additions/ge-additions.c \
161− src/keccak-tiny/keccak-tiny.c \
162− -I${openssl.dev}/include -I${libaes_siv}/include \
163− -I${secp256k1}/include -I${pkgs.libb2}/include -Isrc/argon2/include \
164− -Isrc/ed25519/src/ -Isrc/ge-additions -Isrc/keccak-tiny -Isrc/scrypt \
165− -Isrc/blake3 -Wno-int-conversion
166−
167− emcc -c -o blake3_2.o src/blake3/blake3.c \
168− -I${openssl.dev}/include -I${libaes_siv}/include \
169− -I${secp256k1}/include -I${pkgs.libb2}/include -Isrc/argon2/include \
170− -Isrc/ed25519/src/ -Isrc/ge-additions -Isrc/keccak-tiny -Isrc/scrypt \
171− -Isrc/blake3 -Wno-int-conversion
172−
173− emar rcs $out/lib/urcrypt.a *.o
174−
175− cp src/urcrypt/urcrypt.h $out/include
176− '';
177− softfloat =
178− pkgs.callPackage ./softfloat.nix { inherit (inputs) softfloat; };
179− nock = pkgs.runCommand "nock" { } ''
180− cp -r ${vere}/pkg .
181− chmod -R a+w pkg
182− cp pkg/noun/platform/linux/rsignal.h pkg/noun/platform/rsignal.h
183− patch -p1 <${./vere.patch}
184− rm pkg/noun/*_tests.c
185− mkdir -p $out
186− HOME=$TMPDIR
187− ${pkgs.emscripten}/bin/emcc \
188− pkg/noun/*.c pkg/noun/jets/*/*.c pkg/noun/jets/*.c pkg/c3/*.c pkg/ur/*.c \
189− pkg/noun/v3/*.c pkg/noun/v2/*.c pkg/noun/v1/*.c pkg/ent/ent.c \
190− ${murmur3}/murmur3.c ${pdjson}/pdjson.c ${gmp}/lib/libgmp.a ${sha256}/sha256.c \
191− ${softfloat}/lib/softfloat.a ${libsigsegv}/lib/libsigsegv.a ${urcrypt}/lib/urcrypt.a \
192− ${openssl.out}/lib/libcrypto.a ${libaes_siv}/lib/aes_siv.o ${secp256k1}/lib/libsecp256k1.a \
193− -o $out/nock.js \
194− -DU3_OS_linux \
195− -DU3_OS_ENDIAN_little \
196− -DU3_GUARD_PAGE \
197− -DENT_GETENTROPY_SYSRANDOM \
198− -sWASM=1 \
199− -sEXPORTED_RUNTIME_METHODS=cwrap \
200− -sALLOW_MEMORY_GROWTH \
201− -sINITIAL_MEMORY=536870912 \
202− -Ipkg -Ipkg/noun -Ipkg/c3 -Ipkg/ur -Ipkg/ent -I. \
203− -I${pdjson} -I${gmp}/include -I${murmur3} -I${libsigsegv}/include \
204− -I${softfloat}/include -I${sha256} -I${urcrypt}/include -I${openssl.dev}/include \
205− -sEXPORTED_FUNCTIONS=_u3n_nock_on,_u3m_boot_lite,_u3s_cue_bytes \
206− -sEXPORTED_RUNTIME_METHODS=cwrap \
207− # -Os
208− '';
8+ outputs = { self, flake-utils, nixpkgs, fenix }:
9+ let supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-darwin" ];
10+ in flake-utils.lib.eachSystem supportedSystems (system:
11+ let pkgs = import nixpkgs { inherit system; };
12+ in {
13+ inherit fenix;
14+ devShells.default = pkgs.mkShell {
15+ buildInputs = with pkgs; [
16+ (fenix.packages.${system}.combine
17+ (with fenix.packages.${system}.latest; [
18+ fenix.packages.${system}.targets.wasm32-unknown-unknown.latest.rust-std
19+ cargo
20+ rustc
21+ ]))
22+ wasm-pack
23+ wasm-tools
24+ cargo-flamegraph
25+ ];
20926 };
210− apps = { };
21127 });
21228}