Skip to content

Commit

Permalink
kernel.mk: First attempt to fix build issue since SynoCommunity#6002
Browse files Browse the repository at this point in the history
  • Loading branch information
th0ma7 committed Apr 30, 2024
1 parent c3a0be5 commit a57c63d
Show file tree
Hide file tree
Showing 8 changed files with 154 additions and 136 deletions.
2 changes: 1 addition & 1 deletion mk/spksrc.common-rules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,6 @@ include ../../mk/spksrc.dependency-tree.mk
include ../../mk/spksrc.generate-digests.mk

### For make kernel-required
include ../../mk/spksrc.kernel.mk
include ../../mk/spksrc.kernel-required.mk

###
22 changes: 14 additions & 8 deletions mk/spksrc.cross-env.mk
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ ENV += PKG_CONFIG_LIBDIR=$(PKG_CONFIG_LIBDIR)
ENV += WORK_DIR=$(WORK_DIR)
ENV += INSTALL_PREFIX=$(INSTALL_PREFIX)

# Ensure toolchain is always built in its directory
# Affected by kernel-modules which otherwise change
# the value of WORK_DIR to build modules locally
TC_WORK_DIR=$(abspath $(WORK_DIR)/../../../toolchain/$(TC)/work)
ENV += TC_WORK_DIR=$(TC_WORK_DIR)

ifeq ($(strip $(REQUIRE_KERNEL)),1)
ENV += REQUIRE_KERNEL_MODULE="$(REQUIRE_KERNEL_MODULE)"
KERNEL_ROOT = $(WORK_DIR)/linux
Expand Down Expand Up @@ -35,21 +41,21 @@ $(TC_VARS_MK):
$(create_target_dir)
ifeq ($(strip $(MAKECMDGOALS)),download)
@$(MSG) "Downloading toolchain"
@if env $(MAKE) --no-print-directory -C ../../toolchain/$(TC) download ; \
@if env $(MAKE) WORK_DIR=$(TC_WORK_DIR) --no-print-directory -C ../../toolchain/$(TC) download ; \
then \
env $(MAKE) --no-print-directory -C ../../toolchain/$(TC) tc_vars > $(TC_VARS_MK) ; \
env $(MAKE) --no-print-directory -C ../../toolchain/$(TC) cmake_vars > $(TC_VARS_CMAKE) ; \
env $(MAKE) --no-print-directory -C ../../toolchain/$(TC) meson_vars > $(TC_VARS_MESON) ; \
env $(MAKE) WORK_DIR=$(TC_WORK_DIR) --no-print-directory -C ../../toolchain/$(TC) tc_vars > $(TC_VARS_MK) ; \
env $(MAKE) WORK_DIR=$(TC_WORK_DIR) --no-print-directory -C ../../toolchain/$(TC) cmake_vars > $(TC_VARS_CMAKE) ; \
env $(MAKE) WORK_DIR=$(TC_WORK_DIR) --no-print-directory -C ../../toolchain/$(TC) meson_vars > $(TC_VARS_MESON) ; \
else \
echo "$$""(error An error occured while downloading the toolchain, please check the messages above)" > $@; \
fi
else
@$(MSG) "Setting-up toolchain "
@if env $(MAKE) --no-print-directory -C ../../toolchain/$(TC) ; \
@if env $(MAKE) WORK_DIR=$(TC_WORK_DIR) --no-print-directory -C ../../toolchain/$(TC) ; \
then \
env $(MAKE) --no-print-directory -C ../../toolchain/$(TC) tc_vars > $(TC_VARS_MK) ; \
env $(MAKE) --no-print-directory -C ../../toolchain/$(TC) cmake_vars > $(TC_VARS_CMAKE) ; \
env $(MAKE) --no-print-directory -C ../../toolchain/$(TC) meson_vars > $(TC_VARS_MESON) ; \
env $(MAKE) WORK_DIR=$(TC_WORK_DIR) --no-print-directory -C ../../toolchain/$(TC) tc_vars > $(TC_VARS_MK) ; \
env $(MAKE) WORK_DIR=$(TC_WORK_DIR) --no-print-directory -C ../../toolchain/$(TC) cmake_vars > $(TC_VARS_CMAKE) ; \
env $(MAKE) WORK_DIR=$(TC_WORK_DIR) --no-print-directory -C ../../toolchain/$(TC) meson_vars > $(TC_VARS_MESON) ; \
else \
echo "$$""(error An error occured while setting up the toolchain, please check the messages above)" > $@; \
fi
Expand Down
83 changes: 0 additions & 83 deletions mk/spksrc.cross-kernel.mk

