1. From 0c4fd5ca9244b2ab28e415f3135e3ceb46409980 Mon Sep 17 00:00:00 2001
  2. From: Adam Farden <[email protected]>
  3. Date: Sun, 11 Nov 2012 20:25:26 +0100
  4. Subject: [PATCH] Simple changes for ARMv6
  5. ---
  6. core/binary.mk | 5 ++
  7. core/combo/arch/arm/armv6-vfp.mk | 20 +++++
  8. core/tasks/kernel.mk | 163 ++++++++++++++++++++++++++++++++++++++
  9. 3 files changed, 188 insertions(+)
  10. create mode 100644 core/combo/arch/arm/armv6-vfp.mk
  11. create mode 100644 core/tasks/kernel.mk
  12. diff --git a/core/binary.mk b/core/binary.mk
  13. index 07a5ec7..fa3ad55 100644
  14. --- a/core/binary.mk
  15. +++ b/core/binary.mk
  16. @@ -491,6 +491,11 @@ all_objects := \
  17. $(proto_generated_objects) \
  18. $(addprefix $(TOPDIR)$(LOCAL_PATH)/,$(LOCAL_PREBUILT_OBJ_FILES))
  19. +## Allow a device's own headers to take precedence over global ones
  20. +ifneq ($(TARGET_SPECIFIC_HEADER_PATH),)
  21. +LOCAL_C_INCLUDES := $(TOPDIR)$(TARGET_SPECIFIC_HEADER_PATH) $(LOCAL_C_INCLUDES)
  22. +endif
  23. +
  24. LOCAL_C_INCLUDES += $(TOPDIR)$(LOCAL_PATH) $(intermediates) $(base_intermediates)
  25. ifndef LOCAL_NDK_VERSION
  26. diff --git a/core/combo/arch/arm/armv6-vfp.mk b/core/combo/arch/arm/armv6-vfp.mk
  27. new file mode 100644
  28. index 0000000..214b025
  29. --- /dev/null
  30. +++ b/core/combo/arch/arm/armv6-vfp.mk
  31. @@ -0,0 +1,20 @@
  32. +# Configuration for Linux on ARM.
  33. +# Generating binaries for the ARMv6+VFP architecture and higher
  34. +#
  35. +ARCH_ARM_HAVE_THUMB_SUPPORT := true
  36. +ARCH_ARM_HAVE_FAST_INTERWORKING := true
  37. +ARCH_ARM_HAVE_64BIT_DATA := true
  38. +ARCH_ARM_HAVE_HALFWORD_MULTIPLY := true
  39. +ARCH_ARM_HAVE_CLZ := true
  40. +ARCH_ARM_HAVE_FFS := true
  41. +ARCH_ARM_HAVE_VFP := true
  42. +
  43. +# Note: Hard coding the 'tune' value here is probably not ideal,
  44. +# and a better solution should be found in the future.
  45. +#
  46. +arch_variant_cflags := \
  47. + -march=armv6k \
  48. + -mtune=arm1136j-s \
  49. + -D__ARM_ARCH_6__ \
  50. + -D__ARM_ARCH_6J__ \
  51. + -D__ARM_ARCH_6K__
  52. diff --git a/core/tasks/kernel.mk b/core/tasks/kernel.mk
  53. new file mode 100644
  54. index 0000000..e63c401
  55. --- /dev/null
  56. +++ b/core/tasks/kernel.mk
  57. @@ -0,0 +1,163 @@
  58. +#Android makefile to build kernel as a part of Android Build
  59. +
  60. +TARGET_AUTO_KDIR := $(shell echo $(TARGET_DEVICE_DIR) | sed -e 's/^device/kernel/g')
  61. +
  62. +## Externally influenced variables
  63. +# kernel location - optional, defaults to kernel/<vendor>/<device>
  64. +TARGET_KERNEL_SOURCE ?= $(TARGET_AUTO_KDIR)
  65. +KERNEL_SRC := $(TARGET_KERNEL_SOURCE)
  66. +# kernel configuration - mandatory
  67. +KERNEL_DEFCONFIG := $(TARGET_KERNEL_CONFIG)
  68. +
  69. +## Internal variables
  70. +KERNEL_OUT := $(ANDROID_BUILD_TOP)/$(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ
  71. +KERNEL_CONFIG := $(KERNEL_OUT)/.config
  72. +
  73. +ifeq ($(BOARD_USES_UBOOT),true)
  74. + TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(TARGET_ARCH)/boot/uImage
  75. + TARGET_PREBUILT_INT_KERNEL_TYPE := uImage
  76. +else ifeq ($(BOARD_USES_UNCOMPRESSED_BOOT),true)
  77. + TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(TARGET_ARCH)/boot/Image
  78. + TARGET_PREBUILT_INT_KERNEL_TYPE := Image
  79. +else
  80. + TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(TARGET_ARCH)/boot/zImage
  81. + TARGET_PREBUILT_INT_KERNEL_TYPE := zImage
  82. +endif
  83. +
  84. +ifeq "$(wildcard $(KERNEL_SRC) )" ""
  85. + ifneq ($(TARGET_PREBUILT_KERNEL),)
  86. + HAS_PREBUILT_KERNEL := true
  87. + NEEDS_KERNEL_COPY := true
  88. + else
  89. + $(foreach cf,$(PRODUCT_COPY_FILES), \
  90. + $(eval _src := $(call word-colon,1,$(cf))) \
  91. + $(eval _dest := $(call word-colon,2,$(cf))) \
  92. + $(ifeq kernel,$(_dest), \
  93. + $(eval HAS_PREBUILT_KERNEL := true)))
  94. + endif
  95. +
  96. + ifneq ($(HAS_PREBUILT_KERNEL),)
  97. + $(warning ***************************************************************)
  98. + $(warning * Using prebuilt kernel binary instead of source *)
  99. + $(warning * THIS IS DEPRECATED, AND WILL BE DISCONTINUED *)
  100. + $(warning * Please configure your device to download the kernel *)
  101. + $(warning * source repository to $(KERNEL_SRC))
  102. + $(warning * See http://wiki.cyanogenmod.com/wiki/Integrated_kernel_building)
  103. + $(warning * for more information *)
  104. + $(warning ***************************************************************)
  105. + FULL_KERNEL_BUILD := false
  106. + KERNEL_BIN := $(TARGET_PREBUILT_KERNEL)
  107. + else
  108. + $(warning ***************************************************************)
  109. + $(warning * *)
  110. + $(warning * No kernel source found, and no fallback prebuilt defined. *)
  111. + $(warning * Please make sure your device is properly configured to *)
  112. + $(warning * download the kernel repository to $(KERNEL_SRC))
  113. + $(warning * and add the TARGET_KERNEL_CONFIG variable to BoardConfig.mk *)
  114. + $(warning * *)
  115. + $(warning * As an alternative, define the TARGET_PREBUILT_KERNEL *)
  116. + $(warning * variable with the path to the prebuilt binary kernel image *)
  117. + $(warning * in your BoardConfig.mk file *)
  118. + $(warning * *)
  119. + $(warning ***************************************************************)
  120. + $(error "NO KERNEL")
  121. + endif
  122. +else
  123. + NEEDS_KERNEL_COPY := true
  124. + ifeq ($(TARGET_KERNEL_CONFIG),)
  125. + $(warning **********************************************************)
  126. + $(warning * Kernel source found, but no configuration was defined *)
  127. + $(warning * Please add the TARGET_KERNEL_CONFIG variable to your *)
  128. + $(warning * BoardConfig.mk file *)
  129. + $(warning **********************************************************)
  130. + # $(error "NO KERNEL CONFIG")
  131. + else
  132. + #$(info Kernel source found, building it)
  133. + FULL_KERNEL_BUILD := true
  134. + ifeq ($(TARGET_USES_UNCOMPRESSED_KERNEL),true)
  135. + $(info Using uncompressed kernel)
  136. + KERNEL_BIN := $(KERNEL_OUT)/piggy
  137. + else
  138. + KERNEL_BIN := $(TARGET_PREBUILT_INT_KERNEL)
  139. + endif
  140. + endif
  141. +endif
  142. +
  143. +ifeq ($(FULL_KERNEL_BUILD),true)
  144. +
  145. +KERNEL_HEADERS_INSTALL := $(KERNEL_OUT)/usr
  146. +KERNEL_MODULES_INSTALL := system
  147. +KERNEL_MODULES_OUT := $(TARGET_OUT)/lib/modules
  148. +
  149. +define mv-modules
  150. + mdpath=`find $(KERNEL_MODULES_OUT) -type f -name modules.order`;\
  151. + if [ "$$mdpath" != "" ];then\
  152. + mpath=`dirname $$mdpath`;\
  153. + ko=`find $$mpath/kernel -type f -name *.ko`;\
  154. + for i in $$ko; do mv $$i $(KERNEL_MODULES_OUT)/; done;\
  155. + fi
  156. +endef
  157. +
  158. +define clean-module-folder
  159. + mdpath=`find $(KERNEL_MODULES_OUT) -type f -name modules.order`;\
  160. + if [ "$$mdpath" != "" ];then\
  161. + mpath=`dirname $$mdpath`; rm -rf $$mpath;\
  162. + fi
  163. +endef
  164. +
  165. +ifeq ($(TARGET_ARCH),arm)
  166. + ifneq ($(USE_CCACHE),)
  167. + ccache := $(ANDROID_BUILD_TOP)/prebuilt/$(HOST_PREBUILT_TAG)/ccache/ccache
  168. + # Check that the executable is here.
  169. + ccache := $(strip $(wildcard $(ccache)))
  170. + endif
  171. + ifeq ($(HOST_OS),darwin)
  172. + ARM_CROSS_COMPILE:=CROSS_COMPILE="$(ccache) $(ANDROID_BUILD_TOP)/prebuilt/darwin-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-"
  173. + else
  174. + ARM_CROSS_COMPILE:=CROSS_COMPILE="$(ccache) $(ARM_EABI_TOOLCHAIN)/arm-eabi-"
  175. + endif
  176. + ccache =
  177. +endif
  178. +
  179. +ifeq ($(TARGET_KERNEL_MODULES),)
  180. + TARGET_KERNEL_MODULES := no-external-modules
  181. +endif
  182. +
  183. +$(KERNEL_OUT):
  184. + mkdir -p $(KERNEL_OUT)
  185. + mkdir -p $(KERNEL_MODULES_OUT)
  186. +
  187. +$(KERNEL_CONFIG): $(KERNEL_OUT)
  188. + $(MAKE) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(TARGET_ARCH) $(ARM_CROSS_COMPILE) $(KERNEL_DEFCONFIG)
  189. +
  190. +$(KERNEL_OUT)/piggy : $(TARGET_PREBUILT_INT_KERNEL)
  191. + $(hide) gunzip -c $(KERNEL_OUT)/arch/$(TARGET_ARCH)/boot/compressed/piggy.gzip > $(KERNEL_OUT)/piggy
  192. +
  193. +TARGET_KERNEL_BINARIES: $(KERNEL_OUT) $(KERNEL_CONFIG) $(KERNEL_HEADERS_INSTALL)
  194. + $(MAKE) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(TARGET_ARCH) $(ARM_CROSS_COMPILE) $(TARGET_PREBUILT_INT_KERNEL_TYPE)
  195. + $(MAKE) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(TARGET_ARCH) $(ARM_CROSS_COMPILE) modules
  196. + $(MAKE) -C $(KERNEL_SRC) O=$(KERNEL_OUT) INSTALL_MOD_PATH=../../$(KERNEL_MODULES_INSTALL) ARCH=$(TARGET_ARCH) $(ARM_CROSS_COMPILE) modules_install
  197. + $(mv-modules)
  198. + $(clean-module-folder)
  199. +
  200. +$(TARGET_KERNEL_MODULES): TARGET_KERNEL_BINARIES
  201. +
  202. +$(TARGET_PREBUILT_INT_KERNEL): $(TARGET_KERNEL_MODULES)
  203. + $(mv-modules)
  204. + $(clean-module-folder)
  205. +
  206. +$(KERNEL_HEADERS_INSTALL): $(KERNEL_OUT) $(KERNEL_CONFIG)
  207. + $(MAKE) -C $(KERNEL_SRC) O=$(KERNEL_OUT) ARCH=$(TARGET_ARCH) $(ARM_CROSS_COMPILE) headers_install
  208. +
  209. +endif # FULL_KERNEL_BUILD
  210. +
  211. +## Install it
  212. +
  213. +ifeq ($(NEEDS_KERNEL_COPY),true)
  214. +file := $(INSTALLED_KERNEL_TARGET)
  215. +ALL_PREBUILT += $(file)
  216. +$(file) : $(KERNEL_BIN) | $(ACP)
  217. + $(transform-prebuilt-to-target)
  218. +
  219. +ALL_PREBUILT += $(INSTALLED_KERNEL_TARGET)
  220. +endif
  221. --
  222. 1.7.10.4