summaryrefslogtreecommitdiff
path: root/cil/ocamlutil/Makefile.ocaml
diff options
context:
space:
mode:
Diffstat (limited to 'cil/ocamlutil/Makefile.ocaml')
-rw-r--r--cil/ocamlutil/Makefile.ocaml395
1 files changed, 0 insertions, 395 deletions
diff --git a/cil/ocamlutil/Makefile.ocaml b/cil/ocamlutil/Makefile.ocaml
deleted file mode 100644
index 36ac21a..0000000
--- a/cil/ocamlutil/Makefile.ocaml
+++ /dev/null
@@ -1,395 +0,0 @@
-# -*- Mode: makefile -*-
-# Copyright (c) 2001-2002,
-# George C. Necula <necula@cs.berkeley.edu>
-# Scott McPeak <smcpeak@cs.berkeley.edu>
-# Wes Weimer <weimer@cs.berkeley.edu>
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions are
-# met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in the
-# documentation and/or other materials provided with the distribution.
-#
-# 3. The names of the contributors may not be used to endorse or promote
-# products derived from this software without specific prior written
-# permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
-# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
-# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
-# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- # Generic Makefile for Ocaml projects
- # Written by necula@cs.berkeley.edu
- #
- # Features:
- # - keeps byproducts of building in a separate directory
- # - handles dependencies automatically
- # - user specifies just what modules go into a project and
- # everything else is done automatically
- # - you can use one Makefile for several Ocaml projects
- #
- # You must include this file in your Makefile. Before the include point
- # you must defined the following variables (which are glob al for all Ocaml
- # projects specified in one Makefile):
- #
- # CAMLDIR - the directory where to get the ocaml executables from.
- # Must be empty (defaul) or end with a /
- # OBJDIR - the directory where to put all object files. This directory
- # must exist (default obj)
- # DEPENDDIR - the directory where to put dependency files. This directory
- # must exist. (default obj/.depend)
- # NATIVECAML - if set then will use the native compiler
- # UNSAFE - if set then will turn off safety checks (only with NATIVECAML)
- # PROFILE - if set then it will compile and link with "gprof" profiling
- # support (NATIVECAML mode only)
- # ASSEMBLY - if set then it will keep assembly files
- # STATIC - if set then it will compile and link statically
- # (NATIVECAML mode only)
- # PREPROC - the preprocessor command
-
- # MODULES - a list of all modules for all projects defined in the
- # Makefile. Give only the basenames (no directory,
- # no extension). This is used to create the dependencies.
- # SOURCEDIRS - a list of all directories containing sources for all
- # projects defined in a Makefile. This is used to set vpath.
- # MLLS - a list of all .mll (ocamllex input) files for all
- # projects defined in the Makefile.
- # MLYS - a list of all .mly (ocamlyacc input) files for all
- # projects defined in the Makefile.
- # ECHO - if specifically set to nothing then it will print
- # all of the commands issued. Set this in the command line
- # if you want to see what is going on.
- #
- # COMPILEFLAGS - if defined, then it is passed as argument to ocamlc
- # and ocamlopt
- # LINKFLAGS - if defined, then it is passed as argument to
- # ocamlc and ocamlopt, when linking (at start of
- # command line)
- #
- # CAML_CFLAGS - flags used only for the compilation of C files.
- # e.g. '-ccopt <gcc flag>'
- #
- #
- # After you set all of the above you must do the following for EACH separate
- # executable that you want to build.
- #
- # Define the following:
- # PROJECT_EXECUTABLE - the name of the executable you want to build. To take
- # advantage of the naming scheme that separates the
- # bytecode version and the native version, use the
- # $(EXE) variable which is defined to either .byte.exe
- # or .asm.exe. I typically put the executable in
- # $(OBJDIR) as well.
- # PROJECT_MODULES - the base names of the modules that make this
- # executable in the order in which they must be
- # passed to the linker. Make sure that all of
- # the names mentioned here are also mentioned in
- # MODULES.
- # PROJECT_CMODULES - same as modules but for the C modules. These
- # do not need to be mentioned in MODULES. There must be
- # no name clashes with MODULES
- # PROJECT_LIBS - the base names of the libraries that you
- # want to link in the executable.
- #
- #
- # Then include Makefile.ocaml.build to generate a customized
- # rule for making your executable.
- #
- # Example:
- #
- # OBJDIR = obj
- # DEPENDDIR = obj/.depend
- # SOURCEDIRS = src src/special
- # MLLS = mylex
- # MLYS = myparse
- #
- # MODULES = mod11 mod12 mod21 modcommon
- #
- # # Rules for project 1
- # PROJECT_EXECUTABLE = $(OBJDIR)/proj1$(EXE)
- # PROJECT_MODULES = mod11 mod12 modcommon
- # PROJECT_CMODULES =
- # PROJEC_LIBS = unix
- # include Makefile.ocaml.build
- #
- #
- # # Rules for project 2
- # PROJECT_EXECUTABLE = $(OBJDIR)/proj2$(EXE)
- # PROJECT_MODULES = mod21 modcommon
- # PROJECT_CMODULES =
- # PROJEC_LIBS = unix str
- # include Makefile.ocaml.build
-
-
-CAMLLEX = ocamllex
-CAMLYACC= ocamlyacc -v
-CAMLDEP = ocamldep
-
-COMPILEFLAGS += -I $(OBJDIR)
-
-# sm: two styles for echoing compilation progress:
-# style 1, by George:
-# - print English descriptions of what's happening
-# - set ECHO to "" to see *everything*
-# style 2, by Scott:
-# - do not print English descriptions
-# - print every shell command that is executed which has a side effect,
-# so that they could be pasted into a shell to reproduce manually
-# - omit some of the details of dependency generation
-#
-# to be able to choose which style, several variables are used:
-# @$(NARRATIVE) - put this before English descriptions for style 1
-# @$(COMMAND) - put this before shell commands which are to be
-# printed for style 2; the command is *not* executed
-# $(AT) - put this before shell commands which are to be executed,
-# and also printed in style 2
-# $(ECHO) - use in place of '@' for things not printed in either style
-ifdef ECHOSTYLE_SCOTT
- # 'true' silently consumes its arguments, whereas 'echo' prints them
- NARRATIVE := true
- COMMAND := echo
- AT :=
- ECHO := @
-else
- NARRATIVE := echo
- COMMAND := true
- # change these next two definitions to <empty> to echo everything,
- # or leave as @ to suppress echoing
- AT := @
- ECHO := @
-endif
-
-ifdef PREPROC
- COMPILEFLAGS += -pp "$(PREPROC)$"
- DEPFLAGS += -pp "$(PREPROC)"
-endif
-
-COMPILEMSG=
-LINKMSG=
-
-ifdef WIN32
-OBJ = obj
-else
-OBJ = o
-endif
-EXE = $(EXEEXT).exe
-
-
-export EXE
-
-ifdef NATIVECAML
- ifdef PROFILE
- COMPILEFLAGS += -p
- LINKFLAGS += -p
- COMPILEMSG += (profile)
- LINKMSG += (profile)
- endif
- ifdef ASSEMBLY
- COMPILEFLAGS += -S
- endif
- ifdef STATIC
- COMPILEFLAGS += -ccopt -static
- LINKFLAGS += -ccopt -static
- endif
- #foo := $(shell echo "I am in NATIVECAML mode" >&2; echo whatever)
- ifdef WIN32
- COMPILEFLAGS += -ccopt /Ox
- else
- COMPILEFLAGS += -ccopt -O3
- endif
- CAMLC = $(CAMLDIR)ocamlopt $(COMPILEFLAGS)
- CAMLLINK = $(CAMLDIR)ocamlopt $(LINKFLAGS)
- CMO = cmx
- CMC = opt.$(OBJ) # compiled (and optimized) C
- CMXA = cmxa
- EXEEXT = .asm
- MOVEAFTERCAMLC = cmi cmx $(OBJ)
- COMPILETOWHAT = native code
- # sm: by adding -native in native mode, we prevent spurious
- # dependencies on .cmo files which were causing lots of
- # extra recompilation
- CAMLDEP = $(CAMLDIR)ocamldep -native
-else
- CMO = cmo
- CMXA = cma
- CMC = $(OBJ)
- EXEEXT = .byte
- MOVEAFTERCAMLC = cmi cmo
- COMPILETOWHAT = bytecode
- ifdef WIN32
- COMPILEFLAGS += -ccopt /Zi -ccopt /Od
- LINKFLAGS += -ccopt /Zi -ccopt /Od
- else
- COMPILEFLAGS += -g
- LINKFLAGS += -g
- endif
- CAMLC = $(CAMLDIR)ocamlc -g $(COMPILEFLAGS)
- CAMLLINK = $(CAMLDIR)ocamlc -custom $(LINKFLAGS)
-endif
-
-
-ifdef UNSAFE
- CAMLC := $(CAMLC) -unsafe -noassert
-endif
-
-
-
-
- # Allow searching for .ml and .mli
-vpath %.mll $(SOURCEDIRS)
-vpath %.mly $(SOURCEDIRS)
-vpath %.ml $(SOURCEDIRS) $(OBJDIR)
-vpath %.mli $(SOURCEDIRS) $(OBJDIR)
-vpath %.c $(SOURCEDIRS)
-
-
-# Secondaries are intermediates that we don't want make to delete
-# By giving the right names to secondary files we tell make where to make
-# them if they are not already made. VERY USEFUL!!
-.SECONDARY : $(MLLS:%.mll=$(OBJDIR)/%.ml) $(MLYS:%.mly=$(OBJDIR)/%.ml) \
- $(MLYS:%.mly=$(OBJDIR)/%.mli)
-
- # Run the lexer generator
- # Move the result to the OBJDIR directory
- # If there is a .mli file in the same directory with .mll then
- # copy it to OBJDIR (where the .ml) file will live.
-$(OBJDIR)/%.ml: %.mll
- $(CAMLLEX) $<
- $(AT)mv -f $(basename $<).ml $(OBJDIR)/
- $(ECHO)if test -f $(basename $<).mli ;then \
- $(COMMAND) cp -f $(basename $<).mli $(OBJDIR)/; \
- cp -f $(basename $<).mli $(OBJDIR)/ \
- ;fi
-
- # Run the parser generator
- # Move the result to the $(OBJDIR) directory.
-$(OBJDIR)/%.ml $(OBJDIR)/%.mli: %.mly
- $(CAMLYACC) $(CAMLYACCFLAGS) $<
- $(AT)mv -f $(basename $<).ml $(basename $<).mli $(OBJDIR)/
-
- # Compile an MLI file. After compilation move the result to OBJDIR
-$(OBJDIR)/%.cmi: %.mli
- @$(NARRATIVE) Compiling interface $<
- $(AT)$(CAMLC) $(COMPILEFLAGS) -c $<
- $(ECHO)if test $(OBJDIR) != $(<D) ;then \
- $(COMMAND) mv -f $(basename $<).cmi $(OBJDIR)/; \
- mv -f $(basename $<).cmi $(OBJDIR)/ \
- ;fi
-
- # Compile an ML file. After compilation we
- # copy to $(OBJDIR) the .cmi and the result of compilation.
-$(OBJDIR)/%.$(CMO): %.ml
- @$(NARRATIVE) "Compiling $< to $(COMPILETOWHAT) $(COMPILEMSG)"
-# $(ECHO)#if test $(OBJDIR) != $(<D) -a -f $(OBJDIR)/$(basename $(<F)).cmi ;then \
-# $(COMMAND) mv -f $(OBJDIR)/$(basename $(<F)).cmi $(<D); \
-# mv -f $(OBJDIR)/$(basename $(<F)).cmi $(<D); \
-# fi
- @$(COMMAND) $(CAMLC) $(COMPILEFLAGS) -c $<
- $(ECHO)$(CAMLC) $(COMPILEFLAGS) -c $< ; res=$$?; \
- if test $(OBJDIR) != $(<D) ;then \
- for ext in $(MOVEAFTERCAMLC); do \
- if test -f $(basename $<).$$ext ;then \
- $(COMMAND) mv -f $(basename $<).$$ext $(OBJDIR)/; \
- mv -f $(basename $<).$$ext $(OBJDIR)/; \
- fi; \
- done; \
- fi; exit $$res
-
- # Compile C files
- # They appear to be left in the current directory as .o files
-$(OBJDIR)/%.$(CMC): %.c
- @$(NARRATIVE) "Compiling C file $< $(COMPILEMSG)"
- $(AT)$(CAMLC) $(COMPILEFLAGS) $(CAML_CFLAGS) -c $< -o $@
- $(AT)mv -f $(basename $(notdir $<)).$(OBJ) $@
-
- # Special rule for profile.c
-CAMLC_NOPROF=$(subst -p,,$(CAMLC))
-$(OBJDIR)/profile.$(CMC): profile.c
- @$(NARRATIVE) "Compiling C file $<"
- $(AT)$(CAMLC_NOPROF) $(COMPILEFLAGS) $(CAML_CFLAGS) -c $< -o $@
- $(AT)mv -f $(basename $(notdir $<)).$(OBJ) $@
-
-
-# Phonies should be "remade" even if someone mistakenly creates them
-.PHONY: cleancaml
-cleancaml:
- -rm -f $(OBJDIR)/*.cmi
- -rm -f $(OBJDIR)/*.cmo
- -rm -f $(OBJDIR)/*.cmx
- -rm -f $(OBJDIR)/*.cma
- -rm -f $(OBJDIR)/*.cmxa
- -rm -f $(OBJDIR)/*.exe
- -rm -f $(OBJDIR)/*.obj
- -rm -f $(OBJDIR)/*.o
- -rm -f $(OBJDIR)/*.obj
- -rm -f $(OBJDIR)/*.o
- -rm -f $(OBJDIR)/*.lib
- -rm -f $(OBJDIR)/*.a
- -rm -f $(OBJDIR)/*.mli
- -rm -f $(OBJDIR)/*.ml
- -rm -f $(DEPENDDIR)/*.d $(DEPENDDIR)/*.di
- -rm -f $(MLLS:%.mll=$(OBJDIR)/%.ml) \
- $(MLLS:%.mll=$(OBJDIR)/%.mli) \
- $(MLYS:%.mly=$(OBJDIR)/%.ml) \
- $(MLYS:%.mly=$(OBJDIR)/%.mli)
-
-
-# Automatic dependency generation (see GNU info for details)
-#
-# Each .ml file has a .d (dependency file) which is automatically
-# generated and included by the rules below. The perl script replaces
-# directory paths with $(OBJDIR)/
-#
-# Dependencies for .mli files reside in corresponding .di files.
-#
-
-# Replace the directories in the dependency rules with $(OBJDIR)/, since
-# we'll move .cmo/.cmx files there.
-# 1. Strip any text followed by / or \. The / case even strips slashes that
-# are preceded by whitespace, to account for unix absolute paths.
-# The \ case does not strip slashes that come immediately after whitespace,
-# to preserve the trailing \ at the end of Makefile rules.
-# 2. Replace these directory names by '$(OBJDIR)/'
-FIXDEPEND:=perl -e 'while(<>) { s%[^/\\ :]*/% %g; s%[^/\\ :]+\\% %g; s%([-a-zA-Z0-9+-.:/\/_]+)%\$$(OBJDIR)/$$1%g; print $$_;}'
-# FIXDEPEND:=cat
-
-DEPINCLUDES= -I $(OBJDIR) $(SOURCEDIRS:%=-I %)
-$(DEPENDDIR)/%.d: %.ml
- @$(NARRATIVE) Generating dependency information for $<
- @$(COMMAND) $(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) $<
- $(ECHO)$(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) $< | $(FIXDEPEND) > $@
-
-$(DEPENDDIR)/%.di: %.mli
- @$(NARRATIVE) Generating dependency information for $<
- @$(COMMAND) $(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) $<
- $(ECHO)$(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) $< | $(FIXDEPEND) > $@
-
-# sm: it turns out there's a variable which lists all the goals
-# specified on the command line; I'll use this to set CLEANING
-# (which is not set anywhere else, currently)
-ifeq ($(MAKECMDGOALS),clean)
- #$(warning "Skipping dependency rules because we're cleaning")
- CLEANING := 1
-endif
-
-ifndef CLEANING
--include $(MODULES:%=$(DEPENDDIR)/%.d)
--include $(MODULES:%=$(DEPENDDIR)/%.di)
-endif
-
-listmodules:
- @echo $(MODULES)