Makefile.in 4.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
######################################################################
# Residual auto-configuration
######################################################################

include config.mk
MKFILES := Makefile config.mk

ifneq ($(MAKE_RESTARTS),)
CFG_INFO := $(info cfg: make restarts: $(MAKE_RESTARTS))
endif

CFG_INFO := $(info cfg: building on $(CFG_OSTYPE) $(CFG_CPUTYPE))

ifdef CFG_OCAMLC_OPT
  $(info cfg: using ocaml native compiler)
  OPT=.opt
else
  $(info cfg: using ocaml bytecode compiler)
endif

ifdef PROFILE_BOOT
  $(info cfg: building bootstrap compiler with profiling (forcing native))
  CFG_NATIVE_BOOT := 1
  CFG_OCAMLOPT_PROFILE_FLAGS := -p
endif

ifdef DEBUG
  $(info cfg: forcing bytecode bootstrap compiler)
  CFG_NATIVE_BOOT :=
endif

ifdef CFG_NATIVE_BOOT
  $(info cfg: building native bootstrap compiler)
else
  $(info cfg: building bytecode bootstrap compiler)
endif

ifdef NO_VALGRIND
    CFG_VALGRIND :=
endif


######################################################################
# Bootstrap compiler variables
######################################################################

# We must list them in link order.
# Nobody calculates the link-order DAG automatically, sadly.

BOOT_MLS :=                                              \
    $(addsuffix .ml,                                     \
52 53
        boot/version                                     \
        $(addprefix boot/util/, fmt common bits)         \
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
        $(addprefix boot/driver/, session)               \
        $(addprefix boot/fe/, ast token lexer parser     \
          extfmt pexp item cexp fuzz)                    \
        $(addprefix boot/be/, asm il abi)                \
        $(addprefix boot/me/, walk semant resolve alias  \
          simplify type dead layer effect typestate      \
         loop layout transutil trans dwarf)              \
        $(addprefix boot/be/, x86 ra pe elf macho)       \
        $(addprefix boot/driver/, lib glue main))        \

BOOT_CMOS := $(BOOT_MLS:.ml=.cmo)
BOOT_CMXS := $(BOOT_MLS:.ml=.cmx)
BOOT_OBJS := $(BOOT_MLS:.ml=.o)
BOOT_CMIS := $(BOOT_MLS:.ml=.cmi)

69 70 71 72
BOOT_ML_DEP_INCS := -I boot                              \
                    -I $(S)boot/fe   -I $(S)boot/me      \
                    -I $(S)boot/be   -I $(S)boot/driver  \
                    -I $(S)boot/util
73

74 75 76 77
BOOT_ML_INCS        := $(BOOT_ML_DEP_INCS)
BOOT_ML_LIBS        := unix.cma  nums.cma  bigarray.cma
BOOT_ML_NATIVE_LIBS := unix.cmxa nums.cmxa bigarray.cmxa
BOOT_OCAMLC_FLAGS   := -g $(BOOT_ML_INCS) -w Ael -warn-error Ael
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94


######################################################################
# Target-and-rule "utility variables"
######################################################################

ifdef VERBOSE
  Q :=
  E =
else
  Q := @
  E = echo $(1)
endif

S := $(CFG_SRC_DIR)
X := $(CFG_EXE_SUFFIX)

95 96
# Look in doc and src dirs.
VPATH := $(CFG_SRC_DIR)/doc $(CFG_SRC_DIR)/src
97 98 99 100 101 102 103 104 105 106 107 108 109

# Delete the built-in rules.
.SUFFIXES:
%:: %,v
%:: RCS/%,v
%:: RCS/%
%:: s.%
%:: SCCS/s.%

######################################################################
# Targets and rules
######################################################################

110
all: boot/rustboot$(X)
111 112

ifdef CFG_NATIVE_BOOT
113
boot/rustboot$(X): $(BOOT_CMXS) $(MKFILES)
114
	@$(call E, compile: $@)
115
	$(Q)ocamlopt$(OPT) -o $@ $(BOOT_OCAMLOPT_FLAGS) $(ML_NATIVE_LIBS) \
116 117
        $(BOOT_CMXS)
else
118
boot/rustboot$(X): $(BOOT_CMOS) $(MKFILES)
119
	@$(call E, compile: $@)
120
	$(Q)ocamlc$(OPT) -o $@ $(BOOT_OCAMLC_FLAGS) $(BOOT_ML_LIBS) $(BOOT_CMOS)
121 122 123
endif


124 125
boot/version.ml: $(MKFILES)
	@$(call E, git: $@)
126 127 128 129 130
	$(Q)git log -1 \
      --pretty=format:'let version = "prerelease (%h %ci)";;' >$@ || exit 1

%.cmo: %.ml $(MKFILES)
	@$(call E, compile: $@)
131
	$(Q)ocamlc$(OPT) -c -o $@ $(BOOT_OCAMLC_FLAGS) $<
132 133

%.cmo: %.cmi $(MKFILES)
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153



######################################################################
# Cleanup
######################################################################

.PHONY: clean

clean:
	@$(call E, cleaning)
	$(Q)rm -f $(foreach ext, cmx cmi cmo cma bc o a d $(X)     \
                             h cpp ml s                        \
                             out bc dSYM                       \
                             ,                                 \
                  $(wildcard     *.$(ext)                      \
                               */*.$(ext)                      \
                             */*/*.$(ext)                      \
                           */*/*/*.$(ext)                      \
                   ))