diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml index f4bd536..4bf2e8d 100644 --- a/.github/workflows/go.yml +++ b/.github/workflows/go.yml @@ -10,7 +10,7 @@ jobs: runs-on: macos-latest strategy: matrix: - llvm: [14, 15, 16, 17, 18, 19, 20] + llvm: [14, 15, 16, 17, 18, 19, 20, 21] go-version: [1.18.x, 1.21.x, 1.22.x] steps: - name: Checkout @@ -24,7 +24,7 @@ jobs: # run: brew update # Optional step when a LLVM version is very new. - name: Update Homebrew - if: matrix.llvm == 20 + if: matrix.llvm == 21 run: brew update - name: Install LLVM run: HOMEBREW_NO_AUTO_UPDATE=1 brew install llvm@${{ matrix.llvm }} @@ -39,7 +39,7 @@ jobs: runs-on: ubuntu-22.04 strategy: matrix: - llvm: [14, 15, 16, 17, 18, 19, 20] + llvm: [14, 15, 16, 17, 18, 19, 20, 21] steps: - name: Checkout uses: actions/checkout@v4 diff --git a/executionengine.go b/executionengine.go index 5fa8204..f9a3f99 100644 --- a/executionengine.go +++ b/executionengine.go @@ -18,8 +18,10 @@ package llvm #include */ import "C" -import "unsafe" -import "errors" +import ( + "errors" + "unsafe" +) func LinkInMCJIT() { C.LLVMLinkInMCJIT() } func LinkInInterpreter() { C.LLVMLinkInInterpreter() } @@ -110,6 +112,17 @@ func NewInterpreter(m Module) (ee ExecutionEngine, err error) { return } +func NewJITCompiler(m Module, optLevel int) (ee ExecutionEngine, err error) { + var cmsg *C.char + fail := C.LLVMCreateJITCompilerForModule(&ee.C, m.C, C.uint(optLevel), &cmsg) + if fail != 0 { + ee.C = nil + err = errors.New(C.GoString(cmsg)) + C.LLVMDisposeMessage(cmsg) + } + return +} + func NewMCJITCompilerOptions() MCJITCompilerOptions { var options C.struct_LLVMMCJITCompilerOptions C.LLVMInitializeMCJITCompilerOptions(&options, C.size_t(unsafe.Sizeof(C.struct_LLVMMCJITCompilerOptions{}))) @@ -159,6 +172,12 @@ func (ee ExecutionEngine) FindFunction(name string) (f Value) { return } +func (ee ExecutionEngine) GetFunctionAddress(name string) uint64 { + cname := C.CString(name) + defer C.free(unsafe.Pointer(cname)) + return uint64(C.LLVMGetFunctionAddress(ee.C, cname)) +} + func (ee ExecutionEngine) RecompileAndRelinkFunction(f Value) unsafe.Pointer { return C.LLVMRecompileAndRelinkFunction(ee.C, f.C) } diff --git a/ir.go b/ir.go index 17e10a5..6455e09 100644 --- a/ir.go +++ b/ir.go @@ -77,7 +77,6 @@ type ( ComdatSelectionKind C.LLVMComdatSelectionKind IntPredicate C.LLVMIntPredicate FloatPredicate C.LLVMRealPredicate - LandingPadClause C.LLVMLandingPadClauseTy InlineAsmDialect C.LLVMInlineAsmDialect ) @@ -355,15 +354,6 @@ const ( FloatPredicateTrue FloatPredicate = C.LLVMRealPredicateTrue ) -//------------------------------------------------------------------------- -// llvm.LandingPadClause -//------------------------------------------------------------------------- - -const ( - LandingPadCatch LandingPadClause = C.LLVMLandingPadCatch - LandingPadFilter LandingPadClause = C.LLVMLandingPadFilter -) - //------------------------------------------------------------------------- // llvm.InlineAsmDialect //------------------------------------------------------------------------- @@ -939,9 +929,6 @@ func ConstNUWAdd(lhs, rhs Value) (v Value) { v.C = C.LLVMConstNUWAdd(lhs.C, rhs. func ConstSub(lhs, rhs Value) (v Value) { v.C = C.LLVMConstSub(lhs.C, rhs.C); return } func ConstNSWSub(lhs, rhs Value) (v Value) { v.C = C.LLVMConstNSWSub(lhs.C, rhs.C); return } func ConstNUWSub(lhs, rhs Value) (v Value) { v.C = C.LLVMConstNUWSub(lhs.C, rhs.C); return } -func ConstMul(lhs, rhs Value) (v Value) { v.C = C.LLVMConstMul(lhs.C, rhs.C); return } -func ConstNSWMul(lhs, rhs Value) (v Value) { v.C = C.LLVMConstNSWMul(lhs.C, rhs.C); return } -func ConstNUWMul(lhs, rhs Value) (v Value) { v.C = C.LLVMConstNUWMul(lhs.C, rhs.C); return } func ConstXor(lhs, rhs Value) (v Value) { v.C = C.LLVMConstXor(lhs.C, rhs.C); return } func ConstGEP(t Type, v Value, indices []Value) (rv Value) { diff --git a/ir_test.go b/ir_test.go index 57b306f..a912aec 100644 --- a/ir_test.go +++ b/ir_test.go @@ -62,7 +62,6 @@ func TestAttributes(t *testing.T) { "nest", "noalias", "nobuiltin", - "nocapture", "noduplicate", "noimplicitfloat", "noinline", diff --git a/llvm_config_darwin_llvm14.go b/llvm_config_darwin_llvm14.go deleted file mode 100644 index 2a3c8a9..0000000 --- a/llvm_config_darwin_llvm14.go +++ /dev/null @@ -1,15 +0,0 @@ -//go:build !byollvm && darwin && llvm14 - -package llvm - -// Automatically generated by `make config BUILDDIR=`, do not edit. - -// #cgo amd64 CPPFLAGS: -I/usr/local/opt/llvm@14/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo amd64 CXXFLAGS: -std=c++14 -// #cgo amd64 LDFLAGS: -L/usr/local/opt/llvm@14/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm -// #cgo arm64 CPPFLAGS: -I/opt/homebrew/opt/llvm@14/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo arm64 CXXFLAGS: -std=c++14 -// #cgo arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@14/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm -import "C" - -type run_build_sh int diff --git a/llvm_config_darwin_llvm15.go b/llvm_config_darwin_llvm15.go deleted file mode 100644 index 07a72fc..0000000 --- a/llvm_config_darwin_llvm15.go +++ /dev/null @@ -1,15 +0,0 @@ -//go:build !byollvm && darwin && llvm15 - -package llvm - -// Automatically generated by `make config BUILDDIR=`, do not edit. - -// #cgo amd64 CPPFLAGS: -I/usr/local/opt/llvm@15/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo amd64 CXXFLAGS: -std=c++14 -// #cgo amd64 LDFLAGS: -L/usr/local/opt/llvm@15/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm -// #cgo arm64 CPPFLAGS: -I/opt/homebrew/opt/llvm@15/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo arm64 CXXFLAGS: -std=c++14 -// #cgo arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@15/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm -import "C" - -type run_build_sh int diff --git a/llvm_config_darwin_llvm16.go b/llvm_config_darwin_llvm16.go deleted file mode 100644 index 2acf0b0..0000000 --- a/llvm_config_darwin_llvm16.go +++ /dev/null @@ -1,15 +0,0 @@ -//go:build !byollvm && darwin && llvm16 - -package llvm - -// Automatically generated by `make config BUILDDIR=`, do not edit. - -// #cgo amd64 CPPFLAGS: -I/usr/local/opt/llvm@16/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo amd64 CXXFLAGS: -std=c++17 -// #cgo amd64 LDFLAGS: -L/usr/local/opt/llvm@16/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm -// #cgo arm64 CPPFLAGS: -I/opt/homebrew/opt/llvm@16/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo arm64 CXXFLAGS: -std=c++17 -// #cgo arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@16/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm -import "C" - -type run_build_sh int diff --git a/llvm_config_darwin_llvm17.go b/llvm_config_darwin_llvm17.go deleted file mode 100644 index 3dc8f26..0000000 --- a/llvm_config_darwin_llvm17.go +++ /dev/null @@ -1,15 +0,0 @@ -//go:build !byollvm && darwin && llvm17 - -package llvm - -// Automatically generated by `make config BUILDDIR=`, do not edit. - -// #cgo amd64 CPPFLAGS: -I/usr/local/opt/llvm@17/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo amd64 CXXFLAGS: -std=c++17 -// #cgo amd64 LDFLAGS: -L/usr/local/opt/llvm@17/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm -// #cgo arm64 CPPFLAGS: -I/opt/homebrew/opt/llvm@17/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo arm64 CXXFLAGS: -std=c++17 -// #cgo arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@17/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm -import "C" - -type run_build_sh int diff --git a/llvm_config_darwin_llvm18.go b/llvm_config_darwin_llvm18.go deleted file mode 100644 index 744a11e..0000000 --- a/llvm_config_darwin_llvm18.go +++ /dev/null @@ -1,15 +0,0 @@ -//go:build !byollvm && darwin && llvm18 - -package llvm - -// Automatically generated by `make config BUILDDIR=`, do not edit. - -// #cgo amd64 CPPFLAGS: -I/usr/local/opt/llvm@18/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo amd64 CXXFLAGS: -std=c++17 -// #cgo amd64 LDFLAGS: -L/usr/local/opt/llvm@18/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm -// #cgo arm64 CPPFLAGS: -I/opt/homebrew/opt/llvm@18/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo arm64 CXXFLAGS: -std=c++17 -// #cgo arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@18/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm -import "C" - -type run_build_sh int diff --git a/llvm_config_darwin_llvm19.go b/llvm_config_darwin_llvm19.go deleted file mode 100644 index ac09d67..0000000 --- a/llvm_config_darwin_llvm19.go +++ /dev/null @@ -1,15 +0,0 @@ -//go:build !byollvm && darwin && !llvm14 && !llvm15 && !llvm16 && !llvm17 && !llvm18 && !llvm20 - -package llvm - -// Automatically generated by `make config BUILDDIR=`, do not edit. - -// #cgo amd64 CPPFLAGS: -I/usr/local/opt/llvm@19/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo amd64 CXXFLAGS: -std=c++17 -// #cgo amd64 LDFLAGS: -L/usr/local/opt/llvm@19/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm -// #cgo arm64 CPPFLAGS: -I/opt/homebrew/opt/llvm@19/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo arm64 CXXFLAGS: -std=c++17 -// #cgo arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@19/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm -import "C" - -type run_build_sh int diff --git a/llvm_config_darwin_llvm20.go b/llvm_config_darwin_llvm20.go deleted file mode 100644 index 880e0d0..0000000 --- a/llvm_config_darwin_llvm20.go +++ /dev/null @@ -1,15 +0,0 @@ -//go:build !byollvm && darwin && llvm20 - -package llvm - -// Automatically generated by `make config BUILDDIR=`, do not edit. - -// #cgo amd64 CPPFLAGS: -I/usr/local/opt/llvm@20/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo amd64 CXXFLAGS: -std=c++17 -// #cgo amd64 LDFLAGS: -L/usr/local/opt/llvm@20/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm -// #cgo arm64 CPPFLAGS: -I/opt/homebrew/opt/llvm@20/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo arm64 CXXFLAGS: -std=c++17 -// #cgo arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@20/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm -import "C" - -type run_build_sh int diff --git a/llvm_config_linux_llvm14.go b/llvm_config_linux_llvm14.go deleted file mode 100644 index 3f91a53..0000000 --- a/llvm_config_linux_llvm14.go +++ /dev/null @@ -1,10 +0,0 @@ -//go:build !byollvm && linux && llvm14 - -package llvm - -// #cgo CPPFLAGS: -I/usr/lib/llvm-14/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-14/lib -lLLVM-14 -import "C" - -type run_build_sh int diff --git a/llvm_config_linux_llvm15.go b/llvm_config_linux_llvm15.go deleted file mode 100644 index 607ed7e..0000000 --- a/llvm_config_linux_llvm15.go +++ /dev/null @@ -1,10 +0,0 @@ -//go:build !byollvm && linux && llvm15 - -package llvm - -// #cgo CPPFLAGS: -I/usr/lib/llvm-15/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-15/lib -lLLVM-15 -import "C" - -type run_build_sh int diff --git a/llvm_config_linux_llvm16.go b/llvm_config_linux_llvm16.go deleted file mode 100644 index 4208cf4..0000000 --- a/llvm_config_linux_llvm16.go +++ /dev/null @@ -1,10 +0,0 @@ -//go:build !byollvm && linux && llvm16 - -package llvm - -// #cgo CPPFLAGS: -I/usr/lib/llvm-16/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo CXXFLAGS: -std=c++17 -// #cgo LDFLAGS: -L/usr/lib/llvm-16/lib -lLLVM-16 -import "C" - -type run_build_sh int diff --git a/llvm_config_linux_llvm17.go b/llvm_config_linux_llvm17.go deleted file mode 100644 index f2951d7..0000000 --- a/llvm_config_linux_llvm17.go +++ /dev/null @@ -1,10 +0,0 @@ -//go:build !byollvm && linux && llvm17 - -package llvm - -// #cgo CPPFLAGS: -I/usr/include/llvm-17 -I/usr/include/llvm-c-17 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo CXXFLAGS: -std=c++17 -// #cgo LDFLAGS: -L/usr/lib/llvm-17/lib -lLLVM-17 -import "C" - -type run_build_sh int diff --git a/llvm_config_linux_llvm18.go b/llvm_config_linux_llvm18.go deleted file mode 100644 index a4bbea0..0000000 --- a/llvm_config_linux_llvm18.go +++ /dev/null @@ -1,10 +0,0 @@ -//go:build !byollvm && linux && llvm18 - -package llvm - -// #cgo CPPFLAGS: -I/usr/include/llvm-18 -I/usr/include/llvm-c-18 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo CXXFLAGS: -std=c++17 -// #cgo LDFLAGS: -L/usr/lib/llvm-18/lib -lLLVM-18 -import "C" - -type run_build_sh int diff --git a/llvm_config_linux_llvm19.go b/llvm_config_linux_llvm19.go deleted file mode 100644 index 3fec2f8..0000000 --- a/llvm_config_linux_llvm19.go +++ /dev/null @@ -1,10 +0,0 @@ -//go:build !byollvm && linux && !llvm14 && !llvm15 && !llvm16 && !llvm17 && !llvm18 && !llvm20 - -package llvm - -// #cgo CPPFLAGS: -I/usr/include/llvm-19 -I/usr/include/llvm-c-19 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo CXXFLAGS: -std=c++17 -// #cgo LDFLAGS: -L/usr/lib/llvm-19/lib -lLLVM-19 -import "C" - -type run_build_sh int diff --git a/llvm_config_linux_llvm20.go b/llvm_config_linux_llvm20.go deleted file mode 100644 index 90c8b9b..0000000 --- a/llvm_config_linux_llvm20.go +++ /dev/null @@ -1,10 +0,0 @@ -//go:build !byollvm && linux && llvm20 - -package llvm - -// #cgo CPPFLAGS: -I/usr/include/llvm-20 -I/usr/include/llvm-c-20 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -// #cgo CXXFLAGS: -std=c++17 -// #cgo LDFLAGS: -L/usr/lib/llvm-20/lib -lLLVM-20 -import "C" - -type run_build_sh int diff --git a/llvm_config_llvm14.go b/llvm_config_llvm14.go new file mode 100644 index 0000000..9d38a5b --- /dev/null +++ b/llvm_config_llvm14.go @@ -0,0 +1,16 @@ +//go:build !byollvm && llvm14 + +package llvm + +// #cgo darwin,amd64 CPPFLAGS: -I/usr/local/opt/llvm@14/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,amd64 CXXFLAGS: -std=c++14 +// #cgo darwin,amd64 LDFLAGS: -L/usr/local/opt/llvm@14/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo darwin,arm64 CPPFLAGS: -I/opt/homebrew/opt/llvm@14/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,arm64 CXXFLAGS: -std=c++14 +// #cgo darwin,arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@14/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo linux CPPFLAGS: -I/usr/lib/llvm-14/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo linux CXXFLAGS: -std=c++14 +// #cgo linux LDFLAGS: -L/usr/lib/llvm-14/lib -lLLVM-14 +import "C" + +type run_build_sh int diff --git a/llvm_config_llvm15.go b/llvm_config_llvm15.go new file mode 100644 index 0000000..34aebc0 --- /dev/null +++ b/llvm_config_llvm15.go @@ -0,0 +1,16 @@ +//go:build !byollvm && llvm15 + +package llvm + +// #cgo darwin,amd64 CPPFLAGS: -I/usr/local/opt/llvm@15/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,amd64 CXXFLAGS: -std=c++14 +// #cgo darwin,amd64 LDFLAGS: -L/usr/local/opt/llvm@15/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo darwin,arm64 CPPFLAGS: -I/opt/homebrew/opt/llvm@15/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,arm64 CXXFLAGS: -std=c++14 +// #cgo darwin,arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@15/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo linux CPPFLAGS: -I/usr/lib/llvm-15/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo linux CXXFLAGS: -std=c++14 +// #cgo linux LDFLAGS: -L/usr/lib/llvm-15/lib -lLLVM-15 +import "C" + +type run_build_sh int diff --git a/llvm_config_llvm16.go b/llvm_config_llvm16.go new file mode 100644 index 0000000..936ca0f --- /dev/null +++ b/llvm_config_llvm16.go @@ -0,0 +1,16 @@ +//go:build !byollvm && llvm16 + +package llvm + +// #cgo darwin,amd64 CPPFLAGS: -I/usr/local/opt/llvm@16/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,amd64 CXXFLAGS: -std=c++17 +// #cgo darwin,amd64 LDFLAGS: -L/usr/local/opt/llvm@16/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo darwin,arm64 CPPFLAGS: -I/opt/homebrew/opt/llvm@16/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,arm64 CXXFLAGS: -std=c++17 +// #cgo darwin,arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@16/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo linux CPPFLAGS: -I/usr/lib/llvm-16/include -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo linux CXXFLAGS: -std=c++17 +// #cgo linux LDFLAGS: -L/usr/lib/llvm-16/lib -lLLVM-16 +import "C" + +type run_build_sh int diff --git a/llvm_config_llvm17.go b/llvm_config_llvm17.go new file mode 100644 index 0000000..6a00b39 --- /dev/null +++ b/llvm_config_llvm17.go @@ -0,0 +1,16 @@ +//go:build !byollvm && llvm17 + +package llvm + +// #cgo darwin,amd64 CPPFLAGS: -I/usr/local/opt/llvm@17/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,amd64 CXXFLAGS: -std=c++17 +// #cgo darwin,amd64 LDFLAGS: -L/usr/local/opt/llvm@17/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo darwin,arm64 CPPFLAGS: -I/opt/homebrew/opt/llvm@17/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,arm64 CXXFLAGS: -std=c++17 +// #cgo darwin,arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@17/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo linux CPPFLAGS: -I/usr/include/llvm-17 -I/usr/include/llvm-c-17 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo linux CXXFLAGS: -std=c++17 +// #cgo linux LDFLAGS: -L/usr/lib/llvm-17/lib -lLLVM-17 +import "C" + +type run_build_sh int diff --git a/llvm_config_llvm18.go b/llvm_config_llvm18.go new file mode 100644 index 0000000..c41fea0 --- /dev/null +++ b/llvm_config_llvm18.go @@ -0,0 +1,16 @@ +//go:build !byollvm && llvm18 + +package llvm + +// #cgo darwin,amd64 CPPFLAGS: -I/usr/local/opt/llvm@18/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,amd64 CXXFLAGS: -std=c++17 +// #cgo darwin,amd64 LDFLAGS: -L/usr/local/opt/llvm@18/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo darwin,arm64 CPPFLAGS: -I/opt/homebrew/opt/llvm@18/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,arm64 CXXFLAGS: -std=c++17 +// #cgo darwin,arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@18/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo linux CPPFLAGS: -I/usr/include/llvm-18 -I/usr/include/llvm-c-18 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo linux CXXFLAGS: -std=c++17 +// #cgo linux LDFLAGS: -L/usr/lib/llvm-18/lib -lLLVM-18 +import "C" + +type run_build_sh int diff --git a/llvm_config_llvm19.go b/llvm_config_llvm19.go new file mode 100644 index 0000000..78dd5a0 --- /dev/null +++ b/llvm_config_llvm19.go @@ -0,0 +1,19 @@ +//go:build !byollvm && !llvm14 && !llvm15 && !llvm16 && !llvm17 && !llvm18 && !llvm20 && !llvm21 + +package llvm + +// #cgo darwin,amd64 CPPFLAGS: -I/usr/local/opt/llvm@19/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,amd64 CXXFLAGS: -std=c++17 +// #cgo darwin,amd64 LDFLAGS: -L/usr/local/opt/llvm@19/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo darwin,arm64 CPPFLAGS: -I/opt/homebrew/opt/llvm@19/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,arm64 CXXFLAGS: -std=c++17 +// #cgo darwin,arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@19/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo freebsd CPPFLAGS: -I/usr/local/llvm19/include -I/usr/local/llvm19/include/llvm-c -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo freebsd CXXFLAGS: -std=c++17 +// #cgo freebsd LDFLAGS: -L/usr/local/llvm19/lib -lLLVM +// #cgo linux CPPFLAGS: -I/usr/include/llvm-19 -I/usr/include/llvm-c-19 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo linux CXXFLAGS: -std=c++17 +// #cgo linux LDFLAGS: -L/usr/lib/llvm-19/lib -lLLVM-19 +import "C" + +type run_build_sh int diff --git a/llvm_config_llvm20.go b/llvm_config_llvm20.go new file mode 100644 index 0000000..090bdd6 --- /dev/null +++ b/llvm_config_llvm20.go @@ -0,0 +1,19 @@ +//go:build !byollvm && llvm20 + +package llvm + +// #cgo darwin,amd64 CPPFLAGS: -I/usr/local/opt/llvm@20/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,amd64 CXXFLAGS: -std=c++17 +// #cgo darwin,amd64 LDFLAGS: -L/usr/local/opt/llvm@20/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo darwin,arm64 CPPFLAGS: -I/opt/homebrew/opt/llvm@20/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,arm64 CXXFLAGS: -std=c++17 +// #cgo darwin,arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@20/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo freebsd CPPFLAGS: -I/usr/local/llvm20/include -I/usr/local/llvm20/include/llvm-c -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo freebsd CXXFLAGS: -std=c++17 +// #cgo freebsd LDFLAGS: -L/usr/local/llvm20/lib -lLLVM +// #cgo linux CPPFLAGS: -I/usr/include/llvm-20 -I/usr/include/llvm-c-20 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo linux CXXFLAGS: -std=c++17 +// #cgo linux LDFLAGS: -L/usr/lib/llvm-20/lib -lLLVM-20 +import "C" + +type run_build_sh int diff --git a/llvm_config_llvm21.go b/llvm_config_llvm21.go new file mode 100644 index 0000000..263c2fc --- /dev/null +++ b/llvm_config_llvm21.go @@ -0,0 +1,19 @@ +//go:build !byollvm && llvm21 + +package llvm + +// #cgo darwin,amd64 CPPFLAGS: -I/usr/local/opt/llvm@21/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,amd64 CXXFLAGS: -std=c++17 +// #cgo darwin,amd64 LDFLAGS: -L/usr/local/opt/llvm@21/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo darwin,arm64 CPPFLAGS: -I/opt/homebrew/opt/llvm@21/include -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo darwin,arm64 CXXFLAGS: -std=c++17 +// #cgo darwin,arm64 LDFLAGS: -L/opt/homebrew/opt/llvm@21/lib -Wl,-search_paths_first -Wl,-headerpad_max_install_names -lLLVM -lz -lm +// #cgo freebsd CPPFLAGS: -I/usr/local/llvm21/include -I/usr/local/llvm21/include/llvm-c -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo freebsd CXXFLAGS: -std=c++17 +// #cgo freebsd LDFLAGS: -L/usr/local/llvm21/lib -lLLVM +// #cgo linux CPPFLAGS: -I/usr/include/llvm-21 -I/usr/include/llvm-c-21 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS +// #cgo linux CXXFLAGS: -std=c++17 +// #cgo linux LDFLAGS: -L/usr/lib/llvm-21/lib -lLLVM-21 +import "C" + +type run_build_sh int