rules.mk 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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. CFLAGS += -mcpu=cortex-a9
  67. #CFLAGS += -mcpu=arm1136jf-s # compiler doesn't understand cortex yet
  68. HANDLED_CORE := true
  69. #CFLAGS += -mfpu=vfp -mfloat-abi=softfp
  70. endif
  71. ifeq ($(ARM_CPU),arm1136j-s)
  72. DEFINES += \
  73. ARM_WITH_CP15=1 \
  74. ARM_WITH_MMU=1 \
  75. ARM_ISA_ARMv6=1 \
  76. ARM_WITH_THUMB=1 \
  77. ARM_WITH_CACHE=1 \
  78. ARM_CPU_ARM1136=1
  79. CFLAGS += -mcpu=$(ARM_CPU)
  80. HANDLED_CORE := true
  81. endif
  82. ifeq ($(ARM_CPU),arm1176jzf-s)
  83. DEFINES += \
  84. ARM_WITH_CP15=1 \
  85. ARM_WITH_MMU=1 \
  86. ARM_ISA_ARMv6=1 \
  87. ARM_WITH_VFP=1 \
  88. ARM_WITH_THUMB=1 \
  89. ARM_WITH_CACHE=1 \
  90. ARM_CPU_ARM1136=1
  91. CFLAGS += -mcpu=$(ARM_CPU)
  92. HANDLED_CORE := true
  93. endif
  94. ifeq ($(ARM_CPU),arm926ej-s)
  95. DEFINES += \
  96. ARM_WITH_CP15=1 \
  97. ARM_WITH_MMU=1 \
  98. ARM_ISA_ARMv5E=1 \
  99. ARM_WITH_THUMB=1 \
  100. ARM_WITH_CACHE=1 \
  101. ARM_CPU_ARM9=1 \
  102. ARM_CPU_ARM926=1
  103. CFLAGS += -mcpu=$(ARM_CPU)
  104. HANDLED_CORE := true
  105. endif
  106. ifeq ($(ARM_CPU),arm7tdmi)
  107. DEFINES += \
  108. ARM_ISA_ARMv4=1 \
  109. ARM_WITH_THUMB=1 \
  110. ARM_CPU_ARM7=1
  111. CFLAGS += -mcpu=$(ARM_CPU)
  112. HANDLED_CORE := true
  113. endif
  114. ifneq ($(HANDLED_CORE),true)
  115. $(warning $(LOCAL_DIR)/rules.mk doesnt have logic for arm core $(ARM_CPU))
  116. $(warning this is likely to be broken)
  117. endif
  118. THUMBCFLAGS :=
  119. THUMBINTERWORK :=
  120. ifeq ($(ENABLE_THUMB),true)
  121. THUMBCFLAGS := -mthumb -D__thumb__
  122. THUMBINTERWORK := -mthumb-interwork
  123. endif
  124. INCLUDES += \
  125. -I$(LOCAL_DIR)/include
  126. BOOTOBJS += \
  127. $(LOCAL_DIR)/crt0.o
  128. OBJS += \
  129. $(LOCAL_DIR)/arch.Ao \
  130. $(LOCAL_DIR)/asm.o \
  131. $(LOCAL_DIR)/cache.o \
  132. $(LOCAL_DIR)/cache-ops.o \
  133. $(LOCAL_DIR)/ops.o \
  134. $(LOCAL_DIR)/exceptions.o \
  135. $(LOCAL_DIR)/faults.o \
  136. $(LOCAL_DIR)/mmu.o \
  137. $(LOCAL_DIR)/thread.o \
  138. $(LOCAL_DIR)/dcc.o
  139. # set the default toolchain to arm eabi and set a #define
  140. TOOLCHAIN_PREFIX ?= arm-linux-androideabi-
  141. #TOOLCHAIN_PREFIX ?= arm-eabi-
  142. ifeq ($(TOOLCHAIN_PREFIX),arm-none-linux-gnueabi-)
  143. # XXX test for EABI better than this
  144. # eabi compilers dont need this
  145. THUMBINTERWORK:=
  146. endif
  147. CFLAGS += $(THUMBINTERWORK)
  148. # make sure some bits were set up
  149. MEMVARS_SET := 0
  150. ifneq ($(MEMBASE),)
  151. MEMVARS_SET := 1
  152. endif
  153. ifneq ($(MEMSIZE),)
  154. MEMVARS_SET := 1
  155. endif
  156. ifeq ($(MEMVARS_SET),0)
  157. $(error missing MEMBASE or MEMSIZE variable, please set in target rules.mk)
  158. endif
  159. LIBGCC ?= $(shell $(TOOLCHAIN_PREFIX)gcc $(CFLAGS) $(THUMBCFLAGS) -print-libgcc-file-name)
  160. #$(info LIBGCC = $(LIBGCC))
  161. # potentially generated files that should be cleaned out with clean make rule
  162. GENERATED += \
  163. $(BUILDDIR)/system-onesegment.ld \
  164. $(BUILDDIR)/system-twosegment.ld
  165. # rules for generating the linker scripts
  166. $(BUILDDIR)/trustzone-test-system-onesegment.ld: $(LOCAL_DIR)/trustzone-test-system-onesegment.ld linkerscript.phony
  167. @echo generating $@
  168. @$(MKDIR)
  169. $(NOECHO)sed "s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/;s/%ROMLITE_PREFLASHED_DATA%/$(ROMLITE_PREFLASHED_DATA)/" < $< > $@.tmp
  170. @$(call TESTANDREPLACEFILE,$@.tmp,$@)
  171. $(BUILDDIR)/trustzone-system-onesegment.ld: $(LOCAL_DIR)/trustzone-system-onesegment.ld linkerscript.phony
  172. @echo generating $@
  173. @$(MKDIR)
  174. $(NOECHO)sed "s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/" < $< > $@.tmp
  175. @$(call TESTANDREPLACEFILE,$@.tmp,$@)
  176. $(BUILDDIR)/system-onesegment.ld: $(LOCAL_DIR)/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-twosegment.ld: $(LOCAL_DIR)/system-twosegment.ld linkerscript.phony
  182. @echo generating $@
  183. @$(MKDIR)
  184. $(NOECHO)sed "s/%ROMBASE%/$(ROMBASE)/;s/%MEMBASE%/$(MEMBASE)/;s/%MEMSIZE%/$(MEMSIZE)/" < $< > $@.tmp
  185. @$(call TESTANDREPLACEFILE,$@.tmp,$@)
  186. linkerscript.phony:
  187. .PHONY: linkerscript.phony