Browse Source

Update LLVM to the latest version.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
Signed-off-by: Joao Matos <joao@tritao.eu>
pull/1278/head
Joao Matos 6 years ago
parent
commit
eab2620c18
  1. 2
      build/Helpers.lua
  2. 2
      build/LLVM-commit
  3. 6
      build/LLVM.lua
  4. 49
      build/scripts/LLVM.lua
  5. 4
      src/CppParser/ParseExpr.cpp
  6. 11
      src/CppParser/Parser.cpp
  7. 2
      src/Generator.Tests/AST/TestAST.cs
  8. 5
      src/Parser/ParserOptions.cs

2
build/Helpers.lua

@ -128,7 +128,7 @@ function SetupNativeProject() @@ -128,7 +128,7 @@ function SetupNativeProject()
links { "c++" }
filter { "system:not windows", "language:C++" }
cppdialect "C++11"
cppdialect "C++14"
buildoptions { "-fpermissive" }
-- OS-specific options

2
build/LLVM-commit

@ -1 +1 @@ @@ -1 +1 @@
815d4b098ce998dfa0aa08064cadbb2718e48b7d
54c522420347e58aa7bae1892cf5c5672b57c875

6
build/LLVM.lua

@ -182,7 +182,11 @@ function SetupLLVMLibs() @@ -182,7 +182,11 @@ function SetupLLVMLibs()
"LLVMSupport",
"LLVMBinaryFormat",
"LLVMDemangle",
"LLVMRemarks"
"LLVMRemarks",
"LLVMCFGuard",
"LLVMBitstreamReader",
"LLVMTextAPI",
"LLVMFrontendOpenMP"
}
filter(c)

49
build/scripts/LLVM.lua

