diff --git a/pkgs/by-name/ro/roc/package.nix b/pkgs/by-name/ro/roc/package.nix new file mode 100755 index 000000000000..f65a958d3032 --- /dev/null +++ b/pkgs/by-name/ro/roc/package.nix @@ -0,0 +1,113 @@ +{ + lib, + stdenv, + fetchFromGitHub, + libffi, + libxml2, + makeBinaryWrapper, + cmake, + glibc, + rustPlatform, + zig_0_13, + llvmPackages_18, + writableTmpDirAsHomeHook, + valgrind, + autoPatchelfHook, +}: + +let + llvmPackages = llvmPackages_18; + rocVersion = "alpha3"; +in + +rustPlatform.buildRustPackage rec { + pname = "roc"; + version = "0-${rocVersion}"; + + src = fetchFromGitHub { + owner = "roc-lang"; + repo = "roc"; + rev = "9a0238e0f34c09e27e3ca89e8fc5a684a21bf456"; + hash = "sha256-iM16DlTf+1yXBZVH7QqzhKuSkn1n/ZDosnZj3t+io0E="; + }; + + nativeBuildInputs = + [ + cmake + zig_0_13 + ] + ++ lib.optionals stdenv.isLinux [ + autoPatchelfHook + ]; + + buildInputs = + [ + libffi + libxml2 + llvmPackages.clang + llvmPackages.llvm.dev + makeBinaryWrapper + ] + ++ lib.optionals stdenv.isLinux [ + glibc + stdenv.cc.cc.lib + ]; + + useFetchCargoVendor = true; + cargoHash = "sha256-9cOJ79GrnrMEIhFikvCfXa2SI4O0fy50cr4Fb6p4Vho="; + + # prevents zig AccessDenied error github.com/ziglang/zig/issues/6810 + XDG_CACHE_HOME = "xdg_cache"; + + preBuild = + let + llvmVersion = builtins.splitVersion llvmPackages.release_version; + llvmMajorMinorStr = builtins.elemAt llvmVersion 0 + "0"; + in + '' + export LLVM_SYS_${llvmMajorMinorStr}_PREFIX=${llvmPackages.llvm.dev} + ''; + + postInstall = + lib.optionalString stdenv.isLinux '' + wrapProgram $out/bin/roc \ + --set NIX_GLIBC_PATH ${glibc.out}/lib \ + --set NIX_LIBGCC_S_PATH ${stdenv.cc.cc.lib}/lib \ + --prefix PATH : ${lib.makeBinPath [ stdenv.cc ]} + '' + + lib.optionalString (!stdenv.isLinux) '' + wrapProgram $out/bin/roc --prefix PATH : ${lib.makeBinPath [ stdenv.cc ]} + ''; + + nativeCheckInputs = [ + writableTmpDirAsHomeHook + llvmPackages.clang + valgrind + ]; + + checkPhase = + lib.optionalString stdenv.isLinux '' + runHook preCheck + 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 + runHook postCheck + '' + + lib.optionalString (!stdenv.isLinux) '' + runHook preCheck + cargo test --release --workspace --exclude test_mono --exclude uitest -- --skip glue_cli_tests + runHook postCheck + ''; + + meta = { + description = "Fast, friendly, functional programming language"; + mainProgram = "roc"; + homepage = "https://www.roc-lang.org/"; + changelog = "https://github.com/roc-lang/roc/releases/tag/${rocVersion}"; + license = lib.licenses.upl; + maintainers = [ + lib.maintainers.anton-4 + lib.maintainers.bhansconnect + lib.maintainers.rtfeldman + ]; + platforms = [ "x86_64-linux" ]; + }; +}