Skip to content

Commit

Permalink
Merge pull request tinygo-org#18 from tinygo-org/llvm11
Browse files Browse the repository at this point in the history
Provide compatibility with LLVM 11
  • Loading branch information
aykevl authored Oct 15, 2020
2 parents 345b294 + 70c5585 commit 0aaab4b
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 2 deletions.
23 changes: 23 additions & 0 deletions backports.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,15 @@

namespace llvm {

#if LLVM_VERSION_MAJOR < 11
inline PassManagerBuilder *unwrap(LLVMPassManagerBuilderRef P) {
return reinterpret_cast<PassManagerBuilder*>(P);
}

inline LLVMPassManagerBuilderRef wrap(PassManagerBuilder *P) {
return reinterpret_cast<LLVMPassManagerBuilderRef>(P);
}
#endif

} // end namespace llvm

Expand All @@ -39,3 +41,24 @@ LLVMGoDIBuilderCreateTypedef(LLVMDIBuilderRef Builder, LLVMMetadataRef Type,
return LLVMDIBuilderCreateTypedef(Builder, Type, Name, NameLen, File, LineNo, Scope);
#endif
}

LLVMMetadataRef LLVMGoDIBuilderCreateCompileUnit(
LLVMDIBuilderRef Builder, LLVMDWARFSourceLanguage Lang,
LLVMMetadataRef FileRef, const char *Producer, size_t ProducerLen,
LLVMBool isOptimized, const char *Flags, size_t FlagsLen,
unsigned RuntimeVer, const char *SplitName, size_t SplitNameLen,
LLVMDWARFEmissionKind Kind, unsigned DWOId, LLVMBool SplitDebugInlining,
LLVMBool DebugInfoForProfiling, const char *SysRoot, size_t SysRootLen,
const char *SDK, size_t SDKLen) {

#if LLVM_VERSION_MAJOR >= 11
return LLVMDIBuilderCreateCompileUnit(Builder, Lang, FileRef, Producer,
ProducerLen, isOptimized, Flags, FlagsLen, RuntimeVer, SplitName,
SplitNameLen, Kind, DWOId, SplitDebugInlining, DebugInfoForProfiling,
SysRoot, SysRootLen, SDK, SDKLen);
#else
return LLVMDIBuilderCreateCompileUnit(Builder, Lang, FileRef, Producer,
ProducerLen, isOptimized, Flags, FlagsLen, RuntimeVer, SplitName,
SplitNameLen, Kind, DWOId, SplitDebugInlining, DebugInfoForProfiling);
#endif
}
11 changes: 11 additions & 0 deletions backports.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@

#include "llvm-c/DebugInfo.h"
#include "llvm-c/Types.h"
#include "llvm-c/Transforms/PassManagerBuilder.h"

Expand All @@ -15,6 +16,16 @@ LLVMGoDIBuilderCreateTypedef(LLVMDIBuilderRef Builder, LLVMMetadataRef Type,
const char *Name, size_t NameLen,
LLVMMetadataRef File, unsigned LineNo,
LLVMMetadataRef Scope, uint32_t AlignInBits);

LLVMMetadataRef LLVMGoDIBuilderCreateCompileUnit(
LLVMDIBuilderRef Builder, LLVMDWARFSourceLanguage Lang,
LLVMMetadataRef FileRef, const char *Producer, size_t ProducerLen,
LLVMBool isOptimized, const char *Flags, size_t FlagsLen,
unsigned RuntimeVer, const char *SplitName, size_t SplitNameLen,
LLVMDWARFEmissionKind Kind, unsigned DWOId, LLVMBool SplitDebugInlining,
LLVMBool DebugInfoForProfiling, const char *SysRoot, size_t SysRootLen,
const char *SDK, size_t SDKLen);

#ifdef __cplusplus
}
#endif /* defined(__cplusplus) */
10 changes: 9 additions & 1 deletion dibuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,8 @@ type DICompileUnit struct {
Optimized bool
Flags string
RuntimeVersion int
SysRoot string
SDK string
}

// CreateCompileUnit creates compile unit debug metadata.
Expand All @@ -130,7 +132,11 @@ func (d *DIBuilder) CreateCompileUnit(cu DICompileUnit) Metadata {
defer C.free(unsafe.Pointer(producer))
flags := C.CString(cu.Flags)
defer C.free(unsafe.Pointer(flags))
result := C.LLVMDIBuilderCreateCompileUnit(
sysroot := C.CString(cu.SysRoot)
defer C.free(unsafe.Pointer(sysroot))
sdk := C.CString(cu.SDK)
defer C.free(unsafe.Pointer(sdk))
result := C.LLVMGoDIBuilderCreateCompileUnit(
d.ref,
C.LLVMDWARFSourceLanguage(cu.Language),
C.LLVMDIBuilderCreateFile(d.ref, file, C.size_t(len(cu.File)), dir, C.size_t(len(cu.Dir))),
Expand All @@ -143,6 +149,8 @@ func (d *DIBuilder) CreateCompileUnit(cu DICompileUnit) Metadata {
/*DWOId=*/ 0,
/*SplitDebugInlining*/ C.LLVMBool(boolToCInt(true)),
/*DebugInfoForProfiling*/ C.LLVMBool(boolToCInt(false)),
sysroot, C.size_t(len(cu.SysRoot)),
sdk, C.size_t(len(cu.SDK)),
)
return Metadata{C: result}
}
Expand Down
2 changes: 1 addition & 1 deletion llvm_config_linux.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// +build !byollvm
// +build !llvm9
// +build !llvm9,!llvm11

package llvm

Expand Down
13 changes: 13 additions & 0 deletions llvm_config_linux_llvm11.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// +build !byollvm
// +build llvm11

package llvm

// Automatically generated by `make config BUILDDIR=`, do not edit.

// #cgo CPPFLAGS: -I/usr/lib/llvm-11/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
// #cgo CXXFLAGS: -std=c++14
// #cgo LDFLAGS: -L/usr/lib/llvm-11/lib -lLLVM-11
import "C"

type run_build_sh int

0 comments on commit 0aaab4b

Please sign in to comment.