# CROCOS: Makefile
#
# Copyright (C) 2006-2008 Guillaume Duranceau
#
# klibc
KLIBC_SUBDIR = klibc
KLIBC = $(KLIBC_SUBDIR)/klibc.a
KLIBC_INC = $(KLIBC_SUBDIR)/include/klibc
KLIBC_ARCH_INC = $(KLIBC_INC)/arch
KLIBC_SRC = $(KLIBC_SUBDIR)/src
KLIBC_X86_SRC = $(KLIBC_SRC)/arch/x86
KLIBC_TEST = $(KLIBC_SUBDIR)/test
KLIBC_INC_FILES = $(wildcard $(KLIBC_INC)/*.h) \
$(wildcard $(KLIBC_ARCH_INC)/*.h)
KLIBC_SRC_CC_FILES = $(wildcard $(KLIBC_SRC)/*.c) \
$(wildcard $(KLIBC_X86_SRC)/*.c)
KLIBC_SRC_AS_FILES = $(wildcard $(KLIBC_X86_SRC)/*.S)
KLIBC_SRC_FILES = $(KLIBC_INC_FILES) \
$(KLIBC_SRC_CC_FILES) \
$(KLIBC_SRC_AS_FILES)
KLIBC_OBJ_FILES = $(patsubst %.c, %.o, $(KLIBC_SRC_CC_FILES)) \
$(patsubst %.S, %.o, $(KLIBC_SRC_AS_FILES))
# crocos
CROCOS_SUBDIRS = crocos/devices crocos/intr crocos/main crocos/process
# usr
USR_SUBDIR = usr
USR_INC = $(USR_SUBDIR)/include
USR_SRC = $(USR_SUBDIR)/src
USR_LIB = $(USR_SUBDIR)/lib
# usr - libcrocos
LIBCROCOS = $(USR_LIB)/libcrocos.a
LIBCROCOS_INC = $(USR_INC)/crocos
LIBCROCOS_SRC = $(USR_SRC)/crocos
LIBCROCOS_INC_FILES = $(wildcard $(LIBCROCOS_INC)/*.h)
LIBCROCOS_SRC_CC_FILES = $(wildcard $(LIBCROCOS_SRC)/*.c)
LIBCROCOS_SRC_FILES = $(LIBCROCOS_INC_FILES) $(LIBCROCOS_SRC_CC_FILES)
LIBCROCOS_OBJ_FILES = $(patsubst %.c, %.o, $(LIBCROCOS_SRC_CC_FILES))
# usr - init
INIT = $(USR_SRC)/init
# usr - test
USR_TEST = $(USR_SRC)/test
include var.mk
.PHONY: all check clean crocos crocos-clean klibc klibc-check \
klibc-clean libcrocos libcrocos-clean usr usr-clean test-clean
all: klibc crocos libcrocos usr
clean: klibc-clean crocos-clean libcrocos-clean usr-clean test-clean
check: all
@$(MAKE) -s -C $(USR_TEST)
@$(MAKE) -s -C $(USR_TEST) check
klibc: $(KLIBC)
klibc-check: $(KLIBC)
@$(MAKE) -s -C $(KLIBC_TEST)
@$(MAKE) -s -C $(KLIBC_TEST) check
klibc-clean:
@$(MAKE) -s -C $(KLIBC_SRC) clean
@$(MAKE) -s -C $(KLIBC_TEST) clean
@echo "Cleaning $(KLIBC)"
@$(RM) $(KLIBC)
$(KLIBC): $(KLIBC_SRC_FILES)
@$(MAKE) -s -C $(KLIBC_SRC)
@echo "Linking $(KLIBC)"
@$(AR) -r $(KLIBC) $(KLIBC_OBJ_FILES)
crocos:
@for dir in $(CROCOS_SUBDIRS); do $(MAKE) -s -C $$dir; done
crocos-clean:
@for dir in $(CROCOS_SUBDIRS); do $(MAKE) -s -C $$dir clean; done
libcrocos: $(LIBCROCOS)
libcrocos-clean:
@$(MAKE) -s -C $(LIBCROCOS_SRC) clean
@echo "Cleaning $(LIBCROCOS)"
@$(RM) $(LIBCROCOS)
$(LIBCROCOS): $(LIBCROCOS_SRC_FILES)
@$(MAKE) -s -C $(LIBCROCOS_SRC)
@echo "Linking $(LIBCROCOS)"
@$(AR) -r $(LIBCROCOS) $(LIBCROCOS_OBJ_FILES)
usr:
@$(MAKE) -s -C $(INIT)
usr-clean:
@$(MAKE) -s -C $(INIT) clean
test-clean:
@$(MAKE) -s -C $(USR_TEST) clean