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}
next 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