Index: libcfa/Makefile.in
===================================================================
--- libcfa/Makefile.in	(revision 461eed2b8a088c1fd65ab1ad52dac73a115a7459)
+++ libcfa/Makefile.in	(revision 57b0b1f192554162db27e934c43896aef9bb507f)
@@ -229,4 +229,5 @@
 CFLAGS = @CFLAGS@
 CONFIGURATION = @CONFIGURATION@
+CONFIG_BUILDLIB = @CONFIG_BUILDLIB@
 CONFIG_CFAFLAGS = @CONFIG_CFAFLAGS@
 CONFIG_CFLAGS = @CONFIG_CFLAGS@
Index: libcfa/configure
===================================================================
--- libcfa/configure	(revision 461eed2b8a088c1fd65ab1ad52dac73a115a7459)
+++ libcfa/configure	(revision 57b0b1f192554162db27e934c43896aef9bb507f)
@@ -623,4 +623,7 @@
 CFA_PREFIX
 CFA_NAME
+BUILDLIB_FALSE
+BUILDLIB_TRUE
+CONFIG_BUILDLIB
 CONFIG_CFAFLAGS
 CONFIG_CFLAGS
@@ -2531,16 +2534,29 @@
 		CONFIG_CFLAGS="-O0 -g"
 		CONFIG_CFAFLAGS="-debug"
+		CONFIG_BUILDLIB="yes"
 	;;
 	"nodebug" )
 		CONFIG_CFLAGS="-O2 -s"
 		CONFIG_CFAFLAGS="-nodebug"
+		CONFIG_BUILDLIB="yes"
 	;;
 	"nolib"   )
-		CONFIG_CFLAGS=""
-		CONFIG_CFAFLAGS=""
+		CONFIG_CFLAGS="-O2 -s"
+		CONFIG_CFAFLAGS="-nodebug"
+		CONFIG_BUILDLIB="no"
 	;;
 esac
 
 
+
+
+
+ if test "x${CONFIG_BUILDLIB}" = "xyes"; then
+  BUILDLIB_TRUE=
+  BUILDLIB_FALSE='#'
+else
+  BUILDLIB_TRUE='#'
+  BUILDLIB_FALSE=
+fi
 
 
@@ -4478,4 +4494,8 @@
 fi
 
+if test -z "${BUILDLIB_TRUE}" && test -z "${BUILDLIB_FALSE}"; then
+  as_fn_error $? "conditional \"BUILDLIB\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
   as_fn_error $? "conditional \"AMDEP\" was never defined.
Index: libcfa/configure.ac
===================================================================
--- libcfa/configure.ac	(revision 461eed2b8a088c1fd65ab1ad52dac73a115a7459)
+++ libcfa/configure.ac	(revision 57b0b1f192554162db27e934c43896aef9bb507f)
@@ -41,12 +41,15 @@
 		CONFIG_CFLAGS="-O0 -g"
 		CONFIG_CFAFLAGS="-debug"
+		CONFIG_BUILDLIB="yes"
 	;;
 	"nodebug" )
 		CONFIG_CFLAGS="-O2 -s"
 		CONFIG_CFAFLAGS="-nodebug"
+		CONFIG_BUILDLIB="yes"
 	;;
 	"nolib"   )
-		CONFIG_CFLAGS=""
-		CONFIG_CFAFLAGS=""
+		CONFIG_CFLAGS="-O2 -s"
+		CONFIG_CFAFLAGS="-nodebug"
+		CONFIG_BUILDLIB="no"
 	;;
 esac
@@ -54,4 +57,7 @@
 AC_SUBST(CONFIG_CFLAGS)
 AC_SUBST(CONFIG_CFAFLAGS)
+AC_SUBST(CONFIG_BUILDLIB)
+
+AM_CONDITIONAL([BUILDLIB], [test "x${CONFIG_BUILDLIB}" = "xyes"])
 
 #==============================================================================
Index: libcfa/prelude/Makefile.am
===================================================================
--- libcfa/prelude/Makefile.am	(revision 461eed2b8a088c1fd65ab1ad52dac73a115a7459)
+++ libcfa/prelude/Makefile.am	(revision 57b0b1f192554162db27e934c43896aef9bb507f)
@@ -20,6 +20,5 @@
 # put into lib for now
 cfalibdir = ${CFA_LIBDIR}
