Files
mercury/runtime/Mmakefile
Fergus Henderson dfc4e243cd Simplify the code by deleting unnecessary uses of $(EXTRA_*), etc.
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.
1999-06-01 08:16:13 +00:00

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
#-----------------------------------------------------------------------------#