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