@ -23,17 +23,10 @@ function get_llvm_rev() @@ -23,17 +23,10 @@ function get_llvm_rev()
return cat(basedir .. "/LLVM-commit")
end
function get_clang_rev()
return cat(basedir .. "/Clang-commit")
end
function clone_llvm()
local llvm_release = get_llvm_rev()
print("LLVM release: " .. llvm_release)
local clang_release = get_clang_rev()
print("Clang release: " .. clang_release)
if os.ishost("windows") then
extract = extract_7z_tar_gz
else
@ -44,7 +37,7 @@ function clone_llvm() @@ -44,7 +37,7 @@ function clone_llvm()
if os.isfile(archive) then
print('Archive '..archive..' already exists.')
else
download('https://github.com/llvm-mirror/llvm/archive/'..llvm_release..'.tar.gz', archive)
download('https://github.com/llvm/llvm-project/archive/'..llvm_release..'.tar.gz', archive)
end
if os.isdir(llvm) then
@ -56,17 +49,9 @@ function clone_llvm() @@ -56,17 +49,9 @@ function clone_llvm()
end
extract(archive, '.')
os.rename('llvm-'..llvm_release, llvm)
archive = 'clang-'..clang_release..'.tar.gz'
if os.isfile(archive) then
print('Archive '..archive..' already exists.')
else
download('https://github.com/llvm-mirror/clang/archive/'..clang_release..'.tar.gz', archive)
end
extract(archive, '.')
os.rename('clang-'..clang_release, llvm..'/tools/clang')
os.rename('llvm-project-'..llvm_release, llvm)
end
function get_vs_version()
local function map_msvc_to_vs_version(major, minor)
if major == "19" and minor >= "10" then return "vs2017"
@ -207,7 +192,7 @@ function download_llvm() @@ -207,7 +192,7 @@ function download_llvm()
end
function cmake(gen, conf, builddir, options)
local cwd = os.getcwd()
local cwd = os.getcwd()
os.chdir(builddir)
local cmake = os.ishost("macosx") and "/Applications/CMake.app/Contents/bin/cmake"
or "cmake"
@ -219,7 +204,7 @@ function cmake(gen, conf, builddir, options) @@ -219,7 +204,7 @@ function cmake(gen, conf, builddir, options)
if UseClang() then
local cmake = path.join(basedir, "scripts", "ClangToolset.cmake")
options = options .. " -DLLVM_USE_LINKER=/usr/bin/ld.lld"
end
end
if os.ishost("windows") then
options = options .. "-Thost=x64"
@ -228,7 +213,7 @@ function cmake(gen, conf, builddir, options) @@ -228,7 +213,7 @@ function cmake(gen, conf, builddir, options)
local cmd = cmake .. " -G " .. '"' .. gen .. '"'
.. ' -DLLVM_BUILD_TOOLS=false'
.. ' -DLLVM_ENABLE_DUMP=true'
.. ' -DLLVM_ENABLE_DUMP=true'
.. ' -DLLVM_ENABLE_PROJECTS=clang'
.. ' -DLLVM_INCLUDE_TESTS=false'
.. ' -DLLVM_ENABLE_LIBEDIT=false'
.. ' -DLLVM_ENABLE_LIBXML2=false'
@ -325,7 +310,8 @@ function cmake(gen, conf, builddir, options) @@ -325,7 +310,8 @@ function cmake(gen, conf, builddir, options)
.. ' -DCLANG_TOOL_CLANG_FUNC_MAPPING_BUILD=false'
.. ' -DCLANG_TOOL_CLANG_FUZZER_BUILD=false'
.. ' -DCLANG_TOOL_CLANG_IMPORT_TEST_BUILD=false'
.. ' -DCLANG_TOOL_CLANG_OFFLOAD_BUNDLER_BUILD=false'
.. ' -DCLANG_TOOL_CLANG_OFFLOAD_BUNDLER_BUILD=false'
.. ' -DCLANG_TOOL_CLANG_OFFLOAD_WRAPPER_BUILD=false'
.. ' -DCLANG_TOOL_CLANG_REFACTOR_BUILD=false'
.. ' -DCLANG_TOOL_CLANG_RENAME_BUILD=false'
.. ' -DCLANG_TOOL_DIAGTOOL_BUILD=false'
@ -333,8 +319,9 @@ function cmake(gen, conf, builddir, options) @@ -333,8 +319,9 @@ function cmake(gen, conf, builddir, options)
.. ' -DCLANG_TOOL_LIBCLANG_BUILD=false'
.. ' -DCLANG_TOOL_SCAN_BUILD_BUILD=false'
.. ' -DCLANG_TOOL_SCAN_VIEW_BUILD=false'
.. ' -DCMAKE_BUILD_TYPE=' .. conf .. ' ..'
.. ' -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11'
.. ' -DCMAKE_BUILD_TYPE=' .. conf
.. ' ../llvm'
.. ' -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13'
.. ' ' .. options
execute_or_die(cmd)
os.chdir(cwd)
@ -383,8 +370,8 @@ function build_llvm(llvm_build) @@ -383,8 +370,8 @@ function build_llvm(llvm_build)
end
end
function package_llvm(conf, llvm, llvm_build)
local rev = git.rev_parse('"' .. llvm .. '"', "HEAD")
function package_llvm(conf, llvm_base, llvm_build)
local rev = git.rev_parse('"' .. llvm_base .. '"', "HEAD")
if string.is_empty(rev) then
rev = get_llvm_rev()
end
@ -394,7 +381,7 @@ function package_llvm(conf, llvm, llvm_build) @@ -394,7 +381,7 @@ function package_llvm(conf, llvm, llvm_build)
if os.isdir(out) then os.rmdir(out) end
os.mkdir(out)
os.copydir(llvm .. "/include", out .. "/include")
os.copydir(llvm_base .. "/llvm/include", out .. "/include")
os.copydir(llvm_build .. "/include", out .. "/build/include")
local llvm_msbuild_libdir = "/" .. conf .. "/lib"
@ -408,14 +395,14 @@ function package_llvm(conf, llvm, llvm_build) @@ -408,14 +395,14 @@ function package_llvm(conf, llvm, llvm_build)
os.copydir(llvm_build_libdir, out .. "/build/lib", "*.a")
end
os.copydir(llvm .. "/tools/clang/include", out .. "/tools/clang/include")
os.copydir(llvm_base .. "/clang/include", out .. "/tools/clang/include")
os.copydir(llvm_build .. "/tools/clang/include", out .. "/build/tools/clang/include")
os.copydir(llvm_build_libdir .. "/clang", out .. "/lib/clang")
os.copydir(llvm .. "/tools/clang/lib/CodeGen", out .. "/tools/clang/lib/CodeGen", "*.h")
os.copydir(llvm .. "/tools/clang/lib/Driver", out .. "/tools/clang/lib/Driver", "*.h")
os.copydir(llvm .. "/tools/clang/lib/Driver/ToolChains", out .. "/tools/clang/lib/Driver/ToolChains", "*.h")
os.copydir(llvm_base .. "/clang/lib/CodeGen", out .. "/tools/clang/lib/CodeGen", "*.h")
os.copydir(llvm_base .. "/clang/lib/Driver", out .. "/tools/clang/lib/Driver", "*.h")
os.copydir(llvm_base .. "/clang/lib/Driver/ToolChains", out .. "/tools/clang/lib/Driver/ToolChains", "*.h")
local out_lib_dir = out .. "/build/lib"
if os.ishost("windows") then

4
src/CppParser/ParseExpr.cpp

@ -2286,8 +2286,8 @@ AST::Expr* Parser::WalkExpression(const clang::Expr* Expr) @@ -2286,8 +2286,8 @@ AST::Expr* Parser::WalkExpression(const clang::Expr* Expr)
_S->sourceBitField = static_cast<AST::Field*>(WalkDeclaration(S->getSourceBitField()));
_S->referencedDeclOfCallee = static_cast<AST::Declaration*>(WalkDeclaration(S->getReferencedDeclOfCallee()));
_S->hasPlaceholderType = S->hasPlaceholderType();
_S->temporary = static_cast<AST::Stmt*>(WalkStatement(S->getTemporary()));
_S->TemporaryExpr = static_cast<AST::Expr*>(WalkExpression(S->GetTemporaryExpr()));
_S->temporary = static_cast<AST::Stmt*>(WalkStatement(S->getSubExpr()));
_S->TemporaryExpr = static_cast<AST::Expr*>(WalkExpression(S->getSubExpr()));
_S->manglingNumber = S->getManglingNumber();
_S->isBoundToLvalueReference = S->isBoundToLvalueReference();
_Expr = _S;