This file was deleted.

File renamed without changes.
32 changes: 32 additions & 0 deletions mk/spksrc.kernel-modules.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
####

kernel-modules-%: SHELL:=/bin/bash
kernel-modules-%:
@if [ "$(filter $(DEFAULT_TC),lastword $(subst -, ,$(MAKECMDGOALS)))" ]; then \
archs2process="$(filter $(addprefix %-,$(SUPPORTED_KERNEL_VERSIONS)),$(filter $(addsuffix -$(word 1,$(subst ., ,$(word 2,$(subst -, ,$*))))%,$(shell sed -n -e '/TC_ARCH/ s/.*= *//p' ../../toolchain/syno-$*/Makefile)), $(LEGACY_ARCHS)))" ; \
elif [ "$(filter $(GENERIC_ARCHS),$(subst -, ,$(MAKECMDGOALS)))" ]; then \
archs2process="$(filter $(addprefix %-,$(lastword $(subst -, ,$(MAKECMDGOALS)))),$(filter $(addsuffix -$(word 1,$(subst ., ,$(word 2,$(subst -, ,$*))))%,$(shell sed -n -e '/TC_ARCH/ s/.*= *//p' ../../toolchain/syno-$*/Makefile)), $(LEGACY_ARCHS)))" ; \
else \
archs2process=$* ; \
fi ; \
$(MSG) ARCH to be processed: $${archs2process} ; \
set -e ; \
for arch in $${archs2process} ; do \
$(MSG) "Processing $${arch} ARCH" ; \
echo " ************** kernel-modules-$* **************** " ; \
echo "REQUIRE_KERNEL: [$(REQUIRE_KERNEL)]" ; \
echo "REQUIRE_KERNEL_MODULE: [$(REQUIRE_KERNEL_MODULE)]" ; \
echo "KERNEL_ROOT: [$(KERNEL_ROOT)]" ; \
echo "DEPENDS: [$(DEPENDS)]" ; \
# MAKEFLAGS= $(PSTAT_TIME) $(MAKE) WORK_DIR=$(CURDIR)/work-$* ARCH=$$(echo $${arch} | cut -f1 -d-) TCVERSION=$$(echo $${arch} | cut -f2 -d-) strip 2>&1 | tee --append build-$*-kernel-modules.log ; \
echo MAKEFLAGS= $(PSTAT_TIME) $(MAKE) WORK_DIR=$(CURDIR)/work-$* ARCH=$$(echo $${arch} | cut -f1 -d-) TCVERSION=$$(echo $${arch} | cut -f2 -d-) strip 2>&1 | tee --append build-$*-kernel-modules.log ; \
MAKEFLAGS= $(PSTAT_TIME) $(MAKE) WORK_DIR=$(CURDIR)/work-$* ARCH=$$(echo $${arch} | cut -f1 -d-) TCVERSION=$$(echo $${arch} | cut -f2 -d-) strip 2>&1 | tee --append build-$*-kernel-modules.log ; \
[ $${PIPESTATUS[0]} -eq 0 ] || false ; \
$(MAKE) spkclean ; \
rm -fr $(CURDIR)/work-$*/$(addprefix linux-, $${arch}) ; \
$(MAKE) -C ../../toolchain/syno-$${arch} clean ; \
done

