2006-06-27 00:35:46 +00:00
#
2014-10-16 16:28:12 +00:00
# Copyright (C) 2006-2014 OpenWrt.org
2016-04-18 10:28:16 +00:00
# Copyright (C) 2016 LEDE Project
2006-06-27 00:35:46 +00:00
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#
2005-04-10 20:28:17 +00:00
i n c l u d e $( TOPDIR ) / r u l e s . m k
2006-06-21 03:17:13 +00:00
i n c l u d e $( INCLUDE_DIR ) / k e r n e l . m k
2015-01-08 11:02:00 +00:00
i n c l u d e $( INCLUDE_DIR ) / v e r s i o n . m k
2018-01-10 22:53:45 +00:00
i n c l u d e $( INCLUDE_DIR ) / d o w n l o a d . m k
2005-04-10 20:28:17 +00:00
2008-08-17 11:14:13 +00:00
o v e r r i d e MAKEFLAGS =
2016-05-26 14:22:09 +00:00
SDK_NAME := $( VERSION_DIST_SANITIZED) -sdk-$( if $( CONFIG_VERSION_FILENAMES) ,$( VERSION_NUMBER) -) $( BOARD) $( if $( SUBTARGET) ,-$( SUBTARGET) ) $( if $( GCCV) ,_gcc-$( GCCV) ) $( DIR_SUFFIX) .$( HOST_OS) -$( HOST_ARCH)
2005-04-20 17:01:30 +00:00
SDK_BUILD_DIR := $( BUILD_DIR) /$( SDK_NAME)
2014-03-13 14:13:57 +00:00
2014-03-13 14:14:00 +00:00
STAGING_SUBDIR_HOST := staging_dir/host
2017-01-24 14:29:20 +00:00
STAGING_SUBDIR_TARGET := staging_dir/$( TARGET_DIR_NAME)
2017-02-08 11:01:42 +00:00
STAGING_SUBDIR_TOOLCHAIN := staging_dir/toolchain-$( ARCH) $( ARCH_SUFFIX) _gcc-$( GCCV) _$( LIBC) $( if $( CONFIG_arm) ,_eabi)
2014-03-13 14:13:57 +00:00
2016-04-18 10:28:16 +00:00
EXCLUDE_DIRS := */ccache/* \
2009-08-09 11:11:11 +00:00
*/stamp \
*/stampfiles \
*/man \
2014-03-10 11:12:37 +00:00
*/info \
2014-03-13 14:13:57 +00:00
*/root-* \
initial \
*.install.clean \
*.install.flags \
*.install \
2017-01-13 17:00:18 +00:00
*/doc \
*/share/locale
2014-03-10 11:12:37 +00:00
SDK_DIRS = \
2014-03-13 14:14:00 +00:00
$( STAGING_SUBDIR_HOST) \
$( STAGING_SUBDIR_TOOLCHAIN)
2005-04-10 20:28:17 +00:00
2017-12-04 11:48:30 +00:00
GIT_URL := $( shell git config --get remote.origin.url 2>/dev/null)
GIT_URL := $( if $( CONFIG_BUILDBOT) ,$( filter git://% http://% https://%,$( GIT_URL) ) ,$( GIT_URL) )
2017-02-19 19:45:11 +00:00
GIT_COMMIT := $( shell git rev-parse HEAD 2>/dev/null)
GIT_BRANCH := $( filter-out master HEAD,$( shell git rev-parse --abbrev-ref HEAD 2>/dev/null) )
GIT_TAGNAME := $( shell git show-ref --tags --dereference 2>/dev/null | sed -ne '/^$(GIT_COMMIT) / { s|^.*/||; s|\^.*||; p }' )
2017-01-20 08:51:38 +00:00
2017-02-19 19:45:11 +00:00
BASE_FEED := $( if $( GIT_URL) ,src-git base $( GIT_URL) $( if $( GIT_BRANCH) ,; $( GIT_BRANCH) ,$( if $( GIT_TAGNAME) ,; $( GIT_TAGNAME) ) ) )
2014-10-16 16:28:12 +00:00
BASE_FEED := $( if $( BASE_FEED) ,$( BASE_FEED) ,$( shell cd $( TOPDIR) ; LC_ALL = C git svn info 2>/dev/null | sed -ne 's/^URL: /src-gitsvn base /p' ) )
BASE_FEED := $( if $( BASE_FEED) ,$( BASE_FEED) ,$( shell cd $( TOPDIR) ; LC_ALL = C svn info 2>/dev/null | sed -ne 's/^URL: /src-svn base /p' ) )
2018-01-10 22:53:45 +00:00
BASE_FEED := $( if $( BASE_FEED) ,$( BASE_FEED) ,src-git base $( PROJECT_GIT) /openwrt/openwrt.git$( if $( GIT_BRANCH) ,; $( GIT_BRANCH) ,$( if $( GIT_TAGNAME) ,; $( GIT_TAGNAME) ) ) )
2008-09-24 17:11:41 +00:00
2014-03-10 11:12:37 +00:00
KDIR_BASE = $( patsubst $( TOPDIR) /%,%,$( LINUX_DIR) )
2018-08-03 11:45:27 +00:00
KDIR_ARCHES = $( LINUX_KARCH)
# arch/arm64/ includes reference files in arch/arm/, so we'll need both
i f e q ( $( LINUX_KARCH ) , a r m 6 4 )
KDIR_ARCHES += arm
e n d i f
2014-03-10 11:12:37 +00:00
KERNEL_FILES_ARCH = \
Makefile* \
module.lds \
Kbuild.platforms \
*/Platform \
include \
2014-12-11 17:03:04 +00:00
*/include \
2014-03-10 11:12:37 +00:00
scripts \
2019-08-02 19:03:14 +00:00
kernel/asm-offsets.s \
kernel/module.lds
2014-03-10 11:12:37 +00:00
KERNEL_FILES_BASE := \
.config \
Makefile \
scripts \
include \
Module.symvers \
2016-01-11 23:11:09 +00:00
modules.builtin \
2018-08-03 11:45:27 +00:00
$( foreach arch,$( KDIR_ARCHES) ,$( addprefix arch/$( arch) /,$( KERNEL_FILES_ARCH) ) )
2014-03-10 11:12:37 +00:00
KERNEL_FILES := $( patsubst $( TOPDIR) /%,%,$( wildcard $( addprefix $( LINUX_DIR) /,$( KERNEL_FILES_BASE) ) ) )
2005-04-10 20:28:17 +00:00
all : compile
2016-10-11 11:51:44 +00:00
$(BIN_DIR)/$(SDK_NAME).tar.xz : clean
2006-06-21 03:17:13 +00:00
mkdir -p $( SDK_BUILD_DIR) /dl $( SDK_BUILD_DIR) /package
2016-11-30 09:00:41 +00:00
$( CP) -L $( INCLUDE_DIR) $( SCRIPT_DIR) $( SDK_BUILD_DIR) /
2011-09-13 07:39:14 +00:00
$( TAR) -cf - -C $( TOPDIR) \
2018-11-29 08:07:21 +00:00
` cd $( TOPDIR) ; find $( KDIR_BASE) / -name \* .ko` \
2016-04-21 14:34:39 +00:00
` cd $( TOPDIR) ; find $( KDIR_BASE) /firmware/ -newer $( KDIR_BASE) /firmware/Makefile \
-type f -name '*.bin' -or -name '*.cis' -or -name '*.csp' -or -name '*.dsp' -or -name '*.fw' ` \
2011-09-13 07:39:14 +00:00
$( foreach exclude,$( EXCLUDE_DIRS) ,--exclude= " $( exclude) " ) \
2014-03-10 11:12:37 +00:00
$( SDK_DIRS) $( KERNEL_FILES) | \
2006-10-14 14:16:26 +00:00
$( TAR) -xf - -C $( SDK_BUILD_DIR)
2014-03-13 14:14:00 +00:00
2018-08-01 07:11:17 +00:00
# Copy usbip sources, this is required for the usbip userspace packages to be buildable by the SDK.
$( TAR) -cf - -C $( TOPDIR) $( KDIR_BASE) /tools/usb/usbip/ | \
$( TAR) -xf - -C $( SDK_BUILD_DIR)
2019-04-25 05:26:23 +00:00
# Copy objtool executables. They are required for building external
# modules if "Compile-time stack metadata validation" is enabled.
if grep -q '^CONFIG_STACK_VALIDATION=y' $( LINUX_DIR) /.config; then \
$( TAR) -cf - -C $( TOPDIR) \
` cd $( TOPDIR) ; find $( KDIR_BASE) /tools/objtool -type f -executable` | \
$( TAR) -xf - -C $( SDK_BUILD_DIR) ; \
fi
2017-01-10 10:37:47 +00:00
( cd $( SDK_BUILD_DIR) ; find $( STAGING_SUBDIR_HOST) /bin $( STAGING_SUBDIR_HOST) /usr/bin \
$( STAGING_SUBDIR_TOOLCHAIN) /bin $( STAGING_SUBDIR_TOOLCHAIN) /*/bin $( STAGING_SUBDIR_TOOLCHAIN) /libexec \
-type f | $( XARGS) $( SCRIPT_DIR) /bundle-libraries.sh $( SDK_BUILD_DIR) /$( STAGING_SUBDIR_HOST) )
2014-03-13 14:14:00 +00:00
@-( \
find \
$( SDK_BUILD_DIR) /$( STAGING_SUBDIR_HOST) /bin \
$( SDK_BUILD_DIR) /$( STAGING_SUBDIR_HOST) /usr/bin \
$( SDK_BUILD_DIR) /$( STAGING_SUBDIR_TOOLCHAIN) /bin \
$( SDK_BUILD_DIR) /$( STAGING_SUBDIR_TOOLCHAIN) /*/bin \
$( SDK_BUILD_DIR) /$( STAGING_SUBDIR_TOOLCHAIN) /libexec \
-type f; \
find \
$( SDK_BUILD_DIR) /$( STAGING_SUBDIR_HOST) /lib \
$( SDK_BUILD_DIR) /$( STAGING_SUBDIR_HOST) /usr/lib \
2017-01-18 02:15:31 +00:00
-type f -name \* .so\* ; \
2014-03-13 14:14:00 +00:00
) | xargs strip 2>/dev/null >/dev/null
2007-12-14 00:33:25 +00:00
mkdir -p $( SDK_BUILD_DIR) /target/linux
$( CP) $( GENERIC_PLATFORM_DIR) $( PLATFORM_DIR) $( SDK_BUILD_DIR) /target/linux/
rm -rf \
2014-03-10 11:12:41 +00:00
$( SDK_BUILD_DIR) /target/linux/*/files* \
$( SDK_BUILD_DIR) /target/linux/*/patches*
2014-03-10 18:58:49 +00:00
./convert-config.pl $( TOPDIR) /.config > $( SDK_BUILD_DIR) /Config-build.in
2012-01-28 03:30:30 +00:00
$( CP) -L \
2008-08-22 04:20:40 +00:00
$( TOPDIR) /LICENSE \
2007-12-14 00:33:25 +00:00
$( TOPDIR) /rules.mk \
2008-08-22 04:20:40 +00:00
./files/Config.in \
2007-12-14 00:33:25 +00:00
./files/Makefile \
2015-02-08 22:54:27 +00:00
./files/include/prepare.mk \
2007-12-14 00:33:25 +00:00
./files/README.SDK \
$( SDK_BUILD_DIR) /
$( CP) \
$( TOPDIR) /package/Makefile \
2016-08-01 09:54:25 +00:00
$( TOPDIR) /package/libs/toolchain \
$( TOPDIR) /package/kernel/linux \
2007-12-14 00:33:25 +00:00
$( SDK_BUILD_DIR) /package/
2014-10-16 16:28:12 +00:00
2017-01-24 14:29:20 +00:00
-rm -rf \
$( SDK_BUILD_DIR) /$( STAGING_SUBDIR_HOST) /ccache \
$( SDK_BUILD_DIR) /$( STAGING_SUBDIR_TARGET) /ccache \
2019-08-08 19:16:02 +00:00
$( SDK_BUILD_DIR) /$( STAGING_SUBDIR_TOOLCHAIN) /ccache \
$( SDK_BUILD_DIR) /$( STAGING_SUBDIR_HOST) /.prereq-build
2017-01-24 14:29:20 +00:00
2014-10-16 16:28:12 +00:00
-rm -f $( SDK_BUILD_DIR) /feeds.conf.default
$( if $( BASE_FEED) ,echo " $( BASE_FEED) " > $( SDK_BUILD_DIR) /feeds.conf.default)
if [ -f $( TOPDIR) /feeds.conf ] ; then \
cat $( TOPDIR) /feeds.conf >> $( SDK_BUILD_DIR) /feeds.conf.default; \
else \
cat $( TOPDIR) /feeds.conf.default >> $( SDK_BUILD_DIR) /feeds.conf.default; \
fi
2012-04-13 10:47:45 +00:00
$( SED) 's,^# REVISION:=.*,REVISION:=$(REVISION),g' $( SDK_BUILD_DIR) /include/version.mk
2016-10-21 10:21:40 +00:00
$( SED) 's,^# SOURCE_DATE_EPOCH:=.*,SOURCE_DATE_EPOCH:=$(SOURCE_DATE_EPOCH),g' $( SDK_BUILD_DIR) /include/version.mk
2014-09-17 10:25:47 +00:00
$( SED) '/LINUX_VERMAGIC:=/ { s,unknown,$(LINUX_VERMAGIC),g }' $( SDK_BUILD_DIR) /include/kernel.mk
2007-12-14 00:33:25 +00:00
find $( SDK_BUILD_DIR) -name .git | $( XARGS) rm -rf
2007-04-29 01:30:48 +00:00
find $( SDK_BUILD_DIR) -name .svn | $( XARGS) rm -rf
find $( SDK_BUILD_DIR) -name CVS | $( XARGS) rm -rf
2017-02-13 10:45:43 +00:00
-make -C $( SDK_BUILD_DIR) /scripts/config clean
2005-04-10 20:28:17 +00:00
( cd $( BUILD_DIR) ; \
2016-10-11 11:51:44 +00:00
tar -I 'xz -7e' -cf $@ $( SDK_NAME) ; \
2005-04-20 17:01:30 +00:00
)
2006-07-21 17:00:14 +00:00
download :
2005-04-10 20:28:17 +00:00
prepare :
2016-10-11 11:51:44 +00:00
compile : $( BIN_DIR ) /$( SDK_NAME ) .tar .xz
2007-01-14 23:37:40 +00:00
install : compile
2005-04-10 20:28:17 +00:00
clean :
2016-10-11 11:51:44 +00:00
rm -rf $( SDK_BUILD_DIR) $( BIN_DIR) /$( SDK_NAME) .tar.xz