+# Bundled apps
+# =========================================================================
+
+app-dirs =
+tagged-app-dirs := $(subst /,__,$(app-dirs))
+app-dirs-install := $(addprefix _install_,$(tagged-app-dirs))
+app-dirs-clean := $(addprefix _clean_,$(tagged-app-dirs))
+
+PHONY += $(app-dirs-install) $(app-dirs-clean)
+
+$(app-dirs-install):
+ @$(MAKE) -C $(patsubst _install_%,%,$(subst __,/,$@)) install
+
+$(app-dirs-clean):
+ @$(MAKE) -C $(patsubst _clean_%,%,$(subst __,/,$@)) clean
+
+PHONY += apps-install
+apps-install: $(app-dirs-install)
+ @$(shell mkdir -p $(AKAROS_ROOT)/build_logs)
+ @$(call make_as_parent, -C tools/apps/busybox) > build_logs/busybox_install.log 2>&1
+ @echo busybox install succeeded.
+ @$(call make_as_parent, -C tools/apps/ipconfig install) > build_logs/ipconfig_install.log 2>&1
+ @echo ipconfig install succeeded.
+ @$(call make_as_parent, -C tools/dev-libs/elfutils install) > build_logs/elfutils_install.log 2>&1
+ @echo elfutils install succeeded.
+ @$(call make_as_parent, -C tools/dev-util/perf install) > build_logs/perf_install.log 2>&1
+ @echo perf install succeeded.
+ @$(call make_as_parent, -C tools/sys-apps/bash install) > build_logs/bash_install.log 2>&1
+ @echo bash install succeeded.
+
+PHONY += apps-clean
+apps-clean: $(app-dirs-clean)
+ @$(shell mkdir -p $(AKAROS_ROOT)/build_logs)
+ @$(call make_as_parent, -C tools/apps/busybox clean) > build_logs/busybox_clean.log 2>&1
+ @echo busybox clean succeeded.
+ @$(call make_as_parent, -C tools/apps/ipconfig clean) > build_logs/ipconfig_clean.log 2>&1
+ @echo ipconfig clean succeeded.
+ @$(call make_as_parent, -C tools/dev-libs/elfutils clean) > build_logs/elfutils_clean.log 2>&1
+ @echo elfutils clean succeeded.
+ @$(call make_as_parent, -C tools/dev-util/perf clean) > build_logs/perf_clean.log 2>&1
+ @echo perf clean succeeded.
+ @$(call make_as_parent, -C tools/sys-apps/bash clean) > build_logs/bash_clean.log 2>&1
+ @echo bash clean succeeded.
+
+# Cross Compiler
+# =========================================================================
+
+xcc_build_dir := tools/compilers/gcc-glibc
+xcc_target := $(ARCH)
+ifeq ($(xcc_target),x86)
+ xcc_target := $(xcc_target)_64
+endif
+xcc_cleans := $(shell $(MAKE) -C $(xcc_build_dir) -pn |\
+ grep "VALID_CLEANS := " |\
+ sed -e 's/VALID_CLEANS := //')
+xcc_subcmds := $(shell $(MAKE) -C $(xcc_build_dir) -pn |\
+ grep "VALID_SUBCMDS := " |\
+ sed -e 's/VALID_SUBCMDS := //')
+xcc_clean_goals := $(patsubst %, xcc-%, $(xcc_cleans))
+xcc_subcmd_goals := $(patsubst %, xcc-%, $(xcc_subcmds))
+
+PHONY += xcc
+xcc: xcc-build
+
+PHONY += $(xcc_clean_goals)
+$(xcc_clean_goals):
+ @target="$(patsubst xcc-%,%,$(@))";\
+ $(call make_as_parent, -C $(xcc_build_dir) $${target})
+
+PHONY += $(xcc_subcmd_goals)
+$(xcc_subcmd_goals):
+ @subcmd="$(patsubst xcc-%,%,$(@))";\
+ target="$(xcc_target) $${subcmd}";\
+ $(call make_as_parent, -C $(xcc_build_dir) $${target})
+
+PHONY += xcc-upgrade
+xcc-upgrade: xcc
+ @$(MAKE) userclean
+ @$(MAKE) install-base-libs
+ @$(MAKE) testclean utestclean
+ @$(call make_as_parent, apps-clean)
+ @$(call make_as_parent, apps-install)
+ @$(MAKE) tests utest
+ @$(MAKE) fill-kfs
+ @$(MAKE) akaros-kernel
+
+PHONY += xcc-upgrade-from-scratch
+xcc-upgrade-from-scratch: xcc-clean xcc-uninstall
+ @$(call make_as_parent, xcc-upgrade)
+