kernel-arch-%:
$(MAKE) $(addprefix kernel-modules-, $(or $(filter $(addprefix %, $(DEFAULT_TC)), $(filter %$(word 2,$(subst -, ,$*)), $(filter $(firstword $(subst -, ,$*))%, $(AVAILABLE_TOOLCHAINS)))),$*))
$(MAKE) REQUIRE_KERNEL_MODULE= REQUIRE_KERNEL= WORK_DIR=$(CURDIR)/work-$* $(addprefix build-arch-, $*)
23 changes: 23 additions & 0 deletions mk/spksrc.kernel-required.mk
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
###

KERNEL_REQUIRED = $(MAKE) kernel-required
ifeq ($(strip $(KERNEL_REQUIRED)),)
ALL_ACTION = $(sort $(basename $(subst -,.,$(basename $(subst .,,$(ARCHS_WITH_KERNEL_SUPPORT))))))
endif

#### used as subroutine to test whether any dependency has REQUIRE_KERNEL defined

.PHONY: kernel-required
kernel-required:
@if [ -n "$(REQUIRE_KERNEL)" -o -n "$(REQUIRE_KERNEL_MODULE)" ]; then \
exit 1 ; \
fi
@for depend in $(BUILD_DEPENDS) $(DEPENDS) ; do \
if $(MAKE) --no-print-directory -C ../../$$depend kernel-required >/dev/null 2>&1 ; then \
exit 0 ; \
else \
exit 1 ; \
fi ; \
done

####
125 changes: 81 additions & 44 deletions mk/spksrc.kernel.mk
Original file line number Diff line number Diff line change
@@ -1,47 +1,84 @@
###
# Common makefiles
include ../../mk/spksrc.common.mk
include ../../mk/spksrc.common-rules.mk
include ../../mk/spksrc.directories.mk

KERNEL_REQUIRED = $(MAKE) kernel-required
ifeq ($(strip $(KERNEL_REQUIRED)),)
ALL_ACTION = $(sort $(basename $(subst -,.,$(basename $(subst .,,$(ARCHS_WITH_KERNEL_SUPPORT))))))
# Common kernel variables
include ../../mk/spksrc.kernel-flags.mk

# Configure the included makefiles
NAME = $(KERNEL_NAME)
URLS = $(KERNEL_DIST_SITE)/$(KERNEL_DIST_NAME)
COOKIE_PREFIX = $(PKG_NAME)-

ifneq ($(strip $(REQUIRE_KERNEL_MODULE)),)
PKG_NAME = linux-$(subst syno-,,$(NAME))
PKG_DIR = $(PKG_NAME)
else
PKG_NAME = linux
PKG_DIR = $(PKG_NAME)
endif

ifneq ($(KERNEL_DIST_FILE),)
LOCAL_FILE = $(KERNEL_DIST_FILE)
# download.mk uses PKG_DIST_FILE
PKG_DIST_FILE = $(KERNEL_DIST_FILE)
else
LOCAL_FILE = $(KERNEL_DIST_NAME)
endif
DISTRIB_DIR = $(KERNEL_DIR)/$(KERNEL_VERS)
DIST_FILE = $(DISTRIB_DIR)/$(LOCAL_FILE)
DIST_EXT = $(KERNEL_EXT)
EXTRACT_CMD = $(EXTRACT_CMD.$(KERNEL_EXT)) --skip-old-files --strip-components=$(KERNEL_STRIP) $(KERNEL_PREFIX)

#####

# Prior to interacting with the kernel files
# move the kernel source tree to its final destination
POST_EXTRACT_TARGET = kernel_post_extract_target

# By default do not install kernel headers
INSTALL_TARGET = nop

#####

TC ?= syno-$(KERNEL_ARCH)-$(KERNEL_VERS)

#####

include ../../mk/spksrc.cross-env.mk

include ../../mk/spksrc.download.mk

checksum: download
include ../../mk/spksrc.checksum.mk

extract: checksum
include ../../mk/spksrc.extract.mk

patch: extract
include ../../mk/spksrc.patch.mk

kernel_configure: patch
include ../../mk/spksrc.cross-kernel-configure.mk

kernel_module: kernel_configure
include ../../mk/spksrc.cross-kernel-module.mk

install: kernel_module
include ../../mk/spksrc.cross-kernel-headers.mk

