#TARGET		= MAKET
TARGET		= ANALYZER
#TARGET		= SNT
#TARGET		= NAMMM

NAME_SNT	= snt
NAME_ANALYZER	= analyzer
NAME_NAMMM	= nammm
NAME_MAKET	= maket
NAME		= $(NAME_$(TARGET))


SRC_SNT		= detector.c
SRC_ANALYZER	= detector_plain.c
SRC_NAMMM	= detector.c
SRC_MAKET	= detector_plain.c
SRC 		= irq/irq.c irq/interrupt_utils.c ladc.c spi.c i2c.c \
		snt.c serial.c setup.c watchdog.c commands.c time.c sync.c \
		error.c spectrum.c tools.c events.c layout.c $(SRC_$(TARGET))
ASRC 		= startup.S swi_handler.S

OPT = 3
# Run mode: ROM_RUN or RAM_RUN
MODE			= ROM
RUN_MODE 		= $(MODE)_RUN
# Exception vector placement (for ROM_RUN only)
# VECTORS_IN_ROM, VECTORS_IN_RAM
VECTOR_LOCATION = VECTORS_IN_ROM

MCU		= arm7tdmi
#MCU		= arm7tdmi-s
SUBMDL		= lpc2138

CC = /usr/arm-softfloat-linux-uclibc/gcc-bin/3.4.6/arm-softfloat-linux-uclibc-gcc
LD = /usr/arm-softfloat-linux-uclibc/binutils-bin/2.16.1/ld
AR = /usr/arm-softfloat-linux-uclibc/binutils-bin/2.16.1/ar
AS = /usr/arm-softfloat-linux-uclibc/binutils-bin/2.16.1/as
OBJCOPY = /usr/arm-softfloat-linux-uclibc/binutils-bin/2.16.1/objcopy

# Flash command, COM port the MCU connected to, baud rate and crystal speed
FLASH = lpc2k_pgm
FLASH_PORT = /dev/tts/USB0
FLASH_BAUD = 38400
FLASH_XTAL = 12.000
UART_BAUD = `scripts/uart_speed.pl`
FLASH_COMMAND = $(FLASH) $(NAME).hex $(FLASH_PORT) $(FLASH_BAUD) $(FLASH_XTAL)
TEST_COMMAND = $(FLASH) -termonly $(UART_BAUD) $(NAME).hex $(FLASH_PORT) $(FLASH_BAUD) $(FLASH_XTAL)

# Additional thumb flags (should be added to the assembler)
THUMB =
#THUMB = -mthumb -mthumb-interwork
CFLAGS = -Wall -I. -Iirq -Ihardware -O$(OPT) -DBUILD_$(TARGET) -D$(RUN_MODE) -D$(VECTOR_LOCATION) $(THUMB) -mcpu=$(MCU)
ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-g -D$(RUN_MODE) -D$(VECTOR_LOCATION) $(THUMB) -mcpu=$(MCU) -x assembler-with-cpp
LDFLAGS = -nostartfiles -Wl,-Map=$(NAME).map,--cref -lc -lm -lgcc -lc -N -static -Thardware/ld.$(SUBMDL)-$(MODE)

COBJ 		= $(SRC:.c=.o)
AOBJ		= $(ASRC:.S=.o)


all: $(NAME).hex

flash: $(NAME).hex
	$(FLASH_COMMAND)

test: $(NAME).hex
	$(TEST_COMMAND)

clean:
	rm -rf $(NAME).hex $(NAME).elf $(NAME).map *.o *.lst irq/*.o irq/*.lst hardware/*.o hardware/*.lst

%.hex: %.elf
	$(OBJCOPY) -O ihex $< $@

%.elf: $(AOBJ) $(COBJ)
	$(CC) $(CFLAGS) $(AOBJ) $(COBJ) --output $@ $(LDFLAGS)

$(AOBJ) : %.o : hardware/%.S
	$(CC) -c $(ASFLAGS) $< -o $@

$(COBJ): %.o : %.c %.h config.h event_types.h defs.h
	$(CC) -c $(CFLAGS) $< -o $@
