[m-dev.] GCC back-end bootstrapped

Fergus Henderson fjh at cs.mu.OZ.AU
Fri Jan 26 07:34:17 AEDT 2001


With the changes below, the GCC back-end now bootstraps!

At this point I should split these into separate groups of changes,
and write out a nice log message, but I'm a bit tired ;-), so I'll do
that later.

The tools/bootcheck script doesn't support `--target asm' properly
yet, so it requires some manual intervention to build
stage3/compiler/*.s and to do the comparison of the stage2 and stage3
.s files.

Cheers,
	Fergus.

fjh$ ls -lF stage2/compiler/mercury_compile
-rwxr-xr-x   1 fjh      pgrad     6605424 Jan 26 06:32 stage2/compiler/mercury_compile*

cvs diff: Diffing .
cvs diff: Diffing bindist
cvs diff: Diffing boehm_gc
cvs diff: Diffing boehm_gc/Mac_files
cvs diff: Diffing boehm_gc/cord
cvs diff: Diffing boehm_gc/cord/private
cvs diff: Diffing boehm_gc/include
cvs diff: Diffing boehm_gc/include/private
cvs diff: Diffing browser
Index: browser/dl.m
===================================================================
RCS file: /home/mercury1/repository/mercury/browser/dl.m,v
retrieving revision 1.7
diff -u -d -u -r1.7 dl.m
--- browser/dl.m	2001/01/18 01:18:25	1.7
+++ browser/dl.m	2001/01/25 16:07:48
@@ -63,6 +63,7 @@
 :- pragma c_header_code("
 	#include <stdio.h>
 	#include ""mercury_conf.h""
+	#include ""mercury_string.h""	/* for MR_make_aligned_string_copy() */
 #ifdef HAVE_DLFCN_H
 	#include <dlfcn.h>
 #endif
@@ -180,7 +181,6 @@
 :- pragma foreign_code("C", make_closure_layout = (ClosureLayout::out),
 	[will_not_call_mercury, thread_safe],
 "{
-	extern	int			ML_DL_closure_counter;
 	MR_Closure_Id			*closure_id;
 	MR_Closure_Dyn_Link_Layout	*closure_layout;
 	char				buf[80];
Index: browser/interactive_query.m
===================================================================
RCS file: /home/mercury1/repository/mercury/browser/interactive_query.m,v
retrieving revision 1.8
diff -u -d -u -r1.8 interactive_query.m
--- browser/interactive_query.m	2000/10/16 01:33:23	1.8
+++ browser/interactive_query.m	2001/01/25 16:03:55
@@ -443,7 +443,10 @@
 % executable was compiled in, in a form suitable for
 % passing as a `--grade' option to mmc or ml.
 %
-:- pragma c_header_code("#include ""mercury_grade.h""").
+:- pragma c_header_code("
+	#include ""mercury_grade.h""
+	#include ""mercury_string.h""
+").
 :- pragma c_code(grade_option = (GradeOpt::out),
 	[thread_safe, will_not_call_mercury],
 	"MR_make_aligned_string(GradeOpt, (MR_String) MR_GRADE_OPT);").
Index: browser/util.m
===================================================================
RCS file: /home/mercury1/repository/mercury/browser/util.m,v
retrieving revision 1.11
diff -u -d -u -r1.11 util.m
--- browser/util.m	2000/10/01 03:13:40	1.11
+++ browser/util.m	2001/01/25 16:01:41
@@ -101,6 +101,7 @@
 	#include ""mercury_string.h""
 	#include ""mercury_trace_base.h""
 	#include ""mercury_trace_internal.h""
+	#include ""mercury_library_types.h""
 ").
 
 :- pragma c_code(call_trace_getline(MdbIn::in, MdbOut::in, Prompt::in,
cvs diff: Diffing bytecode
cvs diff: Diffing compiler
Index: compiler/Mmakefile
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/Mmakefile,v
retrieving revision 1.40
diff -u -d -u -r1.40 Mmakefile
--- compiler/Mmakefile	2001/01/18 12:07:57	1.40
+++ compiler/Mmakefile	2001/01/19 15:53:43
@@ -26,6 +26,7 @@
 GCC_MAIN_LIBS = $(patsubst %,$(GCC_SRC_DIR)/gcc/%,$(filter-out -l%,$(GCC_LIBS)))
 GCC_BACKEND_LIBS = $(GCC_MAIN_LIBS) $(GCC_EXTRA_LIBS)
 else
+GCC_MAIN_LIBS =
 GCC_BACKEND_LIBS =
 endif
 
@@ -220,6 +221,7 @@
 # Should also depend on $(BOEHM_GC_DIR)/libgc(_prof).$A, but only
 # if in .gc(.prof) grade; GNU make does not support dynamic dependencies,
 # so just leave it out.
+mercury_compile: $(GCC_MAIN_LIBS)
 
 mercury_compile_init.c: $(UTIL_DIR)/mkinit
 
Index: compiler/mlds_to_c.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/mlds_to_c.m,v
retrieving revision 1.77
diff -u -d -u -r1.77 mlds_to_c.m
--- compiler/mlds_to_c.m	2001/01/17 17:37:17	1.77
+++ compiler/mlds_to_c.m	2001/01/25 15:52:42
@@ -162,7 +162,19 @@
 :- mode mlds_output_src_imports(in, in, di, uo) is det.
 
 mlds_output_src_imports(Indent, Imports) -->
-	list__foldl(mlds_output_src_import(Indent), Imports).
+	globals__io_get_target(Target),
+	( { Target = asm } ->
+		% For --target asm, we don't create the header files
+		% for modules that don't contain C code, so we'd better
+		% not include them, since they might not exist.
+		% XXX This is a hack; it may lead to warnings or errors
+		% when compiling the generated code, since the functions
+		% that we call (e.g. for `pragma export') may not have
+		% been declared.
+		[]
+	;
+		list__foldl(mlds_output_src_import(Indent), Imports)
+	).
 
 :- pred mlds_output_src_import(indent, mlds__import, io__state, io__state).
 :- mode mlds_output_src_import(in, in, di, uo) is det.
