Skip to content

Release 1.0.0

Compare
Choose a tag to compare
@elliottslaughter elliottslaughter released this 08 Jun 18:43
· 70 commits to master since this release

This release recognizes what has already been true for quite some time: Terra is mature and has been tested in a variety of production environments. As a result, the version numbers are changing with this release to follow our stability policy, starting with version number 1.0.0. Terra is expected to remain at 1.x for the forseeable future.

The following changes are included in this release:

Added features

  • Support for LLVM 3.8, 3.9, 5, 6, 7, 8, 9, 10, 11, 12, 13 and 14
  • Support for CUDA 9, 10 and 11
  • Support for Visual Studio 2015, 2017, 2019 and 2022 on Windows
  • Support for FreeBSD
  • New CMake-based build system replaces Make/NMake on all platforms
  • Upgrade to LuaJIT 2.1 (from Git) by default
  • Added optional support for Moonjit, a LuaJIT fork that works on PPC64le
  • Added terralib.linkllvmstring to link bitcode modules directly from memory
  • Allow types defined via ffi.cdef to be used as Terra types as well
  • Support for "module" definitions in ASDL, which allow ASTs to be namespaced
  • Added command line flag -e to evaluate a Terra expression
  • Added terralib.version which contains the version string, or unknown if this can't be detected
  • Added optimize flag to terralib.saveobj to specify an optimization profile. Currently optimization profiles can be used to disable optimizations, or to enable fast-math flags
  • Added support for all fast-math optimizations supported by LLVM
  • Added support for :setcallingconv() on Terra functions to set the calling convention (with any supported LLVM calling convention)

Experimental features added

  • Added terralib.atomicrmw to support atomic read-modify-write operations
  • Added terralib.fence to support fence operations
  • Added switch statement
  • Added support for AMD GPU code generation (with LLVM 13 and up)
  • Added support for Nix derivation, and merged upstream into NixOS

Deprecated features

  • Deprecated support for Make (Linux, macOS, FreeBSD) build system
  • Deprecated support for LLVM 3.8, 3.9 and 5

Removed features

  • Removed support for all LLVM versions 3.7 and prior
  • Removed support for NMake (Windows) build system

Changed behaviors

  • Errors are printed to stderr instead of stdout

Infrastructure improvements

  • Automated tests with GitHub Actions (Linux, macOS, Windows), Cirrus (FreeBSD) and AppVeyor (Windows)
  • Automated tests for various Linux distros (currently Ubuntu 18.04, 20.04, 22.04) via Docker
  • Automated Linux "compability" tests (cross-distro-version tests for binary compatibility)
  • Automated release build infrastructure

Bug fixes

  • Fixes for nontemporal loads and stores
  • Fixes for link errors due to multiple definitions of internal functions in different modules
  • Fixes for Windows default include path handling
  • Fix errors in parsing constants from macros
  • Fix bugs in constant checking
  • Fix auto-detection of AVX support
  • Fixes for building on FreeBSD
  • Fix auto-detection of library type when file name ends in [^.]bc
  • Fixes for PPC64le
  • Fixes for AMD GPU
  • Fixes for performance regressions in NVIDIA CUDA code generation in LLVM 13 (as compared to LLVM 3.8, the last release that supported NVVM)

Binaries

Binaries for this release were produced in the following configurations:

  • Linux: x86_64 on Ubuntu 18.04 with LLVM 13 and CUDA 11.6 (verified to work on Ubuntu 20.04 and 22.04)
  • macOS: x86_64 on macOS 10.15 with LLVM 13 (verified to work on macOS 12.4)
  • Windows: x86_64 on Server 2022 with LLVM 11 and CUDA 11.6

Note that, while we do our best to make the binaries compatible across OS versions/distros, in general we cannot guarantee compatibility outside of the specified OS release (except where otherwise noted).