install: kernel_headers
include ../../mk/spksrc.install.mk

plist: install
include ../../mk/spksrc.plist.mk

### For make digests
include ../../mk/spksrc.generate-digests.mk

.PHONY: kernel_post_extract_target
kernel_post_extract_target:
mv $(WORK_DIR)/$(KERNEL_DIST) $(WORK_DIR)/$(PKG_DIR)

#### used as subroutine to test whether any dependency has REQUIRE_KERNEL defined

.PHONY: kernel-required
kernel-required:
@if [ -n "$(REQUIRE_KERNEL)" -o -n "$(REQUIRE_KERNEL_MODULE)" ]; then \
exit 1 ; \
fi
@for depend in $(BUILD_DEPENDS) $(DEPENDS) ; do \
if $(MAKE) --no-print-directory -C ../../$$depend kernel-required >/dev/null 2>&1 ; then \
exit 0 ; \
else \
exit 1 ; \
fi ; \
done

####

kernel-modules-%: SHELL:=/bin/bash
kernel-modules-%:
@if [ "$(filter $(DEFAULT_TC),lastword $(subst -, ,$(MAKECMDGOALS)))" ]; then \
archs2process="$(filter $(addprefix %-,$(SUPPORTED_KERNEL_VERSIONS)),$(filter $(addsuffix -$(word 1,$(subst ., ,$(word 2,$(subst -, ,$*))))%,$(shell sed -n -e '/TC_ARCH/ s/.*= *//p' ../../toolchain/syno-$*/Makefile)), $(LEGACY_ARCHS)))" ; \
elif [ "$(filter $(GENERIC_ARCHS),$(subst -, ,$(MAKECMDGOALS)))" ]; then \
archs2process="$(filter $(addprefix %-,$(lastword $(subst -, ,$(MAKECMDGOALS)))),$(filter $(addsuffix -$(word 1,$(subst ., ,$(word 2,$(subst -, ,$*))))%,$(shell sed -n -e '/TC_ARCH/ s/.*= *//p' ../../toolchain/syno-$*/Makefile)), $(LEGACY_ARCHS)))" ; \
else \
archs2process=$* ; \
fi ; \
$(MSG) ARCH to be processed: $${archs2process} ; \
set -e ; \
for arch in $${archs2process} ; do \
$(MSG) "Processing $${arch} ARCH" ; \
MAKEFLAGS= $(PSTAT_TIME) $(MAKE) WORK_DIR=$(CURDIR)/work-$* ARCH=$$(echo $${arch} | cut -f1 -d-) TCVERSION=$$(echo $${arch} | cut -f2 -d-) strip 2>&1 | tee --append build-$*-kernel-modules.log ; \
[ $${PIPESTATUS[0]} -eq 0 ] || false ; \
$(MAKE) spkclean ; \
rm -fr $(CURDIR)/work-$*/$(addprefix linux-, $${arch}) ; \
$(MAKE) -C ../../toolchain/syno-$${arch} clean ; \
done

kernel-arch-%:
$(MAKE) $(addprefix kernel-modules-, $(or $(filter $(addprefix %, $(DEFAULT_TC)), $(filter %$(word 2,$(subst -, ,$*)), $(filter $(firstword $(subst -, ,$*))%, $(AVAILABLE_TOOLCHAINS)))),$*))
$(MAKE) REQUIRE_KERNEL_MODULE= REQUIRE_KERNEL= WORK_DIR=$(CURDIR)/work-$* $(addprefix build-arch-, $*)
all: install plist
3 changes: 3 additions & 0 deletions mk/spksrc.spk.mk
Original file line number Diff line number Diff line change
Expand Up @@ -547,6 +547,9 @@ pythonclean: wheelcleanall
pythoncleanall: pythonclean
rm -fr work-*/[Pp]ython* work-*/.python*

### For managing kernel modules dependent builds
include ../../mk/spksrc.kernel-modules.mk

### For managing make all-<supported|latest>
include ../../mk/spksrc.supported.mk

Expand Down

0 comments on commit a57c63d

Please sign in to comment.