mirror of https://github.com/mono/CppSharp.git
c-sharpdotnetmonobindingsbridgecclangcpluspluscppsharpglueinteropparserparsingpinvokeswigsyntax-treevisitorsxamarinxamarin-bindings
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
182 lines
4.7 KiB
182 lines
4.7 KiB
-- Setup the LLVM dependency directories |
|
|
|
LLVMRootDir = depsdir .. "/llvm/" |
|
|
|
local LLVMDirPerConfiguration = false |
|
|
|
local LLVMRootDirDebug = "" |
|
local LLVMRootDirRelease = "" |
|
|
|
require "scripts/LLVM" |
|
|
|
function SearchLLVM() |
|
local basedir = path.getdirectory(_PREMAKE_COMMAND) |
|
LLVMRootDirDebug = basedir .. "/scripts/" .. get_llvm_package_name(nil, "Debug") |
|
LLVMRootDirRelease = basedir .. "/scripts/" .. get_llvm_package_name() |
|
|
|
if os.isdir(LLVMRootDirDebug) or os.isdir(LLVMRootDirRelease) then |
|
LLVMDirPerConfiguration = true |
|
print("Using debug LLVM build: " .. LLVMRootDirDebug) |
|
print("Using release LLVM build: " .. LLVMRootDirRelease) |
|
elseif os.isdir(LLVMRootDir) then |
|
print("Using LLVM build: " .. LLVMRootDir) |
|
else |
|
error("Error finding an LLVM build") |
|
end |
|
end |
|
|
|
function get_llvm_build_dir() |
|
local packageDir = path.join(LLVMRootDir, get_llvm_package_name()) |
|
local buildDir = path.join(LLVMRootDir, "build") |
|
if os.isdir(buildDir) then |
|
return buildDir |
|
else |
|
return packageDir |
|
end |
|
end |
|
|
|
function SetupLLVMIncludes() |
|
local c = filter() |
|
|
|
if LLVMDirPerConfiguration then |
|
filter { "configurations:Debug" } |
|
includedirs |
|
{ |
|
path.join(LLVMRootDirDebug, "include"), |
|
path.join(LLVMRootDirDebug, "tools/clang/include"), |
|
path.join(LLVMRootDirDebug, "tools/clang/lib"), |
|
path.join(LLVMRootDirDebug, "build/include"), |
|
path.join(LLVMRootDirDebug, "build/tools/clang/include"), |
|
} |
|
|
|
filter { "configurations:Release" } |
|
includedirs |
|
{ |
|
path.join(LLVMRootDirRelease, "include"), |
|
path.join(LLVMRootDirRelease, "tools/clang/include"), |
|
path.join(LLVMRootDirRelease, "tools/clang/lib"), |
|
path.join(LLVMRootDirRelease, "build/include"), |
|
path.join(LLVMRootDirRelease, "build/tools/clang/include"), |
|
} |
|
else |
|
local LLVMBuildDir = get_llvm_build_dir() |
|
includedirs |
|
{ |
|
path.join(LLVMRootDir, "include"), |
|
path.join(LLVMRootDir, "tools/clang/include"), |
|
path.join(LLVMRootDir, "tools/clang/lib"), |
|
path.join(LLVMBuildDir, "include"), |
|
path.join(LLVMBuildDir, "tools/clang/include"), |
|
} |
|
end |
|
|
|
filter(c) |
|
end |
|
|
|
function CopyClangIncludes() |
|
local clangBuiltinIncludeDir = path.join(LLVMRootDir, "lib") |
|
|
|
if LLVMDirPerConfiguration then |
|
local clangBuiltinDebug = path.join(LLVMRootDirDebug, "lib") |
|
local clangBuiltinRelease = path.join(LLVMRootDirRelease, "lib") |
|
|
|
if os.isdir(path.join(clangBuiltinDebug, "clang")) then |
|
clangBuiltinIncludeDir = clangBuiltinDebug |
|
end |
|
|
|
if os.isdir(path.join(clangBuiltinRelease, "clang")) then |
|
clangBuiltinIncludeDir = clangBuiltinRelease |
|
end |
|
end |
|
|
|
if os.isdir(clangBuiltinIncludeDir) then |
|
postbuildcommands { string.format('{COPY} "%s" "%%{cfg.buildtarget.directory}"', clangBuiltinIncludeDir) } |
|
end |
|
end |
|
|
|
function SetupLLVMLibs() |
|
local c = filter() |
|
|
|
filter { "action:not vs*" } |
|
defines { "__STDC_CONSTANT_MACROS", "__STDC_LIMIT_MACROS" } |
|
|
|
filter { "system:macosx" } |
|
links { "c++", "curses", "pthread", "z" } |
|
|
|
filter { "action:vs*" } |
|
links { "version" } |
|
|
|
filter {} |
|
|
|
if LLVMDirPerConfiguration then |
|
filter { "configurations:Debug" } |
|
libdirs { path.join(LLVMRootDirDebug, "build/lib") } |
|
|
|
filter { "configurations:Release" } |
|
libdirs { path.join(LLVMRootDirRelease, "build/lib") } |
|
else |
|
local LLVMBuildDir = get_llvm_build_dir() |
|
libdirs { path.join(LLVMBuildDir, "lib") } |
|
|
|
filter { "configurations:Debug", "action:vs*" } |
|
libdirs { path.join(LLVMBuildDir, "Debug/lib") } |
|
|
|
filter { "configurations:Release", "action:vs*" } |
|
libdirs { path.join(LLVMBuildDir, "RelWithDebInfo/lib") } |
|
end |
|
|
|
filter {} |
|
|
|
links |
|
{ |
|
"clangFrontend", |
|
"clangDriver", |
|
"clangSerialization", |
|
"clangCodeGen", |
|
"clangParse", |
|
"clangSema", |
|
"clangAnalysis", |
|
"clangEdit", |
|
"clangAST", |
|
"clangLex", |
|
"clangBasic", |
|
"clangIndex", |
|
"LLVMLinker", |
|
"LLVMipo", |
|
"LLVMVectorize", |
|
"LLVMBitWriter", |
|
"LLVMIRReader", |
|
"LLVMAsmParser", |
|
"LLVMOption", |
|
"LLVMInstrumentation", |
|
"LLVMProfileData", |
|
"LLVMX86AsmParser", |
|
"LLVMX86Desc", |
|
"LLVMObject", |
|
"LLVMMCParser", |
|
"LLVMBitReader", |
|
"LLVMX86Info", |
|
"LLVMX86AsmPrinter", |
|
"LLVMX86Utils", |
|
"LLVMX86CodeGen", |
|
"LLVMX86Disassembler", |
|
"LLVMCodeGen", |
|
"LLVMSelectionDAG", |
|
"LLVMGlobalISel", |
|
"LLVMDebugInfoCodeView", |
|
"LLVMScalarOpts", |
|
"LLVMInstCombine", |
|
"LLVMTransformUtils", |
|
"LLVMAnalysis", |
|
"LLVMTarget", |
|
"LLVMMCDisassembler", |
|
"LLVMMC", |
|
"LLVMCoverage", |
|
"LLVMCore", |
|
"LLVMSupport", |
|
"LLVMBinaryFormat", |
|
"LLVMDemangle" |
|
} |
|
|
|
filter(c) |
|
end
|
|
|