# Makefile for ARM target

# Build tag
BUILD_TAG = echo `date` foo@`hostname`

# Compiler release
COMPILER_RELEASE = echo `arm-elf-gcc --version | head -1`

# Whoami
UNAME = `whoami | cut -c 1-2`

# Base target image name
TARGET_BASE_NAME = st

# eCos Target
ifeq ($(ECOS_TARGET_DIR),)
$(error ECOS_TARGET_DIR not set!)
endif
ECOS_INSTALL_DIR = $(ECOS_TARGET_DIR)/install
ECOS_INCLUDE_DIR = $(ECOS_INSTALL_DIR)/include
ECOS_LIB_DIR = $(ECOS_INSTALL_DIR)/lib

# GCC ARM ELF target
ARCH = arm-elf-

# bintuils
CC = $(ARCH)gcc
CXX = $(ARCH)g++
AR = $(ARCH)ar
ARFLAGS = crv
LD = $(ARCH)ld

# Thumb mode support
USE_THUMB = 0

ifeq ($(USE_THUMB), 1)
ARM_THUMB = Thumb
THUMB_FLAGS = -mthumb -mthumb-interwork
else
ARM_THUMB = ARM
THUMB_FLAGS = -mthumb-interwork
endif

# Optimization flags
OPT_FLAGS = -O2 -mcpu=arm920t -DSHELL_DEBUG

# Debug flags
#DEBUG_FLAGS = -mcpu=arm920t -ggdb2 -DSHELL_DEBUG -Wa,-gstabs

# Generic CFLAGS & LDFLAGS
CFLAGS += -Wall -Wno-unused $(DEBUG_FLAGS) $(OPT_FLAGS) -I. $(THUMB_FLAGS) -ffunction-sections -fdata-sections
LDFLAGS = $(DEBUG_FLAGS) $(THUMB_FLAGS) -L$(ECOS_LIB_DIR) -Wl,--gc-sections -Ttarget.ld -nostdlib

# Flags for Speex
CFLAGS_NT = -Wall $(DEBUG_FLAGS) $(OPT_FLAGS) -I. -ffunction-sections -fdata-sections -mthumb-interwork
ifeq ($(USE_THUMB), 0)
CFLAGS_NT += -mthumb-interwork
endif

# TCP/IP support
USE_TCPIP = 0

CFLAGS += -I$(ECOS_INCLUDE_DIR)
CFLAGS_NT += -I$(ECOS_INCLUDE_DIR)
LDFLAGS += $(THUMB) -L$(ECOS_LIB_DIR)

# Phony targets
.PHONY = clean 

STATIC_LIB = lib$(NAME).a

.SUFFIXES: .o .c .cpp .cxx .s .S

CFLAGS +=	-DBUILD_TAG=\""$(shell $(BUILD_TAG))"\" -DCOMPILER_RELEASE=\""$(shell $(COMPILER_RELEASE))"\" \
		-DBUILD_FLAGS="\"$(DEBUG_FLAGS) $(OPT_FLAGS) $(THUMB_FLAGS)"\" \
		-DARM_THUMB="\"$(ARM_THUMB)"\"

NAME = shelltask

OBJS = buildtag.o \
	builtin_commands.o \
	init.o \
	shell_err.o \
	shell_thread.o \
	shelltask.o \
	thread_cleanup.o \
	thread_info.o

all: $(NAME)

.c.o:
	$(CC) $(CFLAGS) -o $@ -c $<

.cpp.o:
	$(CXX) $(CFLAGS) -o $@ -c $<

$(NAME): $(OBJS)
	$(CC) -o $@ $(OBJS) $(LDFLAGS)
	rm -f buildtag.o
	arm-elf-objcopy -O binary $(NAME) $(NAME).bin

.PHONY:	clean

clean:
ifeq ($(TARGET), library)
	rm -f $(OBJS) $(STATIC_LIB) *.o *~ 
else
	rm -f $(NAME) $(OBJS) $(STATIC_LIB) *.o *~ 
endif

# Dependencies
#
# Rebuild if Makefiles change

$(NAME):	Makefile
$(STATIC_LIB): Makefile