-cfalib_DATA = gcc-builtins.cf builtins.cf extras.cf prelude.cf bootloader.c
-noinst_DATA = ../src/prelude.c
+cfalib_DATA = gcc-builtins.cf builtins.cf extras.cf prelude.cfa bootloader.c
 
 CC = @CFACC@
@@ -44,5 +43,5 @@
 	${AM_V_GEN}gcc -I${srcdir} -E ${srcdir}/prototypes.c | awk -f ${srcdir}/prototypes.awk > $@
 
-prelude.cf : prelude-gen.cc
+prelude.cfa : prelude-gen.cc
 	${AM_V_GEN}${CXX} ${AM_CXXFLAGS} ${CXXFLAGS} ${AM_CFLAGS} ${<} -o prelude-gen -Wall -Wextra -O2 -g -std=c++14
 	@./prelude-gen > $@
@@ -60,8 +59,5 @@
 include $(DEPDIR)/builtins.Po
 
-../src/prelude.c : prelude.cf extras.cf gcc-builtins.cf builtins.cf @CFACPP@
-	${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@
+bootloader.c : ${srcdir}/bootloader.cf prelude.cfa extras.cf gcc-builtins.cf builtins.cf @CFACPP@
 	${AM_V_GEN}@CFACPP@ --prelude-dir=${builddir} -tpm ${srcdir}/bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
 
@@ -69,4 +65,4 @@
 	rm -rf $(DEPDIR)
 
-MOSTLYCLEANFILES = bootloader.c builtins.cf extras.cf gcc-builtins.c gcc-builtins.cf prelude.cf
+MOSTLYCLEANFILES = bootloader.c builtins.cf extras.cf gcc-builtins.c gcc-builtins.cf prelude.cfa
 MAINTAINERCLEANFILES = ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
Index: libcfa/prelude/Makefile.in
===================================================================
--- libcfa/prelude/Makefile.in	(revision 461eed2b8a088c1fd65ab1ad52dac73a115a7459)
+++ libcfa/prelude/Makefile.in	(revision 57b0b1f192554162db27e934c43896aef9bb507f)
@@ -147,5 +147,5 @@
   }
 am__installdirs = "$(DESTDIR)$(cfalibdir)"
-DATA = $(cfalib_DATA) $(noinst_DATA)
+DATA = $(cfalib_DATA)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
 am__DIST_COMMON = $(srcdir)/Makefile.in
@@ -174,4 +174,5 @@
 CFLAGS = @CFLAGS@
 CONFIGURATION = @CONFIGURATION@
+CONFIG_BUILDLIB = @CONFIG_BUILDLIB@
 CONFIG_CFAFLAGS = @CONFIG_CFAFLAGS@
 CONFIG_CFLAGS = @CONFIG_CFLAGS@
@@ -263,9 +264,8 @@
 # put into lib for now
 cfalibdir = ${CFA_LIBDIR}
-cfalib_DATA = gcc-builtins.cf builtins.cf extras.cf prelude.cf bootloader.c
-noinst_DATA = ../src/prelude.c
+cfalib_DATA = gcc-builtins.cf builtins.cf extras.cf prelude.cfa bootloader.c
 AM_CFLAGS = -g -Wall -Wno-unused-function @ARCH_FLAGS@ @CONFIG_CFLAGS@
 AM_CFAFLAGS = @CONFIG_CFAFLAGS@
-MOSTLYCLEANFILES = bootloader.c builtins.cf extras.cf gcc-builtins.c gcc-builtins.cf prelude.cf
+MOSTLYCLEANFILES = bootloader.c builtins.cf extras.cf gcc-builtins.c gcc-builtins.cf prelude.cfa
 MAINTAINERCLEANFILES = ${addprefix ${libdir}/,${cfalib_DATA}} ${addprefix ${libdir}/,${lib_LIBRARIES}}
 all: all-am
@@ -499,5 +499,5 @@
 	${AM_V_GEN}gcc -I${srcdir} -E ${srcdir}/prototypes.c | awk -f ${srcdir}/prototypes.awk > $@
 
