blob: c8e3d5da32b6b727c355e96671ea01423f34c142 [file] [log] [blame]
Travis Geiselbrecht1d0df692008-09-01 02:26:09 -07001LOCAL_DIR := $(GET_LOCAL_DIR)
2
3TOOLCHAIN_PREFIX ?= arm-elf-
4
5ENABLE_THUMB ?= true
6
7CFLAGS += -finline
8
9DEFINES += \
10 ARM_CPU_$(ARM_CPU)=1
11
12# do set some options based on the cpu core
13HANDLED_CORE := false
14ifeq ($(ARM_CPU),cortex-a8)
15DEFINES += \
16 ARM_WITH_CP15=1 \
17 ARM_WITH_MMU=1 \
18 ARM_ISA_ARMv7=1 \
19 ARM_WITH_VFP=1 \
20 ARM_WITH_NEON=1 \
21 ARM_WITH_THUMB=1 \
22 ARM_WITH_THUMB2=1 \
23 ARM_WITH_CACHE=1 \
24 ARM_WITH_L2=1
25#CFLAGS += -mcpu=$(ARM_CPU)
26CFLAGS += -mcpu=arm1136jf-s # compiler doesn't understand cortex yet
27HANDLED_CORE := true
28#CFLAGS += -mfpu=vfp -mfloat-abi=softfp
29endif
30ifeq ($(ARM_CPU),arm1176jzf-s)
31DEFINES += \
32 ARM_WITH_CP15=1 \
33 ARM_WITH_MMU=1 \
34 ARM_ISA_ARMv6=1 \
35 ARM_WITH_VFP=1 \
36 ARM_WITH_THUMB=1 \
37 ARM_WITH_CACHE=1 \
38 ARM_CPU_ARM1136=1
39CFLAGS += -mcpu=$(ARM_CPU)
40HANDLED_CORE := true
41endif
42ifeq ($(ARM_CPU),arm926ej-s)
43DEFINES += \
44 ARM_WITH_CP15=1 \
45 ARM_WITH_MMU=1 \
46 ARM_ISA_ARMv5E=1 \
47 ARM_WITH_THUMB=1 \
48 ARM_WITH_CACHE=1 \
49 ARM_CPU_ARM9=1 \
50 ARM_CPU_ARM926=1
51CFLAGS += -mcpu=$(ARM_CPU)
52HANDLED_CORE := true
53endif
54ifeq ($(ARM_CPU),arm7tdmi)
55DEFINES += \
56 ARM_ISA_ARMv4=1 \
57 ARM_WITH_THUMB=1 \
58 ARM_CPU_ARM7=1
59CFLAGS += -mcpu=$(ARM_CPU)
60HANDLED_CORE := true
61endif
62
63ifneq ($(HANDLED_CORE),true)
64$(warning $(LOCAL_DIR)/rules.mk doesnt have logic for arm core $(ARM_CPU))
65$(warning this is likely to be broken)
66endif
67
68THUMBCFLAGS :=
69THUMBINTERWORK :=
70ifeq ($(ENABLE_THUMB),true)
71THUMBCFLAGS := -mthumb -D__thumb__
72THUMBINTERWORK := -mthumb-interwork
73endif
74
75CFLAGS += $(THUMBINTERWORK)
76
77INCLUDES += \
78 -I$(LOCAL_DIR)/include
79
80BOOTOBJS += \
81 $(LOCAL_DIR)/crt0.o
82
83OBJS += \
84 $(LOCAL_DIR)/arch.Ao \
85 $(LOCAL_DIR)/asm.o \
86 $(LOCAL_DIR)/cache.o \
87 $(LOCAL_DIR)/cache-ops.o \
88 $(LOCAL_DIR)/ops.o \
89 $(LOCAL_DIR)/exceptions.o \
90 $(LOCAL_DIR)/faults.o \
91 $(LOCAL_DIR)/mmu.o \
92 $(LOCAL_DIR)/thread.o
93
94# make sure some bits were set up
95MEMVARS_SET := 0
96ifneq ($(MEMBASE),)
97MEMVARS_SET := 1
98endif
99ifneq ($(MEMSIZE),)
100MEMVARS_SET := 1
101endif
102ifeq ($(MEMVARS_SET),0)
103$(error missing MEMBASE or MEMSIZE variable, please set in target rules.mk)
104endif
105
106LIBGCC := $(shell $(TOOLCHAIN_PREFIX)gcc $(CFLAGS) $(THUMBCFLAGS) -print-libgcc-file-name)
107#$(info LIBGCC = $(LIBGCC))
108
109# potentially generated files that should be cleaned out with clean make rule
110GENERATED += \
111 $(BUILDDIR)/system-onesegment.ld \
112 $(BUILDDIR)/system-twosegment.ld
113
114# rules for generating the linker scripts
115
116$(BUILDDIR)/system-onesegment.ld: $(LOCAL_DIR)/system-onesegment.ld
117 @echo generating $@
118 @$(MKDIR)
119 $(NOECHO)sed "s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/" < $< > $@
120
121$(BUILDDIR)/system-twosegment.ld: $(LOCAL_DIR)/system-twosegment.ld
122 @echo generating $@
123 @$(MKDIR)
124 $(NOECHO)sed "s/%ROMBASE%/$(ROMBASE)/;s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/" < $< > $@
125