Files
nixpkgs/pkgs/development/compilers/smlnj/default.nix
2026-08-11 16:33:39 -05:00

97 lines
2.3 KiB
Nix

{
lib,
stdenv,
callPackage,
fetchFromGitHub,
fetchurl,
automake,
autoconf,
versionCheckHook,
}:
let
version = "2026.1";
src = fetchFromGitHub {
owner = "smlnj";
repo = "smlnj";
tag = "v${version}";
fetchSubmodules = true;
hash = "sha256-n5oWhignhFl8B/cXSO3g/KQXInZqT1A0Mp8GzLeGqNc=";
};
llvm = callPackage ./llvm.nix { inherit src version; };
bootFile =
if stdenv.hostPlatform.isUnix && stdenv.hostPlatform.isx86_64 then
fetchurl {
url = "https://smlnj.cs.uchicago.edu/dist/working/${version}/boot.amd64-unix.tgz";
hash = "sha256-caFguKkhFOjgJDtcOcF6YAbzFl2nQYXbtWCjvaBjL6o=";
}
else if stdenv.hostPlatform.isUnix && stdenv.hostPlatform.isAarch64 then
fetchurl {
url = "https://smlnj.cs.uchicago.edu/dist/working/${version}/boot.arm64-unix.tgz";
hash = "sha256-qygH0n163jiwm4CsltPeCCpHqnBxCHKP5O20GZyq1/0=";
}
else
throw "Unsupported host platform: ${stdenv.hostPlatform.config}";
in
stdenv.mkDerivation {
pname = "smlnj";
inherit src version;
nativeBuildInputs = [
autoconf
automake
];
__structuredAttrs = true;
strictDeps = true;
patchPhase = ''
runHook prePatch
unpackFile ${bootFile}
mkdir -pv runtime/bin runtime/lib
ln -s ${llvm}/bin/llvm-config runtime/bin/llvm-config
ln -s ${llvm}/lib/libCFGCodeGen.a runtime/lib/libCFGCodeGen.a
runHook postPatch
'';
buildPhase = ''
runHook preBuild
export INSTALLDIR=$out
mkdir -pv $out
./build.sh
runHook postBuild
'';
nativeInstallCheckInputs = [ versionCheckHook ];
versionCheckProgramArg = "@SMLversion";
doInstallCheck = true;
passthru.llvm = llvm;
meta = {
description = "Standard ML of New Jersey, a Standard ML compiler";
homepage = "https://smlnj.org";
downloadPage = "https://smlnj.org/dist/working/${version}/install.html";
changelog = "https://smlnj.org/dist/working/${version}/README.html";
license = lib.licenses.bsd3;
sourceProvenance = with lib.sourceTypes; [
fromSource
binaryNativeCode
];
maintainers = [ lib.maintainers.skyesoss ];
mainProgram = "sml";
platforms = [
"x86_64-linux"
"aarch64-linux"
"aarch64-darwin"
];
broken = !(stdenv.buildPlatform.canExecute stdenv.hostPlatform);
};
}