kernel-build.mk 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. #
  2. # Copyright (C) 2006-2007 OpenWrt.org
  3. #
  4. # This is free software, licensed under the GNU General Public License v2.
  5. # See /LICENSE for more information.
  6. #
  7. include $(INCLUDE_DIR)/host.mk
  8. include $(INCLUDE_DIR)/prereq.mk
  9. ifneq ($(DUMP),1)
  10. all: compile
  11. endif
  12. export QUILT=1
  13. STAMP_PREPARED:=$(LINUX_DIR)/.prepared
  14. STAMP_CONFIGURED:=$(LINUX_DIR)/.configured
  15. include $(INCLUDE_DIR)/download.mk
  16. include $(INCLUDE_DIR)/quilt.mk
  17. include $(INCLUDE_DIR)/kernel-defaults.mk
  18. define Kernel/Prepare
  19. $(call Kernel/Prepare/Default)
  20. endef
  21. define Kernel/Configure
  22. $(call Kernel/Configure/Default)
  23. endef
  24. define Kernel/CompileModules
  25. $(call Kernel/CompileModules/Default)
  26. endef
  27. define Kernel/CompileImage
  28. $(call Kernel/CompileImage/Default)
  29. endef
  30. define Kernel/Clean
  31. $(call Kernel/Clean/Default)
  32. endef
  33. define Download/kernel
  34. URL:=$(LINUX_SITE)
  35. FILE:=$(LINUX_SOURCE)
  36. MD5SUM:=$(LINUX_KERNEL_MD5SUM)
  37. endef
  38. define BuildKernel
  39. $(if $(QUILT),$(Build/Quilt))
  40. $(if $(LINUX_SITE),$(call Download,kernel))
  41. $(STAMP_PREPARED): $(DL_DIR)/$(LINUX_SOURCE)
  42. -rm -rf $(KERNEL_BUILD_DIR)
  43. -mkdir -p $(KERNEL_BUILD_DIR)
  44. $(Kernel/Prepare)
  45. touch $$@
  46. $(KERNEL_BUILD_DIR)/symtab.txt: FORCE
  47. find $(LINUX_DIR) $(STAGING_DIR_ROOT)/lib/modules -name \*.ko | \
  48. xargs $(TARGET_CROSS)nm | \
  49. awk '$$$$1 == "U" { print $$$$2 } ' | \
  50. sort -u > $$@
  51. $(KERNEL_BUILD_DIR)/symtab.h: $(KERNEL_BUILD_DIR)/symtab.txt
  52. ( \
  53. echo '#define SYMTAB_KEEP \'; \
  54. cat $(KERNEL_BUILD_DIR)/symtab.txt | \
  55. awk '{print "*(__ksymtab." $$$$1 ") \\" }'; \
  56. echo; \
  57. echo '#define SYMTAB_KEEP_GPL \'; \
  58. cat $(KERNEL_BUILD_DIR)/symtab.txt | \
  59. awk '{print "*(__ksymtab_gpl." $$$$1 ") \\" }'; \
  60. echo; \
  61. echo '#define SYMTAB_KEEP_STR \'; \
  62. cat $(KERNEL_BUILD_DIR)/symtab.txt | \
  63. awk '{print "*(__ksymtab_strings." $$$$1 ") \\" }'; \
  64. echo; \
  65. ) > $$@
  66. $(STAMP_CONFIGURED): $(STAMP_PREPARED) $(LINUX_CONFIG) $(GENERIC_LINUX_CONFIG) $(TOPDIR)/.config
  67. $(Kernel/Configure)
  68. touch $$@
  69. $(LINUX_DIR)/.modules: $(STAMP_CONFIGURED) $(LINUX_DIR)/.config FORCE
  70. $(Kernel/CompileModules)
  71. touch $$@
  72. $(LINUX_DIR)/.image: $(STAMP_CONFIGURED) $(if $(CONFIG_STRIP_KERNEL_EXPORTS),$(KERNEL_BUILD_DIR)/symtab.h) FORCE
  73. $(Kernel/CompileImage)
  74. touch $$@
  75. mostlyclean: FORCE
  76. $(Kernel/Clean)
  77. define BuildKernel
  78. endef
  79. download: $(DL_DIR)/$(LINUX_SOURCE)
  80. prepare: $(STAMP_CONFIGURED)
  81. compile: $(LINUX_DIR)/.modules
  82. $(MAKE) -C image compile TARGET_BUILD=
  83. oldconfig menuconfig: $(STAMP_PREPARED) $(STAMP_CHECKED) FORCE
  84. [ -e "$(LINUX_CONFIG)" ] || touch "$(LINUX_CONFIG)"
  85. $(LINUX_CONFCMD) > $(LINUX_DIR)/.config
  86. touch $(LINUX_CONFIG)
  87. $(_SINGLE)$(MAKE) -C $(LINUX_DIR) $(KERNEL_MAKEOPTS) $$@
  88. $(SCRIPT_DIR)/kconfig.pl '>' $(if $(LINUX_SUBCONFIG),'+' $(GENERIC_LINUX_CONFIG) $(LINUX_CONFIG),$(GENERIC_LINUX_CONFIG)) \
  89. $(LINUX_DIR)/.config > $(if $(LINUX_SUBCONFIG),$(LINUX_SUBCONFIG),$(LINUX_CONFIG))
  90. $(Kernel/Configure)
  91. install: $(LINUX_DIR)/.image
  92. +$(MAKE) -C image compile install TARGET_BUILD=
  93. clean: FORCE
  94. rm -rf $(KERNEL_BUILD_DIR)
  95. image-prereq:
  96. @+$(NO_TRACE_MAKE) -s -C image prereq TARGET_BUILD=
  97. prereq: image-prereq
  98. endef