# TODO:
# - Consider merging the two target-detection bits (Linux's config, mixed, or
# dot target, and the symlink handling). Also, could consider moving around
-# the KFS and EXT2 targets. Clean doesn't need to know about them, for
-# instance.
+# the KFS target. Clean doesn't need to know about it, for instance.
#
# - Review, with an eye for being better about $(srctree). It might only be
# necessary in this file, if we every do the KBUILD_OUTPUT option. But we
export_parent_env := $(shell export | sed 's/$$/;/')
# Save the ability to clear the current environment for future use
-clear_current_env := for c in $$(env | cut -d '=' -f 1); do unset $$c; done;
+clear_current_env := for c in $$(awk 'BEGIN{for (v in ENVIRON){print v}}'); do unset $$c; done;
define export_user_variables
CROSS_COMPILE="$(CROSS_COMPILE)"\
# cmd_cc_o_c = $(CC) $(c_flags) -c -o $@ $<
#
# If $(quiet) is empty, the whole command will be printed.
-# If it is set to "quiet_", only the short version will be printed.
+# If it is set to "quiet_", only the short version will be printed.
# If it is set to "silent_", nothing will be printed at all, since
# the variable $(silent_cmd_cc_o_c) doesn't exist.
#
AKAROSINCLUDE := -I$(srctree)/kern/include/
# CROSS_COMPILE is defined per-arch. Each arch can set other makeflags, kbuild
-# directories, etc.
+# directories, etc.
-include $(srctree)/kern/arch/$(ARCH)/Makefile
-CC := $(CROSS_COMPILE)gcc
+CC := $(CROSS_COMPILE)gcc
CPP := $(CROSS_COMPILE)g++
AS := $(CROSS_COMPILE)as
AR := $(CROSS_COMPILE)ar
CFLAGS_KERNEL += -fno-strict-aliasing -fno-omit-frame-pointer
CFLAGS_KERNEL += -fno-stack-protector
CFLAGS_KERNEL += -Wall -Wno-format -Wno-unused -Werror -Wreturn-type
-CFLAGS_KERNEL += -DROS_KERNEL
+CFLAGS_KERNEL += -DROS_KERNEL -D__KERNEL__
CFLAGS_KERNEL += -include include/generated/autoconf.h -include include/common.h
CFLAGS_KERNEL += -fplan9-extensions
ifeq ($(CONFIG_64BIT),y)
# Akaros Kernel Build
# =========================================================================
# Add top level directories, either to an existing entry (core-y) or to its
-# own.
+# own.
#
# From these, we determine deps and dirs. We recursively make through the
# dirs, generating built-in.o at each step, which are the deps from which we
kern_cpio := $(OBJDIR)/kern/initramfs.cpio
kern_cpio_obj := $(kern_cpio).o
-# ext2 will crash at runtime if we don't have a block device. try to catch the
-# errors now. if it is a bad one, you're just out of luck.
-ifneq ($(CONFIG_EXT2FS),)
-ext2-bdev := $(patsubst "%",%,$(CONFIG_EXT2_BDEV))
-ifeq ($(ext2-bdev),)
-$(error EXT2 selected with no block device [$(ext2-bdev)], fix your .config)
-endif
-ext2_bdev_obj = $(OBJDIR)/kern/$(shell basename $(ext2-bdev)).o
-endif
-
# a bit hacky: we want to make sure the directories exist, and error out
# otherwise. we also want to error out before the initramfs target, otherwise
# we might not get the error (if initramfs files are all up to date). the
# Not the worlds most elegant link command. link-kernel takes the obj output
# name, then the linker script, then everything else you'd dump on the ld
# command line, including linker options and objects to link together.
-#
+#
# After the script is done, we run the arch-specific command directly.
quiet_cmd_link-akaros = LINK $@
cmd_link-akaros = $(CONFIG_SHELL) scripts/link-kernel.sh $@ \
# Higher-level libraries. Built before tests/, but after apps-install.
# TODO: would like to move perfmon here, since it's not meant to be low-level.
# But the apps-install has perf, which depends on user/perfmon.
-user-extra-dirs = vmm
+user-extra-dirs = vmm electric-fence
$(user-extra-dirs): $(user-base-dirs)
user-dirs = $(user-base-dirs) $(user-extra-dirs)
$(user-dirs):
@$(MAKE) -C user/$@ DEPLIBS="$^" && $(MAKE) -C user/$@ install
+PHONY += user
user: $(user-dirs)
PHONY += userclean $(clean-user-dirs)
# Use doxygen to make documentation for ROS (Untested since 2010 or so)
doxygen-dir := $(CUR_DIR)/Documentation/doxygen
-docs:
+docs:
@echo " Making doxygen"
@doxygen-dir=$(doxygen-dir) doxygen $(doxygen-dir)/rosdoc.cfg
@if [ ! -d $(doxygen-dir)/rosdoc/html/img ]; \
PHONY += apps-install
apps-install: $(app-dirs-install)
- @$(call make_as_parent, -C tools/apps/busybox)
- @$(call make_as_parent, -C tools/apps/ipconfig install)
- @$(call make_as_parent, -C tools/dev-libs/elfutils install)
- @$(call make_as_parent, -C tools/dev-util/perf install)
- @$(call make_as_parent, -C tools/sys-apps/bash 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)
- @$(call make_as_parent, -C tools/apps/busybox clean)
- @$(call make_as_parent, -C tools/apps/ipconfig clean)
- @$(call make_as_parent, -C tools/dev-libs/elfutils clean)
- @$(call make_as_parent, -C tools/dev-util/perf clean)
- @$(call make_as_parent, -C tools/sys-apps/bash 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
# =========================================================================