This is the main development repository for SML/NJ and is under active development, it is not considered stable. As such, we recommend the legacy version of the system for production use cases.
This version works on AMD64 (a.k.a. x86-64) and Arm64 (a.k.a. AArch64) hardware running Linux or macOS.
To build the system from sources, you must have the following software installed on your machine.1
-
C++17 -- You need a C++ compiler, such as clang or gcc, that can handle C++17.
-
CMake -- You need Version 3.23 or later of CMake.
-
Autoconf -- Parts of the documentation and the ASDL tool require the GNU autoconf tool (version 2.71 or later).
If you use Homebrew, run the following command to get started
brew install smlnjDependencies are automatically installed when using this method.
Note The process for building the system from source code has changed from the legacy system.
If you want to build and install smlnj from source yourself, follow
these steps:
-
Set
VERSIONto the version of SML/NJ that you want to build; for exampleVERSION=2025.3
-
Clone the repository
git clone --depth 1 --branch v$VERSION --recurse-submodules https://github.com/smlnj/smlnj.gitThe
--depthoption limits the download to just one commit (i.e., no history), the--branchoption specifies the version of the source code that you are requesting, and the--recurse-submodulesoption is necessary to fetch the customized version of the LLVM library that we use. -
build the installation
cd smlnj ./build.shUse
build.sh -hto see the list of options accepted by the build script.As of version 2025.1, the
build.shscript will download the pre-compiled boot files if they are not present.As before, you can modify the
config/targetsfile to add/remove components from the build.
After successful running of the build.sh script, bin/sml will
be the interactive system.
The process of recompiling the system from source code is similar to before.
-
Switch to the
systemdirectory and run thecmb-makecommand:cd system ./cmb-make ../bin/smlThe "
../bin/sml" argument is optional. If omitted, thesmlcommand in the user'sPATHtakes precedence. When appropriate, you can also specify a different path to ansmlcommand. -
Bootstrap the system
./makeml
-
Install the system
./installml -clean -boot
The
-bootoption is optional. If given, the existing boot files in the root directory (e.g.,boot.amd64-unix.tgz) will be replaced by the files generated by thecmb-makecommand (e.g.,system/sml.boot.arm64-unix) -
Rebuild the libraries and tools
cd .. ./build.sh
Footnotes
-
We provide installer packages for macOS that avoid these dependencies. ↩