diff options
Diffstat (limited to 'test/monniaux/ocaml/byterun/Makefile')
-rw-r--r-- | test/monniaux/ocaml/byterun/Makefile | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/test/monniaux/ocaml/byterun/Makefile b/test/monniaux/ocaml/byterun/Makefile new file mode 100644 index 00000000..7b9f71ea --- /dev/null +++ b/test/monniaux/ocaml/byterun/Makefile @@ -0,0 +1,234 @@ +#************************************************************************** +#* * +#* OCaml * +#* * +#* Xavier Leroy, projet Cristal, INRIA Rocquencourt * +#* * +#* Copyright 1999 Institut National de Recherche en Informatique et * +#* en Automatique. * +#* * +#* All rights reserved. This file is distributed under the terms of * +#* the GNU Lesser General Public License version 2.1, with the * +#* special exception on linking described in the file LICENSE. * +#* * +#************************************************************************** + +include ../config/Makefile +include ../Makefile.common + +# The PROGRAMS (resp. LIBRARIES) variable list the files to build and +# install as programs in $(INSTALL_BINDIR) (resp. libraries in +# $(INSTALL_LIBDIR)) + +PROGRAMS = ocamlrun$(EXE) +LIBRARIES = ld.conf libcamlrun.$(A) +DYNLIBRARIES= + +ifeq "$(RUNTIMED)" "true" +PROGRAMS += ocamlrund$(EXE) +LIBRARIES += libcamlrund.$(A) +endif + +ifeq "$(RUNTIMEI)" "true" +PROGRAMS += ocamlruni$(EXE) +LIBRARIES += libcamlruni.$(A) +endif + +ifeq "$(UNIX_OR_WIN32)" "unix" +ifeq "$(SUPPORTS_SHARED_LIBRARIES)" "true" +LIBRARIES += libcamlrun_pic.$(A) +DYNLIBRARIES += libcamlrun_shared.$(SO) +endif +endif + +ifdef BOOTSTRAPPING_FLEXLINK +CFLAGS += -DBOOTSTRAPPING_FLEXLINK +endif + +# On Windows, OCAML_STDLIB_DIR needs to be defined dynamically + +ifeq "$(UNIX_OR_WIN32)" "win32" +# OCAML_STDLIB_DIR needs to arrive in dynlink.c as a string which both gcc and +# msvc are willing parse without warning. This means we can't pass UTF-8 +# directly since, as far as I can tell, cl can cope, but the pre-processor +# can't. So the string needs to be directly translated to L"" form. To do this, +# we take advantage of the fact that Cygwin uses GNU libiconv which includes a +# Java pseudo-encoding which translates any UTF-8 sequences to \uXXXX (and, +# unlike the C99 pseudo-encoding, emits two surrogate values when needed, rather +# than \UXXXXXXXX). The \u is then translated to \x in order to accommodate +# pre-Visual Studio 2013 compilers where \x is a non-standard alias for \u. +OCAML_STDLIB_DIR = $(shell echo $(LIBDIR)| iconv -t JAVA | sed -e 's/\\u/\\x/g') +CFLAGS += -DOCAML_STDLIB_DIR='L"$(OCAML_STDLIB_DIR)"' +endif + +CFLAGS += $(IFLEXDIR) + +ifneq "$(CCOMPTYPE)" "msvc" +CFLAGS += -g +endif + +DFLAGS=$(CFLAGS) -DDEBUG +IFLAGS=$(CFLAGS) +PICFLAGS=$(CFLAGS) $(SHAREDCCCOMPOPTS) + +DBGO=d.$(O) + +ifeq "$(UNIX_OR_WIN32)" "win32" +LIBS = $(BYTECCLIBS) $(EXTRALIBS) +ifdef BOOTSTRAPPING_FLEXLINK +MAKE_OCAMLRUN=$(MKEXE_BOOT) +else +MAKE_OCAMLRUN = $(MKEXE) -o $(1) $(2) +endif +else +LIBS = $(BYTECCLIBS) +MAKE_OCAMLRUN = $(MKEXE) $(LDFLAGS) -o $(1) $(2) +endif + +PRIMS=\ + alloc.c array.c compare.c extern.c floats.c gc_ctrl.c hash.c \ + intern.c interp.c ints.c io.c lexing.c md5.c meta.c obj.c parsing.c \ + signals.c str.c sys.c callback.c weak.c finalise.c stacks.c \ + dynlink.c backtrace_prim.c backtrace.c spacetime.c afl.c \ + bigarray.c + +OBJS=$(addsuffix .$(O), \ + interp misc stacks fix_code startup_aux startup \ + freelist major_gc minor_gc memory alloc roots globroots \ + fail signals signals_byt printexc backtrace_prim backtrace \ + compare ints floats str array io extern intern \ + hash sys meta parsing gc_ctrl md5 obj \ + lexing callback debugger weak compact finalise custom \ + dynlink spacetime afl $(UNIX_OR_WIN32) bigarray main) + +DOBJS=$(OBJS:.$(O)=.$(DBGO)) instrtrace.$(DBGO) +IOBJS=$(OBJS:.$(O)=.i.$(O)) +PICOBJS=$(OBJS:.$(O)=.pic.$(O)) + +.PHONY: all +all: $(LIBRARIES) $(DYNLIBRARIES) $(PROGRAMS) + +ld.conf: ../config/Makefile + echo "$(STUBLIBDIR)" > $@ + echo "$(LIBDIR)" >> $@ + +INSTALL_INCDIR=$(INSTALL_LIBDIR)/caml + +.PHONY: install +install: + $(INSTALL_PROG) $(PROGRAMS) "$(INSTALL_BINDIR)" + $(INSTALL_DATA) $(LIBRARIES) "$(INSTALL_LIBDIR)" + if test -n "$(DYNLIBRARIES)"; then \ + $(INSTALL_PROG) $(DYNLIBRARIES) "$(INSTALL_LIBDIR)"; \ + fi + mkdir -p "$(INSTALL_INCDIR)" + $(INSTALL_DATA) caml/*.h "$(INSTALL_INCDIR)" + +# If primitives contain duplicated lines (e.g. because the code is defined +# like +# #ifdef X +# CAMLprim value caml_foo() ... +# #else +# CAMLprim value caml_foo() ... +# end), horrible things will happen (duplicated entries in Runtimedef -> +# double registration in Symtable -> empty entry in the PRIM table -> +# the bytecode interpreter is confused). +# We sort the primitive file and remove duplicates to avoid this problem. + +# Warning: we use "sort | uniq" instead of "sort -u" because in the MSVC +# port, the "sort" program in the path is Microsoft's and not cygwin's + +# Warning: POSIX sort is locale dependent, that's why we set LC_ALL explicitly. +# Sort is unstable for "is_directory" and "isatty" +# see http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html: +# "using sort to process pathnames, it is recommended that LC_ALL .. set to C" + + +primitives : $(PRIMS) + sed -n -e "s/CAMLprim value \([a-z0-9_][a-z0-9_]*\).*/\1/p" $(PRIMS) \ + | LC_ALL=C sort | uniq > primitives + +prims.c : primitives + (echo '#define CAML_INTERNALS'; \ + echo '#include "caml/mlvalues.h"'; \ + echo '#include "caml/prims.h"'; \ + sed -e 's/.*/extern value &();/' primitives; \ + echo 'c_primitive caml_builtin_cprim[] = {'; \ + sed -e 's/.*/ &,/' primitives; \ + echo ' 0 };'; \ + echo 'char * caml_names_of_builtin_cprim[] = {'; \ + sed -e 's/.*/ "&",/' primitives; \ + echo ' 0 };') > prims.c + +caml/opnames.h : caml/instruct.h + cat $^ | tr -d '\r' | \ + sed -e '/\/\*/d' \ + -e '/^#/d' \ + -e 's/enum /char * names_of_/' \ + -e 's/{$$/[] = {/' \ + -e 's/\([[:upper:]][[:upper:]_0-9]*\)/"\1"/g' > $@ + +# caml/jumptbl.h is required only if you have GCC 2.0 or later +caml/jumptbl.h : caml/instruct.h + cat $^ | tr -d '\r' | \ + sed -n -e '/^ /s/ \([A-Z]\)/ \&\&lbl_\1/gp' \ + -e '/^}/q' > $@ + +caml/version.h : ../VERSION ../tools/make-version-header.sh + ../tools/make-version-header.sh ../VERSION > caml/version.h + +.PHONY: clean +clean: + rm -f $(LIBRARIES) $(DYNLIBRARIES) $(PROGRAMS) *.$(O) *.$(A) *.$(SO) + rm -f primitives prims.c caml/opnames.h caml/jumptbl.h + rm -f caml/version.h + +ocamlrun$(EXE): prims.$(O) libcamlrun.$(A) + $(call MAKE_OCAMLRUN,$@,$^ $(LIBS)) + +libcamlrun.$(A): $(OBJS) + $(call MKLIB,$@, $^) + +ocamlrund$(EXE): prims.$(O) libcamlrund.$(A) + $(MKEXE) $(MKEXEDEBUGFLAG) -o $@ $^ $(LIBS) + +libcamlrund.$(A): $(DOBJS) + $(call MKLIB,$@, $^) + +ocamlruni$(EXE): prims.$(O) libcamlruni.$(A) + $(MKEXE) -o $@ $^ $(LIBS) + +libcamlruni.$(A): $(IOBJS) + $(call MKLIB,$@, $^) + +libcamlrun_pic.$(A): $(PICOBJS) + $(call MKLIB,$@, $^) + +libcamlrun_shared.$(SO): $(PICOBJS) + $(MKDLL) -o $@ $^ $(BYTECCLIBS) + +%.$(O): %.c + $(CC) -c $(CFLAGS) $(CPPFLAGS) $< + +%.$(DBGO): %.c + $(CC) -c $(DFLAGS) $(CPPFLAGS) $(OUTPUTOBJ)$@ $< + +%.i.$(O): %.c + $(CC) -c $(IFLAGS) $(CPPFLAGS) $(OUTPUTOBJ)$@ $< + +%.pic.$(O): %.c + $(CC) -c $(PICFLAGS) $(CPPFLAGS) $(OUTPUTOBJ)$@ $< + +.PHONY: depend +ifeq "$(TOOLCHAIN)" "msvc" +depend: + $(error Dependencies cannot be regenerated using the MSVC ports) +else +depend: prims.c caml/opnames.h caml/jumptbl.h caml/version.h + $(CC) -MM $(CFLAGS) $(CPPFLAGS) *.c | sed -e 's/\.o/.$$(O)/'>.$@ + $(CC) -MM $(DFLAGS) $(CPPFLAGS) *.c | sed -e 's/\.o/.d.$$(O)/'>>.$@ + $(CC) -MM $(IFLAGS) $(CPPFLAGS) *.c | sed -e 's/\.o/.i.$$(O)/'>>.$@ + $(CC) -MM $(PICFLAGS) $(CPPFLAGS) *.c | sed -e 's/\.o/.pic.$$(O)/'>>.$@ +endif + +include .depend |