summaryrefslogtreecommitdiff
path: root/build-common/packages/linux
blob: f564dc14e02f42fbf8638c1d9da07120fbd1a8d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
LINUX_SRC?=$(BUILDSYS_SOURCES)/linux
LINUX_BUILD?=$(BUILDSYS_BUILD)/$(ARCH)/$(TARGET)/linux

LINUX_GIT_REPO  ?= git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

LINUX_DEFAULT_TARGET?=zImage

.PHONY: linux
linux: $(LINUX_BUILD)/.config $(LINUX_DEFAULT_TARGET)

## Obtain the sources:

$(LINUX_SRC):
	git clone $(LINUX_GIT_REPO) $(LINUX_SRC)


J?=8

LINUX_CMD := \
	$(MAKE) -C $(LINUX_SRC) \
		O=$(LINUX_BUILD) \
		ARCH=$(ARCH) \
		CROSS_COMPILE=$(CROSS_COMPILE) \
		INSTALL_MOD_PATH=$(TARGET_MOD_DIR) \
		-j$(J)


.PHONY:	vmlinux zImage
uImage vmlinux bzImage zImage dtbs modules modules_install: $(LINUX_BUILD)/.config
	$(LINUX_CMD) $@

# Linux knows how to make DTB's
%.dtb: $(LINUX_SRC)
	$(LINUX_CMD) $@

# Target Configurations should define their expected DTB
dtb: $(DTB)

linux_help: $(LINUX_SRC)
	$(LINUX_CMD) help

linux_kernel: zImage


## External Module support

module:
	$(LINUX_CMD) modules M=$(M)
	$(LINUX_CMD) modules_install M=$(M)


## Configuration and Build Preparation
$(LINUX_BUILD):
	@mkdir -p $@

menuconfig: $(LINUX_SRC) $(LINUX_BUILD)
	$(LINUX_CMD) $@
	@echo "Copying $(LINUX_BUILD)/.config -> $(BUILDSYS_TARGET_CONF)"
	@cp $(LINUX_BUILD)/.config $(BUILDSYS_TARGET_CONF)/kernel.config

%_defconfig: $(LINUX_SRC) $(LINUX_BUILD)
	@echo " [CONFIG] Configuring from $@"
	$(LINUX_CMD) $@

defconfig $(LINUX_BUILD)/.config: | $(LINUX_SRC) $(LINUX_BUILD)
	@echo "Making DEFCONFIG to create $(LINUX_BUILD)/.config from $(DEFCONFIG)"
	$(MAKE) $(DEFCONFIG)
	@echo "Copying $(LINUX_BUILD)/.config -> $(BUILDSYS_TARGET_CONF)"
	@cp $(LINUX_BUILD)/.config $(BUILDSYS_TARGET_CONF)/kernel.config

# Local store of the config file for tracking
kernel.config $(BUILDSYS_TARGET_CONF)/kernel.config: $(LINUX_BUILD)/.config
	@echo "Copying $(LINUX_BUILD)/.config -> $(BUILDSYS_TARGET_CONF)"
	@cp $(LINUX_BUILD)/.config $(BUILDSYS_TARGET_CONF)/kernel.config

# Update .config with the kernel.config in the target configuration
linux_restore_config:
	@echo "Copying $(BUILDSYS_TARGET_CONF)/kernel.config -> $(LINUX_BUILD)/.config"
	@cp $(BUILDSYS_TARGET_CONF)/kernel.config $(LINUX_BUILD)/.config

# Exported Defines for external packages to utilise

LINUX_DTBS:=$(LINUX_BUILD)/arch/arm/boot/dts/
LINUX_VMLINUX:=$(LINUX_BUILD)/vmlinux

linux-distclean:
	rm -r $(LINUX_BUILD)