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

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:

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:

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
23.7.3 (current)
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:

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 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
23.10.1 (current)
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.

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
23.10.1 (current)
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:

⋮ Grid6_file_flag = .true. Grid6_file_dir = 'png' Grid6_file_prefix = 'grid6_' ⋮

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:

images_to_movie 'png/grid6_*.png' movie.mp4

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:

Also, it would be helpful if you could post the output of the following commands:

Frequently Asked Questions (FAQ)

Q: When trying to download the SDK using wget, I get the error

403: Forbidden

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

wget --user-agent="" http://www.astro.wisc.edu/~townsend/resource/download/mesasdk/mesasdk-x86_64-linux-YYYYMMDD.tar.gz

(See the question above for a discussion of why the --user-agent="" flag is necessary.)

Q: The initialization script produces errors of the sort

mesasdk_init.sh: checking architecture touch: cannot touch '/opt/mesasdk/etc/check_arch.done': Permission denied

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

file locking disabled on this file system (use HDF5_USE_FILE_LOCKING environment variable to override)

A: To fix this, set the HDF5_USE_FILE_LOCKING environment variable to FALSE. This can be done via the command

export HDF5_USE_FILE_LOCKING=FALSE

Q: When compiling MESA on MacOS, I'm encountering the error

CC ../private/utils_c_system.c In file included from /Applications/mesasdk/bin/../sysroot/usr/include/sys/wait.h:110, from /Applications/mesasdk/bin/../sysroot/usr/include/stdlib.h:66, from ../private/utils_c_system.c:26: /Applications/mesasdk/bin/../sysroot/usr/include/sys/resource.h: In function 'getiopolicy_np': /Applications/mesasdk/bin/../sysroot/usr/include/sys/resource.h:447:34: error: expected declaration specifiers before '__OSX_AVAILABLE_STARTING' 447 | int getiopolicy_np(int, int) __OSX_AVAILABLE_STARTING(__MAC_10_5, __IPHONE_2_0);

A: To fix this, uninstall and then re-install the Xcode command line tools via the commands

sudo rm -rf /Library/Developer/CommandLineTools xcode-select --install

Then, re-install the SDK.

Q: When compiling MESA on MacOS, I'm encountering the error

Entering adipls with parameter passing ... TEST FAILED -- compare obs.txt to obs.test.txt

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.


Updated 2024-01-08 09:10:38