[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: oasis patch that adds an .nobj.o target
I've put in a further changeset into OASIS to add a new "Target" field to the Executable section. Just set this to "xen" and it will build that target instead. You still need CompiledObject:native as that will put the correct _tags entries in for the .nobj.o target (which is the final link phase). See: https://github.com/avsm/ocaml-xenstore/commit/0c1b80ddba612487b7f97ff4c2444a10e451196d ...for what I mean in ocaml-xenstore. So given that we should be able to compile the libraries with *either* --enable-unix or --enable-xen, and the appropriate binaries will be built with the current toolchain and OASIS. Good enough for a first release! The OPAM packaging can signal the current environment that is set via environment variables --- currently MIRAGE_OS and MIRAGE_XEN. I guess the final step is a ./configure script that detects these and translates them into the correct 'ocaml setup.ml --enable-foo' flags. Will do that when I'm off this train and in the office... -anil On 29 Aug 2012, at 02:46, David Scott <scott.dj@xxxxxxxxx> wrote: > Hi, > > Thanks for that -- "ocamlbuild xen/sleep.xen" is working for me now > (modulo bugs which are obviously mine in origin) > > I also think I'm beginning to get the hang of opam; 'switching' to > 'system' to install stuff needed by oasis and then 'switching' back to > the xen toolchain for actual builds. > > Cheers, > Dave > > On Tue, Aug 28, 2012 at 11:37 PM, Anil Madhavapeddy <anil@xxxxxxxxxx> wrote: >> I've added in the Xen rules to OASIS now too, so that you can do 'ocamlbuild >> sleep.xen' in ocaml-xenstore successfully. My forked repository is at: >> >> https://github.com/avsm/oasis/tree/add-xen >> >> Dave, this works on ocaml-xenstore now if you regenerate myocamlbuild.ml >> with this OASIS (but dont forget to move the existing myocamlbuild.ml out of >> the way first). >> >> I'm figuring out how to add this as a plugin, so it'll only get added when >> specified as 'Plugin: xen' in OASIS. Also, we need the Executable field in >> _oasis to build stuff with a .xen suffix. >> >> -anil >> >> On 27 Aug 2012, at 15:50, Anil Madhavapeddy <anil@xxxxxxxxxx> wrote: >> >>> This patch against darcs-oasis is sufficient to add a "native output obj" >>> target that outputs a standalone object file. Just one more little rule >>> required to do the Xen objcopy/link, but this will also be useful for >>> kFreeBSD too. This one is mainly for Dave as he's working on >>> ocaml-xenstore atm. >>> >>> I'll submit an upstreamable patch shortly and have a Xen plugin to OASIS >>> that will make all our build pains waft away into a gentle summer breeze. >>> >>> -anil >>> >>> avsm@debian:~/src/darcs/oasis$ darcs diff >>> diff -rN -u old-oasis/src/plugins/ocamlbuild/MyOCamlbuildBase.ml >>> new-oasis/src/plugins/ocamlbuild/MyOCamlbuildBase.ml >>> --- old-oasis/src/plugins/ocamlbuild/MyOCamlbuildBase.ml 2012-08-24 >>> 18:45:09.249486856 +0100 >>> +++ new-oasis/src/plugins/ocamlbuild/MyOCamlbuildBase.ml 2012-08-24 >>> 18:45:09.301486856 +0100 >>> @@ -165,6 +165,15 @@ >>> ) >>> t.lib_c; >>> >>> + (* Add output_obj rules mapped to .nobj.o *) >>> + let native_output_obj x = >>> + OC.link_gen "cmx" "cmxa" !Options.ext_lib [!Options.ext_obj; >>> "cmi"] >>> + OC.ocamlopt_link_prog >>> + (fun tags -> tags++"ocaml"++"link"++"byte"++"output_obj") x >>> + in >>> + rule "ocaml: cmx* and o* -> .nobj.o" ~prod:"%.nobj.o" >>> ~deps:["%.cmx"; "%.o"] >>> + (native_output_obj "%.cmx" "%.nobj.o"); >>> + >>> (* Add flags *) >>> List.iter >>> (fun (tags, cond_specs) -> >>> diff -rN -u old-oasis/src/plugins/ocamlbuild/MyOCamlbuildFindlib.ml >>> new-oasis/src/plugins/ocamlbuild/MyOCamlbuildFindlib.ml >>> --- old-oasis/src/plugins/ocamlbuild/MyOCamlbuildFindlib.ml 2012-08-24 >>> 18:45:09.249486856 +0100 >>> +++ new-oasis/src/plugins/ocamlbuild/MyOCamlbuildFindlib.ml 2012-08-24 >>> 18:45:09.301486856 +0100 >>> @@ -86,6 +86,7 @@ >>> >>> (* When one link an OCaml library/binary/package, one should use >>> -linkpkg *) >>> flag ["ocaml"; "link"; "program"] & A"-linkpkg"; >>> + flag ["ocaml"; "link"; "output_obj"] & A"-linkpkg"; >>> >>> (* For each ocamlfind package one inject the -package option when >>> * compiling, computing dependencies, generating documentation and >>> diff -rN -u old-oasis/src/plugins/ocamlbuild/OCamlbuildPlugin.ml >>> new-oasis/src/plugins/ocamlbuild/OCamlbuildPlugin.ml >>> --- old-oasis/src/plugins/ocamlbuild/OCamlbuildPlugin.ml 2012-08-24 >>> 18:45:09.249486856 +0100 >>> +++ new-oasis/src/plugins/ocamlbuild/OCamlbuildPlugin.ml 2012-08-24 >>> 18:45:09.301486856 +0100 >>> @@ -158,9 +158,9 @@ >>> let acc = >>> match bs.bs_compiled_object with >>> | Native -> >>> - (target ".native") :: acc >>> + (target ".native") :: (target ".nobj.o") :: acc >>> | Best when bool_of_string (is_native ()) -> >>> - (target ".native") :: acc >>> + (target ".native") :: (target ".nobj.o") :: acc >>> | Byte >>> | Best -> >>> (target ".byte") :: acc >>> @@ -928,11 +928,11 @@ >>> let ext = >>> match bs.bs_compiled_object with >>> | Best -> >>> - "{native,byte}" >>> + "{native,byte,nobj.o}" >>> | Byte -> >>> "byte" >>> | Native -> >>> - "native" >>> + "native,nobj.o" >>> in >>> prepend_bs_path bs >>> (OASISUnixPath.replace_extension >> > > > > -- > Dave Scott >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |