diff options
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 111 |
1 files changed, 100 insertions, 11 deletions
@@ -4,6 +4,10 @@ SUBLEVEL = 0 | |||
4 | EXTRAVERSION = .git | 4 | EXTRAVERSION = .git |
5 | NAME = Unnamed | 5 | NAME = Unnamed |
6 | 6 | ||
7 | # Colon is used as a separator in makefiles. Strip any drive prefix | ||
8 | # from the current directory to avoid confusion. | ||
9 | CURDIR := $(lastword $(subst :, ,$(CURDIR))) | ||
10 | |||
7 | # *DOCUMENTATION* | 11 | # *DOCUMENTATION* |
8 | # To see a list of typical targets execute "make help" | 12 | # To see a list of typical targets execute "make help" |
9 | # More info can be located in ./README | 13 | # More info can be located in ./README |
@@ -192,6 +196,28 @@ ARCH ?= $(SUBARCH) | |||
192 | # Architecture as present in compile.h | 196 | # Architecture as present in compile.h |
193 | UTS_MACHINE := $(ARCH) | 197 | UTS_MACHINE := $(ARCH) |
194 | 198 | ||
199 | HOST_COMPILER ?= | ||
200 | ifeq ($(HOST_COMPILER),) | ||
201 | HOST_COMPILER := $(shell grep ^CONFIG_HOST_COMPILER= .config 2>/dev/null) | ||
202 | HOST_COMPILER := $(subst CONFIG_HOST_COMPILER=,,$(HOST_COMPILER)) | ||
203 | HOST_COMPILER := $(subst ",,$(HOST_COMPILER)) | ||
204 | #") | ||
205 | endif | ||
206 | ifeq ($(HOST_COMPILER),) | ||
207 | HOST_COMPILER := gcc | ||
208 | endif | ||
209 | |||
210 | CROSS_COMPILER ?= | ||
211 | ifeq ($(CROSS_COMPILER),) | ||
212 | CROSS_COMPILER := $(shell grep ^CONFIG_CROSS_COMPILER= .config 2>/dev/null) | ||
213 | CROSS_COMPILER := $(subst CONFIG_CROSS_COMPILER=,,$(CROSS_COMPILER)) | ||
214 | CROSS_COMPILER := $(subst ",,$(CROSS_COMPILER)) | ||
215 | #") | ||
216 | endif | ||
217 | ifeq ($(CROSS_COMPILER),) | ||
218 | CROSS_COMPILER := gcc | ||
219 | endif | ||
220 | |||
195 | # SHELL used by kbuild | 221 | # SHELL used by kbuild |
196 | CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ | 222 | CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ |
197 | else if [ -x /bin/bash ]; then echo /bin/bash; \ | 223 | else if [ -x /bin/bash ]; then echo /bin/bash; \ |
@@ -260,8 +286,15 @@ endif | |||
260 | 286 | ||
261 | # If the user is running make -s (silent mode), suppress echoing of | 287 | # If the user is running make -s (silent mode), suppress echoing of |
262 | # commands | 288 | # commands |
289 | # make-4.0 (and later) keep single letter options in the 1st word of MAKEFLAGS. | ||
290 | |||
291 | ifeq ($(filter 3.%,$(MAKE_VERSION)),) | ||
292 | short-opts := $(firstword -$(MAKEFLAGS)) | ||
293 | else | ||
294 | short-opts := $(filter-out --%,$(MAKEFLAGS)) | ||
295 | endif | ||
263 | 296 | ||
264 | ifneq ($(findstring s,$(MAKEFLAGS)),) | 297 | ifneq ($(findstring s,$(short-opts)),) |
265 | quiet=silent_ | 298 | quiet=silent_ |
266 | endif | 299 | endif |
267 | 300 | ||
@@ -271,7 +304,7 @@ export quiet Q KBUILD_VERBOSE | |||
271 | # Look for make include files relative to root of kernel src | 304 | # Look for make include files relative to root of kernel src |
272 | MAKEFLAGS += --include-dir=$(srctree) | 305 | MAKEFLAGS += --include-dir=$(srctree) |
273 | 306 | ||
274 | HOSTCC = gcc | 307 | HOSTCC = $(HOST_COMPILER) |
275 | HOSTCXX = g++ | 308 | HOSTCXX = g++ |
276 | HOSTCFLAGS := | 309 | HOSTCFLAGS := |
277 | HOSTCXXFLAGS := | 310 | HOSTCXXFLAGS := |
@@ -289,7 +322,7 @@ MAKEFLAGS += -rR | |||
289 | # Make variables (CC, etc...) | 322 | # Make variables (CC, etc...) |
290 | 323 | ||
291 | AS = $(CROSS_COMPILE)as | 324 | AS = $(CROSS_COMPILE)as |
292 | CC = $(CROSS_COMPILE)gcc | 325 | CC = $(CROSS_COMPILE)$(CROSS_COMPILER) |
293 | LD = $(CC) -nostdlib | 326 | LD = $(CC) -nostdlib |
294 | CPP = $(CC) -E | 327 | CPP = $(CC) -E |
295 | AR = $(CROSS_COMPILE)ar | 328 | AR = $(CROSS_COMPILE)ar |
@@ -297,6 +330,7 @@ NM = $(CROSS_COMPILE)nm | |||
297 | STRIP = $(CROSS_COMPILE)strip | 330 | STRIP = $(CROSS_COMPILE)strip |
298 | OBJCOPY = $(CROSS_COMPILE)objcopy | 331 | OBJCOPY = $(CROSS_COMPILE)objcopy |
299 | OBJDUMP = $(CROSS_COMPILE)objdump | 332 | OBJDUMP = $(CROSS_COMPILE)objdump |
333 | WINDRES = $(CROSS_COMPILE)windres | ||
300 | PKG_CONFIG ?= $(CROSS_COMPILE)pkg-config | 334 | PKG_CONFIG ?= $(CROSS_COMPILE)pkg-config |
301 | AWK = awk | 335 | AWK = awk |
302 | GENKSYMS = scripts/genksyms/genksyms | 336 | GENKSYMS = scripts/genksyms/genksyms |
@@ -305,6 +339,15 @@ KALLSYMS = scripts/kallsyms | |||
305 | PERL = perl | 339 | PERL = perl |
306 | CHECK = sparse | 340 | CHECK = sparse |
307 | 341 | ||
342 | # Handle MSYS2 weirdness | ||
343 | ifneq ($(CROSS_COMPILE),) | ||
344 | ifeq ($(shell _= command -v $(AR)),) | ||
345 | AR := $(CROSS_COMPILE)gcc-ar | ||
346 | STRIP := strip | ||
347 | WINDRES := windres | ||
348 | endif | ||
349 | endif | ||
350 | |||
308 | CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise $(CF) | 351 | CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ -Wbitwise $(CF) |
309 | MODFLAGS = -DMODULE | 352 | MODFLAGS = -DMODULE |
310 | CFLAGS_MODULE = $(MODFLAGS) | 353 | CFLAGS_MODULE = $(MODFLAGS) |
@@ -312,6 +355,7 @@ AFLAGS_MODULE = $(MODFLAGS) | |||
312 | LDFLAGS_MODULE = -r | 355 | LDFLAGS_MODULE = -r |
313 | CFLAGS_KERNEL = | 356 | CFLAGS_KERNEL = |
314 | AFLAGS_KERNEL = | 357 | AFLAGS_KERNEL = |
358 | EXEEXT = | ||
315 | 359 | ||
316 | 360 | ||
317 | # Use LINUXINCLUDE when you must reference the include/ directory. | 361 | # Use LINUXINCLUDE when you must reference the include/ directory. |
@@ -324,13 +368,43 @@ AFLAGS := $(AFLAGS) | |||
324 | LDFLAGS := $(LDFLAGS) | 368 | LDFLAGS := $(LDFLAGS) |
325 | LDLIBS := | 369 | LDLIBS := |
326 | 370 | ||
371 | CONFIG_PLATFORM_MINGW32 ?= | ||
372 | ifeq ($(CONFIG_PLATFORM_MINGW32),) | ||
373 | CONFIG_PLATFORM_MINGW32 := $(shell grep ^CONFIG_PLATFORM_MINGW32= .config 2>/dev/null) | ||
374 | CONFIG_PLATFORM_MINGW32 := $(subst CONFIG_PLATFORM_MINGW32=,,$(CONFIG_PLATFORM_MINGW32)) | ||
375 | CONFIG_PLATFORM_MINGW32 := $(subst ",,$(CONFIG_PLATFORM_MINGW32)) | ||
376 | #") | ||
377 | endif | ||
378 | |||
379 | # Try various methods to get a more specific EXTRAVERSION, but only | ||
380 | # for MINGW32 platform and if EXTRAVERSION is default '.git' | ||
381 | ifeq ($(CONFIG_PLATFORM_MINGW32)$(EXTRAVERSION),y.git) | ||
382 | # Ask git | ||
383 | extraversion := $(shell cd $(srctree) && git describe --match FRP 2>/dev/null) | ||
384 | ifeq ($(strip $(extraversion)),) | ||
385 | # That didn't work, look for a .frp_describe file | ||
386 | extraversion := $(shell grep '^FRP-' $(srctree)/.frp_describe 2>/dev/null) | ||
387 | ifeq ($(strip $(extraversion)),) | ||
388 | # That didn't work either, look at name of source directory | ||
389 | e1 := $(shell basename $(srctree) | grep '^busybox-w32-FRP-') | ||
390 | ifneq ($(strip $(e1)),) | ||
391 | extraversion := $(subst busybox-w32-,,$(e1)) | ||
392 | endif | ||
393 | endif | ||
394 | endif | ||
395 | |||
396 | ifneq ($(strip $(extraversion)),) | ||
397 | EXTRAVERSION := .$(subst FRP,git,$(extraversion)) | ||
398 | endif | ||
399 | endif | ||
400 | |||
327 | # Read KERNELRELEASE from .kernelrelease (if it exists) | 401 | # Read KERNELRELEASE from .kernelrelease (if it exists) |
328 | KERNELRELEASE = $(shell cat .kernelrelease 2> /dev/null) | 402 | KERNELRELEASE = $(shell cat .kernelrelease 2> /dev/null) |
329 | KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) | 403 | KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) |
330 | 404 | ||
331 | export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION \ | 405 | export VERSION PATCHLEVEL SUBLEVEL KERNELRELEASE KERNELVERSION \ |
332 | ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \ | 406 | ARCH CONFIG_SHELL HOSTCC HOSTCFLAGS CROSS_COMPILE AS LD CC \ |
333 | CPP AR NM STRIP OBJCOPY OBJDUMP MAKE AWK GENKSYMS PERL UTS_MACHINE \ | 407 | CPP AR NM STRIP OBJCOPY OBJDUMP WINDRES MAKE AWK GENKSYMS PERL UTS_MACHINE \ |
334 | HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS | 408 | HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS |
335 | 409 | ||
336 | export CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS | 410 | export CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS |
@@ -462,6 +536,7 @@ scripts_basic: include/autoconf.h | |||
462 | # Objects we will link into busybox / subdirs we need to visit | 536 | # Objects we will link into busybox / subdirs we need to visit |
463 | core-y := \ | 537 | core-y := \ |
464 | applets/ \ | 538 | applets/ \ |
539 | win32/resources/ \ | ||
465 | 540 | ||
466 | libs-y := \ | 541 | libs-y := \ |
467 | archival/ \ | 542 | archival/ \ |
@@ -492,6 +567,7 @@ libs-y := \ | |||
492 | sysklogd/ \ | 567 | sysklogd/ \ |
493 | util-linux/ \ | 568 | util-linux/ \ |
494 | util-linux/volume_id/ \ | 569 | util-linux/volume_id/ \ |
570 | win32/ \ | ||
495 | 571 | ||
496 | endif # KBUILD_EXTMOD | 572 | endif # KBUILD_EXTMOD |
497 | 573 | ||
@@ -532,7 +608,7 @@ endif | |||
532 | # command line. | 608 | # command line. |
533 | # This allow a user to issue only 'make' to build a kernel including modules | 609 | # This allow a user to issue only 'make' to build a kernel including modules |
534 | # Defaults busybox but it is usually overridden in the arch makefile | 610 | # Defaults busybox but it is usually overridden in the arch makefile |
535 | all: busybox doc | 611 | all: busybox$(EXEEXT) doc |
536 | 612 | ||
537 | # arch Makefile may override CC so keep this after arch Makefile is included | 613 | # arch Makefile may override CC so keep this after arch Makefile is included |
538 | #bbox# NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include) | 614 | #bbox# NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include) |
@@ -612,8 +688,12 @@ quiet_cmd_busybox__ ?= LINK $@ | |||
612 | "$(core-y)" \ | 688 | "$(core-y)" \ |
613 | "$(libs-y)" \ | 689 | "$(libs-y)" \ |
614 | "$(LDLIBS)" \ | 690 | "$(LDLIBS)" \ |
615 | "$(CONFIG_EXTRA_LDLIBS)" \ | 691 | $(CONFIG_EXTRA_LDLIBS) \ |
616 | && $(srctree)/scripts/generate_BUFSIZ.sh --post include/common_bufsiz.h | 692 | && $(srctree)/scripts/generate_BUFSIZ.sh --post include/common_bufsiz.h |
693 | # ^^^ note: CONFIG_xyz strings already have double quotes: their value | ||
694 | # is '"LIB LIB2"', therefore $(CONFIG_EXTRA_LDLIBS) above must NOT be written | ||
695 | # as "$(CONFIG_EXTRA_LDLIBS)", it would be passed as ""LIB LIB2"", | ||
696 | # and LIB2 would end up in $9, not $8 (and lost or misinterpreted). | ||
617 | 697 | ||
618 | # Generate System.map | 698 | # Generate System.map |
619 | quiet_cmd_sysmap = SYSMAP | 699 | quiet_cmd_sysmap = SYSMAP |
@@ -715,16 +795,16 @@ debug_kallsyms: .tmp_map$(last_kallsyms) | |||
715 | endif # ifdef CONFIG_KALLSYMS | 795 | endif # ifdef CONFIG_KALLSYMS |
716 | 796 | ||
717 | # busybox image - including updated kernel symbols | 797 | # busybox image - including updated kernel symbols |
718 | busybox_unstripped: $(busybox-all) FORCE | 798 | busybox_unstripped$(EXEEXT): $(busybox-all) FORCE |
719 | $(call if_changed_rule,busybox__) | 799 | $(call if_changed_rule,busybox__) |
720 | $(Q)rm -f .old_version | 800 | $(Q)rm -f .old_version |
721 | 801 | ||
722 | busybox: busybox_unstripped | 802 | busybox$(EXEEXT): busybox_unstripped$(EXEEXT) |
723 | ifeq ($(SKIP_STRIP),y) | 803 | ifeq ($(SKIP_STRIP),y) |
724 | $(Q)cp $< $@ | 804 | $(Q)cp $< $@ |
725 | else | 805 | else |
726 | $(Q)$(STRIP) -s --remove-section=.note --remove-section=.comment \ | 806 | $(Q)$(STRIP) -s --remove-section=.note --remove-section=.comment \ |
727 | busybox_unstripped -o $@ | 807 | busybox_unstripped$(EXEEXT) -o $@ |
728 | # strip is confused by PIE executable and does not set exec bits | 808 | # strip is confused by PIE executable and does not set exec bits |
729 | $(Q)chmod a+x $@ | 809 | $(Q)chmod a+x $@ |
730 | endif | 810 | endif |
@@ -816,7 +896,7 @@ endif | |||
816 | # prepare2 creates a makefile if using a separate output directory | 896 | # prepare2 creates a makefile if using a separate output directory |
817 | prepare2: prepare3 outputmakefile | 897 | prepare2: prepare3 outputmakefile |
818 | 898 | ||
819 | prepare1: prepare2 include/config/MARKER | 899 | prepare1: prepare2 include/config/MARKER include/BB_VER.h |
820 | ifneq ($(KBUILD_MODULES),) | 900 | ifneq ($(KBUILD_MODULES),) |
821 | $(Q)mkdir -p $(MODVERDIR) | 901 | $(Q)mkdir -p $(MODVERDIR) |
822 | $(Q)rm -f $(MODVERDIR)/* | 902 | $(Q)rm -f $(MODVERDIR)/* |
@@ -880,6 +960,13 @@ define filechk_version.h | |||
880 | ) | 960 | ) |
881 | endef | 961 | endef |
882 | 962 | ||
963 | define filechk_BB_VER.h | ||
964 | (echo \#define BB_VER \"$(KERNELRELEASE)\";) | ||
965 | endef | ||
966 | |||
967 | include/BB_VER.h: $(srctree)/Makefile .config .kernelrelease FORCE | ||
968 | $(call filechk,BB_VER.h) | ||
969 | |||
883 | # --------------------------------------------------------------------------- | 970 | # --------------------------------------------------------------------------- |
884 | 971 | ||
885 | PHONY += depend dep | 972 | PHONY += depend dep |
@@ -966,7 +1053,7 @@ endif # CONFIG_MODULES | |||
966 | 1053 | ||
967 | # Directories & files removed with 'make clean' | 1054 | # Directories & files removed with 'make clean' |
968 | CLEAN_DIRS += $(MODVERDIR) _install 0_lib | 1055 | CLEAN_DIRS += $(MODVERDIR) _install 0_lib |
969 | CLEAN_FILES += busybox busybox_unstripped* busybox.links \ | 1056 | CLEAN_FILES += busybox$(EXEEXT) busybox_unstripped* busybox.links \ |
970 | busybox*.suid busybox*.nosuid \ | 1057 | busybox*.suid busybox*.nosuid \ |
971 | System.map .kernelrelease \ | 1058 | System.map .kernelrelease \ |
972 | .tmp_kallsyms* .tmp_version .tmp_busybox* .tmp_System.map | 1059 | .tmp_kallsyms* .tmp_version .tmp_busybox* .tmp_System.map |
@@ -975,6 +1062,7 @@ CLEAN_FILES += busybox busybox_unstripped* busybox.links \ | |||
975 | MRPROPER_DIRS += include/config include2 | 1062 | MRPROPER_DIRS += include/config include2 |
976 | MRPROPER_FILES += .config .config.old include/asm .version .old_version \ | 1063 | MRPROPER_FILES += .config .config.old include/asm .version .old_version \ |
977 | include/NUM_APPLETS.h \ | 1064 | include/NUM_APPLETS.h \ |
1065 | include/BB_VER.h \ | ||
978 | include/common_bufsiz.h \ | 1066 | include/common_bufsiz.h \ |
979 | include/autoconf.h \ | 1067 | include/autoconf.h \ |
980 | include/bbconfigopts.h \ | 1068 | include/bbconfigopts.h \ |
@@ -985,6 +1073,7 @@ MRPROPER_FILES += .config .config.old include/asm .version .old_version \ | |||
985 | include/applets.h \ | 1073 | include/applets.h \ |
986 | include/usage.h \ | 1074 | include/usage.h \ |
987 | applets/usage \ | 1075 | applets/usage \ |
1076 | win32/resources/busybox-w32.manifest \ | ||
988 | .kernelrelease Module.symvers tags TAGS cscope* \ | 1077 | .kernelrelease Module.symvers tags TAGS cscope* \ |
989 | busybox_old | 1078 | busybox_old |
990 | 1079 | ||