1//===- support.go - Bindings for support ----------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file defines bindings for the support component.
11//
12//===----------------------------------------------------------------------===//
13
14package llvm
15
16/*
17#include "llvm-c/Support.h"
18#include "SupportBindings.h"
19#include <stdlib.h>
20*/
21import "C"
22
23import (
24	"errors"
25	"unsafe"
26)
27
28// Loads a dynamic library such that it may be used as an LLVM plugin.
29// See llvm::sys::DynamicLibrary::LoadLibraryPermanently.
30func LoadLibraryPermanently(lib string) error {
31	var errstr *C.char
32	libstr := C.CString(lib)
33	defer C.free(unsafe.Pointer(libstr))
34	C.LLVMLoadLibraryPermanently2(libstr, &errstr)
35	if errstr != nil {
36		err := errors.New(C.GoString(errstr))
37		C.free(unsafe.Pointer(errstr))
38		return err
39	}
40	return nil
41}
42
43// Parse the given arguments using the LLVM command line parser.
44// See llvm::cl::ParseCommandLineOptions.
45func ParseCommandLineOptions(args []string, overview string) {
46	argstrs := make([]*C.char, len(args))
47	for i, arg := range args {
48		argstrs[i] = C.CString(arg)
49		defer C.free(unsafe.Pointer(argstrs[i]))
50	}
51	overviewstr := C.CString(overview)
52	defer C.free(unsafe.Pointer(overviewstr))
53	C.LLVMParseCommandLineOptions(C.int(len(args)), &argstrs[0], overviewstr)
54}
55