{ fetchFromGitHub, lib, libiconv, llvmPackages, MacOSX-SDK, makeBinaryWrapper, nix-update-script, Security, which, }: let inherit (llvmPackages) stdenv; in stdenv.mkDerivation { pname = "odin"; version = "0-unstable-2024-08-05"; src = fetchFromGitHub { owner = "odin-lang"; repo = "Odin"; rev = "a1c3c38f0453dcf94ba13d572fa392cb5331a878"; hash = "sha256-LYUy/llW3BFnRx6sdTF/8QdvK/v+5/ShKJR+ZXocC+4="; }; postPatch = lib.optionalString stdenv.hostPlatform.isDarwin '' substituteInPlace src/linker.cpp \ --replace-fail '/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk' ${MacOSX-SDK} '' + '' substituteInPlace build_odin.sh \ --replace-fail '-framework System' '-lSystem' patchShebangs build_odin.sh ''; LLVM_CONFIG = "${llvmPackages.llvm.dev}/bin/llvm-config"; dontConfigure = true; buildFlags = [ "release" ]; nativeBuildInputs = [ makeBinaryWrapper which ]; buildInputs = lib.optionals stdenv.hostPlatform.isDarwin [ libiconv Security ]; installPhase = '' runHook preInstall mkdir -p $out/bin cp odin $out/bin/odin mkdir -p $out/share cp -r {base,core,vendor,shared} $out/share wrapProgram $out/bin/odin \ --prefix PATH : ${ lib.makeBinPath ( with llvmPackages; [ bintools llvm clang lld ] ) } \ --set-default ODIN_ROOT $out/share runHook postInstall ''; passthru.updateScript = nix-update-script { }; meta = { description = "Fast, concise, readable, pragmatic and open sourced programming language"; downloadPage = "https://github.com/odin-lang/Odin"; homepage = "https://odin-lang.org/"; license = lib.licenses.bsd3; mainProgram = "odin"; maintainers = with lib.maintainers; [ astavie luc65r znaniye ]; platforms = lib.platforms.unix; broken = stdenv.hostPlatform.isMusl; }; }