Files
bpfire/lfs/linux
Vincent Li 8a0ca16bae Loongarch64: initial change for tool chain build
1. add loongarch64 in make.sh

2. updated many source tar balls with config.guss
   and config.sub with loongarch64 support

3. remove rust and surricata for now

4. workaround binary env dynamic linker missing
   by symbolic link tools_loongarch64/lib to lib64
   when ./make.sh build

   cd build_loongarch64; ln -s tools_loongarch64/lib lib64

./make.sh toolchain to build tool chain
./make clean to start fresh
./make.sh gettoolchain to extract tool chaina from cache
./make.sh build to build software and image

Signed-off-by: Vincent Li <vincent.mc.li@gmail.com>
2024-12-15 09:09:28 -08:00

267 lines
9.7 KiB
Plaintext

###############################################################################
# #
# IPFire.org - A linux based firewall #
# Copyright (C) 2007-2024 IPFire Team <info@ipfire.org> #
# #
# This program is free software: you can redistribute it and/or modify #
# it under the terms of the GNU General Public License as published by #
# the Free Software Foundation, either version 3 of the License, or #
# (at your option) any later version. #
# #
# This program is distributed in the hope that it will be useful, #
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
# GNU General Public License for more details. #
# #
# You should have received a copy of the GNU General Public License #
# along with this program. If not, see <http://www.gnu.org/licenses/>. #
# #
###############################################################################
###############################################################################
# Definitions
###############################################################################
include Config
VER = 6.6.63
THISAPP = linux-$(VER)
DL_FILE = linux-$(VER).tar.xz
DL_FROM = $(URL_IPFIRE)
DIR_APP = $(DIR_SRC)/$(THISAPP)
HEADERS_ARCH = $(BUILD_PLATFORM)
KERNEL_ARCH = $(BUILD_ARCH)
KERNEL_TARGET = bzImage
ifeq "$(BUILD_ARCH)" "loongarch64"
HEADERS_ARCH = loongarch
KERNEL_ARCH = loongarch
KERNEL_TARGET = vmlinuz
endif
ifeq "$(BUILD_ARCH)" "aarch64"
HEADERS_ARCH = arm64
KERNEL_ARCH = arm64
KERNEL_TARGET = Image
endif
ifeq "$(BUILD_ARCH)" "riscv64"
KERNEL_ARCH = riscv
KERNEL_TARGET = Image.gz
endif
ifeq "$(TOOLCHAIN)" "1"
TARGET = $(DIR_INFO)/$(THISAPP)-tools
HEADERS_PREFIX = $(TOOLS_DIR)
EXTRAMAKE = CROSS_COMPILE=$(CROSSTARGET)-
else
HEADERS_PREFIX = /usr
ifeq "$(HEADERS)" "1"
TARGET = $(DIR_INFO)/$(THISAPP)-headers
ROOTFILE_APPEND="-headers"
else
TARGET = $(DIR_INFO)/$(THISAPP)
endif
endif
###############################################################################
# Top-level Rules
###############################################################################
objects = \
$(DL_FILE)
$(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE)
$(DL_FILE)_BLAKE2 = e7e00e6e7e333929be3145784d0dc4cac53e236154627026bd2be0030cc76c347bffa43dffc69677b4a74a19725c54483b14f3168e743e4607e3c5228bd32aa4
install : $(TARGET)
check : $(patsubst %,$(DIR_CHK)/%,$(objects))
download :$(patsubst %,$(DIR_DL)/%,$(objects))
b2 : $(subst %,%_BLAKE2,$(objects))
dist:
@$(PAK)
###############################################################################
# Downloading, checking, b2sum
###############################################################################
$(patsubst %,$(DIR_CHK)/%,$(objects)) :
@$(CHECK)
$(patsubst %,$(DIR_DL)/%,$(objects)) :
@$(LOAD)
$(subst %,%_BLAKE2,$(objects)) :
@$(B2SUM)
###############################################################################
# Installation Details
###############################################################################
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
@$(PREBUILD)
@rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
# Layer7-patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/linux-6.6.26-layer7.patch
# DVB Patches
cd $(DIR_APP) && patch -Np2 < $(DIR_SRC)/src/patches/v4l-dvb_fix_tua6034_pll.patch
# Wlan Patches
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/linux-4.14_ath_user_regd.patch
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/linux-4.9.8-iwlwifi-noibss_only_on_radar_chan.patch
# Fix igb and e1000e crash
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/linux-4.14.1-igb-e1000e_fix_lock_at_update_stats.patch
# Fix uevent PHYSDEVDRIVER
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/linux-2.6.32.27_mcs7830-fix-driver-name.patch
# fix Boot with enabled usercopy hardening
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/linux-5.9-crypto_testmgr_allocate_buffers_with____GFP_COMP.patch
# Patch performance monitoring restrictions to allow further hardening
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/linux-5.15.17-security-perf-allow-further-restriction-of-perf_event_open.patch
# https://bugzilla.ipfire.org/show_bug.cgi?id=12760
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/linux-5.15-NFQUEUE-Hold-RCU-read-lock-while-calling-nf_reinject.patch
# Fix external module compile
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/linux-6.0-fix_external_module_build.patch
ifeq "$(BUILD_ARCH)" "aarch64"
# Apply Arm kernel patches.
cd $(DIR_APP) && cat patch $(DIR_SRC)/src/patches/linux/aarch64/* | patch -Np1
endif
cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux/linux-3.14.79-amba-fix.patch
# Customise the release
cd $(DIR_APP) && echo "$(KVER_SUFFIX)" > localversion.10-$(SNAME)
ifeq "$(HEADERS)" "1"
# Install the header files
cd $(DIR_APP) && make ARCH=$(HEADERS_ARCH) $(EXTRAMAKE) headers
-mkdir -pv $(BUILDROOT)/$(HEADERS_PREFIX)/include
cd $(DIR_APP) && find usr/include -name '.*' -delete
cd $(DIR_APP) && rm usr/include/Makefile
cd $(DIR_APP) && cp -rv usr/include/* $(BUILDROOT)/$(HEADERS_PREFIX)/include
else
# Install ipfire logo
cd $(DIR_APP) && cp -vf $(DIR_SRC)/config/kernel/ipfire_logo.ppm \
drivers/video/logo/logo_linux_clut224.ppm
# Cleanup kernel source
cp $(DIR_SRC)/config/kernel/kernel.config.$(BUILD_ARCH)$(KVER_SUFFIX) $(DIR_APP)/.config
cd $(DIR_APP) && make oldconfig
cd $(DIR_APP) && make clean
# Copy Module signing key configuration
cp -f $(DIR_SRC)/config/kernel/x509.genkey $(DIR_APP)/certs/x509.genkey
# Remove modules folder if exists
rm -rf /lib/modules/$(KVER)
# Build the kernel
# Loongarch64 make requires no argument to build vmlinuz and EFI under arch/loongarch/boot
ifeq "$(BUILD_ARCH)" "loongarch64"
cd $(DIR_APP) && make $(MAKETUNING)
cd $(DIR_APP) && make $(MAKETUNING) modules
else
cd $(DIR_APP) && make V=1 $(MAKETUNING) $(KERNEL_TARGET) modules
endif
# Install the kernel
cd $(DIR_APP) && cp -v arch/$(KERNEL_ARCH)/boot/$(KERNEL_TARGET) /boot/vmlinuz-$(KVER)
cd $(DIR_APP) && cp -v System.map /boot/System.map-$(KVER)
cd $(DIR_APP) && cp -v .config /boot/config-$(KVER)
cd $(DIR_APP) && make $(MAKETUNING) modules_install
ifneq "$(BUILD_PLATFORM)" "x86"
cd $(DIR_APP) && make $(MAKETUNING) dtbs
mkdir -p /boot/dtb-$(KVER)
cd $(DIR_APP)/arch/$(KERNEL_ARCH)/boot/dts && for f in $$(find -name "*.dtb"); do \
cp -v --parents $$f /boot/dtb-$(KVER)/ ; \
chmod 644 /boot/dtb-$(KVER)/$$f ; \
done
endif
# Recreate source and build links
rm -rf /lib/modules/$(KVER)/{build,source}
mkdir -p /lib/modules/$(KVER)/build
ln -sf build /lib/modules/$(KVER)/source
# Create dirs for extra modules
mkdir -p /lib/modules/$(KVER)/extra
cd $(DIR_APP) && cp --parents $$(find -type f -name "Makefile*" -o -name "Kconfig*") \
/lib/modules/$(KVER)/build
cd $(DIR_APP) && cp Module.symvers System.map /lib/modules/$(KVER)/build
rm -rf /lib/modules/$(KVER)/build/{Documentation,scripts,include}
cd $(DIR_APP) && cp .config /lib/modules/$(KVER)/build
cd $(DIR_APP) && cp -a scripts /lib/modules/$(KVER)/build
find /lib/modules/$(KVER)/build/scripts -name "*.o" -exec rm -vf {} \;
cd $(DIR_APP) && cp -a --parents arch/$(HEADERS_ARCH)/include /lib/modules/$(KVER)/build
cd $(DIR_APP) && cp -a include /lib/modules/$(KVER)/build/include
# Copy module signing key for off tree modules
cd $(DIR_APP) && cp -f certs/signing_key.* /lib/modules/$(KVER)/build/certs/
# Install objtool
cd $(DIR_APP) && cp -a tools/objtool/objtool \
/lib/modules/$(KVER)/build/tools/objtool/ || :
cd $(DIR_APP) && cp -a --parents tools/build/{Build,Build.include,fixdep.c} \
tools/scripts/utilities.mak /lib/modules/$(KVER)/build
# Make sure we can build external modules
touch -r /lib/modules/$(KVER)/build/Makefile \
/lib/modules/$(KVER)/build/include/generated/uapi/linux/version.h
touch -r /lib/modules/$(KVER)/build/.config \
/lib/modules/$(KVER)/build/autoconf.h
cp /lib/modules/$(KVER)/build/.config \
/lib/modules/$(KVER)/build/include/config/auto.conf
# Fix permissions
find /lib/modules/$(KVER) -name "modules.order" \
-exec chmod 644 {} \;
find /lib/modules/$(KVER) -name ".*.cmd" -exec rm -f {} \;
# Only do this once
cd $(DIR_APP) && install -m 755 usr/gen_init_cpio /sbin/
# disable drm by install drm to /bin/false because i915 ignore blacklisting
echo install drm /bin/false > /etc/modprobe.d/framebuffer.conf
# Blacklist old framebuffer modules
for f in $$(find /lib/modules/$(KVER)/kernel/drivers/video/fbdev/ -name *.ko.xz); do \
echo "blacklist $$(basename $$f)" >> /etc/modprobe.d/framebuffer.conf ; \
done
# Blacklist new drm framebuffer modules
for f in $$(find /lib/modules/$(KVER)/kernel/drivers/gpu/drm -name *.ko.xz); do \
echo "blacklist $$(basename $$f)" >> /etc/modprobe.d/framebuffer.conf ; \
done
sed -i -e "s|.ko.xz||g" /etc/modprobe.d/framebuffer.conf
# Disable ipv6 at runtime
echo "options ipv6 disable_ipv6=1" > /etc/modprobe.d/ipv6.conf
# build cpupower utility
cd $(DIR_APP)/tools/power/cpupower && make $(MAKETUNING)
cd $(DIR_APP)/tools/power/cpupower && make install
endif
@rm -rf $(DIR_APP)
@$(POSTBUILD)