caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: John Whitington <john@coherentgraphics.co.uk>
To: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] Ocaml, Objective-c, and XCode
Date: Thu, 11 Feb 2010 11:16:20 +0000	[thread overview]
Message-ID: <4B73E704.7040309@coherentgraphics.co.uk> (raw)
In-Reply-To: <etPan.4b735d26.6b8b4567.81@Macintosh-234.local>

Hi Andrew,

On 11/02/2010 01:28, Andrew Webb wrote:
> Hi there,
>
> I have a few questions relating to using Ocaml with objective-c for anyone who programs on a Mac. I am aware that there aren't any real bindings between ocaml and objective-c/cocoa, so I am investigating rolling my own. So:
>
> 1) Does anyone have experience in interfacing ocaml and objc? Is it difficult?
> 2) Does anyone have a small example project that does mix these two languages? I have looked at unison, but it is too big for me to get my head around. I am thinking more on the scale of the ubiquitous Currency Converter...
> 3) Does anyone who is mixing these languages use Xcode to do so? If so, what steps do you need to go through to set that up?
>
> A big thanks to anyone who can answer (some of) these questions. I am trying to decide whether to use haskell or ocaml for my next cocoa application, as these are the two languages I am most comfortable. I have recently found an excellent description of how to do this using haskell (http://tscheff.blogspot.com/2010/02/currync-converter-using-haskell-with.html) and was wondering if there were such resources for ocaml.

I've just released a product written in this way:

http://www.coherentpdf.com/proview.html

I just have a normal makefile which builds a .a library from the ocaml 
code and its C wrapper as per the instructions in the ocaml manual.

The xcode project then uses the .a and the .h of the wrapper and a few 
extra compilation and linking flags. Doubtless with a little bit more 
effort, Xcode could be made to call the ocaml makefile.

Here's the OCaml makefile:



mklib:
         ocamlc cpdf.mli;
         ocamlopt -c -I . unix.cmxa str.cmxa bigarray.cmxa cgutil.cmxa 
camlpdf.cmxa cpdf.ml;
         ocamlc cpdflib.mli;
         ocamlopt -c -I . unix.cmxa str.cmxa bigarray.cmxa cgutil.cmxa 
camlpdf.cmxa cpdf.cmx cpdflib.ml;
         ocamlc cpdflibc.mli;
         ocamlopt -c -I . unix.cmxa str.cmxa bigarray.cmxa cgutil.cmxa 
camlpdf.cmxa cpdf.cmx cpdflib.cmx cpdflibc.ml;
         ocamlc cpdflibwrapper.c;
         ocamlopt -output-obj -o cpdflibc.o unix.cmxa str.cmxa 
bigarray.cmxa cgutil.cmxa camlpdf.cmxa cpdf.cmx cpdflib.cmx cpdflibc.cmx;
         cp /usr/local/lib/ocaml/libasmrun.a cpdflib.a;
         ar r cpdflib.a cpdflibc.o cpdflibwrapper.o

test:   zlibstubs.o cpdflib.a
         cc -m32 -c cpdflibc-test.c -o cpdflibc-test.o; \
         cc -m32 -L'/usr/local/lib/ocaml' -lunix -lbigarray -lstr -lz -o 
test cpdflibc-test.o zlibstubs.o cpdflib.a



(The 'test' target shows you the kind of compiler and linker flags you'd 
need to put into XCode).

Basically, once you've got the usual ocaml/c interface done, the Xcode 
part is no problem.

Cheers,

-- 
John Whitington
Director, Coherent Graphics Ltd
http://www.coherentpdf.com/


      reply	other threads:[~2010-02-11 11:16 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-02-11  1:28 Andrew Webb
2010-02-11 11:16 ` John Whitington [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4B73E704.7040309@coherentgraphics.co.uk \
    --to=john@coherentgraphics.co.uk \
    --cc=caml-list@yquem.inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).