1 # SPDX-License-Identifier: GPL-2.0 1 # SPDX-License-Identifier: GPL-2.0 2 # 2 # 3 # Copyright (C) 2015-2019 Jason A. Donenfeld <J 3 # Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. 4 4 5 PWD := $(shell pwd) 5 PWD := $(shell pwd) 6 6 >> 7 CHOST := $(shell gcc -dumpmachine) >> 8 HOST_ARCH := $(firstword $(subst -, ,$(CHOST))) >> 9 ifneq (,$(ARCH)) >> 10 CBUILD := $(subst -gcc,,$(lastword $(subst /, ,$(firstword $(wildcard $(foreach bindir,$(subst :, ,$(PATH)),$(bindir)/$(ARCH)-*-gcc)))))) >> 11 ifeq (,$(CBUILD)) >> 12 $(error The toolchain for $(ARCH) is not installed) >> 13 endif >> 14 else >> 15 CBUILD := $(CHOST) >> 16 ARCH := $(firstword $(subst -, ,$(CBUILD))) >> 17 endif >> 18 7 # Set these from the environment to override 19 # Set these from the environment to override 8 KERNEL_PATH ?= $(PWD)/../../../../.. 20 KERNEL_PATH ?= $(PWD)/../../../../.. 9 BUILD_PATH ?= $(PWD)/build/$(ARCH) 21 BUILD_PATH ?= $(PWD)/build/$(ARCH) 10 DISTFILES_PATH ?= $(PWD)/distfiles 22 DISTFILES_PATH ?= $(PWD)/distfiles 11 NR_CPUS ?= 4 23 NR_CPUS ?= 4 12 ARCH ?= << 13 CBUILD := $(shell gcc -dumpmachine) << 14 HOST_ARCH := $(firstword $(subst -, ,$(CBUILD) << 15 ifeq ($(ARCH),) << 16 ARCH := $(HOST_ARCH) << 17 endif << 18 24 19 MIRROR := https://download.wireguard.com/qemu- 25 MIRROR := https://download.wireguard.com/qemu-test/distfiles/ 20 26 21 KERNEL_BUILD_PATH := $(BUILD_PATH)/kernel$(if << 22 << 23 default: qemu 27 default: qemu 24 28 25 # variable name, tarball project name, version 29 # variable name, tarball project name, version, tarball extension, default URI base 26 define tar_download = 30 define tar_download = 27 $(1)_VERSION := $(3) 31 $(1)_VERSION := $(3) 28 $(1)_NAME := $(2)-$$($(1)_VERSION) 32 $(1)_NAME := $(2)-$$($(1)_VERSION) 29 $(1)_TAR := $(DISTFILES_PATH)/$$($(1)_NAME)$(4 33 $(1)_TAR := $(DISTFILES_PATH)/$$($(1)_NAME)$(4) 30 $(1)_PATH := $(BUILD_PATH)/$$($(1)_NAME) 34 $(1)_PATH := $(BUILD_PATH)/$$($(1)_NAME) 31 $(call file_download,$$($(1)_NAME)$(4),$(5),$( 35 $(call file_download,$$($(1)_NAME)$(4),$(5),$(6)) 32 endef 36 endef 33 37 34 define file_download = 38 define file_download = 35 $(DISTFILES_PATH)/$(1): | $(4) !! 39 $(DISTFILES_PATH)/$(1): 36 mkdir -p $(DISTFILES_PATH) 40 mkdir -p $(DISTFILES_PATH) 37 flock -x $$@.lock -c '[ -f $$@ ] && ex !! 41 flock -x $$@.lock -c '[ -f $$@ ] && exit 0; wget -O $$@.tmp $(MIRROR)$(1) || wget -O $$@.tmp $(2)$(1) || rm -f $$@.tmp; [ -f $$@.tmp ] || exit 1; if echo "$(3) $$@.tmp" | sha256sum -c -; then mv $$@.tmp $$@; else rm -f $$@.tmp; exit 71; fi' 38 endef 42 endef 39 43 40 $(eval $(call tar_download,IPERF,iperf,3.11,.t !! 44 $(eval $(call tar_download,MUSL,musl,1.2.0,.tar.gz,https://musl.libc.org/releases/,c6de7b191139142d3f9a7b5b702c9cae1b5ee6e7f57e582da9328629408fd4e8)) 41 $(eval $(call tar_download,BASH,bash,5.1.16,.t !! 45 $(eval $(call tar_download,IPERF,iperf,3.7,.tar.gz,https://downloads.es.net/pub/iperf/,d846040224317caf2f75c843d309a950a7db23f9b44b94688ccbe557d6d1710c)) 42 $(eval $(call tar_download,IPROUTE2,iproute2,5 !! 46 $(eval $(call tar_download,BASH,bash,5.0,.tar.gz,https://ftp.gnu.org/gnu/bash/,b4a80f2ac66170b2913efbfb9f2594f1f76c7b1afd11f799e22035d63077fb4d)) 43 $(eval $(call tar_download,IPTABLES,iptables,1 !! 47 $(eval $(call tar_download,IPROUTE2,iproute2,5.6.0,.tar.xz,https://www.kernel.org/pub/linux/utils/net/iproute2/,1b5b0e25ce6e23da7526ea1da044e814ad85ba761b10dd29c2b027c056b04692)) 44 $(eval $(call tar_download,NMAP,nmap,7.92,.tgz !! 48 $(eval $(call tar_download,IPTABLES,iptables,1.8.4,.tar.bz2,https://www.netfilter.org/projects/iptables/files/,993a3a5490a544c2cbf2ef15cf7e7ed21af1845baf228318d5c36ef8827e157c)) >> 49 $(eval $(call tar_download,NMAP,nmap,7.80,.tar.bz2,https://nmap.org/dist/,fcfa5a0e42099e12e4bf7a68ebe6fde05553383a682e816a7ec9256ab4773faa)) 45 $(eval $(call tar_download,IPUTILS,iputils,s20 50 $(eval $(call tar_download,IPUTILS,iputils,s20190709,.tar.gz,https://github.com/iputils/iputils/archive/s20190709.tar.gz/#,a15720dd741d7538dd2645f9f516d193636ae4300ff7dbc8bfca757bf166490a)) 46 $(eval $(call tar_download,WIREGUARD_TOOLS,wir !! 51 $(eval $(call tar_download,WIREGUARD_TOOLS,wireguard-tools,1.0.20200206,.tar.xz,https://git.zx2c4.com/wireguard-tools/snapshot/,f5207248c6a3c3e3bfc9ab30b91c1897b00802ed861e1f9faaed873366078c64)) >> 52 >> 53 KERNEL_BUILD_PATH := $(BUILD_PATH)/kernel$(if $(findstring yes,$(DEBUG_KERNEL)),-debug) >> 54 rwildcard=$(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2) $(filter $(subst *,%,$2),$d)) >> 55 WIREGUARD_SOURCES := $(call rwildcard,$(KERNEL_PATH)/drivers/net/wireguard/,*) >> 56 >> 57 export CFLAGS ?= -O3 -pipe >> 58 export LDFLAGS ?= >> 59 export CPPFLAGS := -I$(BUILD_PATH)/include 47 60 48 export CFLAGS := -O3 -pipe << 49 ifeq ($(HOST_ARCH),$(ARCH)) 61 ifeq ($(HOST_ARCH),$(ARCH)) >> 62 CROSS_COMPILE_FLAG := --host=$(CHOST) 50 CFLAGS += -march=native 63 CFLAGS += -march=native >> 64 STRIP := strip >> 65 else >> 66 $(info Cross compilation: building for $(CBUILD) using $(CHOST)) >> 67 CROSS_COMPILE_FLAG := --build=$(CBUILD) --host=$(CHOST) >> 68 export CROSS_COMPILE=$(CBUILD)- >> 69 STRIP := $(CBUILD)-strip 51 endif 70 endif 52 export LDFLAGS := << 53 export CPPFLAGS := << 54 << 55 QEMU_VPORT_RESULT := << 56 ifeq ($(ARCH),aarch64) 71 ifeq ($(ARCH),aarch64) 57 CHOST := aarch64-linux-musl << 58 QEMU_ARCH := aarch64 72 QEMU_ARCH := aarch64 59 KERNEL_ARCH := arm64 73 KERNEL_ARCH := arm64 60 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/ar 74 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm64/boot/Image 61 QEMU_VPORT_RESULT := virtio-serial-device << 62 ifeq ($(HOST_ARCH),$(ARCH)) 75 ifeq ($(HOST_ARCH),$(ARCH)) 63 QEMU_MACHINE := -cpu host -machine virt,gic_ve 76 QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm 64 else 77 else 65 QEMU_MACHINE := -cpu max -machine virt !! 78 QEMU_MACHINE := -cpu cortex-a53 -machine virt 66 CFLAGS += -march=armv8-a !! 79 CFLAGS += -march=armv8-a -mtune=cortex-a53 67 endif 80 endif 68 else ifeq ($(ARCH),aarch64_be) 81 else ifeq ($(ARCH),aarch64_be) 69 CHOST := aarch64_be-linux-musl << 70 QEMU_ARCH := aarch64 82 QEMU_ARCH := aarch64 71 KERNEL_ARCH := arm64 83 KERNEL_ARCH := arm64 72 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/ar 84 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm64/boot/Image 73 QEMU_VPORT_RESULT := virtio-serial-device << 74 ifeq ($(HOST_ARCH),$(ARCH)) 85 ifeq ($(HOST_ARCH),$(ARCH)) 75 QEMU_MACHINE := -cpu host -machine virt,gic_ve 86 QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm 76 else 87 else 77 QEMU_MACHINE := -cpu max -machine virt !! 88 QEMU_MACHINE := -cpu cortex-a53 -machine virt 78 CFLAGS += -march=armv8-a !! 89 CFLAGS += -march=armv8-a -mtune=cortex-a53 79 endif 90 endif 80 else ifeq ($(ARCH),arm) 91 else ifeq ($(ARCH),arm) 81 CHOST := arm-linux-musleabi << 82 QEMU_ARCH := arm 92 QEMU_ARCH := arm 83 KERNEL_ARCH := arm 93 KERNEL_ARCH := arm 84 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/ar 94 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm/boot/zImage 85 QEMU_VPORT_RESULT := virtio-serial-device << 86 ifeq ($(HOST_ARCH),$(ARCH)) 95 ifeq ($(HOST_ARCH),$(ARCH)) 87 QEMU_MACHINE := -cpu host -machine virt,gic_ve 96 QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm 88 else 97 else 89 QEMU_MACHINE := -cpu max -machine virt !! 98 QEMU_MACHINE := -cpu cortex-a15 -machine virt 90 CFLAGS += -march=armv7-a -mabi=aapcs-linux !! 99 CFLAGS += -march=armv7-a -mtune=cortex-a15 -mabi=aapcs-linux 91 endif 100 endif 92 else ifeq ($(ARCH),armeb) 101 else ifeq ($(ARCH),armeb) 93 CHOST := armeb-linux-musleabi << 94 QEMU_ARCH := arm 102 QEMU_ARCH := arm 95 KERNEL_ARCH := arm 103 KERNEL_ARCH := arm 96 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/ar 104 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/arm/boot/zImage 97 QEMU_VPORT_RESULT := virtio-serial-device << 98 ifeq ($(HOST_ARCH),$(ARCH)) 105 ifeq ($(HOST_ARCH),$(ARCH)) 99 QEMU_MACHINE := -cpu host -machine virt,gic_ve 106 QEMU_MACHINE := -cpu host -machine virt,gic_version=host,accel=kvm 100 else 107 else 101 QEMU_MACHINE := -cpu max -machine virt !! 108 QEMU_MACHINE := -cpu cortex-a15 -machine virt 102 CFLAGS += -march=armv7-a -mabi=aapcs-linux !! 109 CFLAGS += -march=armv7-a -mabi=aapcs-linux # We don't pass -mtune=cortex-a15 due to a compiler bug on big endian. 103 LDFLAGS += -Wl,--be8 110 LDFLAGS += -Wl,--be8 104 endif 111 endif 105 else ifeq ($(ARCH),x86_64) 112 else ifeq ($(ARCH),x86_64) 106 CHOST := x86_64-linux-musl << 107 QEMU_ARCH := x86_64 113 QEMU_ARCH := x86_64 108 KERNEL_ARCH := x86_64 114 KERNEL_ARCH := x86_64 109 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/x8 115 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/x86/boot/bzImage 110 QEMU_VPORT_RESULT := virtio-serial-device << 111 ifeq ($(HOST_ARCH),$(ARCH)) 116 ifeq ($(HOST_ARCH),$(ARCH)) 112 QEMU_MACHINE := -cpu host -machine microvm,acc !! 117 QEMU_MACHINE := -cpu host -machine q35,accel=kvm 113 else 118 else 114 QEMU_MACHINE := -cpu max -machine microvm,acpi !! 119 QEMU_MACHINE := -cpu Skylake-Server -machine q35 >> 120 CFLAGS += -march=skylake-avx512 115 endif 121 endif 116 else ifeq ($(ARCH),i686) 122 else ifeq ($(ARCH),i686) 117 CHOST := i686-linux-musl << 118 QEMU_ARCH := i386 123 QEMU_ARCH := i386 119 KERNEL_ARCH := x86 124 KERNEL_ARCH := x86 120 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/x8 125 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/x86/boot/bzImage 121 QEMU_VPORT_RESULT := virtio-serial-device << 122 ifeq ($(subst x86_64,i686,$(HOST_ARCH)),$(ARCH 126 ifeq ($(subst x86_64,i686,$(HOST_ARCH)),$(ARCH)) 123 QEMU_MACHINE := -cpu host -machine microvm,acc !! 127 QEMU_MACHINE := -cpu host -machine q35,accel=kvm 124 else 128 else 125 QEMU_MACHINE := -cpu coreduo -machine microvm, !! 129 QEMU_MACHINE := -cpu coreduo -machine q35 >> 130 CFLAGS += -march=prescott 126 endif 131 endif 127 else ifeq ($(ARCH),mips64) 132 else ifeq ($(ARCH),mips64) 128 CHOST := mips64-linux-musl << 129 QEMU_ARCH := mips64 133 QEMU_ARCH := mips64 130 KERNEL_ARCH := mips 134 KERNEL_ARCH := mips 131 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux 135 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux 132 ifeq ($(HOST_ARCH),$(ARCH)) 136 ifeq ($(HOST_ARCH),$(ARCH)) 133 QEMU_MACHINE := -cpu host -machine malta,accel 137 QEMU_MACHINE := -cpu host -machine malta,accel=kvm 134 CFLAGS += -EB 138 CFLAGS += -EB 135 else 139 else 136 QEMU_MACHINE := -cpu MIPS64R2-generic -machine 140 QEMU_MACHINE := -cpu MIPS64R2-generic -machine malta -smp 1 137 CFLAGS += -march=mips64r2 -EB 141 CFLAGS += -march=mips64r2 -EB 138 endif 142 endif 139 else ifeq ($(ARCH),mips64el) 143 else ifeq ($(ARCH),mips64el) 140 CHOST := mips64el-linux-musl << 141 QEMU_ARCH := mips64el 144 QEMU_ARCH := mips64el 142 KERNEL_ARCH := mips 145 KERNEL_ARCH := mips 143 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux 146 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux 144 ifeq ($(HOST_ARCH),$(ARCH)) 147 ifeq ($(HOST_ARCH),$(ARCH)) 145 QEMU_MACHINE := -cpu host -machine malta,accel 148 QEMU_MACHINE := -cpu host -machine malta,accel=kvm 146 CFLAGS += -EL 149 CFLAGS += -EL 147 else 150 else 148 QEMU_MACHINE := -cpu MIPS64R2-generic -machine 151 QEMU_MACHINE := -cpu MIPS64R2-generic -machine malta -smp 1 149 CFLAGS += -march=mips64r2 -EL 152 CFLAGS += -march=mips64r2 -EL 150 endif 153 endif 151 else ifeq ($(ARCH),mips) 154 else ifeq ($(ARCH),mips) 152 CHOST := mips-linux-musl << 153 QEMU_ARCH := mips 155 QEMU_ARCH := mips 154 KERNEL_ARCH := mips 156 KERNEL_ARCH := mips 155 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux 157 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux 156 ifeq ($(HOST_ARCH),$(ARCH)) 158 ifeq ($(HOST_ARCH),$(ARCH)) 157 QEMU_MACHINE := -cpu host -machine malta,accel 159 QEMU_MACHINE := -cpu host -machine malta,accel=kvm 158 CFLAGS += -EB 160 CFLAGS += -EB 159 else 161 else 160 QEMU_MACHINE := -cpu 24Kf -machine malta -smp 162 QEMU_MACHINE := -cpu 24Kf -machine malta -smp 1 161 CFLAGS += -march=mips32r2 -EB 163 CFLAGS += -march=mips32r2 -EB 162 endif 164 endif 163 else ifeq ($(ARCH),mipsel) 165 else ifeq ($(ARCH),mipsel) 164 CHOST := mipsel-linux-musl << 165 QEMU_ARCH := mipsel 166 QEMU_ARCH := mipsel 166 KERNEL_ARCH := mips 167 KERNEL_ARCH := mips 167 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux 168 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux 168 ifeq ($(HOST_ARCH),$(ARCH)) 169 ifeq ($(HOST_ARCH),$(ARCH)) 169 QEMU_MACHINE := -cpu host -machine malta,accel 170 QEMU_MACHINE := -cpu host -machine malta,accel=kvm 170 CFLAGS += -EL 171 CFLAGS += -EL 171 else 172 else 172 QEMU_MACHINE := -cpu 24Kf -machine malta -smp 173 QEMU_MACHINE := -cpu 24Kf -machine malta -smp 1 173 CFLAGS += -march=mips32r2 -EL 174 CFLAGS += -march=mips32r2 -EL 174 endif 175 endif 175 else ifeq ($(ARCH),powerpc64) << 176 CHOST := powerpc64-linux-musl << 177 QEMU_ARCH := ppc64 << 178 KERNEL_ARCH := powerpc << 179 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux << 180 ifeq ($(HOST_ARCH),$(ARCH)) << 181 QEMU_MACHINE := -cpu host,accel=kvm -machine p << 182 else << 183 QEMU_MACHINE := -machine pseries -device spapr << 184 endif << 185 else ifeq ($(ARCH),powerpc64le) 176 else ifeq ($(ARCH),powerpc64le) 186 CHOST := powerpc64le-linux-musl << 187 QEMU_ARCH := ppc64 177 QEMU_ARCH := ppc64 188 KERNEL_ARCH := powerpc 178 KERNEL_ARCH := powerpc 189 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux 179 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux 190 ifeq ($(HOST_ARCH),$(ARCH)) 180 ifeq ($(HOST_ARCH),$(ARCH)) 191 QEMU_MACHINE := -cpu host,accel=kvm -machine p 181 QEMU_MACHINE := -cpu host,accel=kvm -machine pseries 192 else 182 else 193 QEMU_MACHINE := -machine pseries -device spapr !! 183 QEMU_MACHINE := -machine pseries 194 endif 184 endif >> 185 CFLAGS += -mcpu=powerpc64le -mlong-double-64 195 else ifeq ($(ARCH),powerpc) 186 else ifeq ($(ARCH),powerpc) 196 CHOST := powerpc-linux-musl << 197 QEMU_ARCH := ppc 187 QEMU_ARCH := ppc 198 KERNEL_ARCH := powerpc 188 KERNEL_ARCH := powerpc 199 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/po 189 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/powerpc/boot/uImage 200 ifeq ($(HOST_ARCH),$(ARCH)) 190 ifeq ($(HOST_ARCH),$(ARCH)) 201 QEMU_MACHINE := -cpu host,accel=kvm -machine p 191 QEMU_MACHINE := -cpu host,accel=kvm -machine ppce500 202 else 192 else 203 QEMU_MACHINE := -machine ppce500 193 QEMU_MACHINE := -machine ppce500 204 endif 194 endif >> 195 CFLAGS += -mcpu=powerpc -mlong-double-64 -msecure-plt 205 else ifeq ($(ARCH),m68k) 196 else ifeq ($(ARCH),m68k) 206 CHOST := m68k-linux-musl << 207 QEMU_ARCH := m68k 197 QEMU_ARCH := m68k 208 KERNEL_ARCH := m68k 198 KERNEL_ARCH := m68k 209 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux 199 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux 210 KERNEL_CMDLINE := $(shell sed -n 's/CONFIG_CMD 200 KERNEL_CMDLINE := $(shell sed -n 's/CONFIG_CMDLINE=\(.*\)/\1/p' arch/m68k.config) 211 QEMU_VPORT_RESULT := virtio-serial-device << 212 ifeq ($(HOST_ARCH),$(ARCH)) 201 ifeq ($(HOST_ARCH),$(ARCH)) 213 QEMU_MACHINE := -cpu host,accel=kvm -machine v !! 202 QEMU_MACHINE := -cpu host,accel=kvm -machine q800 -smp 1 -append $(KERNEL_CMDLINE) 214 else 203 else 215 QEMU_MACHINE := -machine virt -smp 1 -append $ !! 204 QEMU_MACHINE := -machine q800 -smp 1 -append $(KERNEL_CMDLINE) 216 endif 205 endif 217 else ifeq ($(ARCH),riscv64) << 218 CHOST := riscv64-linux-musl << 219 QEMU_ARCH := riscv64 << 220 KERNEL_ARCH := riscv << 221 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/ri << 222 QEMU_VPORT_RESULT := virtio-serial-device << 223 ifeq ($(HOST_ARCH),$(ARCH)) << 224 QEMU_MACHINE := -cpu host,accel=kvm -machine v << 225 else 206 else 226 QEMU_MACHINE := -cpu rv64 -machine virt !! 207 $(error I only build: x86_64, i686, arm, armeb, aarch64, aarch64_be, mips, mipsel, mips64, mips64el, powerpc64le, powerpc, m68k) 227 endif 208 endif 228 else ifeq ($(ARCH),riscv32) << 229 CHOST := riscv32-linux-musl << 230 QEMU_ARCH := riscv32 << 231 KERNEL_ARCH := riscv << 232 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/ri << 233 QEMU_VPORT_RESULT := virtio-serial-device << 234 ifeq ($(HOST_ARCH),$(ARCH)) << 235 QEMU_MACHINE := -cpu host,accel=kvm -machine v << 236 else << 237 QEMU_MACHINE := -cpu rv32 -machine virt << 238 endif << 239 else ifeq ($(ARCH),s390x) << 240 CHOST := s390x-linux-musl << 241 QEMU_ARCH := s390x << 242 KERNEL_ARCH := s390 << 243 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/arch/s3 << 244 KERNEL_CMDLINE := $(shell sed -n 's/CONFIG_CMD << 245 QEMU_VPORT_RESULT := virtio-serial-ccw << 246 ifeq ($(HOST_ARCH),$(ARCH)) << 247 QEMU_MACHINE := -cpu host,accel=kvm -machine s << 248 else << 249 QEMU_MACHINE := -cpu max -machine s390-ccw-vir << 250 endif << 251 else ifeq ($(ARCH),um) << 252 CHOST := $(HOST_ARCH)-linux-musl << 253 KERNEL_BZIMAGE := $(KERNEL_BUILD_PATH)/vmlinux << 254 KERNEL_ARCH := um << 255 KERNEL_CMDLINE := $(shell sed -n 's/CONFIG_CMD << 256 else << 257 $(error I only build: x86_64, i686, arm, armeb << 258 endif << 259 << 260 TOOLCHAIN_FILENAME := $(CHOST)-cross.tgz << 261 TOOLCHAIN_TAR := $(DISTFILES_PATH)/$(TOOLCHAIN << 262 TOOLCHAIN_PATH := $(BUILD_PATH)/$(CHOST)-cross << 263 TOOLCHAIN_DIR := https://download.wireguard.co << 264 $(eval $(call file_download,toolchain-sha256su << 265 $(eval $(call file_download,$(TOOLCHAIN_FILENA << 266 209 267 STRIP := $(CHOST)-strip !! 210 REAL_CC := $(CBUILD)-gcc 268 CROSS_COMPILE_FLAG := --build=$(CBUILD) --host !! 211 MUSL_CC := $(BUILD_PATH)/musl-gcc 269 $(info Building for $(CHOST) using $(CBUILD)) !! 212 export CC := $(MUSL_CC) 270 ifneq ($(ARCH),um) !! 213 USERSPACE_DEPS := $(MUSL_CC) $(BUILD_PATH)/include/.installed $(BUILD_PATH)/include/linux/.installed 271 export CROSS_COMPILE := $(CHOST)- << 272 endif << 273 export PATH := $(TOOLCHAIN_PATH)/bin:$(PATH) << 274 export CC := $(CHOST)-gcc << 275 CCACHE_PATH := $(shell which ccache 2>/dev/nul << 276 ifneq ($(CCACHE_PATH),) << 277 export KBUILD_BUILD_TIMESTAMP := Fri Jun 5 15 << 278 export PATH := $(TOOLCHAIN_PATH)/bin/ccache:$( << 279 export CCACHE_SLOPPINESS := file_macro,time_ma << 280 export CCACHE_DIR ?= $(PWD)/ccache << 281 endif << 282 214 283 USERSPACE_DEPS := $(TOOLCHAIN_PATH)/.installed << 284 << 285 comma := , << 286 build: $(KERNEL_BZIMAGE) 215 build: $(KERNEL_BZIMAGE) 287 qemu: $(KERNEL_BZIMAGE) 216 qemu: $(KERNEL_BZIMAGE) 288 rm -f $(BUILD_PATH)/result 217 rm -f $(BUILD_PATH)/result 289 ifneq ($(ARCH),um) << 290 timeout --foreground 20m qemu-system-$ 218 timeout --foreground 20m qemu-system-$(QEMU_ARCH) \ 291 -nodefaults \ 219 -nodefaults \ 292 -nographic \ 220 -nographic \ 293 -smp $(NR_CPUS) \ 221 -smp $(NR_CPUS) \ 294 $(QEMU_MACHINE) \ 222 $(QEMU_MACHINE) \ 295 -m $$(grep -q CONFIG_DEBUG_KME 223 -m $$(grep -q CONFIG_DEBUG_KMEMLEAK=y $(KERNEL_BUILD_PATH)/.config && echo 1G || echo 256M) \ 296 -serial stdio \ 224 -serial stdio \ 297 -chardev file,path=$(BUILD_PAT !! 225 -serial file:$(BUILD_PATH)/result \ 298 $(if $(QEMU_VPORT_RESULT),-dev << 299 -no-reboot \ 226 -no-reboot \ 300 -monitor none \ 227 -monitor none \ 301 -kernel $< 228 -kernel $< 302 else << 303 timeout --foreground 20m $< \ << 304 $(KERNEL_CMDLINE) \ << 305 mem=$$(grep -q CONFIG_DEBUG_KM << 306 noreboot \ << 307 con1=fd:51 51>$(BUILD_PATH)/re << 308 endif << 309 grep -Fq success $(BUILD_PATH)/result 229 grep -Fq success $(BUILD_PATH)/result 310 230 311 $(BUILD_PATH)/init-cpio-spec.txt: $(TOOLCHAIN_ !! 231 $(BUILD_PATH)/init-cpio-spec.txt: 312 mkdir -p $(BUILD_PATH) 232 mkdir -p $(BUILD_PATH) 313 echo "file /init $(BUILD_PATH)/init 75 233 echo "file /init $(BUILD_PATH)/init 755 0 0" > $@ 314 echo "file /init.sh $(PWD)/../netns.sh 234 echo "file /init.sh $(PWD)/../netns.sh 755 0 0" >> $@ 315 echo "dir /dev 755 0 0" >> $@ 235 echo "dir /dev 755 0 0" >> $@ 316 echo "nod /dev/console 644 0 0 c 5 1" 236 echo "nod /dev/console 644 0 0 c 5 1" >> $@ 317 echo "dir /bin 755 0 0" >> $@ 237 echo "dir /bin 755 0 0" >> $@ 318 echo "file /bin/iperf3 $(IPERF_PATH)/s 238 echo "file /bin/iperf3 $(IPERF_PATH)/src/iperf3 755 0 0" >> $@ 319 echo "file /bin/wg $(WIREGUARD_TOOLS_P 239 echo "file /bin/wg $(WIREGUARD_TOOLS_PATH)/src/wg 755 0 0" >> $@ 320 echo "file /bin/bash $(BASH_PATH)/bash 240 echo "file /bin/bash $(BASH_PATH)/bash 755 0 0" >> $@ 321 echo "file /bin/ip $(IPROUTE2_PATH)/ip 241 echo "file /bin/ip $(IPROUTE2_PATH)/ip/ip 755 0 0" >> $@ 322 echo "file /bin/ss $(IPROUTE2_PATH)/mi 242 echo "file /bin/ss $(IPROUTE2_PATH)/misc/ss 755 0 0" >> $@ 323 echo "file /bin/ping $(IPUTILS_PATH)/p 243 echo "file /bin/ping $(IPUTILS_PATH)/ping 755 0 0" >> $@ 324 echo "file /bin/ncat $(NMAP_PATH)/ncat 244 echo "file /bin/ncat $(NMAP_PATH)/ncat/ncat 755 0 0" >> $@ 325 echo "file /bin/xtables-legacy-multi $ 245 echo "file /bin/xtables-legacy-multi $(IPTABLES_PATH)/iptables/xtables-legacy-multi 755 0 0" >> $@ 326 echo "slink /bin/iptables xtables-lega 246 echo "slink /bin/iptables xtables-legacy-multi 777 0 0" >> $@ 327 echo "slink /bin/ping6 ping 777 0 0" > 247 echo "slink /bin/ping6 ping 777 0 0" >> $@ 328 echo "dir /lib 755 0 0" >> $@ 248 echo "dir /lib 755 0 0" >> $@ 329 echo "file /lib/libc.so $(TOOLCHAIN_PA !! 249 echo "file /lib/libc.so $(MUSL_PATH)/lib/libc.so 755 0 0" >> $@ 330 echo "slink $$($(CHOST)-readelf -p .in !! 250 echo "slink /lib/ld-linux.so.1 libc.so 777 0 0" >> $@ 331 251 332 $(KERNEL_BUILD_PATH)/.config: $(TOOLCHAIN_PATH !! 252 $(KERNEL_BUILD_PATH)/.config: kernel.config arch/$(ARCH).config 333 mkdir -p $(KERNEL_BUILD_PATH) 253 mkdir -p $(KERNEL_BUILD_PATH) 334 cp kernel.config $(KERNEL_BUILD_PATH)/ 254 cp kernel.config $(KERNEL_BUILD_PATH)/minimal.config 335 printf 'CONFIG_NR_CPUS=$(NR_CPUS)\nCON 255 printf 'CONFIG_NR_CPUS=$(NR_CPUS)\nCONFIG_INITRAMFS_SOURCE="$(BUILD_PATH)/init-cpio-spec.txt"\n' >> $(KERNEL_BUILD_PATH)/minimal.config 336 cat arch/$(ARCH).config >> $(KERNEL_BU 256 cat arch/$(ARCH).config >> $(KERNEL_BUILD_PATH)/minimal.config 337 $(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_B 257 $(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) ARCH=$(KERNEL_ARCH) allnoconfig 338 cd $(KERNEL_BUILD_PATH) && ARCH=$(KERN 258 cd $(KERNEL_BUILD_PATH) && ARCH=$(KERNEL_ARCH) $(KERNEL_PATH)/scripts/kconfig/merge_config.sh -n $(KERNEL_BUILD_PATH)/.config $(KERNEL_BUILD_PATH)/minimal.config 339 $(if $(findstring yes,$(DEBUG_KERNEL)) 259 $(if $(findstring yes,$(DEBUG_KERNEL)),cp debug.config $(KERNEL_BUILD_PATH) && cd $(KERNEL_BUILD_PATH) && ARCH=$(KERNEL_ARCH) $(KERNEL_PATH)/scripts/kconfig/merge_config.sh -n $(KERNEL_BUILD_PATH)/.config debug.config,) 340 260 341 $(KERNEL_BZIMAGE): $(TOOLCHAIN_PATH)/.installe !! 261 $(KERNEL_BZIMAGE): $(KERNEL_BUILD_PATH)/.config $(BUILD_PATH)/init-cpio-spec.txt $(MUSL_PATH)/lib/libc.so $(IPERF_PATH)/src/iperf3 $(IPUTILS_PATH)/ping $(BASH_PATH)/bash $(IPROUTE2_PATH)/misc/ss $(IPROUTE2_PATH)/ip/ip $(IPTABLES_PATH)/iptables/xtables-legacy-multi $(NMAP_PATH)/ncat/ncat $(WIREGUARD_TOOLS_PATH)/src/wg $(BUILD_PATH)/init ../netns.sh $(WIREGUARD_SOURCES) 342 $(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_B 262 $(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) 343 .PHONY: $(KERNEL_BZIMAGE) << 344 263 345 $(TOOLCHAIN_PATH)/$(CHOST)/include/linux/.inst !! 264 $(BUILD_PATH)/include/linux/.installed: | $(KERNEL_BUILD_PATH)/.config 346 ifneq ($(ARCH),um) !! 265 $(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) INSTALL_HDR_PATH=$(BUILD_PATH) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) headers_install 347 rm -rf $(TOOLCHAIN_PATH)/$(CHOST)/incl << 348 $(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_B << 349 endif << 350 touch $@ 266 touch $@ 351 267 352 $(TOOLCHAIN_PATH)/.installed: $(TOOLCHAIN_TAR) !! 268 $(MUSL_PATH)/lib/libc.so: $(MUSL_TAR) 353 mkdir -p $(BUILD_PATH) 269 mkdir -p $(BUILD_PATH) 354 flock -s $<.lock tar -C $(BUILD_PATH) 270 flock -s $<.lock tar -C $(BUILD_PATH) -xf $< 355 $(STRIP) -s $(TOOLCHAIN_PATH)/$(CHOST) !! 271 cd $(MUSL_PATH) && CC=$(REAL_CC) ./configure --prefix=/ --disable-static --build=$(CBUILD) 356 ifneq ($(CCACHE_PATH),) !! 272 $(MAKE) -C $(MUSL_PATH) 357 mkdir -p $(TOOLCHAIN_PATH)/bin/ccache !! 273 $(STRIP) -s $@ 358 ln -s $(CCACHE_PATH) $(TOOLCHAIN_PATH) !! 274 359 endif !! 275 $(BUILD_PATH)/include/.installed: $(MUSL_PATH)/lib/libc.so >> 276 $(MAKE) -C $(MUSL_PATH) DESTDIR=$(BUILD_PATH) install-headers 360 touch $@ 277 touch $@ 361 278 >> 279 $(MUSL_CC): $(MUSL_PATH)/lib/libc.so >> 280 sh $(MUSL_PATH)/tools/musl-gcc.specs.sh $(BUILD_PATH)/include $(MUSL_PATH)/lib /lib/ld-linux.so.1 > $(BUILD_PATH)/musl-gcc.specs >> 281 printf '#!/bin/sh\nexec "$(REAL_CC)" --specs="$(BUILD_PATH)/musl-gcc.specs" "$$@"\n' > $(BUILD_PATH)/musl-gcc >> 282 chmod +x $(BUILD_PATH)/musl-gcc >> 283 362 $(IPERF_PATH)/.installed: $(IPERF_TAR) 284 $(IPERF_PATH)/.installed: $(IPERF_TAR) 363 mkdir -p $(BUILD_PATH) 285 mkdir -p $(BUILD_PATH) 364 flock -s $<.lock tar -C $(BUILD_PATH) 286 flock -s $<.lock tar -C $(BUILD_PATH) -xf $< 365 sed -i '1s/^/#include <stdint.h>/' $(I 287 sed -i '1s/^/#include <stdint.h>/' $(IPERF_PATH)/src/cjson.h $(IPERF_PATH)/src/timer.h 366 sed -i -r 's/-p?g//g' $(IPERF_PATH)/sr 288 sed -i -r 's/-p?g//g' $(IPERF_PATH)/src/Makefile* 367 touch $@ 289 touch $@ 368 290 369 $(IPERF_PATH)/src/iperf3: | $(IPERF_PATH)/.ins 291 $(IPERF_PATH)/src/iperf3: | $(IPERF_PATH)/.installed $(USERSPACE_DEPS) 370 cd $(IPERF_PATH) && autoreconf -fi << 371 cd $(IPERF_PATH) && CFLAGS="$(CFLAGS) 292 cd $(IPERF_PATH) && CFLAGS="$(CFLAGS) -D_GNU_SOURCE" ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --enable-static --disable-shared --with-openssl=no 372 $(MAKE) -C $(IPERF_PATH) 293 $(MAKE) -C $(IPERF_PATH) 373 $(STRIP) -s $@ 294 $(STRIP) -s $@ 374 295 375 $(WIREGUARD_TOOLS_PATH)/.installed: $(WIREGUAR 296 $(WIREGUARD_TOOLS_PATH)/.installed: $(WIREGUARD_TOOLS_TAR) 376 mkdir -p $(BUILD_PATH) 297 mkdir -p $(BUILD_PATH) 377 flock -s $<.lock tar -C $(BUILD_PATH) 298 flock -s $<.lock tar -C $(BUILD_PATH) -xf $< 378 touch $@ 299 touch $@ 379 300 380 $(WIREGUARD_TOOLS_PATH)/src/wg: | $(WIREGUARD_ 301 $(WIREGUARD_TOOLS_PATH)/src/wg: | $(WIREGUARD_TOOLS_PATH)/.installed $(USERSPACE_DEPS) 381 $(MAKE) -C $(WIREGUARD_TOOLS_PATH)/src 302 $(MAKE) -C $(WIREGUARD_TOOLS_PATH)/src wg 382 $(STRIP) -s $@ 303 $(STRIP) -s $@ 383 304 384 $(BUILD_PATH)/init: init.c | $(USERSPACE_DEPS) 305 $(BUILD_PATH)/init: init.c | $(USERSPACE_DEPS) 385 mkdir -p $(BUILD_PATH) 306 mkdir -p $(BUILD_PATH) 386 $(CC) -o $@ $(CFLAGS) $(LDFLAGS) -std= !! 307 $(MUSL_CC) -o $@ $(CFLAGS) $(LDFLAGS) -std=gnu11 $< 387 $(STRIP) -s $@ 308 $(STRIP) -s $@ 388 309 389 $(IPUTILS_PATH)/.installed: $(IPUTILS_TAR) 310 $(IPUTILS_PATH)/.installed: $(IPUTILS_TAR) 390 mkdir -p $(BUILD_PATH) 311 mkdir -p $(BUILD_PATH) 391 flock -s $<.lock tar -C $(BUILD_PATH) 312 flock -s $<.lock tar -C $(BUILD_PATH) -xf $< 392 touch $@ 313 touch $@ 393 314 394 $(IPUTILS_PATH)/ping: | $(IPUTILS_PATH)/.insta 315 $(IPUTILS_PATH)/ping: | $(IPUTILS_PATH)/.installed $(USERSPACE_DEPS) 395 sed -i /atexit/d $(IPUTILS_PATH)/ping. 316 sed -i /atexit/d $(IPUTILS_PATH)/ping.c 396 cd $(IPUTILS_PATH) && $(CC) $(CFLAGS) 317 cd $(IPUTILS_PATH) && $(CC) $(CFLAGS) -std=c99 -o $@ ping.c ping_common.c ping6_common.c iputils_common.c -D_GNU_SOURCE -D'IPUTILS_VERSION(f)=f' -lresolv $(LDFLAGS) 397 $(STRIP) -s $@ 318 $(STRIP) -s $@ 398 319 399 $(BASH_PATH)/.installed: $(BASH_TAR) 320 $(BASH_PATH)/.installed: $(BASH_TAR) 400 mkdir -p $(BUILD_PATH) 321 mkdir -p $(BUILD_PATH) 401 flock -s $<.lock tar -C $(BUILD_PATH) 322 flock -s $<.lock tar -C $(BUILD_PATH) -xf $< 402 touch $@ 323 touch $@ 403 324 404 $(BASH_PATH)/bash: | $(BASH_PATH)/.installed $ 325 $(BASH_PATH)/bash: | $(BASH_PATH)/.installed $(USERSPACE_DEPS) 405 cd $(BASH_PATH) && ./configure --prefi !! 326 cd $(BASH_PATH) && ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --without-bash-malloc --disable-debugger --disable-help-builtin --disable-history --disable-multibyte --disable-progcomp --disable-readline --disable-mem-scramble 406 $(MAKE) -C $(BASH_PATH) 327 $(MAKE) -C $(BASH_PATH) 407 $(STRIP) -s $@ 328 $(STRIP) -s $@ 408 329 409 $(IPROUTE2_PATH)/.installed: $(IPROUTE2_TAR) 330 $(IPROUTE2_PATH)/.installed: $(IPROUTE2_TAR) 410 mkdir -p $(BUILD_PATH) 331 mkdir -p $(BUILD_PATH) 411 flock -s $<.lock tar -C $(BUILD_PATH) 332 flock -s $<.lock tar -C $(BUILD_PATH) -xf $< 412 printf 'CC:=$(CC)\nPKG_CONFIG:=pkg-con !! 333 printf 'CC:=$(CC)\nPKG_CONFIG:=pkg-config\nTC_CONFIG_XT:=n\nTC_CONFIG_ATM:=n\nTC_CONFIG_IPSET:=n\nIP_CONFIG_SETNS:=y\nHAVE_ELF:=n\nHAVE_MNL:=n\nHAVE_BERKELEY_DB:=n\nHAVE_LATEX:=n\nHAVE_PDFLATEX:=n\nCFLAGS+=-DHAVE_SETNS\n' > $(IPROUTE2_PATH)/config.mk 413 printf 'libutil.a.done:\n\tflock -x $$ !! 334 printf 'lib: snapshot\n\t$$(MAKE) -C lib\nip/ip: lib\n\t$$(MAKE) -C ip ip\nmisc/ss: lib\n\t$$(MAKE) -C misc ss\n' >> $(IPROUTE2_PATH)/Makefile 414 touch $@ 335 touch $@ 415 336 416 $(IPROUTE2_PATH)/ip/ip: | $(IPROUTE2_PATH)/.in 337 $(IPROUTE2_PATH)/ip/ip: | $(IPROUTE2_PATH)/.installed $(USERSPACE_DEPS) 417 $(MAKE) -C $(IPROUTE2_PATH) PREFIX=/ i 338 $(MAKE) -C $(IPROUTE2_PATH) PREFIX=/ ip/ip 418 $(STRIP) -s $@ 339 $(STRIP) -s $@ 419 340 420 $(IPROUTE2_PATH)/misc/ss: | $(IPROUTE2_PATH)/. 341 $(IPROUTE2_PATH)/misc/ss: | $(IPROUTE2_PATH)/.installed $(USERSPACE_DEPS) 421 $(MAKE) -C $(IPROUTE2_PATH) PREFIX=/ m 342 $(MAKE) -C $(IPROUTE2_PATH) PREFIX=/ misc/ss 422 $(STRIP) -s $@ 343 $(STRIP) -s $@ 423 344 424 $(IPTABLES_PATH)/.installed: $(IPTABLES_TAR) 345 $(IPTABLES_PATH)/.installed: $(IPTABLES_TAR) 425 mkdir -p $(BUILD_PATH) 346 mkdir -p $(BUILD_PATH) 426 flock -s $<.lock tar -C $(BUILD_PATH) 347 flock -s $<.lock tar -C $(BUILD_PATH) -xf $< 427 sed -i -e "/nfnetlink=[01]/s:=[01]:=0: 348 sed -i -e "/nfnetlink=[01]/s:=[01]:=0:" -e "/nfconntrack=[01]/s:=[01]:=0:" $(IPTABLES_PATH)/configure 428 touch $@ 349 touch $@ 429 350 430 $(IPTABLES_PATH)/iptables/xtables-legacy-multi 351 $(IPTABLES_PATH)/iptables/xtables-legacy-multi: | $(IPTABLES_PATH)/.installed $(USERSPACE_DEPS) 431 cd $(IPTABLES_PATH) && ./configure --p 352 cd $(IPTABLES_PATH) && ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --enable-static --disable-shared --disable-nftables --disable-bpf-compiler --disable-nfsynproxy --disable-libipq --disable-connlabel --with-kernel=$(BUILD_PATH)/include 432 $(MAKE) -C $(IPTABLES_PATH) 353 $(MAKE) -C $(IPTABLES_PATH) 433 $(STRIP) -s $@ 354 $(STRIP) -s $@ 434 355 435 $(NMAP_PATH)/.installed: $(NMAP_TAR) 356 $(NMAP_PATH)/.installed: $(NMAP_TAR) 436 mkdir -p $(BUILD_PATH) 357 mkdir -p $(BUILD_PATH) 437 flock -s $<.lock tar -C $(BUILD_PATH) 358 flock -s $<.lock tar -C $(BUILD_PATH) -xf $< 438 touch $@ 359 touch $@ 439 360 440 $(NMAP_PATH)/ncat/ncat: | $(NMAP_PATH)/.instal 361 $(NMAP_PATH)/ncat/ncat: | $(NMAP_PATH)/.installed $(USERSPACE_DEPS) 441 cd $(NMAP_PATH) && ./configure --prefi 362 cd $(NMAP_PATH) && ./configure --prefix=/ $(CROSS_COMPILE_FLAG) --enable-static --disable-shared --without-ndiff --without-zenmap --without-nping --with-libpcap=included --with-libpcre=included --with-libdnet=included --without-liblua --with-liblinear=included --without-nmap-update --without-openssl --with-pcap=linux --without-libssh 442 $(MAKE) -C $(NMAP_PATH)/libpcap 363 $(MAKE) -C $(NMAP_PATH)/libpcap 443 $(MAKE) -C $(NMAP_PATH)/ncat 364 $(MAKE) -C $(NMAP_PATH)/ncat 444 $(STRIP) -s $@ 365 $(STRIP) -s $@ 445 366 446 clean: 367 clean: 447 rm -rf $(BUILD_PATH) 368 rm -rf $(BUILD_PATH) 448 369 449 distclean: clean 370 distclean: clean 450 rm -rf $(DISTFILES_PATH) 371 rm -rf $(DISTFILES_PATH) 451 372 452 cacheclean: clean << 453 ifneq ($(CCACHE_DIR),) << 454 rm -rf $(CCACHE_DIR) << 455 endif << 456 << 457 menuconfig: $(KERNEL_BUILD_PATH)/.config 373 menuconfig: $(KERNEL_BUILD_PATH)/.config 458 $(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_B 374 $(MAKE) -C $(KERNEL_PATH) O=$(KERNEL_BUILD_PATH) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(CROSS_COMPILE) menuconfig 459 375 460 .PHONY: qemu build clean distclean cacheclean !! 376 .PHONY: qemu build clean distclean menuconfig 461 .DELETE_ON_ERROR: 377 .DELETE_ON_ERROR:
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.