default: all ############################################################################ # Defining Variables ############################################################################ VERSION = 2.2 RELEASE = 2 RELVER = $(VERSION)-$(RELEASE) # # Directory where SA-RTL Sources are installed # RTL_DIR = $(shell pwd) # # Directory to Built Object files # HOSTARCH := $(shell uname -m | sed -e s/i.86/i386/) BUILD_DIR = $(RTL_DIR)/build OBJ_DIR = $(BUILD_DIR)/objs LIB_DIR = $(BUILD_DIR)/libs XTRATUM_LIB_DIR = $(BUILD_DIR)/XtratuM IMAGE_DIR = $(BUILD_DIR) # # Include .config file with configurable compilation variables # ifeq ($(RTL_DIR)/.config,$(wildcard $(RTL_DIR)/.config)) RTLINUX_CONFIG:=$(RTL_DIR)/.config include $(RTLINUX_CONFIG) endif # # Include Special Architecture Rules # ARCH = $(HOSTARCH) include $(RTL_DIR)/Arch.rules # # Include Directories # INCLUDE_DIRS = -I$(RTL_DIR)/include/dietlibc -I$(RTL_DIR)/include/TinyGL -I$(RTL_DIR)/include/microwin -I$(RTL_DIR)/include HPATH = $(RTL_DIR)/include # Needed by mkdep # # Libraries # ifeq ($(CONFIG_RTL_TINYGL),y) STATIC_LIBS += --static $(LIB_DIR)/libTinyGL.a endif ifeq ($(CONFIG_RTL_GUI),y) STATIC_LIBS += --static $(LIB_DIR)/libmwin.a STATIC_LIBS += --static $(LIB_DIR)/libmwobjects.a STATIC_LIBS += --static $(LIB_DIR)/libmwinlib.a STATIC_LIBS += --static $(LIB_DIR)/libmwengine.a STATIC_LIBS += --static $(LIB_DIR)/libmwimages.a STATIC_LIBS += --static $(LIB_DIR)/libmwdrivers.a STATIC_LIBS += --static $(LIB_DIR)/libmwfonts.a endif ifeq ($(CONFIG_XTRATUM),y) STATIC_LIBS += --static $(XTRATUM_LIB_DIR)/xm_ul_wrapper_loader.a STATIC_LIBS += --static $(XTRATUM_LIB_DIR)/libxm_ul_syscalls.a endif STATIC_LIBS += --static $(LIB_DIR)/libstdio.a STATIC_LIBS += --static $(LIB_DIR)/libstrings.a STATIC_LIBS += --static $(LIB_DIR)/libTLSF.a STATIC_LIBS += --static $(LIB_DIR)/liberrno.a STATIC_LIBS += --static $(LIB_DIR)/libmem.a STATIC_LIBS += --static $(LIB_DIR)/libis.a STATIC_LIBS += --static $(LIB_DIR)/librand.a STATIC_LIBS += --static $(LIB_DIR)/libmath.a WARNING_FLAGS = -Wno-uninitialized CFLAGS += $(WARNING_FLAGS) -O2 -D__KERNEL__ -nostdinc -fno-builtin $(INCLUDE_DIRS) ifeq ($(CONFIG_RTL_GDBAGENT),y) CFLAGS += -g else CFLAGS += -fomit-frame-pointer endif CC = ${CROSS_COMPILE}gcc HOSTCC = gcc LD = ${CROSS_COMPILE}ld # # Define Modules to be Compiled # MODULE_DIRS = main MODULE_DIRS += init MODULE_DIRS += drivers ifeq ($(CONFIG_RTL_GDBAGENT),y) MODULE_DIRS += gdbagent endif MODULE_DIRS += posixio MODULE_DIRS += tracer MODULE_DIRS += ipc MODULE_DIRS += schedulers MODULE_DIRS += tasks MODULE_DIRS += dietlibc MODULE_DIRS += arch/$(RTL_ARCH)/kernel MODULE_DIRS += TLSF ifeq ($(CONFIG_RTL_GUI),y) # Graphic User Interface Generic Functions MODULE_DIRS += gui # MicroWindows Source directory MODULE_DIRS += mw endif ifeq ($(CONFIG_RTL_TINYGL),y) MODULE_DIRS += TinyGL endif MODULE_DIRS += arch/$(RTL_ARCH)/boot .EXPORT_ALL_VARIABLES: ifneq ($(wildcard .config),) include .config all: .depend symlinks modules @echo @echo 'Image stored in $(IMAGE_DIR)' else all: .config @echo @echo 'Now do "make" to build the RTLinux modules' endif symlinks: dummy rm -f include/arch ln -s arch-$(RTL_ARCH) include/arch modules: rtl.mk dummy @mkdir -p modules @set -e; @for i in $(MODULE_DIRS); do \ $(MAKE) -C $$i; \ done; .config: $(MAKE) config ######################################################################### # UIs to configure OS creating .config file ######################################################################### config: symlinks $(SHELL) scripts/Configure scripts/config.in oldconfig: symlinks $(SHELL) scripts/Configure -d scripts/config.in menuconfig: symlinks $(MAKE) -C scripts ncurses $(MAKE) -C scripts lxdialog $(SHELL) scripts/Menuconfig scripts/config.in xconfig: symlinks $(MAKE) -C scripts tkparse @if [ -f /usr/local/bin/wish ]; then \ echo '#!'"/usr/local/bin/wish -f" > kconfig.tk; \ else \ echo '#!'"/usr/bin/wish -f" > kconfig.tk; \ fi cat scripts/header.tk >> ./kconfig.tk scripts/tkparse < scripts/config.in >> kconfig.tk echo "set defaults \"schedulers/${ARCH}/defconfig\"" >> kconfig.tk echo "set ARCH \"${ARCH}\"" >> kconfig.tk cat scripts/tail.tk >> kconfig.tk chmod 755 kconfig.tk touch include/rtl_conf.h wish -f kconfig.tk rm -f kconfig.tk ######################################################################### # Calculate Module dependencies ######################################################################### .depend: scripts/mkdep @if [ ! -f $(RTL_DIR)/.config ]; then\ echo You must do a make config in $(RTL_DIR); \ exit 1; \ fi @mkdir -p modules for x in `find . -name Makefile`; do \ F=`echo $$x|sed 's/Makefile$$//g'`; \ (cd $$F; $$RTL_DIR/scripts/mkdep *.c *.h *.S > .depend 2>/dev/null); \ done @rm -f .hdepend ######################################################################### # File rtl.mk in all Makefiles ######################################################################### rtl.mk: .config @echo "#Automatically generated by RTLinux Makefile" > rtl.mk; @echo RTL_DIR = $(RTL_DIR) >>rtl.mk @echo $(INCLUDE_COMMAND) >> rtl.mk; @echo CFLAGS = $(CFLAGS) >> rtl.mk; @echo ARCH = $(ARCH) >> rtl.mk; @echo CC = $(CC) >> rtl.mk; @echo BUILD_DIR = $(BUILD_DIR) >> rtl.mk; @echo OBJ_DIR = $(OBJ_DIR) >> rtl.mk; @echo LIB_DIR = $(LIB_DIR) >> rtl.mk; @echo IMAGE_DIR = $(BUILD_DIR) >> rtl.mk ######################################################################### # CLEAN project ######################################################################### clean: dummy symlinks @rm -f $(OBJ_DIR)/* @rm -f $(LIB_DIR)/* @rm -f rtl.mk @echo RTL_DIR = $(RTL_DIR) >rtl.mk @set -e; \ for i in $(MODULE_DIRS); do \ $(MAKE) -C $$i clean ; \ done $(MAKE) -C scripts clean rm -rf kconfig.tk .menuconfig.log scripts/rtlinux.spec regression.log find . -type f \( -name .depend -o -name '#*#' -o -name '*~' -o -name '*.o' -o \( -name core -a \! -type d \) -or -name rtl.mk \) -exec /bin/rm -r '{}' \; rm -f scripts/mkdep ######################################################################## # MKDEP to calculate file dependencies ######################################################################## scripts/mkdep: scripts/mkdep.c ${HOSTCC} -Wall -O2 -o scripts/mkdep scripts/mkdep.c .PHONY: dummy modules schedulers devices fifos