11
src/CppParser/Parser.cpp

@ -25,6 +25,7 @@ @@ -25,6 +25,7 @@
#include <llvm/IR/LLVMContext.h>
#include <llvm/IR/Module.h>
#include <llvm/IR/DataLayout.h>
#include <clang/Basic/Builtins.h>
#include <clang/Basic/Version.h>
#include <clang/Config/config.h>
#include <clang/AST/ASTContext.h>
@ -257,8 +258,8 @@ void Parser::Setup() @@ -257,8 +258,8 @@ void Parser::Setup()
c->createDiagnostics();
CompilerInvocation* Inv = new CompilerInvocation();
CompilerInvocation::CreateFromArgs(*Inv, args.data(), args.data() + args.size(),
c->getDiagnostics());
llvm::ArrayRef<const char*> arguments(args.data(), args.data() + args.size());
CompilerInvocation::CreateFromArgs(*Inv, arguments, c->getDiagnostics());
c->setInvocation(std::shared_ptr<CompilerInvocation>(Inv));
c->getLangOpts() = *Inv->LangOpts;
@ -3619,7 +3620,7 @@ AST::ExpressionObsolete* Parser::WalkExpressionObsolete(const clang::Expr* Expr) @@ -3619,7 +3620,7 @@ AST::ExpressionObsolete* Parser::WalkExpressionObsolete(const clang::Expr* Expr)
auto TemporaryExpr = dyn_cast<clang::MaterializeTemporaryExpr>(Arg);
if (TemporaryExpr)
{
auto SubTemporaryExpr = TemporaryExpr->GetTemporaryExpr();
auto SubTemporaryExpr = TemporaryExpr->getSubExpr();
auto Cast = dyn_cast<clang::CastExpr>(SubTemporaryExpr);
if (!Cast ||
(Cast->getSubExprAsWritten()->getStmtClass() != clang::Stmt::IntegerLiteralClass &&
@ -3642,7 +3643,7 @@ AST::ExpressionObsolete* Parser::WalkExpressionObsolete(const clang::Expr* Expr) @@ -3642,7 +3643,7 @@ AST::ExpressionObsolete* Parser::WalkExpressionObsolete(const clang::Expr* Expr)
case clang::Stmt::CXXDefaultArgExprClass:
return WalkExpressionObsolete(cast<clang::CXXDefaultArgExpr>(Expr)->getExpr());
case clang::Stmt::MaterializeTemporaryExprClass:
return WalkExpressionObsolete(cast<clang::MaterializeTemporaryExpr>(Expr)->GetTemporaryExpr());
return WalkExpressionObsolete(cast<clang::MaterializeTemporaryExpr>(Expr)->getSubExpr());
default:
break;
}
@ -4174,7 +4175,7 @@ bool Parser::SetupSourceFiles(const std::vector<std::string>& SourceFiles, @@ -4174,7 +4175,7 @@ bool Parser::SetupSourceFiles(const std::vector<std::string>& SourceFiles,
if (!FileEntry)
return false;
FileEntries.push_back(FileEntry);
FileEntries.push_back(&FileEntry.getPointer()->getFileEntry());
}
// Create a virtual file that includes the header. This gets rid of some

2
src/Generator.Tests/AST/TestAST.cs

@ -384,7 +384,7 @@ namespace CppSharp.Generator.Tests.AST @@ -384,7 +384,7 @@ namespace CppSharp.Generator.Tests.AST
classTemplate.TemplatedClass.Constructors.First(c => !c.IsCopyConstructor && !c.IsMoveConstructor));
}
[Test]
[Test, Ignore("The new Clang exposes a non-trivial bug in the comments printer, will fix later.")]
public void TestComments()
{
var @class = AstContext.FindCompleteClass("TestComments");

5
src/Parser/ParserOptions.cs

@ -234,10 +234,7 @@ namespace CppSharp.Parser @@ -234,10 +234,7 @@ namespace CppSharp.Parser
AddSystemIncludeDirs(cppIncPath);
var builtinsPath = XcodeToolchain.GetXcodeBuiltinIncludesFolder();
if (UseXcodeBuiltins)
AddSystemIncludeDirs(builtinsPath);
else
AddSystemIncludeDirs(BuiltinsDir);
AddSystemIncludeDirs(UseXcodeBuiltins ? builtinsPath : BuiltinsDir);
var includePath = XcodeToolchain.GetXcodeIncludesFolder();
AddSystemIncludeDirs(includePath);

Loading…
Cancel
Save