Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. #
  2. # Copyright (C) 2009-2011 The Android-x86 Open Source Project
  3. #
  4. # Licensed under the Apache License, Version 2.0 (the "License");
  5. # you may not use this file except in compliance with the License.
  6. # You may obtain a copy of the License at
  7. #
  8. #      http://www.apache.org/licenses/LICENSE-2.0
  9. #
  10.  
  11. ifeq ($(TARGET_PREBUILT_KERNEL),)
  12.  
  13. KERNEL_DIR ?= $(call my-dir)
  14.  
  15. ifeq ($(TARGET_ARCH),x86)
  16. KERNEL_TARGET := bzImage
  17. TARGET_KERNEL_CONFIG ?= android-x86_defconfig
  18. endif
  19. ifeq ($(TARGET_ARCH),arm)
  20. KERNEL_TARGET := zImage
  21. TARGET_KERNEL_CONFIG ?= goldfish_defconfig
  22. endif
  23.  
  24. KBUILD_OUTPUT := $(CURDIR)/$(TARGET_OUT_INTERMEDIATES)/kernel
  25. mk_kernel := + $(hide) $(MAKE) -C $(KERNEL_DIR) O=$(KBUILD_OUTPUT) ARCH=$(TARGET_ARCH) $(if $(SHOW_COMMANDS),V=1)
  26. ifneq ($(TARGET_ARCH),$(HOST_ARCH))
  27. mk_kernel += CROSS_COMPILE=$(CURDIR)/$(TARGET_TOOLS_PREFIX)
  28. endif
  29.  
  30. KERNEL_CONFIG_FILE := $(if $(wildcard $(TARGET_KERNEL_CONFIG)),$(TARGET_KERNEL_CONFIG),$(KERNEL_DIR)/arch/$(TARGET_ARCH)/configs/$(TARGET_KERNEL_CONFIG))
  31.  
  32. MOD_ENABLED := $(shell grep ^CONFIG_MODULES=y $(KERNEL_CONFIG_FILE))
  33. FIRMWARE_ENABLED := $(shell grep ^CONFIG_FIRMWARE_IN_KERNEL=y $(KERNEL_CONFIG_FILE))
  34.  
  35. # I understand Android build system discourage to use submake,
  36. # but I don't want to write a complex Android.mk to build kernel.
  37. # This is the simplest way I can think.
  38. KERNEL_DOTCONFIG_FILE := $(KBUILD_OUTPUT)/.config
  39. $(KERNEL_DOTCONFIG_FILE): $(KERNEL_CONFIG_FILE) | $(ACP)
  40.     $(copy-file-to-new-target)
  41.  
  42. BUILT_KERNEL_TARGET := $(KBUILD_OUTPUT)/arch/$(TARGET_ARCH)/boot/$(KERNEL_TARGET)
  43. $(INSTALLED_KERNEL_TARGET): $(KERNEL_DOTCONFIG_FILE)
  44.     $(mk_kernel) oldnoconfig
  45.     $(mk_kernel) $(KERNEL_TARGET) $(if $(MOD_ENABLED),modules)
  46.     $(hide) $(ACP) -fp $(BUILT_KERNEL_TARGET) $@
  47.     $(if $(FIRMWARE_ENABLED),$(mk_kernel) INSTALL_MOD_PATH=$(CURDIR)/$(TARGET_OUT) firmware_install)
  48.  
  49. ifneq ($(MOD_ENABLED),)
  50. ifeq ($(wildcard $(INSTALLED_KERNEL_TARGET)),)
  51. KERNEL_MODULES_DEP := $(TARGET_OUT)/lib/modules
  52. else
  53. KERNELRELEASE := $(shell $(MAKE) -sC $(KERNEL_DIR) O=$(KBUILD_OUTPUT) ARCH=$(TARGET_ARCH) kernelrelease)
  54. KERNEL_MODULES_DEP := $(TARGET_OUT)/lib/modules/$(KERNELRELEASE)/modules.dep
  55. endif
  56. $(KERNEL_MODULES_DEP): $(INSTALLED_KERNEL_TARGET)
  57.     $(hide) rm -rf $(TARGET_OUT)/lib/modules
  58.     $(mk_kernel) INSTALL_MOD_PATH=$(CURDIR)/$(TARGET_OUT) modules_install
  59.     $(hide) rm -f $(TARGET_OUT)/lib/modules/*/{build,source}
  60. endif
  61.  
  62. # rules to get source of Broadcom 802.11a/b/g/n hybrid device driver
  63. # based on broadcomsetup.sh of Kyle Evans
  64. WL_ENABLED := $(shell grep ^CONFIG_WL=[my] $(KERNEL_CONFIG_FILE))
  65. WL_PATH := drivers/net/wireless/wl
  66. WL_SRC := $(KERNEL_DIR)/$(WL_PATH)/hybrid-portsrc_x86_32-v5_100_82_112.tar.gz
  67. $(WL_SRC):
  68.     @echo Downloading $(@F)...
  69.     $(hide) curl http://www.broadcom.com/docs/linux_sta/$(@F) > $@ && tar zxf $@ -C $(@D) --overwrite && \
  70.     (cd kernel/$(WL_PATH); patch Makefile < Makefile.patch; patch src/wl/sys/wl_iw.h < wl_iw.h.patch)
  71. $(INSTALLED_KERNEL_TARGET): $(if $(WL_ENABLED),$(WL_SRC))
  72.  
  73. installclean: FILES += $(KBUILD_OUTPUT) $(INSTALLED_KERNEL_TARGET)
  74.  
  75. TARGET_PREBUILT_KERNEL := $(INSTALLED_KERNEL_TARGET)
  76.  
  77. .PHONY: kernel
  78. kernel: $(TARGET_PREBUILT_KERNEL)
  79.  
  80. else
  81.  
  82. $(INSTALLED_KERNEL_TARGET): $(TARGET_PREBUILT_KERNEL) | $(ACP)
  83.     $(copy-file-to-new-target)
  84. ifdef TARGET_PREBUILT_MODULES
  85.     mkdir -p $(TARGET_OUT)/lib
  86.     $(hide) cp -r $(TARGET_PREBUILT_MODULES) $(TARGET_OUT)/lib
  87. endif
  88.  
  89. endif # TARGET_PREBUILT_KERNEL