caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: paul.lachat@edu.univ-fcomte.fr
To: caml-list@inria.fr
Subject: [Caml-list] [Question] Compile a custom toplevel on Windows
Date: Tue, 18 Apr 2017 09:21:14 +0200 (CEST)	[thread overview]
Message-ID: <36405058.13728179.1492500074563.JavaMail.zimbra@edu.univ-fcomte.fr> (raw)


[-- Attachment #1.1: Type: text/plain, Size: 3555 bytes --]

Hello, 

I've change the toplevel of Ocaml to replace the standard input and output by named pipes on Windows. 

To achieve this, I've change the toploop.ml (https://github.com/ocaml/ocaml/blob/trunk/toplevel/toploop.ml) to include the named pipes 
of Ocamlnet (http://projects.camlcity.org/projects/dl/ocamlnet-4.1.2/doc/html-main/Netsys_win32.html#1_Supportfornamedpipes). 

After that, I tried to understand how I could compile this custom toplevel. 
I want to compile the toplevel to have a .exe, so I could avoid using Cygwin to launch the application. 

I've run the makefile of the git repository of Ocaml and tried to follow the sequence of compilation for the toplevel. 
I use ocamlopt to have a native aplication and ocamlfind to link toploop.ml with the library ocamlnet 
(via the package netsys where the win32 named pipe are defined) and unix for catching exceptions. 

I use Opam : 1.3.0~dev, Ocaml : 4.03.0 and Cygwin on Windows 7. 

So I write a Makefile (see the attachement) and when I launch it, I get this : 
______________________________________________________________________ 
ocamlopt -g -I +compiler-libs ocamlcommon.cmxa ocamlbytecomp.cmxa ocamlcommon.a ocamlbytecomp.a -c genprintval.mli 
ocamlopt -g -I +compiler-libs ocamlcommon.cmxa ocamlbytecomp.cmxa ocamlcommon.a ocamlbytecomp.a -c genprintval.ml 
ocamlopt -g -I +compiler-libs ocamlcommon.cmxa ocamlbytecomp.cmxa ocamlcommon.a ocamlbytecomp.a -c toploop.mli 
ocamlfind ocamlopt -g -I +compiler-libs ocamlcommon.cmxa ocamlbytecomp.cmxa ocamlcommon.a ocamlbytecomp.a -c toploop.ml -linkpkg -package netsys -package unix 
File "C:\OCaml64\home\Zar\toplevel_custom\_none_", line 1: 
Warning 58: no cmx file was found in path for module Netsys_win32, and its interface was not compiled with -opaque 
ocamlopt -g -I +compiler-libs ocamlcommon.cmxa ocamlbytecomp.cmxa ocamlcommon.a ocamlbytecomp.a -c trace.mli 
ocamlopt -g -I +compiler-libs ocamlcommon.cmxa ocamlbytecomp.cmxa ocamlcommon.a ocamlbytecomp.a -c trace.ml 
ocamlopt -g -I +compiler-libs ocamlcommon.cmxa ocamlbytecomp.cmxa ocamlcommon.a ocamlbytecomp.a -c topdirs.mli 
ocamlopt -g -I +compiler-libs ocamlcommon.cmxa ocamlbytecomp.cmxa ocamlcommon.a ocamlbytecomp.a -c topdirs.ml 
ocamlopt -g -I +compiler-libs ocamlcommon.cmxa ocamlbytecomp.cmxa ocamlcommon.a ocamlbytecomp.a -c topmain.mli 
ocamlopt -g -I +compiler-libs ocamlcommon.cmxa ocamlbytecomp.cmxa ocamlcommon.a ocamlbytecomp.a -c topmain.ml 
ocamlopt -g -I +compiler-libs -a -o tmp_ocamltoplevel.cmxa genprintval.cmx toploop.cmx trace.cmx topdirs.cmx topmain.cmx 
ocamlopt -g -I +compiler-libs ocamlcommon.cmxa ocamlbytecomp.cmxa ocamlcommon.a ocamlbytecomp.a -c topstart.ml 
ocamlfind ocamlopt -g -I +compiler-libs ocamlcommon.cmxa ocamlbytecomp.cmxa ocamlcommon.a ocamlbytecomp.a -linkall -o toplevel_custom.exe tmp_ocamltoplevel.cmxa topstart.cmx tmp_ocamltoplevel.a -linkpkg -package netsys -package unix 
** Cannot resolve symbols for tmp_ocamltoplevel.a(topdirs.o): 
caml_get_current_environment 
File "caml_startup", line 1: 
Error: Error during linking 
______________________________________________________________________ 

But I don't know how to resolve this error. 
I find that "caml_get_current_environment" is defined in meta.c (and used in topdirs.ml) 
(https://github.com/ocaml/ocaml/search?utf8=%E2%9C%93&q=caml_get_current_environment+&type=) 
But I think that meta.c is in the ocamlbytecomp.cmxa library, so I don't know why the linker don't find the symbols. 

Someone know how to resolve this problem ? 

Thank you in advance ! 

[-- Attachment #1.2: Type: text/html, Size: 5114 bytes --]

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: Makefile --]
[-- Type: text/x-makefile; name=Makefile, Size: 1297 bytes --]

CC=ocamlopt

SRCFILES=genprintval.ml toploop.ml trace.ml topdirs.ml topmain.ml
CMXFILES=$(SRCFILES:.ml=.cmx)

TOPLIBNAME=tmp_ocamltoplevel
TOPLIBA=$(addsuffix .a, ${TOPLIBNAME})
TOPLIBCMXA=$(addsuffix .cmxa, ${TOPLIBNAME})

OTHERLIB=ocamlcommon ocamlbytecomp
OTHERLIBCMXA=$(addsuffix .cmxa, ${OTHERLIB})
OTHERLIBA=$(addsuffix .a, ${OTHERLIB})

GENERALFLAGS=-g -I +compiler-libs
CFLAGS=-strict-sequence -principal -absname -bin-annot -safe-string -strict-formats

TARGET=toplevel_custom.exe

all: ${TOPLIBCMXA} topstart.cmx
	ocamlfind ${CC} ${GENERALFLAGS} ${OTHERLIBCMXA} ${OTHERLIBA} -linkall -o ${TARGET} $^ ${TOPLIBA} -linkpkg -package netsys -package unix

${TOPLIBCMXA}: ${CMXFILES}
	${CC} ${GENERALFLAGS} -a -o $@ $^

topstart.cmx: topstart.ml
	${CC} ${GENERALFLAGS} ${OTHERLIBCMXA} ${OTHERLIBA} ${CFLAGS} -c $<

toploop.cmx: toploop.ml toploop.cmi
	ocamlfind ${CC} ${GENERALFLAGS} ${OTHERLIBCMXA} ${OTHERLIBA} ${CFLAGS} -c $< -linkpkg -package netsys -package unix

%.cmx: %.ml %.cmi
	${CC} ${GENERALFLAGS} ${OTHERLIBCMXA} ${OTHERLIBA} ${CFLAGS} -c $<

%.cmi: %.mli
	${CC} ${GENERALFLAGS} ${OTHERLIBCMXA} ${OTHERLIBA} ${CFLAGS} -c $<

clean:
	@rm -f *.cmi *.cmo *.cmx *.cmt *.cmti *.o *.txt

mrproper: clean
	@rm -f ${TARGET} ${TOPLIBA} ${TOPLIBCMXA}

             reply	other threads:[~2017-04-18  7:21 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-18  7:21 paul.lachat [this message]
2017-04-18 18:11 ` Evgeny Roubinchtein
2017-04-19  6:31 ` Adrien Nader

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=36405058.13728179.1492500074563.JavaMail.zimbra@edu.univ-fcomte.fr \
    --to=paul.lachat@edu.univ-fcomte.fr \
    --cc=caml-list@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).