[LLVMdev] OCaml Install Error
Gordon Henriksen
gordonhenriksen at mac.com
Tue Oct 2 10:51:14 PDT 2007
On 2007-10-02, at 10:46, Jan Rehders wrote:
> where can I read more about this? I assume (hope) the lib provides
> some kind of OCaml bindings? I could not find any trace of it in
> the 2.1 release source so I guess it's currently SVN only?
Jan,
Here's a trivial example.
$ cat metahelloworld.ml
(* metahelloworld.ml *)
open Llvm
open Llvm_bitwriter
let _ =
let filename = Sys.argv.(1) in
let m = create_module filename in
(* @greeting = global [14 x i8] c"Hello, world!\00" *)
let greeting = define_global "greeting" (make_string_constant
"Hello, world!" true) m in
(* declare i32 @puts(i8*) *)
let puts = declare_function "puts" (make_function_type i32_type [|
make_pointer_type i8_type |]
false) m in
(* define i32 @main() {
entry: *)
let main = define_function "main" (make_function_type
i32_type [| |] false) m in
let at_entry = builder_at_end (entry_block main) in
(* %tmp = getelementptr [14 x i8]* @greeting, i32 0, i32 0 *)
let zero = make_int_constant i32_type 0 false in
let str = build_gep greeting [| zero; zero |] "tmp" at_entry in
(* call i32 @puts( i8* %tmp ) *)
ignore (build_call puts [| str |] "" at_entry);
(* ret void *)
ignore (build_ret (make_null i32_type) at_entry);
(* write the module to a file *)
if not (write_bitcode_file m filename) then exit 1;
dispose_module m
$ ocamlopt -cc g++ llvm.cmxa llvm_bitwriter.cmxa -o metahelloworld
metahelloworld.ml
$ ./metahelloworld helloworld.bc
$ llvm-dis < helloworld.bc
; ModuleID = '<stdin>'
@greeting = global [14 x i8] c"Hello, world!\00" ; <
[14 x i8]*> [#uses=1]
declare i32 @puts(i8*)
define i32 @main() {
entry:
%tmp = getelementptr [14 x i8]* @greeting, i32 0, i32 0 ;
<i8*> [#uses=1]
call i32 @puts( i8* %tmp ) ; <i32>:0 [#uses=0]
ret i32 0
}
$ llc -o helloworld.s helloworld.bc
$ gcc -o helloworld helloworld.s
$ ./helloworld
Hello, world!
— Gordon
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20071002/58336aef/attachment.html>
More information about the llvm-dev
mailing list