Index: configure
===================================================================
--- configure	(revision 534e4e460878f8a2e7d24b4a0413515e6acd1dae)
+++ configure	(revision 4dcaed2c212a42d633824e9b88053258a2d0f969)
@@ -3279,5 +3279,4 @@
 TOP_SRCDIR=$ac_pwd/$ac_confdir/
 TOP_BUILDDIR=$ac_pwd/
-PRELUDE_BUILDDIR=$ac_pwd/libcfa-x86_64-debug/prelude/
 
 
@@ -3289,9 +3288,4 @@
 cat >>confdefs.h <<_ACEOF
 #define TOP_BUILDDIR "$TOP_BUILDDIR"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PRELUDE_BUILDDIR "$PRELUDE_BUILDDIR"
 _ACEOF
 
Index: configure.ac
===================================================================
--- configure.ac	(revision 534e4e460878f8a2e7d24b4a0413515e6acd1dae)
+++ configure.ac	(revision 4dcaed2c212a42d633824e9b88053258a2d0f969)
@@ -90,9 +90,7 @@
 TOP_SRCDIR=$ac_pwd/$ac_confdir/
 TOP_BUILDDIR=$ac_pwd/
-PRELUDE_BUILDDIR=$ac_pwd/libcfa-x86_64-debug/prelude/
 
 AC_DEFINE_UNQUOTED(TOP_SRCDIR, "$TOP_SRCDIR", [Top src directory])
 AC_DEFINE_UNQUOTED(TOP_BUILDDIR, "$TOP_BUILDDIR", [Top build directory])
-AC_DEFINE_UNQUOTED(PRELUDE_BUILDDIR, "$PRELUDE_BUILDDIR", [Directory where the prelude files are built])
 
 DRIVER_DIR=${TOP_BUILDDIR}driver/
Index: libcfa/prelude/Makefile.am
===================================================================
--- libcfa/prelude/Makefile.am	(revision 534e4e460878f8a2e7d24b4a0413515e6acd1dae)
+++ libcfa/prelude/Makefile.am	(revision 4dcaed2c212a42d633824e9b88053258a2d0f969)
@@ -59,8 +59,8 @@
 
 ../src/prelude.c : prelude.cf extras.cf gcc-builtins.cf builtins.cf @CFACPP@
-	${AM_V_GEN}@CFACPP@ -l prelude.cf $@  # use src/cfa-cpp as not in lib until after install
+	${AM_V_GEN}@CFACPP@ --prelude-dir=${builddir} -l prelude.cf $@  # use src/cfa-cpp as not in lib until after install
 
 bootloader.c : ${srcdir}/bootloader.cf prelude.cf extras.cf gcc-builtins.cf builtins.cf @CFACPP@
-	${AM_V_GEN}@CFACPP@ -tpm ${srcdir}/bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
+	${AM_V_GEN}@CFACPP@ --prelude-dir=${builddir} -tpm ${srcdir}/bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
 
 maintainer-clean-local :
Index: libcfa/prelude/Makefile.in
===================================================================
--- libcfa/prelude/Makefile.in	(revision 534e4e460878f8a2e7d24b4a0413515e6acd1dae)
+++ libcfa/prelude/Makefile.in	(revision 4dcaed2c212a42d633824e9b88053258a2d0f969)
@@ -516,8 +516,8 @@
 
 ../src/prelude.c : prelude.cf extras.cf gcc-builtins.cf builtins.cf @CFACPP@
-	${AM_V_GEN}@CFACPP@ -l prelude.cf $@  # use src/cfa-cpp as not in lib until after install
+	${AM_V_GEN}@CFACPP@ --prelude-dir=${builddir} -l prelude.cf $@  # use src/cfa-cpp as not in lib until after install
 
 bootloader.c : ${srcdir}/bootloader.cf prelude.cf extras.cf gcc-builtins.cf builtins.cf @CFACPP@
-	${AM_V_GEN}@CFACPP@ -tpm ${srcdir}/bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
+	${AM_V_GEN}@CFACPP@ --prelude-dir=${builddir} -tpm ${srcdir}/bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
 
 maintainer-clean-local :
Index: libcfa/src/Makefile.am
===================================================================
--- libcfa/src/Makefile.am	(revision 534e4e460878f8a2e7d24b4a0413515e6acd1dae)
+++ libcfa/src/Makefile.am	(revision 4dcaed2c212a42d633824e9b88053258a2d0f969)
@@ -28,5 +28,5 @@
 # use -no-include-stdhdr to prevent rebuild cycles
 # The built sources must not depend on the installed headers
