mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-22 21:03:53 +00:00
Estimated hours taken: 1 browser/Mmakefile: compiler/Mmakefile: library/Mmakefile: profiler/Mmakefile: runtime/Mmakefile: trace/Mmakefile: util/Mmakefile: Simplify the code by deleting unnecessary uses of $(EXTRA_*), etc. This is now handled once and for all in scripts/Mmake.vars, and so it doesn't need to be separately handled by */Mmakefile. This patch also fixes an annoyance where if you set EXTRA_CFLAGS, the flags that you set were being passed to mgnuc twice.
323 lines
9.0 KiB
Plaintext
323 lines
9.0 KiB
Plaintext
#-----------------------------------------------------------------------------#
|
|
# Copyright (C) 1998-1999 The University of Melbourne.
|
|
# This file may only be copied under the terms of the GNU General
|
|
# Public License - see the file COPYING in the Mercury distribution.
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# Mmake - Mmake file for the Mercury runtime library
|
|
|
|
MAIN_TARGET=runtime
|
|
|
|
MERCURY_DIR=..
|
|
include $(MERCURY_DIR)/Mmake.common
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
CFLAGS = -g $(DLL_CFLAGS)
|
|
MGNUC = MERCURY_ALL_C_INCL_DIRS=" \
|
|
-I$(RUNTIME_DIR) \
|
|
-I$(BOEHM_GC_DIR) \
|
|
-I$(BOEHM_GC_DIR)/include \
|
|
" \
|
|
$(SCRIPTS_DIR)/mgnuc
|
|
MGNUCFLAGS = --no-ansi
|
|
MOD2C = $(SCRIPTS_DIR)/mod2c
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# keep this list in alphabetical order, please
|
|
HDRS = \
|
|
mercury_accurate_gc.h \
|
|
mercury_agc_debug.h \
|
|
mercury_array_macros.h \
|
|
mercury_bootstrap.h \
|
|
mercury_calls.h \
|
|
mercury_conf.h \
|
|
mercury_conf_param.h \
|
|
mercury_context.h \
|
|
mercury_debug.h \
|
|
mercury_deep_copy.h \
|
|
mercury_deep_copy_body.h \
|
|
mercury_dummy.h \
|
|
mercury_dlist.h \
|
|
mercury_engine.h \
|
|
mercury_float.h \
|
|
mercury_getopt.h \
|
|
mercury_goto.h \
|
|
mercury_grade.h \
|
|
mercury_hash_table.h \
|
|
mercury_heap.h \
|
|
mercury_heap_profile.h \
|
|
mercury_ho_call.h \
|
|
mercury_imp.h \
|
|
mercury_init.h \
|
|
mercury_label.h \
|
|
mercury_layout_util.h \
|
|
mercury_library_types.h \
|
|
mercury_memory.h \
|
|
mercury_memory_zones.h \
|
|
mercury_memory_handlers.h \
|
|
mercury_misc.h \
|
|
mercury_overflow.h \
|
|
mercury_prof.h \
|
|
mercury_prof_mem.h \
|
|
mercury_reg_workarounds.h \
|
|
mercury_regorder.h \
|
|
mercury_regs.h \
|
|
mercury_signal.h \
|
|
mercury_std.h \
|
|
mercury_stack_layout.h \
|
|
mercury_stack_trace.h \
|
|
mercury_stacks.h \
|
|
mercury_string.h \
|
|
mercury_tabling.h \
|
|
mercury_tags.h \
|
|
mercury_thread.h \
|
|
mercury_timing.h \
|
|
mercury_trace_base.h \
|
|
mercury_trail.h \
|
|
mercury_types.h \
|
|
mercury_type_info.h \
|
|
mercury_wrapper.h \
|
|
$(LIB_DLL_H)
|
|
|
|
# Note that $(LIB_GLOBALS_H) cannot be part of $(HDR), since it depends on
|
|
# lib$(RT_LIB_NAME)$(DLL_DEF_LIB).a, and $(OBJ) : $(HDR) would create a
|
|
# circular dependency.
|
|
|
|
MACHHDRS = machdeps/no_regs.h \
|
|
machdeps/i386_regs.h \
|
|
machdeps/mips_regs.h \
|
|
machdeps/sparc_regs.h \
|
|
machdeps/alpha_regs.h \
|
|
machdeps/pa_regs.h \
|
|
machdeps/rs6000_regs.h
|
|
|
|
|
|
# keep this list in alphabetical order, please
|
|
CFILES = \
|
|
mercury_accurate_gc.c \
|
|
mercury_agc_debug.c \
|
|
mercury_bootstrap.c \
|
|
mercury_context.c \
|
|
mercury_deep_copy.c \
|
|
mercury_dlist.c \
|
|
mercury_dummy.c \
|
|
mercury_engine.c \
|
|
mercury_float.c \
|
|
mercury_getopt.c \
|
|
mercury_getopt1.c \
|
|
mercury_grade.c \
|
|
mercury_hash_table.c \
|
|
mercury_heap_profile.c \
|
|
mercury_ho_call.c \
|
|
mercury_label.c \
|
|
mercury_layout_util.c \
|
|
mercury_memory.c \
|
|
mercury_memory_zones.c \
|
|
mercury_memory_handlers.c \
|
|
mercury_misc.c \
|
|
mercury_prof.c \
|
|
mercury_prof_mem.c \
|
|
mercury_reg_workarounds.c \
|
|
mercury_regs.c \
|
|
mercury_signal.c \
|
|
mercury_stack_trace.c \
|
|
mercury_stacks.c \
|
|
mercury_tabling.c \
|
|
mercury_thread.c \
|
|
mercury_timing.c \
|
|
mercury_trace_base.c \
|
|
mercury_trail.c \
|
|
mercury_type_info.c \
|
|
mercury_wrapper.c
|
|
|
|
OBJS = $(CFILES:.c=.o)
|
|
PIC_OBJS = $(CFILES:.c=.$(EXT_FOR_PIC_OBJECTS))
|
|
|
|
LDFLAGS = -L$(BOEHM_GC_DIR)
|
|
LDLIBS = \
|
|
` case "$(GRADE)" in \
|
|
*.gc*.prof*) echo "-lgc_prof" ;; \
|
|
*.gc*) echo "-lgc" ;; \
|
|
esac \
|
|
`
|
|
THREADLIBS = \
|
|
` case "$(GRADE)" in \
|
|
*.par*) echo "-lpthread" ;; \
|
|
esac \
|
|
`
|
|
|
|
HDR_CHECK_CS = $(HDRS:.h=_check.c)
|
|
HDR_CHECK_OBJS = $(HDRS:.h=_check.o)
|
|
HDR_CHECK_NMS = $(HDRS:.h=_check.nms)
|
|
HDR_CHECK_MACROS = $(HDRS:.h=_check.macros)
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# Stuff for Windows DLLs
|
|
|
|
ifeq ($(USE_DLLS),yes)
|
|
|
|
DLL_CFLAGS = -Dlib$(RT_LIB_NAME)_DEFINE_DLL
|
|
|
|
# the following header files are created automatically by Makefile.DLLs
|
|
LIB_DLL_H = lib$(RT_LIB_NAME)_dll.h
|
|
LIB_GLOBALS_H = lib$(RT_LIB_NAME)_globals.h
|
|
|
|
include $(MERCURY_DIR)/Makefile.DLLs
|
|
|
|
else
|
|
|
|
DLL_CFLAGS =
|
|
LIB_DLL_H =
|
|
LIB_GLOBALS_H =
|
|
DLL_DEF_LIB =
|
|
|
|
endif
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
$(OBJS) $(PIC_OBJS): $(HDRS) $(MACHHDRS)
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
.PHONY: runtime
|
|
runtime: lib$(RT_LIB_NAME).a lib$(RT_LIB_NAME).$(EXT_FOR_SHARED_LIB)
|
|
runtime: $(RT_LIB_NAME).init
|
|
runtime: $(LIB_DLL_H) $(LIB_GLOBALS_H)
|
|
|
|
lib$(RT_LIB_NAME)$(DLL_DEF_LIB).a: $(OBJS)
|
|
rm -f lib$(RT_LIB_NAME)$(DLL_DEF_LIB).a
|
|
ar cr lib$(RT_LIB_NAME)$(DLL_DEF_LIB).a $(OBJS)
|
|
$(RANLIB) lib$(RT_LIB_NAME)$(DLL_DEF_LIB).a
|
|
|
|
lib$(RT_LIB_NAME).so: $(PIC_OBJS)
|
|
$(LINK_SHARED_OBJ) -o lib$(RT_LIB_NAME).so $(PIC_OBJS) \
|
|
$(SHLIB_RPATH_OPT)$(FINAL_INSTALL_MERC_GC_LIB_DIR) \
|
|
$(LDFLAGS) $(LDLIBS) $(THREADLIBS) \
|
|
$(SHARED_LIBS)
|
|
|
|
$(RT_LIB_NAME).init: $(CFILES)
|
|
cat `vpath_find $(CFILES)` | grep '^INIT ' > $(RT_LIB_NAME).init
|
|
|
|
mercury_conf.h.date: $(MERCURY_DIR)/config.status mercury_conf.h.in
|
|
CONFIG_FILES= CONFIG_HEADERS=mercury_conf.h $(MERCURY_DIR)/config.status
|
|
echo datestamp > mercury_conf.h.date
|
|
|
|
mercury_conf.h: mercury_conf.h.date
|
|
@true
|
|
|
|
.PHONY: cs
|
|
cs: $(CFILES)
|
|
|
|
tags: $(CFILES) $(HDRS)
|
|
ctags $(CFILES) $(HDRS)
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
#
|
|
# `mmake check_headers' performs various checks on the header files
|
|
# to make sure that the conform with our coding standards.
|
|
#
|
|
|
|
#
|
|
# $(HDR_CHECK_OBJS) is used to check that the header files are self-contained.
|
|
# The rule for foo_check.o checks that the header file foo.h is properly
|
|
# self-contained, i.e. that the header file foo.h includes any other
|
|
# header files that define types used by foo.h.
|
|
# It does this by compiling a foo_check.c file that contains only a single
|
|
# `#include' statement that includes foo.h.
|
|
#
|
|
|
|
%_check.c : %.h
|
|
echo "#include \"$*.h\"" > $*_check.c
|
|
|
|
# The mercury_deep_copy_body.h header is not meant to be self-contained.
|
|
# So the following rule is used to suppress that check for this header.
|
|
mercury_deep_copy_body_check.o:
|
|
@true
|
|
|
|
#
|
|
# $(HDR_CHECK_MACROS) is used to check that the headers are properly
|
|
# namespace-clean, with regard to the macros that they define.
|
|
# For each header file foo.h, the rule below produces a file
|
|
# foo_check.macros that contains a list of all the macros defined
|
|
# by the header file (or by headers that it includes, excluding
|
|
# standard headers) that do not start with `GC_', `MR_', or `MERCURY_'.
|
|
#
|
|
# XXX the `cmp' command below, which forces `mmake check_headers' to fail
|
|
# if the foo_check.macros file is non-empty, i.e. if the header is not
|
|
# macro-namespace-clean, is commented out because currently the headers
|
|
# are not namespace-clean.
|
|
#
|
|
|
|
AWK = awk
|
|
%_check.macros: %.h %_check.c
|
|
-$(MGNUC) $(ALL_GRADEFLAGS) $(ALL_MGNUCFLAGS) -E $*_check.c \
|
|
-nostdinc -dN \
|
|
2> /dev/null | $(AWK) '/^#define/ { print $$2; }' | \
|
|
grep -v -e '^MR_' -e '^GC_' -e '^MERCURY_' | \
|
|
sort | uniq > $@
|
|
#cmp $@ /dev/null # XXX disabled for now
|
|
|
|
.PHONY: check_headers
|
|
check_headers: $(HDR_CHECK_OBJS) $(HDR_CHECK_MACROS)
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# installation rules
|
|
|
|
.PHONY: install
|
|
install: install_headers install_init install_lib
|
|
|
|
.PHONY: install_dirs
|
|
install_dirs:
|
|
-[ -d $(INSTALL_INC_DIR)/machdeps ] || \
|
|
mkdir -p $(INSTALL_INC_DIR)/machdeps
|
|
-[ -d $(INSTALL_MODULE_DIR) ] || mkdir -p $(INSTALL_MODULE_DIR)
|
|
-[ -d $(INSTALL_MERC_LIB_DIR) ] || mkdir -p $(INSTALL_MERC_LIB_DIR)
|
|
|
|
.PHONY: install_headers
|
|
install_headers: $(HDRS) $(MACHHDRS) $(LIB_GLOBALS_H) install_dirs
|
|
cp `vpath_find $(HDRS) $(LIB_GLOBALS_H)` $(INSTALL_INC_DIR)
|
|
chmod u+w $(INSTALL_INC_DIR)/mercury_conf.h
|
|
cp `vpath_find $(MACHHDRS)` $(INSTALL_INC_DIR)/machdeps
|
|
|
|
.PHONY: install_init
|
|
install_init: $(RT_LIB_NAME).init install_dirs
|
|
cp `vpath_find $(RT_LIB_NAME).init` $(INSTALL_MODULE_DIR)
|
|
# "$(RT_LIB_NAME).init" used to be called "runtime.init".
|
|
# If there is still a version with an old name lying around,
|
|
# then delete it; otherwise the initialization would get done twice.
|
|
rm -f $(INSTALL_MODULE_DIR)/runtime.init
|
|
|
|
.PHONY: install_lib
|
|
install_lib: lib$(RT_LIB_NAME).a lib$(RT_LIB_NAME).$(EXT_FOR_SHARED_LIB) \
|
|
install_dirs
|
|
cp `vpath_find lib$(RT_LIB_NAME).a \
|
|
lib$(RT_LIB_NAME).$(EXT_FOR_SHARED_LIB)` \
|
|
$(INSTALL_MERC_LIB_DIR)
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
# prevent Mmake from removing C files
|
|
RM_C=:
|
|
|
|
#-----------------------------------------------------------------------------#
|
|
|
|
clean: clean_o clean_check
|
|
|
|
.PHONY: clean_o
|
|
clean_o:
|
|
rm -f $(OBJS) $(PIC_OBJS)
|
|
|
|
.PHONY: clean_check
|
|
clean_check:
|
|
rm -f $(HDR_CHECK_OBJS) $(HDR_CHECK_CS) $(HDR_CHECK_MACROS)
|
|
|
|
realclean:
|
|
rm -f lib$(RT_LIB_NAME).a lib$(RT_LIB_NAME).so $(RT_LIB_NAME).init
|
|
rm -f mercury_conf.h mercury_conf.h.date
|
|
|
|
#-----------------------------------------------------------------------------#
|