Skip to content

Commit

Permalink
Support for LLVM 10 and 11 (#434)
Browse files Browse the repository at this point in the history
As of this merge there are the following known issues with the LLVM 10 and 11 support:

  * #476 cannot include immintrin.h
  * #477 test failures in LLVM 11 when dynamically linked
  * #479 tests fail on macOS with LLVM >= 10
  • Loading branch information
elliottslaughter committed Jan 23, 2021
1 parent 0e6738c commit 968c816
Show file tree
Hide file tree
Showing 20 changed files with 350 additions and 65 deletions.
41 changes: 34 additions & 7 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,19 +11,19 @@ jobs:
env:
CHECK_CLANG_FORMAT: 1
build:
name: Build
name: Build (os=${{ matrix.os }}, llvm=${{ matrix.llvm }}, cmake=${{ matrix.cmake }}, cuda=${{ matrix.cuda }}, static=${{ matrix.static }}, slib=${{ matrix.slib }}, lua=${{ matrix.lua }})
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: ['ubuntu-16.04', 'macos-10.15']
llvm: ['3.5', '3.8', '5.0', '6.0', '7', '8', '9']
llvm: ['3.5', '3.8', '5.0', '6.0', '7', '8', '9', '10', '11']
cmake: ['0', '1']
cuda: ['0', '1']
static: ['0', '1']
slib: ['0', '1']
lua: ['luajit', 'moonjit']
exclude:
# macOS: exclude LLVM 5.0, 8 make, 9 make, cuda/no-static/no-slib
# macOS: exclude LLVM 5.0, 8-11 make, cuda/no-static/no-slib
- os: 'macos-10.15'
llvm: '5.0'
- os: 'macos-10.15'
Expand All @@ -32,12 +32,23 @@ jobs:
- os: 'macos-10.15'
llvm: '9'
cmake: '0'
- os: 'macos-10.15'
llvm: '10'
cmake: '0'
- os: 'macos-10.15'
llvm: '11'
cmake: '0'
- os: 'macos-10.15'
cuda: '1'
- os: 'macos-10.15'
static: '0'
- os: 'macos-10.15'
slib: '0'
# FIXME: https://github.com/terralang/terra/issues/479
- os: 'macos-10.15'
llvm: '10'
- os: 'macos-10.15'
llvm: '11'

# CMake
- llvm: '3.5'
Expand All @@ -63,7 +74,7 @@ jobs:
- cmake: '0'
lua: 'moonjit'

# CUDA: only most recent LLVM
# CUDA: only LLVM 9
- llvm: '3.5'
cuda: '1'
- llvm: '3.8'
Expand All @@ -76,8 +87,12 @@ jobs:
cuda: '1'
- llvm: '8'
cuda: '1'
- llvm: '10'
cuda: '1'
- llvm: '11'
cuda: '1'

# no-static: only most recent LLVM
# no-static: only LLVM 9
- llvm: '3.5'
static: '0'
- llvm: '3.8'
Expand All @@ -90,8 +105,12 @@ jobs:
static: '0'
- llvm: '8'
static: '0'
- llvm: '10'
static: '0'
- llvm: '11'
static: '0'

# no-slib: only most recent LLVM
# no-slib: only LLVM 9
- llvm: '3.5'
slib: '0'
- llvm: '3.8'
Expand All @@ -104,8 +123,12 @@ jobs:
slib: '0'
- llvm: '8'
slib: '0'
- llvm: '10'
slib: '0'
- llvm: '11'
slib: '0'

# Moonjit: only most recent LLVM
# Moonjit: only LLVM 9
- llvm: '3.5'
lua: 'moonjit'
- llvm: '3.8'
Expand All @@ -118,6 +141,10 @@ jobs:
lua: 'moonjit'
- llvm: '8'
lua: 'moonjit'
- llvm: '10'
lua: 'moonjit'
- llvm: '11'
lua: 'moonjit'
steps:
- uses: actions/checkout@v1
- run: ./travis.sh
Expand Down
6 changes: 5 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,11 @@ include(BuildDirs)
include(GetLuaJIT)
include(ExtractLLVM)

set(CMAKE_CXX_STANDARD 11)
if(LLVM_VERSION_MAJOR GREATER 9)
set(CMAKE_CXX_STANDARD 14)
else()
set(CMAKE_CXX_STANDARD 11)
endif()
set(CMAKE_CXX_STANDARD_REQUIRED ON)

enable_testing()
Expand Down
9 changes: 7 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,13 @@ LLVM_VERSION=$(shell echo $(LLVM_VERSION_NUM) | $(SED_E) 's/^([0-9]+)\.([0-9]+).
LLVMVERGT4 := $(shell expr $(LLVM_VERSION) \>= 40)

FLAGS += -DLLVM_VERSION=$(LLVM_VERSION)
CPPFLAGS += -std=c++11

LLVM_NEEDS_CXX14="100 110 111"
ifneq (,$(findstring $(LLVM_VERSION),$(LLVM_NEEDS_CXX14)))
CPPFLAGS += -std=c++1y # GCC 5 does not support -std=c++14 flag
else
CPPFLAGS += -std=c++11
endif

ifneq ($(findstring $(UNAME), Linux FreeBSD),)
DYNFLAGS = -shared -fPIC
Expand All @@ -103,7 +108,7 @@ LLVM_LIBRARY_FLAGS += -lclangFrontend -lclangDriver \
-lclangAnalysis \
-lclangEdit -lclangAST -lclangLex -lclangBasic

CLANG_AST_MATCHERS = "80 90"
CLANG_AST_MATCHERS = "80 90 100 110 111"
ifneq (,$(findstring $(LLVM_VERSION),$(CLANG_AST_MATCHERS)))
LLVM_LIBRARY_FLAGS += -lclangASTMatchers
endif
Expand Down
8 changes: 6 additions & 2 deletions src/llvmheaders.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,11 +68,15 @@
#include "llvmheaders_80.h"
#elif LLVM_VERSION == 90
#include "llvmheaders_90.h"
#elif LLVM_VERSION == 100
#include "llvmheaders_100.h"
#elif LLVM_VERSION >= 110 && LLVM_VERSION < 120
#include "llvmheaders_110.h"
#else
#error "unsupported LLVM version"
// for OSX code completion
#define LLVM_VERSION 90
#include "llvmheaders_90.h"
#define LLVM_VERSION 100
#include "llvmheaders_100.h"
#endif

#if LLVM_VERSION >= 34
Expand Down
37 changes: 37 additions & 0 deletions src/llvmheaders_100.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/Analysis/CallGraphSCCPass.h"
#include "llvm/Analysis/CallGraph.h"
#include "llvm/IR/DIBuilder.h"
#include "llvm/IR/DebugInfo.h"
#include "llvm/IR/Mangler.h"
//#include "llvm/ExecutionEngine/ObjectImage.h"
#include "llvm/IR/Verifier.h"
#include "llvm/Linker/Linker.h"
#include "llvm/IR/CFG.h"
#include "llvm/IR/InstVisitor.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"

#include "llvm/Support/VirtualFileSystem.h"
#include "clang/Rewrite/Core/Rewriter.h"
#include "clang/Rewrite/Frontend/Rewriters.h"
#include "llvm/IR/DiagnosticPrinter.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/Object/SymbolSize.h"

#include "llvm/Bitcode/BitcodeReader.h"
#include "llvm/Support/Error.h"

#define LLVM_PATH_TYPE std::string
#define RAW_FD_OSTREAM_NONE sys::fs::F_None
#define RAW_FD_OSTREAM_BINARY sys::fs::F_None
#define HASFNATTR(attr) \
getAttributes().hasAttribute(AttributeSet::FunctionIndex, Attribute ::attr)
#define ADDFNATTR(attr) addFnAttr(Attribute ::attr)
#define ATTRIBUTE Attributes
37 changes: 37 additions & 0 deletions src/llvmheaders_110.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/Analysis/CallGraphSCCPass.h"
#include "llvm/Analysis/CallGraph.h"
#include "llvm/IR/DIBuilder.h"
#include "llvm/IR/DebugInfo.h"
#include "llvm/IR/Mangler.h"
//#include "llvm/ExecutionEngine/ObjectImage.h"
#include "llvm/IR/Verifier.h"
#include "llvm/Linker/Linker.h"
#include "llvm/IR/CFG.h"
#include "llvm/IR/InstVisitor.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"

#include "llvm/Support/VirtualFileSystem.h"
#include "clang/Rewrite/Core/Rewriter.h"
#include "clang/Rewrite/Frontend/Rewriters.h"
#include "llvm/IR/DiagnosticPrinter.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/Object/SymbolSize.h"

#include "llvm/Bitcode/BitcodeReader.h"
#include "llvm/Support/Error.h"

#define LLVM_PATH_TYPE std::string
#define RAW_FD_OSTREAM_NONE sys::fs::F_None
#define RAW_FD_OSTREAM_BINARY sys::fs::F_None
#define HASFNATTR(attr) \
getAttributes().hasAttribute(AttributeSet::FunctionIndex, Attribute ::attr)
#define ADDFNATTR(attr) addFnAttr(Attribute ::attr)
#define ATTRIBUTE Attributes
Loading

0 comments on commit 968c816

Please sign in to comment.