-AM_CFAFLAGS = -quiet -no-include-stdhdr -XCFA -t -B@DRIVER_DIR@ -imacros prelude.c -I$(srcdir)/stdhdr
+AM_CFAFLAGS = -quiet -no-include-stdhdr -XCFA -t -B@DRIVER_DIR@ -XCFA --prelude-dir=$(top_builddir)/prelude -imacros prelude.c -I$(srcdir)/stdhdr
 AM_CFLAGS = -g -Wall -Wno-unused-function
 CFACC = @CFACC@
@@ -43,5 +43,5 @@
 
 # not all platforms support concurrency, add option do disable it
-libsrc += concurrency/CtxSwitch-@host_alias@.S concurrency/alarm.cfa concurrency/invoke.c concurrency/preemption.cfa
+libsrc += concurrency/CtxSwitch-@host_cpu@.S concurrency/alarm.cfa concurrency/invoke.c concurrency/preemption.cfa
 
 # extensionless header files are overridden by -o flag in default makerule => explicitly override default rule to silently do nothing
Index: libcfa/src/Makefile.in
===================================================================
--- libcfa/src/Makefile.in	(revision 534e4e460878f8a2e7d24b4a0413515e6acd1dae)
+++ libcfa/src/Makefile.in	(revision 4dcaed2c212a42d633824e9b88053258a2d0f969)
@@ -151,5 +151,5 @@
 	interpose.$(OBJEXT) bits/debug.$(OBJEXT) assert.$(OBJEXT) \
 	exception.$(OBJEXT) virtual.$(OBJEXT) heap.$(OBJEXT) \
-	$(am__objects_1) concurrency/CtxSwitch-@host_alias@.$(OBJEXT) \
+	$(am__objects_1) concurrency/CtxSwitch-@host_cpu@.$(OBJEXT) \
 	concurrency/alarm.$(OBJEXT) concurrency/invoke.$(OBJEXT) \
 	concurrency/preemption.$(OBJEXT)
@@ -344,5 +344,5 @@
 # use -no-include-stdhdr to prevent rebuild cycles
 # The built sources must not depend on the installed headers
-AM_CFAFLAGS = -quiet -no-include-stdhdr -XCFA -t -B@DRIVER_DIR@ -imacros prelude.c -I$(srcdir)/stdhdr
+AM_CFAFLAGS = -quiet -no-include-stdhdr -XCFA -t -B@DRIVER_DIR@ -XCFA --prelude-dir=$(top_builddir)/prelude -imacros prelude.c -I$(srcdir)/stdhdr
 AM_CFLAGS = -g -Wall -Wno-unused-function
 
@@ -357,5 +357,5 @@
 libsrc = prelude.c startup.cfa interpose.cfa bits/debug.cfa assert.cfa \
 	exception.c virtual.c heap.cfa ${headers:=.cfa} \
-	concurrency/CtxSwitch-@host_alias@.S concurrency/alarm.cfa \
+	concurrency/CtxSwitch-@host_cpu@.S concurrency/alarm.cfa \
 	concurrency/invoke.c concurrency/preemption.cfa
 libcfa_a_SOURCES = ${libsrc}
@@ -479,5 +479,5 @@
 concurrency/mutex.$(OBJEXT): concurrency/$(am__dirstamp) \
 	concurrency/$(DEPDIR)/$(am__dirstamp)
-concurrency/CtxSwitch-@host_alias@.$(OBJEXT):  \
+concurrency/CtxSwitch-@host_cpu@.$(OBJEXT):  \
 	concurrency/$(am__dirstamp) \
 	concurrency/$(DEPDIR)/$(am__dirstamp)
@@ -506,5 +506,5 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prelude.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/virtual.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/CtxSwitch-@host_alias@.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/CtxSwitch-@host_cpu@.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/invoke.Po@am__quote@
 
Index: src/config.h.in
===================================================================
--- src/config.h.in	(revision 534e4e460878f8a2e7d24b4a0413515e6acd1dae)
+++ src/config.h.in	(revision 4dcaed2c212a42d633824e9b88053258a2d0f969)
@@ -141,7 +141,4 @@
 /* Define to the version of this package. */
 #undef PACKAGE_VERSION