-prelude.cf : prelude-gen.cc
+prelude.cfa : prelude-gen.cc
 	${AM_V_GEN}${CXX} ${AM_CXXFLAGS} ${CXXFLAGS} ${AM_CFLAGS} ${<} -o prelude-gen -Wall -Wextra -O2 -g -std=c++14
 	@./prelude-gen > $@
@@ -515,8 +515,5 @@
 include $(DEPDIR)/builtins.Po
 
-../src/prelude.c : prelude.cf extras.cf gcc-builtins.cf builtins.cf @CFACPP@
-	${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@
+bootloader.c : ${srcdir}/bootloader.cf prelude.cfa extras.cf gcc-builtins.cf builtins.cf @CFACPP@
 	${AM_V_GEN}@CFACPP@ --prelude-dir=${builddir} -tpm ${srcdir}/bootloader.cf $@  # use src/cfa-cpp as not in lib until after install
 
Index: libcfa/prelude/prelude-gen.cc
===================================================================
--- libcfa/prelude/prelude-gen.cc	(revision 461eed2b8a088c1fd65ab1ad52dac73a115a7459)
+++ libcfa/prelude/prelude-gen.cc	(revision 57b0b1f192554162db27e934c43896aef9bb507f)
@@ -142,5 +142,5 @@
 
 int main() {
-	cout << "# 2 \"prelude.cf\"  // needed for error messages from this file" << endl;
+	cout << "# 2 \"prelude.cfa\"  // needed for error messages from this file" << endl;
 	cout << "trait sized(dtype T) {};" << endl;
 
Index: libcfa/src/Makefile.am
===================================================================
--- libcfa/src/Makefile.am	(revision 461eed2b8a088c1fd65ab1ad52dac73a115a7459)
+++ libcfa/src/Makefile.am	(revision 57b0b1f192554162db27e934c43896aef9bb507f)
@@ -16,5 +16,5 @@
 
 # create object files in directory with source files
-AUTOMAKE_OPTIONS = subdir-objects
+AUTOMAKE_OPTIONS = foreign subdir-objects
 ARFLAGS = cr
 
@@ -24,9 +24,11 @@
 lib_LIBRARIES =  libcfa.a
 
+VPATH += :../prelude
+
 # AM_CFLAGS for all cfa source
 # AM_CFAFLAGS for only cfa source
 # use -no-include-stdhdr to prevent rebuild cycles
 # The built sources must not depend on the installed headers
-AM_CFAFLAGS = -quiet -in-tree -imacros prelude.c -I$(srcdir)/stdhdr @CONFIG_CFAFLAGS@
+AM_CFAFLAGS = -quiet -in-tree -I$(srcdir)/stdhdr @CONFIG_CFAFLAGS@
 AM_CFLAGS = -g -Wall -Wno-unused-function @ARCH_FLAGS@ @CONFIG_CFLAGS@
 AM_CCASFLAGS = -g -Wall -Wno-unused-function @ARCH_FLAGS@ @CONFIG_CFLAGS@
@@ -34,42 +36,62 @@
 
 #----------------------------------------------------------------------------------------------------------------
+if BUILDLIB
 headers = fstream.hfa iostream.hfa iterator.hfa limits.hfa rational.hfa time.hfa stdlib.hfa common.hfa \
 	  containers/maybe.hfa containers/pair.hfa containers/result.hfa containers/vector.hfa
+
+headers_nosrc = math.hfa gmp.hfa time_t.hfa bits/align.hfa bits/containers.hfa bits/defs.hfa bits/debug.hfa bits/locks.hfa
 
 # not all platforms support concurrency, add option do disable it
 headers += concurrency/coroutine.hfa concurrency/thread.hfa concurrency/kernel.hfa concurrency/monitor.hfa concurrency/mutex.hfa
 
-libobjs = ${headers:.hfa=.o}
-libsrc = prelude.c startup.cfa interpose.cfa bits/debug.cfa assert.cfa exception.c virtual.c heap.cfa \
-	${headers:.hfa=.cfa}
+headers_nosrc += concurrency/invoke.h
+
+libsrc = startup.cfa interpose.cfa bits/debug.cfa assert.cfa exception.c virtual.c heap.cfa ${headers:.hfa=.cfa}
 
 # not all platforms support concurrency, add option do disable it
 libsrc += concurrency/CtxSwitch-@ARCHITECTURE@.S concurrency/alarm.cfa concurrency/invoke.c concurrency/preemption.cfa
+else
+headers =
+headers_nosrc =
+libsrc =
+endif
+
 
 #----------------------------------------------------------------------------------------------------------------
 # add dependency to cfa-cpp so all libraries are rebuilt with new translator
-${libobjs} : ${cfalib_DATA}
+#@CFACC@ @CFACPP@ prelude.cfa
 
-libcfa_a_SOURCES = ${libsrc}
+# add dependency of cfa files
+libobjs = $(addsuffix .o, $(basename $(filter %.cfa,$(libsrc))))
+$(libobjs) : @CFACC@ @CFACPP@ prelude.cfa
+
+
+# .deps inclusion is not done automatically by automake for new languages
+libdeps = $(join \
+	$(addsuffix $(DEPDIR)/ , $(dir $(libobjs) ) ), \
+	$(notdir ${libobjs:.o=.Po}) \
+)
+
+-include $(libdeps)
+
+prelude.o : prelude.cfa extras.cf gcc-builtins.cf builtins.cf @CFACC@ @CFACPP@
+	${AM_V_GEN}@CFACC@ ${AM_CFLAGS} ${CFLAGS} -quiet -in-tree -XCFA -l ${<} -c -o ${@}
+
+
+
+#----------------------------------------------------------------------------------------------------------------
+libcfa_a_SOURCES = prelude.cfa ${libsrc}
 
 stdhdr = ${shell find ${srcdir}/stdhdr -type f -printf "%p "}
 
 cfa_includedir = $(CFA_INCDIR)
-nobase_cfa_include_HEADERS = \
-	${headers}             \
-	${stdhdr}              \
-	math.hfa               \
-	gmp.hfa                \
-	time_t.hfa             \
-	bits/align.hfa         \
-	bits/containers.hfa    \
-	bits/defs.hfa          \
-	bits/debug.hfa         \
-	bits/locks.hfa         \
-	concurrency/invoke.h
-
-MOSTLYCLEANFILES = prelude.c
+nobase_cfa_include_HEADERS = ${stdhdr} ${headers} ${headers_nosrc}
 
 #----------------------------------------------------------------------------------------------------------------
 maintainer-clean-local:
 	-rm -rf ${CFA_INCDIR} ${CFA_LIBDIR}
+
+
+# $(AM_V_CFA)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+# 	$(CFACOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+# 	$(am__mv) $$depbase.Tpo $$depbase.Po
Index: libcfa/src/Makefile.in
===================================================================
--- libcfa/src/Makefile.in	(revision 461eed2b8a088c1fd65ab1ad52dac73a115a7459)
+++ libcfa/src/Makefile.in	(revision 57b0b1f192554162db27e934c43896aef9bb507f)
@@ -19,5 +19,4 @@
 
 
-VPATH = @srcdir@
 am__is_gnu_make = { \
   if test -z '$(MAKELEVEL)'; then \
@@ -97,6 +96,6 @@
 am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
 	$(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(nobase_cfa_include_HEADERS) \
-	$(am__DIST_COMMON)
+DIST_COMMON = $(srcdir)/Makefile.am \
+	$(am__nobase_cfa_include_HEADERS_DIST) $(am__DIST_COMMON)
 mkinstalldirs = $(install_sh) -d
 CONFIG_CLEAN_FILES =
@@ -138,21 +137,37 @@
 libcfa_a_AR = $(AR) $(ARFLAGS)
 libcfa_a_LIBADD =
+am__libcfa_a_SOURCES_DIST = prelude.cfa startup.cfa interpose.cfa \
+	bits/debug.cfa assert.cfa exception.c virtual.c heap.cfa \
+	fstream.cfa iostream.cfa iterator.cfa limits.cfa rational.cfa \
+	time.cfa stdlib.cfa common.cfa containers/maybe.cfa \
+	containers/pair.cfa containers/result.cfa \
+	containers/vector.cfa concurrency/coroutine.cfa \
+	concurrency/thread.cfa concurrency/kernel.cfa \
+	concurrency/monitor.cfa concurrency/mutex.cfa \
+	concurrency/CtxSwitch-@ARCHITECTURE@.S concurrency/alarm.cfa \
+	concurrency/invoke.c concurrency/preemption.cfa
 am__dirstamp = $(am__leading_dot)dirstamp
-am__objects_1 = fstream.$(OBJEXT) iostream.$(OBJEXT) \
-	iterator.$(OBJEXT) limits.$(OBJEXT) rational.$(OBJEXT) \
-	time.$(OBJEXT) stdlib.$(OBJEXT) common.$(OBJEXT) \
-	containers/maybe.$(OBJEXT) containers/pair.$(OBJEXT) \
-	containers/result.$(OBJEXT) containers/vector.$(OBJEXT) \
-	concurrency/coroutine.$(OBJEXT) concurrency/thread.$(OBJEXT) \
-	concurrency/kernel.$(OBJEXT) concurrency/monitor.$(OBJEXT) \
-	concurrency/mutex.$(OBJEXT)
-am__objects_2 = prelude.$(OBJEXT) startup.$(OBJEXT) \
-	interpose.$(OBJEXT) bits/debug.$(OBJEXT) assert.$(OBJEXT) \
-	exception.$(OBJEXT) virtual.$(OBJEXT) heap.$(OBJEXT) \
-	$(am__objects_1) \
-	concurrency/CtxSwitch-@ARCHITECTURE@.$(OBJEXT) \
-	concurrency/alarm.$(OBJEXT) concurrency/invoke.$(OBJEXT) \
-	concurrency/preemption.$(OBJEXT)
-am_libcfa_a_OBJECTS = $(am__objects_2)
+@BUILDLIB_TRUE@am__objects_1 = fstream.$(OBJEXT) iostream.$(OBJEXT) \
+@BUILDLIB_TRUE@	iterator.$(OBJEXT) limits.$(OBJEXT) \
+@BUILDLIB_TRUE@	rational.$(OBJEXT) time.$(OBJEXT) \
+@BUILDLIB_TRUE@	stdlib.$(OBJEXT) common.$(OBJEXT) \
+@BUILDLIB_TRUE@	containers/maybe.$(OBJEXT) \
+@BUILDLIB_TRUE@	containers/pair.$(OBJEXT) \
+@BUILDLIB_TRUE@	containers/result.$(OBJEXT) \
+@BUILDLIB_TRUE@	containers/vector.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/coroutine.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/thread.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/kernel.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/monitor.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/mutex.$(OBJEXT)
+@BUILDLIB_TRUE@am__objects_2 = startup.$(OBJEXT) interpose.$(OBJEXT) \
+@BUILDLIB_TRUE@	bits/debug.$(OBJEXT) assert.$(OBJEXT) \
+@BUILDLIB_TRUE@	exception.$(OBJEXT) virtual.$(OBJEXT) \
+@BUILDLIB_TRUE@	heap.$(OBJEXT) $(am__objects_1) \
+@BUILDLIB_TRUE@	concurrency/CtxSwitch-@ARCHITECTURE@.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/alarm.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/invoke.$(OBJEXT) \
+@BUILDLIB_TRUE@	concurrency/preemption.$(OBJEXT)
+am_libcfa_a_OBJECTS = prelude.$(OBJEXT) $(am__objects_2)
 libcfa_a_OBJECTS = $(am_libcfa_a_OBJECTS)
 AM_V_P = $(am__v_P_@AM_V@)
@@ -191,5 +206,5 @@
 am__v_CCLD_1 = 
 SOURCES = $(libcfa_a_SOURCES)
-DIST_SOURCES = $(libcfa_a_SOURCES)
+DIST_SOURCES = $(am__libcfa_a_SOURCES_DIST)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
@@ -197,4 +212,13 @@
     *) (install-info --version) >/dev/null 2>&1;; \
   esac
+am__nobase_cfa_include_HEADERS_DIST = ${shell find ${srcdir}/stdhdr \
+	-type f -printf "%p "} fstream.hfa iostream.hfa iterator.hfa \
+	limits.hfa rational.hfa time.hfa stdlib.hfa common.hfa \
+	containers/maybe.hfa containers/pair.hfa containers/result.hfa \
+	containers/vector.hfa concurrency/coroutine.hfa \
+	concurrency/thread.hfa concurrency/kernel.hfa \
+	concurrency/monitor.hfa concurrency/mutex.hfa math.hfa gmp.hfa \
+	time_t.hfa bits/align.hfa bits/containers.hfa bits/defs.hfa \
+	bits/debug.hfa bits/locks.hfa concurrency/invoke.h
 HEADERS = $(nobase_cfa_include_HEADERS)
 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
@@ -220,4 +244,5 @@
 	$(top_srcdir)/./automake/depcomp
 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+VPATH = @srcdir@ :../prelude
 ACLOCAL = @ACLOCAL@
 AMTAR = @AMTAR@
@@ -243,4 +268,5 @@
 CFLAGS = @CFLAGS@
 CONFIGURATION = @CONFIGURATION@
+CONFIG_BUILDLIB = @CONFIG_BUILDLIB@
 CONFIG_CFAFLAGS = @CONFIG_CFAFLAGS@
 CONFIG_CFLAGS = @CONFIG_CFLAGS@
@@ -328,5 +354,5 @@
 
 # create object files in directory with source files
-AUTOMAKE_OPTIONS = subdir-objects
+AUTOMAKE_OPTIONS = foreign subdir-objects
 ARFLAGS = cr
 CFACOMPILE = $(CFACC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CFAFLAGS) $(CFAFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -341,41 +367,53 @@
 # use -no-include-stdhdr to prevent rebuild cycles
 # The built sources must not depend on the installed headers
-AM_CFAFLAGS = -quiet -in-tree -imacros prelude.c -I$(srcdir)/stdhdr @CONFIG_CFAFLAGS@
+AM_CFAFLAGS = -quiet -in-tree -I$(srcdir)/stdhdr @CONFIG_CFAFLAGS@
 AM_CFLAGS = -g -Wall -Wno-unused-function @ARCH_FLAGS@ @CONFIG_CFLAGS@
 AM_CCASFLAGS = -g -Wall -Wno-unused-function @ARCH_FLAGS@ @CONFIG_CFLAGS@
+@BUILDLIB_FALSE@headers = 
 
 #----------------------------------------------------------------------------------------------------------------
 
 # not all platforms support concurrency, add option do disable it
-headers = fstream.hfa iostream.hfa iterator.hfa limits.hfa \
-	rational.hfa time.hfa stdlib.hfa common.hfa \
-	containers/maybe.hfa containers/pair.hfa containers/result.hfa \
-	containers/vector.hfa concurrency/coroutine.hfa \
-	concurrency/thread.hfa concurrency/kernel.hfa \
-	concurrency/monitor.hfa concurrency/mutex.hfa
-libobjs = ${headers:.hfa=.o}
+@BUILDLIB_TRUE@headers = fstream.hfa iostream.hfa iterator.hfa \
+@BUILDLIB_TRUE@	limits.hfa rational.hfa time.hfa stdlib.hfa \
+@BUILDLIB_TRUE@	common.hfa containers/maybe.hfa \
+@BUILDLIB_TRUE@	containers/pair.hfa containers/result.hfa \
+@BUILDLIB_TRUE@	containers/vector.hfa concurrency/coroutine.hfa \
+@BUILDLIB_TRUE@	concurrency/thread.hfa concurrency/kernel.hfa \
+@BUILDLIB_TRUE@	concurrency/monitor.hfa concurrency/mutex.hfa
+@BUILDLIB_FALSE@headers_nosrc = 
+@BUILDLIB_TRUE@headers_nosrc = math.hfa gmp.hfa time_t.hfa \
+@BUILDLIB_TRUE@	bits/align.hfa bits/containers.hfa \
+@BUILDLIB_TRUE@	bits/defs.hfa bits/debug.hfa bits/locks.hfa \
+@BUILDLIB_TRUE@	concurrency/invoke.h
+@BUILDLIB_FALSE@libsrc = 
 
 # not all platforms support concurrency, add option do disable it
-libsrc = prelude.c startup.cfa interpose.cfa bits/debug.cfa assert.cfa \
-	exception.c virtual.c heap.cfa ${headers:.hfa=.cfa} \
-	concurrency/CtxSwitch-@ARCHITECTURE@.S concurrency/alarm.cfa \
-	concurrency/invoke.c concurrency/preemption.cfa
-libcfa_a_SOURCES = ${libsrc}
+@BUILDLIB_TRUE@libsrc = startup.cfa interpose.cfa bits/debug.cfa \
+@BUILDLIB_TRUE@	assert.cfa exception.c virtual.c heap.cfa \
+@BUILDLIB_TRUE@	${headers:.hfa=.cfa} \
+@BUILDLIB_TRUE@	concurrency/CtxSwitch-@ARCHITECTURE@.S \
+@BUILDLIB_TRUE@	concurrency/alarm.cfa concurrency/invoke.c \
+@BUILDLIB_TRUE@	concurrency/preemption.cfa
+
+#----------------------------------------------------------------------------------------------------------------
+# add dependency to cfa-cpp so all libraries are rebuilt with new translator
+#@CFACC@ @CFACPP@ prelude.cfa
+
+# add dependency of cfa files
+libobjs = $(addsuffix .o, $(basename $(filter %.cfa,$(libsrc))))
+
+# .deps inclusion is not done automatically by automake for new languages
+libdeps = $(join \
+	$(addsuffix $(DEPDIR)/ , $(dir $(libobjs) ) ), \
+	$(notdir ${libobjs:.o=.Po}) \
+)
+
+
+#----------------------------------------------------------------------------------------------------------------
+libcfa_a_SOURCES = prelude.cfa ${libsrc}
 stdhdr = ${shell find ${srcdir}/stdhdr -type f -printf "%p "}
 cfa_includedir = $(CFA_INCDIR)
-nobase_cfa_include_HEADERS = \
-	${headers}             \
-	${stdhdr}              \
-	math.hfa               \
-	gmp.hfa                \
-	time_t.hfa             \
-	bits/align.hfa         \
-	bits/containers.hfa    \
-	bits/defs.hfa          \
-	bits/debug.hfa         \
-	bits/locks.hfa         \
-	concurrency/invoke.h
-
-MOSTLYCLEANFILES = prelude.c
+nobase_cfa_include_HEADERS = ${stdhdr} ${headers} ${headers_nosrc}
 all: all-am
 
@@ -506,5 +544,4 @@
 
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exception.Po@am__quote@
-@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-@ARCHITECTURE@.Po@am__quote@
@@ -676,5 +713,4 @@
 	fi
 mostlyclean-generic:
-	-test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
 
 clean-generic:
@@ -784,12 +820,14 @@
 
 
-.cfa.o: $(CFACC) $(CFACPP)
+.cfa.o:
 	$(AM_V_CFA)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
 	$(CFACOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
 	$(am__mv) $$depbase.Tpo $$depbase.Po
-
-#----------------------------------------------------------------------------------------------------------------
-# add dependency to cfa-cpp so all libraries are rebuilt with new translator
-${libobjs} : ${cfalib_DATA}
+$(libobjs) : @CFACC@ @CFACPP@ prelude.cfa
+
+-include $(libdeps)
+
+prelude.o : prelude.cfa extras.cf gcc-builtins.cf builtins.cf @CFACC@ @CFACPP@
+	${AM_V_GEN}@CFACC@ ${AM_CFLAGS} ${CFLAGS} -quiet -in-tree -XCFA -l ${<} -c -o ${@}
 
 #----------------------------------------------------------------------------------------------------------------
@@ -797,4 +835,8 @@
 	-rm -rf ${CFA_INCDIR} ${CFA_LIBDIR}
 
+# $(AM_V_CFA)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+# 	$(CFACOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+# 	$(am__mv) $$depbase.Tpo $$depbase.Po
+
 # Tell versions [3.59,3.63) of GNU make to not export all variables.
 # Otherwise a system limit (for SysV at least) may be exceeded.
