nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 stdenv,
4 fetchFromGitHub,
5 libffi,
6 libxml2,
7 makeBinaryWrapper,
8 cmake,
9 glibc,
10 rustPlatform,
11 zig_0_13,
12 llvmPackages_18,
13 writableTmpDirAsHomeHook,
14 valgrind,
15 autoPatchelfHook,
16}:
17
18let
19 llvmPackages = llvmPackages_18;
20 rocVersion = "alpha4";
21in
22
23rustPlatform.buildRustPackage {
24 pname = "roc";
25 version = "0-${rocVersion}";
26
27 src = fetchFromGitHub {
28 owner = "roc-lang";
29 repo = "roc";
30 rev = "d73ea109cc21442da01387c1e5e911607c74692d";
31 hash = "sha256-pPnOM4hpbAkGCV47aw5eHbpOujjFtJa3v/3/D8gybO8=";
32 };
33
34 dontUseZigBuild = true;
35 dontUseZigCheck = true;
36 dontUseZigInstall = true;
37
38 nativeBuildInputs = [
39 cmake
40 zig_0_13
41 ]
42 ++ lib.optionals stdenv.isLinux [
43 autoPatchelfHook
44 ];
45
46 buildInputs = [
47 libffi
48 libxml2
49 llvmPackages.clang
50 llvmPackages.llvm.dev
51 makeBinaryWrapper
52 ]
53 ++ lib.optionals stdenv.isLinux [
54 glibc
55 stdenv.cc.cc.lib
56 ];
57
58 cargoHash = "sha256-wJViSHcezoIchWe4Py9j+9U+YJUA5ja/x94UipuWO2g=";
59
60 preBuild =
61 let
62 llvmVersion = builtins.splitVersion llvmPackages.release_version;
63 llvmMajorMinorStr = builtins.elemAt llvmVersion 0 + "0";
64 in
65 ''
66 export LLVM_SYS_${llvmMajorMinorStr}_PREFIX=${llvmPackages.llvm.dev}
67 '';
68
69 postInstall =
70 lib.optionalString stdenv.isLinux ''
71 wrapProgram $out/bin/roc \
72 --set NIX_GLIBC_PATH ${glibc.out}/lib \
73 --set NIX_LIBGCC_S_PATH ${stdenv.cc.cc.lib}/lib \
74 --prefix PATH : ${lib.makeBinPath [ stdenv.cc ]}
75 ''
76 + lib.optionalString (!stdenv.isLinux) ''
77 wrapProgram $out/bin/roc --prefix PATH : ${lib.makeBinPath [ stdenv.cc ]}
78 '';
79
80 nativeCheckInputs = [
81 writableTmpDirAsHomeHook
82 llvmPackages.clang
83 valgrind
84 ];
85
86 checkPhase =
87 lib.optionalString stdenv.isLinux ''
88 runHook preCheck
89 NIX_GLIBC_PATH=${glibc.out}/lib NIX_LIBGCC_S_PATH=${stdenv.cc.cc.lib}/lib cargo test --release --workspace --exclude test_mono --exclude uitest -- --skip=glue_cli_tests --skip=test_snapshots
90 runHook postCheck
91 ''
92 + lib.optionalString (!stdenv.isLinux) ''
93 runHook preCheck
94 cargo test --release --workspace --exclude test_mono --exclude uitest -- --skip=glue_cli_tests --skip=test_snapshots
95 runHook postCheck
96 '';
97
98 meta = {
99 description = "Fast, friendly, functional programming language";
100 mainProgram = "roc";
101 homepage = "https://www.roc-lang.org/";
102 changelog = "https://github.com/roc-lang/roc/releases/tag/${rocVersion}";
103 license = lib.licenses.upl;
104 maintainers = [
105 lib.maintainers.anton-4
106 lib.maintainers.bhansconnect
107 lib.maintainers.rtfeldman
108 ];
109 platforms = [ "x86_64-linux" ];
110 };
111}