-
-/* Directory where the prelude files are built */
-#undef PRELUDE_BUILDDIR
 
 /* If using the C implementation of alloca, define if you know the
Index: src/main.cc
===================================================================
--- src/main.cc	(revision 534e4e460878f8a2e7d24b4a0413515e6acd1dae)
+++ src/main.cc	(revision 4dcaed2c212a42d633824e9b88053258a2d0f969)
@@ -98,4 +98,6 @@
 	linemarks = false;
 
+std::string PreludeDirector = "";
+
 static void parse_cmdline( int argc, char *argv[], const char *& filename );
 static void parse( FILE * input, LinkageSpec::Spec linkage, bool shouldExit = false );
@@ -207,11 +209,13 @@
 			// -l is for initial build ONLY and builtins.cf is not in the lib directory so access it here.
 
+			assertf( (libcfap | treep) != PreludeDirector.empty(), "When building in tree option --prelude-dir must be used." );
+
 			// Read to gcc builtins, if not generating the cfa library
-			FILE * gcc_builtins = fopen( libcfap | treep ? PRELUDE_BUILDDIR "/gcc-builtins.cf" : CFA_LIBDIR "/gcc-builtins.cf", "r" );
+			FILE * gcc_builtins = fopen( libcfap | treep ? (PreludeDirector + "/gcc-builtins.cf").c_str() : CFA_LIBDIR "/gcc-builtins.cf", "r" );
 			assertf( gcc_builtins, "cannot open gcc-builtins.cf\n" );
 			parse( gcc_builtins, LinkageSpec::Compiler );
 
 			// read the extra prelude in, if not generating the cfa library
-			FILE * extras = fopen( libcfap | treep ? PRELUDE_BUILDDIR "/extras.cf" : CFA_LIBDIR "/extras.cf", "r" );
+			FILE * extras = fopen( libcfap | treep ? (PreludeDirector + "/extras.cf").c_str() : CFA_LIBDIR "/extras.cf", "r" );
 			assertf( extras, "cannot open extras.cf\n" );
 			parse( extras, LinkageSpec::BuiltinC );
@@ -219,10 +223,10 @@
 			if ( ! libcfap ) {
 				// read the prelude in, if not generating the cfa library
-				FILE * prelude = fopen( treep ? PRELUDE_BUILDDIR "/prelude.cf" : CFA_LIBDIR "/prelude.cf", "r" );
+				FILE * prelude = fopen( treep ? (PreludeDirector + "/prelude.cf").c_str() : CFA_LIBDIR "/prelude.cf", "r" );
 				assertf( prelude, "cannot open prelude.cf\n" );
 				parse( prelude, LinkageSpec::Intrinsic );
 
 				// Read to cfa builtins, if not generating the cfa library
-				FILE * builtins = fopen( libcfap | treep ? PRELUDE_BUILDDIR "/builtins.cf" : CFA_LIBDIR "/builtins.cf", "r" );
+				FILE * builtins = fopen( libcfap | treep ? (PreludeDirector + "/builtins.cf").c_str() : CFA_LIBDIR "/builtins.cf", "r" );
 				assertf( builtins, "cannot open builtins.cf\n" );
 				parse( builtins, LinkageSpec::BuiltinCFA );
@@ -348,5 +352,5 @@
 		PASS( "codegen", CodeGen::generate( translationUnit, *output, ! noprotop, prettycodegenp, true, linemarks ) );
 
-		CodeGen::FixMain::fix( *output, treep ? PRELUDE_BUILDDIR "/bootloader.c" : CFA_LIBDIR "/bootloader.c" );
+		CodeGen::FixMain::fix( *output, treep ? (PreludeDirector + "/bootloader.c").c_str() : CFA_LIBDIR "/bootloader.c" );
 		if ( output != &cout ) {
 			delete output;
@@ -397,5 +401,5 @@
 
 void parse_cmdline( int argc, char * argv[], const char *& filename ) {
-	enum { Ast, Bbox, Bresolver, CtorInitFix, DeclStats, Expr, ExprAlt, Grammar, LibCFA, Linemarks, Nolinemarks, Nopreamble, Parse, Prototypes, Resolver, Symbol, Tree, TupleExpansion, Validate, };
+	enum { Ast, Bbox, Bresolver, CtorInitFix, DeclStats, Expr, ExprAlt, Grammar, LibCFA, Linemarks, Nolinemarks, Nopreamble, Parse, PreludeDir, Prototypes, Resolver, Symbol, Tree, TupleExpansion, Validate, };
 
 	static struct option long_opts[] = {
@@ -413,4 +417,5 @@
 		{ "no-preamble", no_argument, 0, Nopreamble },
 		{ "parse", no_argument, 0, Parse },
+		{ "prelude-dir", required_argument, 0, PreludeDir },
 		{ "no-prototypes", no_argument, 0, Prototypes },
 		{ "resolver", no_argument, 0, Resolver },
@@ -485,4 +490,7 @@
 		  case 'p':										// generate prototypes for preamble functions
 			noprotop = true;
+			break;
+		  case PreludeDir:
+		  	PreludeDirector = optarg;
 			break;
 		  case 'm':										// don't replace the main
