Release 1.0.0
elliottslaughter
released this
08 Jun 18:43
·
89 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, orunknown
if this can't be detected - Added
optimize
flag toterralib.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).