MESA SDK
The MESA SDK is a collection of compilers and run-time libraries that make it easy to install and use the MESA stellar evolution code, and a number of other open-source software projects (e.g., GYRE, MSG).
- Overview
- Linux (Intel/AMD)
- Mac OS (Intel)
- Mac OS (ARM)
- Math Slots
- Making Movies
- Installing as Root User
- Troubleshooting
- Frequently Asked Questions (FAQ)
Overview
Experience has demonstrated that incompatibilities and bugs in compilers and libraries are significant obstacles in getting MESA up and running with minimal fuss. For instance, MESA makes use of various features in the new(ish) Fortran 2003 standard, which aren't implemented (or are still buggy) in all but the most recent compiler releases.
To help overcome these obstacles, I've put together a unified software development kit (SDK) which contains compilers and libraries known to compile MESA correctly. The SDK contains the following components:
- The GNU Comipler Collection (gcc), with support for C, C++, and Fortran
- The GNU Project Debugger (gdb)
- The Valgrind code instrumentation framework
- The Basic Linear Algebra Subprogram (BLAS) library
- The Linear Algebra PACKage (LAPACK) library
- The Hierarchical Data Format v5 (HDF5) library
- The PGPLOT graphics library
- The SE library from the NuGrid project
- The ffmpeg movie encoder
- The ndiff fuzzy comparison tool
- Various helper scripts for use in linking against these libraries and other tasks
Currently, Linux running on Intel or AMD processors, and Mac OS running on Intel or ARM (Apple Silicon) processors, are supported. Although the SDK was initially bundled as part of the standard MESA distribution (from release 3708 onwards), it makes more sense to keep it separate. This page hosts all the necessary information and links to download, install and use the SDK.
Linux (Intel/AMD)
Compatibility
The SDK should work on any relatively-recent Linux distribution running on 64-bit Intel/AMD-compatible processors (32-bit processors are no longer supported; in any case, MESA itself doesn't work on 32-bit). The GNU C library (also known as GLIBC) included in the distribution must be version 2.5 or more recent; to determine what GLIBC your system uses, run the command /lib/libc.so.6 (or, possibly, /lib64/libc.so.6) and examine the first line of the output for the version number.
Prerequisites
The following components must be installed for the SDK to work on Linux-based systems:
- The 'Binutils' development tools (for SDKs prior to 23.7.2)
- The 'Make' dependency/compilation tool
- The 'Perl' scripting language
- The 'X11' windowing library plus development headers
- The 'Z' compression library plus development headers
- The 'C' shell or derivatives
Not all of these components are installed by default on some Linux distributions, and you may have to use the appropriate package management tool (e.g., apt-get, yum, rpm, emerge) to install them. The following table lists the package names of the components (and any other pieces that are required) for some of the more-common distributions:
Package | Fedora / CentOS / RedHat | Debian / Ubuntu | Mint | Gentoo | Arch |
---|---|---|---|---|---|
Binutils | binutils | binutils | binutils | sys-devel/binutils | binutils |
Make | make | make | make | sys-devel/make | make |
Perl | perl | perl | perl | dev-lang/perl | perl |
X11 library | libX11, libX11-devel | libx11-6, libx11-dev | libx11-dev | x11-libs/libX11 | libx11 |
Z library | zlib, zlib-devel | zlib1g, zlib1g-dev | zlib-dev | sys-libs/zlib | zlib |
C shell | tcsh | tcsh | tcsh | sys-shells/tcsh | tcsh |
Other | libc6-dev | glibc |
If your distribution is not listed here, please contact me and I'll add it to the table.
Download
To download the SDK for Linux, click on the appropriate link in the table:
Version Release Date |
File | Notes | MESA Version at Release |
---|---|---|---|
24.7.1 (current) August 15 2024 |
mesasdk-x86_64-linux-24.7.1.tar.gz | Updraded compiler to gcc 13.3.0 | 24.06.1 |
23.7.3 July 24 2023 |
mesasdk-x86_64-linux-23.7.3.tar.gz | Significantly reduced package size (using strip command) | 23.05.1 |
23.7.2 July 18 2023 |
mesasdk-x86_64-linux-23.7.2.tar.gz | Upgraded compiler to gcc 13.1.0; added binutils 2.40 | 23.05.1 |
22.6.1 June 3 2022 |
mesasdk-x86_64-linux-22.6.1.tar.gz | Upgraded compiler to gcc 12.1.0 | 22.05.1 |
21.4.1 April 7 2021 |
mesasdk-x86_64-linux-21.4.1.tar.gz | Added fypp preprocessor; enabled float128 support in mpfr | 15140 |
20.12.1 December 18 2020 |
mesasdk-x86_64-linux-20.12.1.tar.gz | Updated gcc to 10.2 | 15140 |
20.3.2 March 25 2020 |
mesasdk-x86_64-linux-20.3.2.tar.gz | Added ODEPACK library | 12778 |
20.3.1 March 1 2020 |
mesasdk-x86_64-linux-20.3.1.tar.gz | Added math slots functionality | 12778 |
Note that versions of the SDK older than the current one are not formally supported but are provided here as a courtesy; if you run into problems using an older version, you should first try upgrading to the current version.
Installation
On Linux the SDK can be installed anywhere (this is different from previous releases, where it had to be put in the /opt directory). However, for simplicity the following instructions will assume you're installing in your home directory. The steps are as follows:
- Download the package from the table above
- Extract it using the command tar xvfz package_name -C ~/ (note that's a tilde in front of the slash!)
- Set the path to the SDK:
- For the C shell: setenv MESASDK_ROOT ~/mesasdk
- For the Bourne shell: export MESASDK_ROOT=~/mesasdk
- Initialize the SDK (also checks compatibility):
- For the C shell: source $MESASDK_ROOT/bin/mesasdk_init.csh
- For the Bourne shell: source $MESASDK_ROOT/bin/mesasdk_init.sh
- Check that the SDK is properly installed by running gfortran --version. The first line of the output should look something like this:
GNU Fortran (GCC) 9.2.0
If it doesn't, then you should consult the Troubleshooting section below.
Steps 3 and 4 need to be repeated each time you begin a new shell session; alternatively, they can be added to the appropriate shell start-up file (~/.cshrc for the C shell, and ~/.profile for the Bourne shell).
Usage
Nothing special needs to be done in order to use the SDK to build MESA. Simply change into the top-level mesa directory (the one created when you download and unpack MESA) and then run ./install.
Mac OS (Intel)
Compatibility
The SDK should work on any relatively-recent OS X distribution (10.10, Yosemite or later) running on Apple computers with 64-bit Intel-compatible processors (32-bit processors are no longer supported; in any case, MESA itself doesn't work on 32-bit).
It should also work on Apple computers with new ARM (Apple Silicon) processors, using the Rosetta 2 translation layer. See below for a native ARM SDK.
Prerequisites
The following components must already be installed before the SDK can be installed on Mac OS systems:
- The Xcode developer tools
- The Xcode command-line tools
- The XQuartz X-windows infrastructure
The Xcode command-line tools can be installed by running xcode-select --install from a Terminal prompt. Likewise, XQuartz can downloaded and installed from here. Note that it is often necessary to reinstall the command-line tools (by running the installation command again) and/or XQuartz after upgrading to a new release of OS X.
Download
To download the SDK for Mac OS (Intel), click on the appropriate link in the table:
Version Release Date |
File | Notes | MESA Version at Release |
---|---|---|---|
24.10.1 (current) October 1 2024 |
mesasdk-x86_64-macos-24.10.1.pkg | Added support for MacOS 15 (Sequoia) | 24.08.1 |
24.7.1 August 15 2024 |
mesasdk-x86_64-macos-24.7.1.pkg | Upgrade compiler to gcc 13.3.0 | 24.06.1 |
23.10.1 October 6 2023 |
mesasdk-x86_64-macos-23.10.1.pkg | Added support for MacOS 14 (Sonoma) | 23.05.1 |
23.8.1 August 4 2023 |
mesasdk-x86_64-macos-gcc9-23.8.1.pkg | Special SDK release based on gcc 9.5; intended for compiling older releases of MESA (e.g., 11701 and 12778) on newer versions of Mac OS | n/a |
23.7.2 July 18 2023 |
mesasdk-x86_64-macos-23.7.2.pkg | Upgraded compiler to gcc 13.1.0 | 23.05.1 |
22.10.1 October 26 2022 |
mesasdk-x86_64-macos-22.10.1.pkg | Updated gcc to 12.2, fixed to work with MacOS 13 (Ventura) | 22.05.1 |
22.6.1 June 6 2022 |
mesasdk-x86_64-macos-22.6.2.pkg | Added in gdb, which had gone AWOL in 22.6.1 | 22.05.1 |
22.6.1 June 3 2022 |
mesasdk-x86_64-macos-22.6.1.pkg | Upgraded compiler to gcc 12.1.0 | 22.05.1 |
21.11.1 November 18 2021 |
mesasdk-x86_64-macos-21.11.1.pkg | Added support for MacOS 12 (Monterey) | 15140 |
21.9.1 September 10 2021 |
mesasdk-x86_64-macos-gcc9-21.9.1.pkg | Special SDK release based on gcc 9.3; intended for compiling older releases of MESA (e.g., 11701 and 12778) on newer versions of Mac OS | n/a |
21.4.1 April 7 2021 |
mesasdk-x86_64-macos-21.4.1.pkg | Added fypp preprocessor; enabled float128 support in mpfr | 15140 |
21.2.1 February 4 2021 |
mesasdk-x86_64-macos-21.2.1.pkg | Added support for MacOS 11.2 (Big Sur) | 15140 |
20.12.2 December 18 2020 |
mesasdk-x86_64-macos-20.12.2.pkg | Updated to gcc 10.2 | 15140 |
20.12.1 December 16 2020 |
mesasdk-x86_64-macos-20.12.1.pkg | Added support for MacOS 11.1 (Big Sur) | 15140 |
20.11.1 November 19 2020 |
mesasdk-x86_64-macos-20.11.1.pkg | Added support for MacOS 11.0 (Big Sur) | 12778 |
20.9.1 September 28 2020 |
mesasdk-x86_64-macos-20.9.1.pkg | Fixed 'library not found for -lSystem' issue, arising on fresh Xcode 12 deployments | 12778 |
20.4.1 April 7 2020 |
mesasdk-x86_64-macos-20.4.1.pkg | Added md5sum and other checksum utilities from coreutils | 12778 |
Note that versions of the SDK older than the current one are not formally supported but are provided here as a courtesy; if you run into problems using an older version, you should first try upgrading to the current version.
Installation
On Mac OS the SDK is installed into the Applications folder; you will likely need Administrator privileges to do this.
- Download the installer from the table above
- Open it by double clicking on it in the Finder
- Follow the on-screen prompts until the installation completes
- Set the path to the SDK:
- For the C shell: setenv MESASDK_ROOT /Applications/mesasdk
- For the Bourne shell: export MESASDK_ROOT=/Applications/mesasdk
- Initialize the SDK (also checks compatibility):
- For the C shell: source $MESASDK_ROOT/bin/mesasdk_init.csh
- For the Bourne shell: source $MESASDK_ROOT/bin/mesasdk_init.sh
- Check that the SDK is properly installed by running gfortran --version. The first line of the output should look something like this:
GNU Fortran (GCC) 10.2.0
If it doesn't, then you should consult the Troubleshooting section below.
Steps 4 and 5 need to be repeated each time you begin a new shell session; alternatively, they can be added to the appropriate shell start-up file (~/.cshrc for the C shell, and ~/.bash_profile for the Bourne shell).
Usage
See the usage instructions above for Linux (they are the same for Mac OS).
Mac OS (ARM)
Compatibility
The SDK should work on Apple computers with ARM (Apple Silicon) processors, and will produce native (rather than translated) code.
Prerequisites
See the prerequisites above for Mac OS (Intel).
Download
To download the SDK for Mac OS (ARM), click on the appropriate link in the table:
Version Release Date |
File | Notes | MESA Version at Release |
---|---|---|---|
24.10.1 (current) October 1 2024 |
mesasdk-aarch64-macos-24.10.1.pkg | Added support for MacOS 15 (Sequoia) | 24.08.1 |
24.7.1 August 15 2024 |
mesasdk-aarch64-macos-24.7.1.pkg | Upgrade compiler to gcc 13.3.0 | 24.06.1 |
23.10.1 October 4 2023 |
mesasdk-aarch64-macos-23.10.1.pkg | Added support for MacOS 14 (Sonoma) | 23.05.1 |
23.7.2 July 18 2023 |
mesasdk-aarch64-macos-23.7.2.pkg | Upgraded compiler to gcc 13.1.0 | 23.05.1 |
22.10.1 October 26 2022 |
mesasdk-aarch64-macos-22.10.1.pkg | Updated gcc to 12.2, fixed to work with MacOS 13 (Ventura) | 22.05.1 |
22.8.1 August 24 2022 |
mesasdk-aarch64-macos-22.8.1.pkg | Added fypp preprocessor | 22.05.1 |
22.6.1 June 3 2022 |
mesasdk-aarch64-macos-22.6.1.pkg | Initial release | 22.05.1 |
Installation
See the installation instructions above for Mac OS (Intel).
Usage
See the usage instructions above for Linux (they are the same for Mac OS).
Math Slots
It's often convenient to have different versions of the same math libraries available through a single SDK installation — for instance, one optimized for speed, one for accuracy, and so on. To this end, recent releases (>= 20.3.1) of the SDK support a feature known as 'math slots'. By setting the MESASDK_MATH_SLOT environment variable, you can chose which set of math liberaries ('slot') gets used at compile time. Possible choices are as follows:
MESASDK_MATH_SLOT choice | Description |
---|---|
default | Default (no special optimizations or modifications) |
crmath | Correctly-rounded math, via the crlibm library |
If MESASDK_MATH_SLOT is not set, then the default slot is used. Note that when compiling MESA it isn't necessary to set MESASDK_MATH_SLOT yourself; the build scripts take care of it.
Making Movies
The SDK includes the ffmpeg encoder and a simple script, images_to_movie, which uses ffmpeg to create movies from PNG files produced by MESA.
To illustrate the script in action, suppose the &pgstar section of the MESA inlist file contains the following parameters:
This will make MESA write a sequence of PNG images into the png subdirectory, with filenames grid6_NNNNN.png (where N represents a single digit). To combine these files together into a movie, run the following command from the same directory MESA was run in:
This will produce an MPEG4 movie, with the filename movie.mp4. The type of movie produced is determined from the file extension. Other choices are possible (e.g., mpg for MPEG2), but the images_to_movie.sh script is specifically targeted at producing MPEG4 output, so it might be best to stick with the mp4 extension unless you know what you're doing.
IMPORTANT NOTE: In the example above, the quotes (' ') are necessary to prevent the shell from prematurely expanding the wildcard (*) character.Installing as Root User
If you wish to install the SDK as the root user, that's fine — but you must run the initialization script at least once as root, before you can use the SDK as an ordinary user. This is because configuration files are written into the $MESASDK_ROOT/etc directory on first initialization; and these files must be written as root if you installed as root.
Troubleshooting
If you encounter an error during the build process, please consult the FAQ first. If your problem is not resolved, then you should submit a bug report to the MESA Forum. Be sure to include the following information in your bug report:
- The version of MESA you are trying to build
- The version of the SDK you are using (use the mesasdk_version.sh command to determine this)
- Your platform (machine type, operating system, version)
Also, it would be helpful if you could post the output of the following commands:
- uname -a
- gfortran -v
- echo $MESASDK_ROOT
- echo $PATH
Frequently Asked Questions (FAQ)
Q: When trying to download the SDK using wget, I get the error
A: Our web server is set up to reject requests from wget. As a workaround, add the flag --user-agent="" to your wget invocation.
Q: How can I download the SDK from the command line?
A: Use the wget tool. For instance, to download the Linux version dated YYYYMMDD, run
(See the question above for a discussion of why the --user-agent="" flag is necessary.)
Q: The initialization script produces errors of the sort
A: This is occurring because you installed the SDK as a different user (e.g., root). You must run the initialization script at least once as the installation user, before running as any other user.
Q: When compiling, I'm encountering the error
A: To fix this, set the HDF5_USE_FILE_LOCKING environment variable to FALSE. This can be done via the command
Q: When compiling MESA on MacOS, I'm encountering the error
A: To fix this, uninstall and then re-install the Xcode command line tools via the commands
Then, re-install the SDK.
Q: When compiling MESA on MacOS, I'm encountering the error
A: You need to apply the Xcode 15 patch listed on the patches page.
Q: How can I build an old version of MESA using a new SDK release?
A: You may need to apply a compatibility patch.