rules.mk 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. LOCAL_DIR := $(GET_LOCAL_DIR)
  2. # can override this in local.mk
  3. ENABLE_THUMB?=true
  4. DEFINES += \
  5. ARM_CPU_$(ARM_CPU)=1
  6. # do set some options based on the cpu core
  7. HANDLED_CORE := false
  8. ifeq ($(ARM_CPU),cortex-a9)
  9. DEFINES += \
  10. ARM_WITH_CP15=1 \
  11. ARM_WITH_MMU=1 \
  12. ARM_ISA_ARMv7=1 \
  13. ARM_WITH_VFP=1 \
  14. ARM_WITH_NEON=1 \
  15. ARM_WITH_THUMB=1 \
  16. ARM_WITH_THUMB2=1 \
  17. ARM_WITH_CACHE=1 \
  18. ARM_WITH_L2=1
  19. CFLAGS += -mcpu=$(ARM_CPU)
  20. HANDLED_CORE := true
  21. #CFLAGS += -mfpu=vfp -mfloat-abi=softfp
  22. endif
  23. ifeq ($(ARM_CPU),cortex-a8)
  24. DEFINES += \
  25. ARM_WITH_CP15=1 \
  26. ARM_WITH_MMU=1 \
  27. ARM_ISA_ARMv7=1 \
  28. ARM_WITH_VFP=1 \
  29. ARM_WITH_NEON=1 \
  30. ARM_WITH_THUMB=1 \
  31. ARM_WITH_THUMB2=1 \
  32. ARM_WITH_CACHE=1 \
  33. ARM_WITH_L2=1
  34. CFLAGS += -mcpu=$(ARM_CPU)
  35. #CFLAGS += -mcpu=arm1136jf-s # compiler doesn't understand cortex yet
  36. HANDLED_CORE := true
  37. #CFLAGS += -mfpu=vfp -mfloat-abi=softfp
  38. endif
  39. ifeq ($(ARM_CPU),cortex-a7)
  40. DEFINES += \
  41. ARM_WITH_CP15=1 \
  42. ARM_WITH_MMU=1 \
  43. ARM_ISA_ARMv7=1 \
  44. ARM_WITH_VFP=1 \
  45. ARM_WITH_NEON=1 \
  46. ARM_WITH_THUMB=1 \
  47. ARM_WITH_THUMB2=1 \
  48. ARM_WITH_CACHE=1 \
  49. ARM_WITH_L2=1
  50. CFLAGS += -mcpu=cortex-a9
  51. #CFLAGS += -mcpu=arm1136jf-s # compiler doesn't understand cortex yet
  52. HANDLED_CORE := true
  53. #CFLAGS += -mfpu=vfp -mfloat-abi=softfp
  54. endif
  55. ifeq ($(ARM_CPU),cortex-a53)
  56. DEFINES += \
  57. ARM_WITH_CP15=1 \
  58. ARM_WITH_MMU=1 \
  59. ARM_ISA_ARMv7=1 \
  60. ARM_WITH_VFP=1 \
  61. ARM_WITH_NEON=1 \
  62. ARM_WITH_THUMB=1 \
  63. ARM_WITH_THUMB2=1 \
  64. ARM_WITH_CACHE=1 \
  65. ARM_WITH_L2=1
  66. ifeq ($(SUPPORT_ARMV7VE), true)
  67. CFLAGS += -march=armv7ve
  68. DEFINES += SUPPORT_ARMV7VE
  69. else
  70. CFLAGS += -mcpu=cortex-a9
  71. endif
  72. #CFLAGS += -mcpu=arm1136jf-s # compiler doesn't understand cortex yet
  73. HANDLED_CORE := true
  74. #CFLAGS += -mfpu=vfp -mfloat-abi=softfp
  75. endif
  76. ifeq ($(ARM_CPU),arm1136j-s)
  77. DEFINES += \
  78. ARM_WITH_CP15=1 \
  79. ARM_WITH_MMU=1 \
  80. ARM_ISA_ARMv6=1 \
  81. ARM_WITH_THUMB=1 \
  82. ARM_WITH_CACHE=1 \
  83. ARM_CPU_ARM1136=1
  84. CFLAGS += -mcpu=$(ARM_CPU)
  85. HANDLED_CORE := true
  86. endif
  87. ifeq ($(ARM_CPU),arm1176jzf-s)
  88. DEFINES += \
  89. ARM_WITH_CP15=1 \
  90. ARM_WITH_MMU=1 \
  91. ARM_ISA_ARMv6=1 \
  92. ARM_WITH_VFP=1 \
  93. ARM_WITH_THUMB=1 \
  94. ARM_WITH_CACHE=1 \
  95. ARM_CPU_ARM1136=1
  96. CFLAGS += -mcpu=$(ARM_CPU)
  97. HANDLED_CORE := true
  98. endif
  99. ifeq ($(ARM_CPU),arm926ej-s)
  100. DEFINES += \
  101. ARM_WITH_CP15=1 \
  102. ARM_WITH_MMU=1 \
  103. ARM_ISA_ARMv5E=1 \
  104. ARM_WITH_THUMB=1 \
  105. ARM_WITH_CACHE=1 \
  106. ARM_CPU_ARM9=1 \
  107. ARM_CPU_ARM926=1
  108. CFLAGS += -mcpu=$(ARM_CPU)
  109. HANDLED_CORE := true
  110. endif
  111. ifeq ($(ARM_CPU),arm7tdmi)
  112. DEFINES += \
  113. ARM_ISA_ARMv4=1 \
  114. ARM_WITH_THUMB=1 \
  115. ARM_CPU_ARM7=1
  116. CFLAGS += -mcpu=$(ARM_CPU)
  117. HANDLED_CORE := true
  118. endif
  119. ifneq ($(HANDLED_CORE),true)
  120. $(warning $(LOCAL_DIR)/rules.mk doesnt have logic for arm core $(ARM_CPU))
  121. $(warning this is likely to be broken)
  122. endif
  123. THUMBCFLAGS :=
  124. THUMBINTERWORK :=
  125. ifeq ($(ENABLE_THUMB),true)
  126. THUMBCFLAGS := -mthumb -D__thumb__
  127. THUMBINTERWORK := -mthumb-interwork
  128. endif
  129. INCLUDES += \
  130. -I$(LOCAL_DIR)/include
  131. BOOTOBJS += \
  132. $(LOCAL_DIR)/crt0.o
  133. OBJS += \
  134. $(LOCAL_DIR)/arch.Ao \
  135. $(LOCAL_DIR)/asm.o \
  136. $(LOCAL_DIR)/cache.o \
  137. $(LOCAL_DIR)/cache-ops.o \
  138. $(LOCAL_DIR)/ops.o \
  139. $(LOCAL_DIR)/exceptions.o \
  140. $(LOCAL_DIR)/faults.o \
  141. $(LOCAL_DIR)/mmu.o \
  142. $(LOCAL_DIR)/thread.o \
  143. $(LOCAL_DIR)/dcc.o
  144. # set the default toolchain to arm eabi and set a #define
  145. TOOLCHAIN_PREFIX ?= arm-linux-androideabi-
  146. #TOOLCHAIN_PREFIX ?= arm-eabi-
  147. ifeq ($(TOOLCHAIN_PREFIX),arm-none-linux-gnueabi-)
  148. # XXX test for EABI better than this
  149. # eabi compilers dont need this
  150. THUMBINTERWORK:=
  151. endif
  152. CFLAGS += $(THUMBINTERWORK)
  153. # make sure some bits were set up
  154. MEMVARS_SET := 0
  155. ifneq ($(MEMBASE),)
  156. MEMVARS_SET := 1
  157. endif
  158. ifneq ($(MEMSIZE),)
  159. MEMVARS_SET := 1
  160. endif
  161. ifeq ($(MEMVARS_SET),0)
  162. $(error missing MEMBASE or MEMSIZE variable, please set in target rules.mk)
  163. endif
  164. LIBGCC ?= $(shell $(TOOLCHAIN_PREFIX)gcc $(CFLAGS) $(THUMBCFLAGS) -print-libgcc-file-name)
  165. #$(info LIBGCC = $(LIBGCC))
  166. # potentially generated files that should be cleaned out with clean make rule
  167. GENERATED += \
  168. $(BUILDDIR)/system-onesegment.ld \
  169. $(BUILDDIR)/system-twosegment.ld
  170. # rules for generating the linker scripts
  171. $(BUILDDIR)/trustzone-test-system-onesegment.ld: $(LOCAL_DIR)/trustzone-test-system-onesegment.ld linkerscript.phony
  172. @echo generating $@
  173. @$(MKDIR)
  174. $(NOECHO)sed "s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/;s/%ROMLITE_PREFLASHED_DATA%/$(ROMLITE_PREFLASHED_DATA)/" < $< > $@.tmp
  175. @$(call TESTANDREPLACEFILE,$@.tmp,$@)
  176. $(BUILDDIR)/trustzone-system-onesegment.ld: $(LOCAL_DIR)/trustzone-system-onesegment.ld linkerscript.phony
  177. @echo generating $@
  178. @$(MKDIR)
  179. $(NOECHO)sed "s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/" < $< > $@.tmp
  180. @$(call TESTANDREPLACEFILE,$@.tmp,$@)
  181. $(BUILDDIR)/system-onesegment.ld: $(LOCAL_DIR)/system-onesegment.ld linkerscript.phony
  182. @echo generating $@
  183. @$(MKDIR)
  184. $(NOECHO)sed "s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/" < $< > $@.tmp
  185. @$(call TESTANDREPLACEFILE,$@.tmp,$@)
  186. $(BUILDDIR)/system-twosegment.ld: $(LOCAL_DIR)/system-twosegment.ld linkerscript.phony
  187. @echo generating $@
  188. @$(MKDIR)
  189. $(NOECHO)sed "s/%ROMBASE%/$(ROMBASE)/;s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/" < $< > $@.tmp
  190. @$(call TESTANDREPLACEFILE,$@.tmp,$@)
  191. linkerscript.phony:
  192. .PHONY: linkerscript.phony