Index: compiler/mlds_to_gcc.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/mlds_to_gcc.m,v
retrieving revision 1.26
diff -u -d -u -r1.26 mlds_to_gcc.m
--- compiler/mlds_to_gcc.m	2001/01/24 06:27:52	1.26
+++ compiler/mlds_to_gcc.m	2001/01/25 19:22:54
@@ -353,7 +353,7 @@
 	{ list__filter(defn_contains_foreign_code(lang_asm), Defns0,
 		ForeignDefns, Defns) },
 	(
-		{ ForeignCode = mlds__foreign_code([], [], []) },
+		{ ForeignCode = mlds__foreign_code(_Decls, [], []) },
 		{ ForeignDefns = [] }
 	->
 		{ ContainsCCode = no },
@@ -362,9 +362,10 @@
 		{ NeedInitFn = yes }
 	;
 		% create a new MLDS containing just the foreign code
-		% and pass that to mlds_to_c.m
+		% (with all definitions made public, so we can use
+		% them from the asm file!) and pass that to mlds_to_c.m
 		{ ForeignMLDS = mlds(ModuleName, ForeignCode, Imports,
-			ForeignDefns) },
+			list__map(make_public, ForeignDefns)) },
 		mlds_to_c__output_mlds(ForeignMLDS),
 		% XXX currently the only foreign code we handle is C;
 		%     see comments above (at the declaration for
@@ -436,6 +437,11 @@
 	io__write_string(
 		"static const void *const MR_grade = &MR_GRADE_VAR;\n").
 ******/
+
+:- func make_public(mlds__defn) = mlds__defn.
+make_public(mlds__defn(Name, Context, Flags0, Defn)) =
+	    mlds__defn(Name, Context, Flags, Defn) :-
+	Flags = mlds__set_access(Flags0, public).
 
 %-----------------------------------------------------------------------------%
 
Index: compiler/modules.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/modules.m,v
retrieving revision 1.146
diff -u -d -u -r1.146 modules.m
--- compiler/modules.m	2001/01/24 13:18:15	1.146
+++ compiler/modules.m	2001/01/25 18:56:23
@@ -3255,8 +3255,12 @@
 item_list_contains_foreign_code([Item|Items]) :-
 	(
 		Item = pragma(Pragma) - _Context,
-		(	Pragma = foreign_decl(_Lang, _)
-		;	Pragma = foreign(_Lang, _)
+		% Note that we do NOT count foreign_decls here.
+		% We should only need to link in a foreign object file
+		% if there is some foriegn_code, not just foreign_decls.
+		% Counting foreign_decls here causes problems with
+		% intermodule optimization.
+		(	Pragma = foreign(_Lang, _)
 		;	Pragma = foreign(_, _, _, _, _, _)
 		;	% XXX `pragma export' should not be treated as
 			% foreign, but currently mlds_to_gcc.m doesn't
Index: compiler/stack_layout.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/stack_layout.m,v
retrieving revision 1.59
diff -u -d -u -r1.59 stack_layout.m
--- compiler/stack_layout.m	2001/01/18 01:18:54	1.59
+++ compiler/stack_layout.m	2001/01/25 16:43:27
@@ -143,6 +143,12 @@
 :- pred stack_layout__concat_string_list(list(string)::in, int::in,
 	string::out) is det.
 
+:- pragma c_header_code("
+	#include ""mercury_tags.h""	/* for MR_list_*() */
+	#include ""mercury_heap.h""	/* for MR_incr_hp_atomic*() */
+	#include ""mercury_misc.h""	/* for MR_fatal_error() */
+").
+
 :- pragma c_code(stack_layout__concat_string_list(StringList::in,
 		ArenaSize::in, Arena::out),
 		[will_not_call_mercury, thread_safe], "{
cvs diff: Diffing compiler/notes
cvs diff: Diffing debian
cvs diff: Diffing doc
cvs diff: Diffing extras
cvs diff: Diffing extras/aditi
cvs diff: Diffing extras/cgi
cvs diff: Diffing extras/complex_numbers
cvs diff: Diffing extras/complex_numbers/samples
cvs diff: Diffing extras/complex_numbers/tests
cvs diff: Diffing extras/concurrency
cvs diff: Diffing extras/curses
cvs diff: Diffing extras/curses/sample
cvs diff: Diffing extras/dynamic_linking
cvs diff: Diffing extras/graphics
cvs diff: Diffing extras/graphics/mercury_opengl
cvs diff: Diffing extras/graphics/mercury_tcltk
cvs diff: Diffing extras/graphics/samples
cvs diff: Diffing extras/graphics/samples/calc
cvs diff: Diffing extras/graphics/samples/maze
cvs diff: Diffing extras/graphics/samples/pent
cvs diff: Diffing extras/lazy_evaluation
cvs diff: Diffing extras/logged_output
cvs diff: Diffing extras/moose
cvs diff: Diffing extras/moose/samples
cvs diff: Diffing extras/morphine
cvs diff: Diffing extras/morphine/non-regression-tests
cvs diff: Diffing extras/morphine/scripts
cvs diff: Diffing extras/morphine/source
cvs diff: Diffing extras/odbc
cvs diff: Diffing extras/posix
cvs diff: Diffing extras/references
cvs diff: Diffing extras/references/samples
cvs diff: Diffing extras/references/tests
cvs diff: Diffing extras/stream
cvs diff: Diffing extras/trailed_update
cvs diff: Diffing extras/trailed_update/samples
cvs diff: Diffing extras/trailed_update/tests
cvs diff: Diffing extras/xml
cvs diff: Diffing extras/xml/samples
cvs diff: Diffing library
Index: library/exception.m
===================================================================
RCS file: /home/mercury1/repository/mercury/library/exception.m,v
retrieving revision 1.41
diff -u -d -u -r1.41 exception.m
--- library/exception.m	2001/01/18 01:19:03	1.41
+++ library/exception.m	2001/01/25 18:19:27
@@ -557,8 +557,56 @@
 %
 
 :- pragma c_header_code("
+/* protect against multiple inclusion */
+#ifndef MR_HLC_EXCEPTION_GUARD
+#define MR_HLC_EXCEPTION_GUARD
+
 #ifdef MR_HIGHLEVEL_CODE
 
+  #ifdef MR_USE_GCC_NESTED_FUNCTIONS
+  	#define MR_CONT_PARAMS		MR_NestedCont cont
+  	#define MR_CONT_PARAM_TYPES	MR_NestedCont
+  	#define MR_CONT_ARGS		cont
+  #else
+  	#define MR_CONT_PARAMS		MR_Cont cont, void *cont_env
+  	#define MR_CONT_PARAM_TYPES	MR_Cont, void *
+  	#define MR_CONT_ARGS		cont, cont_env
+  #endif
+
+	/* det */
+	void MR_CALL
+	mercury__exception__builtin_catch_3_p_0(MR_Mercury_Type_Info type_info,
+		MR_Pred pred, MR_Pred handler_pred, MR_Box *output);
+
+	/* semidet */
+	bool MR_CALL
+	mercury__exception__builtin_catch_3_p_1(MR_Mercury_Type_Info type_info,
+		MR_Pred pred, MR_Pred handler_pred, MR_Box *output);
+
+	/* cc_multi */
+	void MR_CALL
+	mercury__exception__builtin_catch_3_p_2(MR_Mercury_Type_Info type_info,
+		MR_Pred pred, MR_Pred handler_pred, MR_Box *output);
+
+	/* cc_nondet */
+	bool MR_CALL
+	mercury__exception__builtin_catch_3_p_3(MR_Mercury_Type_Info type_info,
+		MR_Pred pred, MR_Pred handler_pred, MR_Box *output);
+
+	/* multi */
+	void MR_CALL
+	mercury__exception__builtin_catch_3_p_4(MR_Mercury_Type_Info type_info,
+		MR_Pred pred, MR_Pred handler_pred, MR_Box *output,
+		MR_CONT_PARAMS);
+
+	/* nondet */
+	void MR_CALL
+	mercury__exception__builtin_catch_3_p_5(MR_Mercury_Type_Info type_info,
+		MR_Pred pred, MR_Pred handler_pred, MR_Box *output,
+		MR_CONT_PARAMS);
+
+  #ifndef MR_AVOID_MACROS
+
 	/* det ==> model_det */
 	#define mercury__exception__builtin_catch_3_p_0 \
 		mercury__exception__builtin_catch_model_det
@@ -583,9 +631,10 @@
 	#define mercury__exception__builtin_catch_3_p_5 \
 		mercury__exception__builtin_catch_model_non
 
-	void MR_CALL mercury__exception__builtin_throw_1_p_0(MR_Univ);
+  #endif /* !MR_AVOID_MACROS */
 
 	void MR_CALL mercury__exception__builtin_throw_1_p_0(MR_Univ exception);
+
 	void MR_CALL mercury__exception__builtin_catch_model_det(
 		MR_Mercury_Type_Info type_info, MR_Pred pred,
 		MR_Pred handler_pred, MR_Box *output);
@@ -595,18 +644,86 @@
 	void MR_CALL mercury__exception__builtin_catch_model_non(
 		MR_Mercury_Type_Info type_info, MR_Pred pred,
 		MR_Pred handler_pred, MR_Box *output,
-#ifdef MR_USE_GCC_NESTED_FUNCTIONS
-		MR_NestedCont cont
-#else
-		MR_Cont cont, void *cont_env
-#endif
-	);
+		MR_CONT_PARAMS);
+
 #endif /* MR_HIGHLEVEL_CODE */
+
+#endif /* MR_HLC_EXCEPTION_GUARD */
 ").
 
 :- pragma c_code("
 #ifdef MR_HIGHLEVEL_CODE
 
+/*
+** We also need to provide definitions of these builtins
+** as functions rather than as macros.  This is needed
+** (a) in case we take their address, and (b) for the
+** GCC back-end interface.
+*/
+
+#undef mercury__exception__builtin_catch_3_p_0
+#undef mercury__exception__builtin_catch_3_p_1
+#undef mercury__exception__builtin_catch_3_p_2
+#undef mercury__exception__builtin_catch_3_p_3
+#undef mercury__exception__builtin_catch_3_p_4
+#undef mercury__exception__builtin_catch_3_p_5
+
+/* det ==> model_det */
+void MR_CALL
+mercury__exception__builtin_catch_3_p_0(MR_Mercury_Type_Info type_info,
+	MR_Pred pred, MR_Pred handler_pred, MR_Box *output)
+{
+	mercury__exception__builtin_catch_model_det(type_info,
+		pred, handler_pred, output);
+}
+
+/* semidet ==> model_semi */
+bool MR_CALL
+mercury__exception__builtin_catch_3_p_1(MR_Mercury_Type_Info type_info,
+	MR_Pred pred, MR_Pred handler_pred, MR_Box *output)
+{
+	return mercury__exception__builtin_catch_model_semi(type_info,
+		pred, handler_pred, output);
+}
+
+/* cc_multi ==> model_det */
+void MR_CALL
+mercury__exception__builtin_catch_3_p_2(MR_Mercury_Type_Info type_info,
+	MR_Pred pred, MR_Pred handler_pred, MR_Box *output)
+{
+	mercury__exception__builtin_catch_model_det(type_info,
+		pred, handler_pred, output);
+}
+
+/* cc_nondet ==> model_semi */
+bool MR_CALL
+mercury__exception__builtin_catch_3_p_3(MR_Mercury_Type_Info type_info,
+	MR_Pred pred, MR_Pred handler_pred, MR_Box *output)
+{
+	return mercury__exception__builtin_catch_model_semi(type_info,
+		pred, handler_pred, output);
+}
+
+/* multi ==> model_non */
+void MR_CALL
+mercury__exception__builtin_catch_3_p_4(MR_Mercury_Type_Info type_info,
+	MR_Pred pred, MR_Pred handler_pred, MR_Box *output,
+	MR_CONT_PARAMS)
+{
+	mercury__exception__builtin_catch_model_non(type_info,
+		pred, handler_pred, output, MR_CONT_ARGS);
+}
+
+/* multi ==> model_non */
+void MR_CALL
+mercury__exception__builtin_catch_3_p_5(MR_Mercury_Type_Info type_info,
+	MR_Pred pred, MR_Pred handler_pred, MR_Box *output,
+	MR_CONT_PARAMS)
+{
+	mercury__exception__builtin_catch_model_non(type_info,
+		pred, handler_pred, output, MR_CONT_ARGS);
+}
+
 /*---------------------------------------------------------------------------*/
 
 static void
@@ -629,31 +746,16 @@
 	return (*code)((void *) closure, result);
 }
 
-#ifdef MR_USE_GCC_NESTED_FUNCTIONS
-
-static void
-ML_call_goal_non(MR_Mercury_Type_Info type_info,
-	MR_Pred closure, MR_Box *result, MR_NestedCont cont)
-{
-	typedef void MR_CALL NondetFuncType(void *, MR_Box *, MR_NestedCont);
-	NondetFuncType *code = (NondetFuncType *)
-		MR_field(MR_mktag(0), closure, (MR_Integer) 1);
-	(*code)((void *) closure, result, cont);
-}
-
-#else
-
 static void
 ML_call_goal_non(MR_Mercury_Type_Info type_info,
-	MR_Pred closure, MR_Box *result, MR_Cont cont, void *cont_env)
+	MR_Pred closure, MR_Box *result, MR_CONT_PARAMS)
 {
-	typedef void MR_CALL NondetFuncType(void *, MR_Box *, MR_Cont, void *);
+	typedef void MR_CALL NondetFuncType(void *, MR_Box *,
+		MR_CONT_PARAM_TYPES);
 	NondetFuncType *code = (NondetFuncType *)
 		MR_field(MR_mktag(0), closure, (MR_Integer) 1);
-	(*code)((void *) closure, result, cont, cont_env);
+	(*code)((void *) closure, result, MR_CONT_ARGS);
 }
-
-#endif
 
 /*---------------------------------------------------------------------------*/
 
cvs diff: Diffing profiler
cvs diff: Diffing robdd
cvs diff: Diffing runtime
cvs diff: Diffing runtime/GETOPT
cvs diff: Diffing runtime/machdeps
cvs diff: Diffing samples
cvs diff: Diffing samples/c_interface
cvs diff: Diffing samples/c_interface/c_calls_mercury
cvs diff: Diffing samples/c_interface/cplusplus_calls_mercury
cvs diff: Diffing samples/c_interface/mercury_calls_c
cvs diff: Diffing samples/c_interface/mercury_calls_cplusplus
cvs diff: Diffing samples/c_interface/mercury_calls_fortran
cvs diff: Diffing samples/c_interface/simpler_c_calls_mercury
cvs diff: Diffing samples/c_interface/simpler_cplusplus_calls_mercury
cvs diff: Diffing samples/diff
cvs diff: Diffing samples/muz
cvs diff: Diffing samples/rot13
cvs diff: Diffing samples/solutions
cvs diff: Diffing samples/tests
cvs diff: Diffing samples/tests/c_interface
cvs diff: Diffing samples/tests/c_interface/c_calls_mercury
cvs diff: Diffing samples/tests/c_interface/cplusplus_calls_mercury
cvs diff: Diffing samples/tests/c_interface/mercury_calls_c
cvs diff: Diffing samples/tests/c_interface/mercury_calls_cplusplus
cvs diff: Diffing samples/tests/c_interface/mercury_calls_fortran
cvs diff: Diffing samples/tests/c_interface/simpler_c_calls_mercury
cvs diff: Diffing samples/tests/c_interface/simpler_cplusplus_calls_mercury
cvs diff: Diffing samples/tests/diff
cvs diff: Diffing samples/tests/muz
cvs diff: Diffing samples/tests/rot13
cvs diff: Diffing samples/tests/solutions
cvs diff: Diffing samples/tests/toplevel
cvs diff: Diffing scripts
cvs diff: Diffing tests
cvs diff: Diffing tests/benchmarks
cvs diff: Diffing tests/debugger
cvs diff: Diffing tests/debugger/declarative
cvs diff: Diffing tests/dppd
cvs diff: Diffing tests/general
cvs diff: Diffing tests/general/accumulator
cvs diff: Diffing tests/hard_coded
cvs diff: Diffing tests/hard_coded/exceptions
cvs diff: Diffing tests/hard_coded/purity
cvs diff: Diffing tests/hard_coded/sub-modules
cvs diff: Diffing tests/hard_coded/typeclasses
cvs diff: Diffing tests/invalid
cvs diff: Diffing tests/invalid/purity
cvs diff: Diffing tests/misc_tests
cvs diff: Diffing tests/tabling
cvs diff: Diffing tests/term
cvs diff: Diffing tests/valid
cvs diff: Diffing tests/warnings
cvs diff: Diffing tools
Index: tools/bootcheck
===================================================================
RCS file: /home/mercury1/repository/mercury/tools/bootcheck,v
retrieving revision 1.111
diff -u -d -u -r1.111 bootcheck
--- tools/bootcheck	2001/01/18 12:52:10	1.111
+++ tools/bootcheck	2001/01/23 17:56:00
@@ -24,8 +24,12 @@
 		Keep the stage 2 object files even if stage 2 is successful.
 	-m <mmake-args>, --mmake-opts <mmake-args>
 		Pass <mmake-args> as options to \`mmake'.
+	-M <make-args>, --make-opts <make-args>
+		Pass <make-args> as options to \`make'.
 	-o <filename>, --output-file <filename>
 		Output results to <filename>.
+	--target <target>
+		Specify the target to use in creating stages 2 and 3.
 	-G <grade>, --grade <grade>
 		Specify the grade to use in creating stages 2 and 3.
 		The tests will also be executed in this grade, unless
@@ -95,12 +99,14 @@
 extras=false
 jfactor=""
 keep_objs=false
-mmake_opts="-k"
+mmake_opts=""
+make_opts="-k"
 outfile=""
 runtests=true
 do_bootcheck=true
 check_namespace=true
 grade=
+target_opt=
 test_grade=
 test_params=false
 copy_runtime=false
@@ -152,14 +158,19 @@
 	-k|--keep-objs)
 		keep_objs=true ;;
 
-	-m|--mmake)
+	-m|--mmake|--mmake-opts)
 		mmake_opts="$mmake_opts $2"; shift ;;
+	-M|--make-opts)
+		make_opts="$make_opts $2"; shift ;;
 
 	-o|--output-file)
 		outfile="$2"; shift ;;
 	-o*)
 		outfile="` expr $1 : '-o\(.*\)' `"; ;;
 
+	--target)
+		target_opt="--target $2"; shift ;;
+
 	-G|--grade)
 		grade="$2"; shift ;;
 	-G*)
@@ -465,6 +476,7 @@
 
 	# Use the new mmake to build stage 2
 	MMAKE=$MMAKE_DIR/mmake
+	mmake_opts="$mmake_opts $target_opt"
 
 	if (cd stage2 && $MMAKE $mmake_opts $jfactor runtime)
 	then
cvs diff: Diffing trace
cvs diff: Diffing trial
cvs diff: Diffing util

-- 
Fergus Henderson <fjh at cs.mu.oz.au>  |  "I have always known that the pursuit
                                    |  of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh>  |     -- the last words of T. S. Garp.
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to:       mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions:          mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------



More information about the developers mailing list