mirror of
https://github.com/Ysurac/openmptcprouter.git
synced 2025-03-09 15:40:20 +00:00
Merge branch 'develop'
This commit is contained in:
commit
d1c948d2d6
4 changed files with 869 additions and 0 deletions
51
README.md
Normal file
51
README.md
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|

|
||||||
|

|
||||||
|
[](https://www.paypal.me/ycarus)
|
||||||
|
[](https://flattr.com/@ycarus)
|
||||||
|
[](https://liberapay.com/Ycarus/)
|
||||||
|
[](https://www.linkedin.com/in/yannick-chabanois-550330146/)
|
||||||
|
[](https://twitter.com/OpenMPTCProuter)
|
||||||
|
[](https://www.openmptcprouter.com/atom)
|
||||||
|
|
||||||
|
# OpenMPTCProuter
|
||||||
|
|
||||||
|
OpenMPTCProuter is an open source solution to aggregate and encrypt multiple internet connections and terminates it over any VPS which make clients benefit security, reliability, net neutrality, as well as dedicated public IP.
|
||||||
|
|
||||||
|
The aggregation is based on Multipath TCP (MPTCP), which is ISP, WAN type, and latency independent "whether it was Fiber, VDSL, SHDSL, ADSL, 4G or even 5G", different scenarios can be configured to have either aggregation or failover based on MPTCP.
|
||||||
|
|
||||||
|
Aggregation via [Multi-link VPN (MLVPN)](https://github.com/markfoodyburton/MLVPN/commits/new-reorder) and [Glorytun UDP](https://github.com/angt/glorytun) with multipath support are also supported.
|
||||||
|
|
||||||
|
The solution takes advantage of the OpenWRT/LEDE system, which is user friendly and also adds the possibility of installing other packages like VPN, QoS, routing protocols, monitoring, etc. through web-interface or terminal.
|
||||||
|
|
||||||
|
|
||||||
|
Main website: [https://www.openmptcprouter.com/](https://www.openmptcprouter.com/)
|
||||||
|
|
||||||
|
Packages made for OpenMPTCProuter are available here: [https://github.com/Ysurac/openmptcprouter-feeds](https://github.com/Ysurac/openmptcprouter-feeds)
|
||||||
|
|
||||||
|
OpenMPTCProuter VPS script part: [https://github.com/Ysurac/openmptcprouter-vps](https://github.com/Ysurac/openmptcprouter-vps)
|
||||||
|
|
||||||
|
|
||||||
|
## Install from pre-compiled images
|
||||||
|
|
||||||
|
You can download precompiled images from [https://www.openmptcprouter.com/](https://www.openmptcprouter.com/)
|
||||||
|
|
||||||
|
Then copy it to a sdcard:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
gunzip omr-*.img.gz
|
||||||
|
dd bs=4M if=omr-*.img of=/dev/sdX conv=fsync
|
||||||
|
```
|
||||||
|
|
||||||
|
## Install from source
|
||||||
|
|
||||||
|
[Create image](https://github.com/Ysurac/openmptcprouter/wiki/Create-image-for-unsupported-platform)
|
||||||
|
|
||||||
|
|
||||||
|
## Credits
|
||||||
|
|
||||||
|
Our solution is mainly based on:
|
||||||
|
|
||||||
|
* [OpenWRT](https://openwrt.org)
|
||||||
|
* [MultiPath TCP (MPTCP)](https://multipath-tcp.org)
|
||||||
|
* [Shadowsocks](https://shadowsocks.org)
|
||||||
|
* [Glorytun](https://github.com/angt/glorytun)
|
373
build.sh
Executable file
373
build.sh
Executable file
|
@ -0,0 +1,373 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (C) 2017 OVH OverTheBox
|
||||||
|
# Copyright (C) 2017-2020 Ycarus (Yannick Chabanois) <ycarus@zugaina.org> for OpenMPTCProuter project
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the GNU General Public License v3.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
umask 0022
|
||||||
|
unset GREP_OPTIONS SED
|
||||||
|
|
||||||
|
_get_repo() (
|
||||||
|
mkdir -p "$1"
|
||||||
|
cd "$1"
|
||||||
|
[ -d .git ] || git init
|
||||||
|
if git remote get-url origin >/dev/null 2>/dev/null; then
|
||||||
|
git remote set-url origin "$2"
|
||||||
|
else
|
||||||
|
git remote add origin "$2"
|
||||||
|
fi
|
||||||
|
git fetch origin -f
|
||||||
|
git fetch origin --tags -f
|
||||||
|
git checkout -f "origin/$3" -B "build" 2>/dev/null || git checkout "$3" -B "build"
|
||||||
|
)
|
||||||
|
|
||||||
|
OMR_DIST=${OMR_DIST:-openmptcprouter}
|
||||||
|
OMR_HOST=${OMR_HOST:-$(curl -sS ifconfig.co)}
|
||||||
|
OMR_PORT=${OMR_PORT:-80}
|
||||||
|
OMR_KEEPBIN=${OMR_KEEPBIN:-no}
|
||||||
|
OMR_IMG=${OMR_IMG:-yes}
|
||||||
|
#OMR_UEFI=${OMR_UEFI:-yes}
|
||||||
|
OMR_PACKAGES=${OMR_PACKAGES:-full}
|
||||||
|
OMR_ALL_PACKAGES=${OMR_ALL_PACKAGES:-no}
|
||||||
|
OMR_TARGET=${OMR_TARGET:-x86_64}
|
||||||
|
OMR_TARGET_CONFIG="config-$OMR_TARGET"
|
||||||
|
OMR_KERNEL=${OMR_KERNEL:-5.4}
|
||||||
|
#OMR_RELEASE=${OMR_RELEASE:-$(git describe --tags `git rev-list --tags --max-count=1` | sed 's/^\([0-9.]*\).*/\1/')}
|
||||||
|
#OMR_RELEASE=${OMR_RELEASE:-$(git tag --sort=committerdate | tail -1)}
|
||||||
|
OMR_RELEASE=${OMR_RELEASE:-$(git describe --tags `git rev-list --tags --max-count=1` | tail -1 | cut -d '-' -f1)}
|
||||||
|
OMR_REPO=${OMR_REPO:-http://$OMR_HOST:$OMR_PORT/release/$OMR_RELEASE/$OMR_TARGET}
|
||||||
|
|
||||||
|
OMR_FEED_URL="${OMR_FEED_URL:-hhttps://github.com/suyuan168/openmptcprouter-feeds}"
|
||||||
|
OMR_FEED_SRC="${OMR_FEED_SRC:-develop}"
|
||||||
|
|
||||||
|
CUSTOM_FEED_URL="${CUSTOM_FEED_URL}"
|
||||||
|
|
||||||
|
OMR_OPENWRT=${OMR_OPENWRT:-default}
|
||||||
|
|
||||||
|
if [ ! -f "$OMR_TARGET_CONFIG" ]; then
|
||||||
|
echo "Target $OMR_TARGET not found !"
|
||||||
|
#exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$OMR_TARGET" = "rpi3" ]; then
|
||||||
|
OMR_REAL_TARGET="aarch64_cortex-a53"
|
||||||
|
elif [ "$OMR_TARGET" = "rpi4" ]; then
|
||||||
|
OMR_REAL_TARGET="aarch64_cortex-a72"
|
||||||
|
elif [ "$OMR_TARGET" = "rpi2" ]; then
|
||||||
|
OMR_REAL_TARGET="arm_cortex-a7_neon-vfpv4"
|
||||||
|
elif [ "$OMR_TARGET" = "wrt3200acm" ]; then
|
||||||
|
OMR_REAL_TARGET="arm_cortex-a9_vfpv3"
|
||||||
|
elif [ "$OMR_TARGET" = "wrt32x" ]; then
|
||||||
|
OMR_REAL_TARGET="arm_cortex-a9_vfpv3"
|
||||||
|
elif [ "$OMR_TARGET" = "bpi-r2" ]; then
|
||||||
|
OMR_REAL_TARGET="arm_cortex-a7_neon-vfpv4"
|
||||||
|
elif [ "$OMR_TARGET" = "bpi-r64" ]; then
|
||||||
|
OMR_REAL_TARGET="aarch64_cortex-a53"
|
||||||
|
elif [ "$OMR_TARGET" = "espressobin" ]; then
|
||||||
|
OMR_REAL_TARGET="aarch64_cortex-a53"
|
||||||
|
elif [ "$OMR_TARGET" = "x86" ]; then
|
||||||
|
OMR_REAL_TARGET="i386_pentium4"
|
||||||
|
else
|
||||||
|
OMR_REAL_TARGET=${OMR_TARGET}
|
||||||
|
fi
|
||||||
|
|
||||||
|
#_get_repo source https://github.com/ysurac/openmptcprouter-source "master"
|
||||||
|
if [ "$OMR_OPENWRT" = "default" ]; then
|
||||||
|
_get_repo "$OMR_TARGET/source" https://github.com/openwrt/openwrt "bfc433efd4a0c6875a92981d1bd2a5e3e60c61c6"
|
||||||
|
_get_repo feeds/packages https://github.com/openwrt/packages "85dbb482017faec4d69c21b57a5a0afb8095f48a"
|
||||||
|
_get_repo feeds/luci https://github.com/openwrt/luci "833e25d24a8cbf8dd587ee4424ef49b3e4e5f210"
|
||||||
|
elif [ "$OMR_OPENWRT" = "master" ]; then
|
||||||
|
_get_repo "$OMR_TARGET/source" https://github.com/openwrt/openwrt "master"
|
||||||
|
_get_repo feeds/packages https://github.com/openwrt/packages "master"
|
||||||
|
_get_repo feeds/luci https://github.com/openwrt/luci "master"
|
||||||
|
else
|
||||||
|
_get_repo "$OMR_TARGET/source" https://github.com/openwrt/openwrt "${OMR_OPENWRT}"
|
||||||
|
_get_repo feeds/packages https://github.com/openwrt/packages "${OMR_OPENWRT}"
|
||||||
|
_get_repo feeds/luci https://github.com/openwrt/luci "${OMR_OPENWRT}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "$OMR_FEED" ]; then
|
||||||
|
OMR_FEED=feeds/openmptcprouter
|
||||||
|
_get_repo "$OMR_FEED" "$OMR_FEED_URL" "$OMR_FEED_SRC"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$CUSTOM_FEED_URL" ] && [ -z "$CUSTOM_FEED" ]; then
|
||||||
|
CUSTOM_FEED=feeds/${OMR_DIST}
|
||||||
|
_get_repo "$CUSTOM_FEED" "$CUSTOM_FEED_URL" "master"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$1" ] && [ -f "$OMR_FEED/$1/Makefile" ]; then
|
||||||
|
OMR_DIST=$1
|
||||||
|
shift 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$OMR_KEEPBIN" = "no" ]; then
|
||||||
|
rm -rf "$OMR_TARGET/source/bin"
|
||||||
|
fi
|
||||||
|
rm -rf "$OMR_TARGET/source/files" "$OMR_TARGET/source/tmp"
|
||||||
|
#rm -rf "$OMR_TARGET/source/target/linux/mediatek/patches-4.14"
|
||||||
|
cp -rf root/* "$OMR_TARGET/source"
|
||||||
|
|
||||||
|
cat >> "$OMR_TARGET/source/package/base-files/files/etc/banner" <<EOF
|
||||||
|
-----------------------------------------------------
|
||||||
|
PACKAGE: $OMR_DIST
|
||||||
|
VERSION: $(git -C "$OMR_FEED" describe --tag --always)
|
||||||
|
|
||||||
|
BUILD REPO: $(git config --get remote.origin.url)
|
||||||
|
BUILD DATE: $(date -u)
|
||||||
|
-----------------------------------------------------
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > "$OMR_TARGET/source/feeds.conf" <<EOF
|
||||||
|
src-link packages $(readlink -f feeds/packages)
|
||||||
|
src-link luci $(readlink -f feeds/luci)
|
||||||
|
src-link openmptcprouter $(readlink -f "$OMR_FEED")
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [ -n "$CUSTOM_FEED" ]; then
|
||||||
|
echo "src-link ${OMR_DIST} $(readlink -f ${CUSTOM_FEED})" >> "$OMR_TARGET/source/feeds.conf"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$OMR_DIST" = "openmptcprouter" ]; then
|
||||||
|
cat > "$OMR_TARGET/source/package/system/opkg/files/customfeeds.conf" <<-EOF
|
||||||
|
src/gz openwrt_luci http://packages.openmptcprouter.com/${OMR_RELEASE}/${OMR_REAL_TARGET}/luci
|
||||||
|
src/gz openwrt_packages http://packages.openmptcprouter.com/${OMR_RELEASE}/${OMR_REAL_TARGET}/packages
|
||||||
|
src/gz openwrt_base http://packages.openmptcprouter.com/${OMR_RELEASE}/${OMR_REAL_TARGET}/base
|
||||||
|
src/gz openwrt_routing http://packages.openmptcprouter.com/${OMR_RELEASE}/${OMR_REAL_TARGET}/routing
|
||||||
|
src/gz openwrt_telephony http://packages.openmptcprouter.com/${OMR_RELEASE}/${OMR_REAL_TARGET}/telephony
|
||||||
|
EOF
|
||||||
|
elif [ -n "$OMR_PACKAGES_URL" ]; then
|
||||||
|
cat > "$OMR_TARGET/source/package/system/opkg/files/customfeeds.conf" <<-EOF
|
||||||
|
src/gz openwrt_luci ${OMR_PACKAGES_URL}/${OMR_RELEASE}/${OMR_REAL_TARGET}/luci
|
||||||
|
src/gz openwrt_packages ${OMR_PACKAGES_URL}/${OMR_RELEASE}/${OMR_REAL_TARGET}/packages
|
||||||
|
src/gz openwrt_base ${OMR_PACKAGES_URL}/${OMR_RELEASE}/${OMR_REAL_TARGET}/base
|
||||||
|
src/gz openwrt_routing ${OMR_PACKAGES_URL}/${OMR_RELEASE}/${OMR_REAL_TARGET}/routing
|
||||||
|
src/gz openwrt_telephony ${OMR_PACKAGES_URL}/${OMR_RELEASE}/${OMR_REAL_TARGET}/telephony
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
cat > "$OMR_TARGET/source/package/system/opkg/files/customfeeds.conf" <<-EOF
|
||||||
|
src/gz openwrt_luci http://downloads.openwrt.org/snapshots/packages/${OMR_REAL_TARGET}/luci
|
||||||
|
src/gz openwrt_packages http://downloads.openwrt.org/snapshots/packages/${OMR_REAL_TARGET}/packages
|
||||||
|
src/gz openwrt_base http://downloads.openwrt.org/snapshots/packages/${OMR_REAL_TARGET}/base
|
||||||
|
src/gz openwrt_routing http://downloads.openwrt.org/snapshots/packages/${OMR_REAL_TARGET}/routing
|
||||||
|
src/gz openwrt_telephony http://downloads.openwrt.org/snapshots/packages/${OMR_REAL_TARGET}/telephony
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
#cat > "$OMR_TARGET/source/package/system/opkg/files/customfeeds.conf" <<EOF
|
||||||
|
#src/gz openwrt_luci http://downloads.openwrt.org/releases/18.06.0/packages/${OMR_REAL_TARGET}/luci
|
||||||
|
#src/gz openwrt_packages http://downloads.openwrt.org/releases/18.06.0/packages/${OMR_REAL_TARGET}/packages
|
||||||
|
#src/gz openwrt_base http://downloads.openwrt.org/releases/18.06.0/packages/${OMR_REAL_TARGET}/base
|
||||||
|
#src/gz openwrt_routing http://downloads.openwrt.org/releases/18.06.0/packages/${OMR_REAL_TARGET}/routing
|
||||||
|
#src/gz openwrt_telephony http://downloads.openwrt.org/releases/18.06.0/packages/${OMR_REAL_TARGET}/telephony
|
||||||
|
#EOF
|
||||||
|
|
||||||
|
if [ -f "$OMR_TARGET_CONFIG" ]; then
|
||||||
|
cat "$OMR_TARGET_CONFIG" config -> "$OMR_TARGET/source/.config" <<-EOF
|
||||||
|
CONFIG_IMAGEOPT=y
|
||||||
|
CONFIG_VERSIONOPT=y
|
||||||
|
CONFIG_VERSION_DIST="$OMR_DIST"
|
||||||
|
CONFIG_VERSION_REPO="$OMR_REPO"
|
||||||
|
CONFIG_VERSION_NUMBER="$(git -C "$OMR_FEED" tag --sort=committerdate | tail -1)"
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
cat config -> "$OMR_TARGET/source/.config" <<-EOF
|
||||||
|
CONFIG_IMAGEOPT=y
|
||||||
|
CONFIG_VERSIONOPT=y
|
||||||
|
CONFIG_VERSION_DIST="$OMR_DIST"
|
||||||
|
CONFIG_VERSION_REPO="$OMR_REPO"
|
||||||
|
CONFIG_VERSION_NUMBER="$(git -C "$OMR_FEED" tag --sort=committerdate | tail -1)-$(git -C "$OMR_FEED" rev-parse --short HEAD)"
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
if [ "$OMR_ALL_PACKAGES" = "yes" ]; then
|
||||||
|
echo 'CONFIG_ALL=y' >> "$OMR_TARGET/source/.config"
|
||||||
|
echo 'CONFIG_ALL_NONSHARED=y' >> "$OMR_TARGET/source/.config"
|
||||||
|
fi
|
||||||
|
if [ "$OMR_IMG" = "yes" ] && [ "$OMR_TARGET" = "x86_64" ]; then
|
||||||
|
echo 'CONFIG_VDI_IMAGES=y' >> "$OMR_TARGET/source/.config"
|
||||||
|
echo 'CONFIG_VMDK_IMAGES=y' >> "$OMR_TARGET/source/.config"
|
||||||
|
echo 'CONFIG_VHDX_IMAGES=y' >> "$OMR_TARGET/source/.config"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$OMR_PACKAGES" = "full" ]; then
|
||||||
|
echo "CONFIG_PACKAGE_${OMR_DIST}-full=y" >> "$OMR_TARGET/source/.config"
|
||||||
|
fi
|
||||||
|
if [ "$OMR_PACKAGES" = "mini" ]; then
|
||||||
|
echo "CONFIG_PACKAGE_${OMR_DIST}-mini=y" >> "$OMR_TARGET/source/.config"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd "$OMR_TARGET/source"
|
||||||
|
|
||||||
|
#if [ "$OMR_UEFI" = "yes" ] && [ "$OMR_TARGET" = "x86_64" ]; then
|
||||||
|
# echo "Checking if UEFI patch is set or not"
|
||||||
|
# if [ "$(grep 'EFI_IMAGES' target/linux/x86/image/Makefile)" = "" ]; then
|
||||||
|
# patch -N -p1 -s < ../../patches/uefi.patch
|
||||||
|
# fi
|
||||||
|
# echo "Done"
|
||||||
|
#else
|
||||||
|
# if [ "$(grep 'EFI_IMAGES' target/linux/x86/image/Makefile)" != "" ]; then
|
||||||
|
# patch -N -R -p1 -s < ../../patches/uefi.patch
|
||||||
|
# fi
|
||||||
|
#fi
|
||||||
|
|
||||||
|
#if [ "$OMR_TARGET" = "x86_64" ]; then
|
||||||
|
# echo "Checking if Hyper-V patch is set or not"
|
||||||
|
# if ! patch -Rf -N -p1 -s --dry-run < ../../patches/images.patch; then
|
||||||
|
# patch -N -p1 -s < ../../patches/images.patch
|
||||||
|
# fi
|
||||||
|
# echo "Done"
|
||||||
|
#fi
|
||||||
|
|
||||||
|
echo "Checking if No check patch is set or not"
|
||||||
|
if ! patch -Rf -N -p1 -s --dry-run < ../../patches/nocheck.patch; then
|
||||||
|
echo "apply..."
|
||||||
|
patch -N -p1 -s < ../../patches/nocheck.patch
|
||||||
|
fi
|
||||||
|
echo "Done"
|
||||||
|
|
||||||
|
echo "Checking if Nanqinlang patch is set or not"
|
||||||
|
if ! patch -Rf -N -p1 -s --dry-run < ../../patches/nanqinlang.patch; then
|
||||||
|
echo "apply..."
|
||||||
|
patch -N -p1 -s < ../../patches/nanqinlang.patch
|
||||||
|
fi
|
||||||
|
echo "Done"
|
||||||
|
|
||||||
|
# Add BBR2 patch, only working on 64bits images for now
|
||||||
|
if [ "$OMR_TARGET" = "x86_64" ] || [ "$OMR_TARGET" = "bpi-r64" ] || [ "$OMR_TARGET" = "rpi4" ] || [ "$OMR_TARGET" = "espressobin" ] || [ "$OMR_TARGET" = "r2s" ] || [ "$OMR_TARGET" = "rpi3" ]; then
|
||||||
|
echo "Checking if BBRv2 patch is set or not"
|
||||||
|
if ! patch -Rf -N -p1 -s --dry-run < ../../patches/bbr2.patch; then
|
||||||
|
echo "apply..."
|
||||||
|
patch -N -p1 -s < ../../patches/bbr2.patch
|
||||||
|
fi
|
||||||
|
echo "Done"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Checking if smsc75xx patch is set or not"
|
||||||
|
if ! patch -Rf -N -p1 -s --dry-run < ../../patches/smsc75xx.patch; then
|
||||||
|
echo "apply..."
|
||||||
|
patch -N -p1 -s < ../../patches/smsc75xx.patch
|
||||||
|
fi
|
||||||
|
echo "Done"
|
||||||
|
|
||||||
|
#echo "Checking if ipt-nat patch is set or not"
|
||||||
|
#if ! patch -Rf -N -p1 -s --dry-run < ../../patches/ipt-nat6.patch; then
|
||||||
|
# echo "apply..."
|
||||||
|
# patch -N -p1 -s < ../../patches/ipt-nat6.patch
|
||||||
|
#fi
|
||||||
|
#echo "Done"
|
||||||
|
|
||||||
|
#echo "Checking if mvebu patch is set or not"
|
||||||
|
#if [ ! -d target/linux/mvebu/patches-5.4 ]; then
|
||||||
|
# echo "apply..."
|
||||||
|
# patch -N -p1 -s < ../../patches/mvebu-5.14.patch
|
||||||
|
#fi
|
||||||
|
#echo "Done"
|
||||||
|
|
||||||
|
echo "Checking if opkg install arguement too long patch is set or not"
|
||||||
|
if ! patch -Rf -N -p1 -s --dry-run < ../../patches/package-too-long.patch; then
|
||||||
|
echo "apply..."
|
||||||
|
patch -N -p1 -s < ../../patches/package-too-long.patch
|
||||||
|
fi
|
||||||
|
echo "Done"
|
||||||
|
|
||||||
|
echo "Download via IPv4"
|
||||||
|
if ! patch -Rf -N -p1 -s --dry-run < ../../patches/download-ipv4.patch; then
|
||||||
|
patch -N -p1 -s < ../../patches/download-ipv4.patch
|
||||||
|
fi
|
||||||
|
echo "Done"
|
||||||
|
|
||||||
|
echo "Remove check rsync"
|
||||||
|
if [ "$(grep rsync include/prereq-build.mk)" != "" ]; then
|
||||||
|
patch -N -p1 -s < ../../patches/check-rsync.patch
|
||||||
|
fi
|
||||||
|
echo "Done"
|
||||||
|
|
||||||
|
if [ -f target/linux/mediatek/patches-5.4/0999-hnat.patch ]; then
|
||||||
|
rm -f target/linux/mediatek/patches-5.4/0999-hnat.patch
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f target/linux/ipq40xx/patches-5.4/100-GPIO-add-named-gpio-exports.patch ]; then
|
||||||
|
rm -f target/linux/ipq40xx/patches-5.4/100-GPIO-add-named-gpio-exports.patch
|
||||||
|
fi
|
||||||
|
|
||||||
|
#echo "Patch protobuf wrong hash"
|
||||||
|
#patch -N -R -p1 -s < ../../patches/protobuf_hash.patch
|
||||||
|
#echo "Done"
|
||||||
|
|
||||||
|
#echo "Remove gtime dependency"
|
||||||
|
#if ! patch -Rf -N -p1 -s --dry-run < ../../patches/gtime.patch; then
|
||||||
|
# patch -N -p1 -s < ../../patches/gtime.patch
|
||||||
|
#fi
|
||||||
|
#echo "Done"
|
||||||
|
|
||||||
|
if [ "$OMR_KERNEL" = "5.4" ]; then
|
||||||
|
echo "Set to kernel 5.4 for rpi arch"
|
||||||
|
find target/linux/bcm27xx -type f -name Makefile -exec sed -i 's%KERNEL_PATCHVER:=4.19%KERNEL_PATCHVER:=5.4%g' {} \;
|
||||||
|
echo "Done"
|
||||||
|
echo "Set to kernel 5.4 for x86 arch"
|
||||||
|
find target/linux/x86 -type f -name Makefile -exec sed -i 's%KERNEL_PATCHVER:=4.19%KERNEL_PATCHVER:=5.4%g' {} \;
|
||||||
|
echo "Done"
|
||||||
|
echo "Set to kernel 5.4 for mvebu arch (WRT)"
|
||||||
|
find target/linux/mvebu -type f -name Makefile -exec sed -i 's%KERNEL_PATCHVER:=4.19%KERNEL_PATCHVER:=5.4%g' {} \;
|
||||||
|
echo "Done"
|
||||||
|
echo "Set to kernel 5.4 for mediatek arch (BPI-R2)"
|
||||||
|
find target/linux/mediatek -type f -name Makefile -exec sed -i 's%KERNEL_PATCHVER:=4.19%KERNEL_PATCHVER:=5.4%g' {} \;
|
||||||
|
echo "Done"
|
||||||
|
fi
|
||||||
|
|
||||||
|
#rm -rf feeds/packages/libs/libwebp
|
||||||
|
cd "../.."
|
||||||
|
rm -rf feeds/luci/modules/luci-mod-network
|
||||||
|
[ -d feeds/${OMR_DIST}/luci-mod-status ] && rm -rf feeds/luci/modules/luci-mod-status
|
||||||
|
[ -d feeds/${OMR_DIST}/luci-app-statistics ] && rm -rf feeds/luci/applications/luci-app-statistics
|
||||||
|
|
||||||
|
echo "Add Occitan translation support"
|
||||||
|
if ! patch -Rf -N -p1 -s --dry-run < patches/luci-occitan.patch; then
|
||||||
|
patch -N -p1 -s < patches/luci-occitan.patch
|
||||||
|
#sh feeds/luci/build/i18n-add-language.sh oc
|
||||||
|
fi
|
||||||
|
[ -d $OMR_FEED/luci-base/po/oc ] && cp -rf $OMR_FEED/luci-base/po/oc feeds/luci/modules/luci-base/po/
|
||||||
|
echo "Done"
|
||||||
|
|
||||||
|
cd "$OMR_TARGET/source"
|
||||||
|
echo "Update feeds index"
|
||||||
|
cp .config .config.keep
|
||||||
|
scripts/feeds clean
|
||||||
|
scripts/feeds update -a
|
||||||
|
|
||||||
|
#cd -
|
||||||
|
#echo "Checking if fullconenat-luci patch is set or not"
|
||||||
|
##if ! patch -Rf -N -p1 -s --dry-run < patches/fullconenat-luci.patch; then
|
||||||
|
# echo "apply..."
|
||||||
|
# patch -N -p1 -s < patches/fullconenat-luci.patch
|
||||||
|
#fi
|
||||||
|
#echo "Done"
|
||||||
|
#cd "$OMR_TARGET/source"
|
||||||
|
scripts/feeds install -a
|
||||||
|
scripts/feeds update -a
|
||||||
|
if [ "$OMR_ALL_PACKAGES" = "yes" ]; then
|
||||||
|
scripts/feeds install -a -d m -p packages
|
||||||
|
scripts/feeds install -a -d m -p luci
|
||||||
|
fi
|
||||||
|
if [ -n "$CUSTOM_FEED" ]; then
|
||||||
|
scripts/feeds install -a -d m -p openmptcprouter
|
||||||
|
scripts/feeds install -a -d y -f -p ${OMR_DIST}
|
||||||
|
else
|
||||||
|
scripts/feeds install -a -d y -f -p openmptcprouter
|
||||||
|
fi
|
||||||
|
cp .config.keep .config
|
||||||
|
echo "Done"
|
||||||
|
|
||||||
|
if [ ! -f "../../$OMR_TARGET_CONFIG" ]; then
|
||||||
|
echo "Target $OMR_TARGET not found ! You have to configure and compile your kernel manually."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Building $OMR_DIST for the target $OMR_TARGET"
|
||||||
|
make defconfig
|
||||||
|
make IGNORE_ERRORS=m "$@"
|
||||||
|
echo "Done"
|
13
config-p2w_r619ac
Normal file
13
config-p2w_r619ac
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
CONFIG_TARGET_ipq40xx=y
|
||||||
|
CONFIG_TARGET_ipq40xx_generic=y
|
||||||
|
CONFIG_TARGET_ipq40xx_generic_DEVICE_p2w_r619ac-128m=y
|
||||||
|
CONFIG_PACKAGE_kmod-6lowpan=y
|
||||||
|
# CONFIG_KERNEL_CC_OPTIMIZE_FOR_PERFORMANCE is not set
|
||||||
|
CONFIG_KERNEL_CC_OPTIMIZE_FOR_SIZE=y
|
||||||
|
CONFIG_PACKAGE_ipq-wifi-p2w_r619ac=y
|
||||||
|
CONFIG_DEFAULT_ath10k-firmware-qca4019-ct=y
|
||||||
|
CONFIG_DEFAULT_kmod-ath10k-ct=y
|
||||||
|
CONFIG_PACKAGE_kmod-ath10k-ct=y
|
||||||
|
CONFIG_ATH10K-CT_LEDS=y
|
||||||
|
CONFIG_PACKAGE_ath10k-firmware-qca4019-ct=y
|
||||||
|
CONFIG_KERNEL_ARM_MODULE_PLTS=y
|
432
root/rules.mk
Normal file
432
root/rules.mk
Normal file
|
@ -0,0 +1,432 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2006-2010 OpenWrt.org
|
||||||
|
# Copyright (C) 2016 LEDE Project
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
ifneq ($(__rules_inc),1)
|
||||||
|
__rules_inc=1
|
||||||
|
|
||||||
|
ifeq ($(DUMP),)
|
||||||
|
-include $(TOPDIR)/.config
|
||||||
|
endif
|
||||||
|
include $(TOPDIR)/include/debug.mk
|
||||||
|
include $(TOPDIR)/include/verbose.mk
|
||||||
|
|
||||||
|
ifneq ($(filter check,$(MAKECMDGOALS)),)
|
||||||
|
CHECK:=1
|
||||||
|
DUMP:=1
|
||||||
|
endif
|
||||||
|
|
||||||
|
export TMP_DIR:=$(TOPDIR)/tmp
|
||||||
|
export TMPDIR:=$(TMP_DIR)
|
||||||
|
|
||||||
|
qstrip=$(strip $(subst ",,$(1)))
|
||||||
|
#"))
|
||||||
|
|
||||||
|
empty:=
|
||||||
|
space:= $(empty) $(empty)
|
||||||
|
comma:=,
|
||||||
|
merge=$(subst $(space),,$(1))
|
||||||
|
confvar=$(shell echo '$(foreach v,$(1),$(v)=$(subst ','\'',$($(v))))' | $(STAGING_DIR_HOST)/bin/mkhash md5)
|
||||||
|
strip_last=$(patsubst %.$(lastword $(subst .,$(space),$(1))),%,$(1))
|
||||||
|
|
||||||
|
paren_left = (
|
||||||
|
paren_right = )
|
||||||
|
chars_lower = a b c d e f g h i j k l m n o p q r s t u v w x y z
|
||||||
|
chars_upper = A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
|
||||||
|
|
||||||
|
define sep
|
||||||
|
|
||||||
|
endef
|
||||||
|
|
||||||
|
define newline
|
||||||
|
|
||||||
|
|
||||||
|
endef
|
||||||
|
|
||||||
|
__tr_list = $(join $(join $(1),$(foreach char,$(1),$(comma))),$(2))
|
||||||
|
__tr_head_stripped = $(subst $(space),,$(foreach cv,$(call __tr_list,$(1),$(2)),$$$(paren_left)subst$(cv)$(comma)))
|
||||||
|
__tr_head = $(subst $(paren_left)subst,$(paren_left)subst$(space),$(__tr_head_stripped))
|
||||||
|
__tr_tail = $(subst $(space),,$(foreach cv,$(1),$(paren_right)))
|
||||||
|
__tr_template = $(__tr_head)$$(1)$(__tr_tail)
|
||||||
|
|
||||||
|
$(eval toupper = $(call __tr_template,$(chars_lower),$(chars_upper)))
|
||||||
|
$(eval tolower = $(call __tr_template,$(chars_upper),$(chars_lower)))
|
||||||
|
|
||||||
|
version_abbrev = $(if $(if $(CHECK),,$(DUMP)),$(1),$(shell printf '%.8s' $(1)))
|
||||||
|
|
||||||
|
_SINGLE=export MAKEFLAGS=$(space);
|
||||||
|
CFLAGS:=
|
||||||
|
ARCH:=$(subst i486,i386,$(subst i586,i386,$(subst i686,i386,$(call qstrip,$(CONFIG_ARCH)))))
|
||||||
|
ARCH_PACKAGES:=$(call qstrip,$(CONFIG_TARGET_ARCH_PACKAGES))
|
||||||
|
BOARD:=$(call qstrip,$(CONFIG_TARGET_BOARD))
|
||||||
|
SUBTARGET:=$(call qstrip,$(CONFIG_TARGET_SUBTARGET))
|
||||||
|
TARGET_OPTIMIZATION:=$(call qstrip,$(CONFIG_TARGET_OPTIMIZATION))
|
||||||
|
export EXTRA_OPTIMIZATION:=$(filter-out -fno-plt,$(call qstrip,$(CONFIG_EXTRA_OPTIMIZATION)))
|
||||||
|
TARGET_SUFFIX=$(call qstrip,$(CONFIG_TARGET_SUFFIX))
|
||||||
|
BUILD_SUFFIX:=$(call qstrip,$(CONFIG_BUILD_SUFFIX))
|
||||||
|
SUBDIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR})
|
||||||
|
BUILD_SUBDIR:=$(patsubst $(TOPDIR)/%,%,${CURDIR})
|
||||||
|
NPROC:=$(shell sysctl -n hw.ncpu 2>/dev/null || nproc)
|
||||||
|
export SHELL:=/usr/bin/env bash
|
||||||
|
|
||||||
|
IS_PACKAGE_BUILD := $(if $(filter package/%,$(BUILD_SUBDIR)),1)
|
||||||
|
|
||||||
|
OPTIMIZE_FOR_CPU=$(subst i386,i486,$(ARCH))
|
||||||
|
|
||||||
|
ifneq (,$(findstring $(ARCH) , aarch64 aarch64_be powerpc ))
|
||||||
|
FPIC:=-fPIC
|
||||||
|
else
|
||||||
|
FPIC:=-fpic
|
||||||
|
endif
|
||||||
|
|
||||||
|
HOST_FPIC:=-fPIC
|
||||||
|
|
||||||
|
ARCH_SUFFIX:=$(call qstrip,$(CONFIG_CPU_TYPE))
|
||||||
|
GCC_ARCH:=
|
||||||
|
|
||||||
|
ifneq ($(ARCH_SUFFIX),)
|
||||||
|
ARCH_SUFFIX:=_$(ARCH_SUFFIX)
|
||||||
|
endif
|
||||||
|
ifneq ($(filter -march=armv%,$(TARGET_OPTIMIZATION)),)
|
||||||
|
GCC_ARCH:=$(patsubst -march=%,%,$(filter -march=armv%,$(TARGET_OPTIMIZATION)))
|
||||||
|
endif
|
||||||
|
ifdef CONFIG_HAS_SPE_FPU
|
||||||
|
TARGET_SUFFIX:=$(TARGET_SUFFIX)spe
|
||||||
|
endif
|
||||||
|
ifdef CONFIG_MIPS64_ABI
|
||||||
|
ifneq ($(CONFIG_MIPS64_ABI_O32),y)
|
||||||
|
ARCH_SUFFIX:=$(ARCH_SUFFIX)_$(call qstrip,$(CONFIG_MIPS64_ABI))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
DEFAULT_SUBDIR_TARGETS:=clean download prepare compile update refresh prereq dist distcheck configure check check-depends
|
||||||
|
|
||||||
|
define DefaultTargets
|
||||||
|
$(foreach t,$(DEFAULT_SUBDIR_TARGETS) $(1),
|
||||||
|
.$(t):
|
||||||
|
$(t): .$(t)
|
||||||
|
.PHONY: $(t) .$(t)
|
||||||
|
)
|
||||||
|
endef
|
||||||
|
|
||||||
|
DL_DIR:=$(if $(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(call qstrip,$(CONFIG_DOWNLOAD_FOLDER)),$(TOPDIR)/dl)
|
||||||
|
OUTPUT_DIR:=$(if $(call qstrip,$(CONFIG_BINARY_FOLDER)),$(call qstrip,$(CONFIG_BINARY_FOLDER)),$(TOPDIR)/bin)
|
||||||
|
BIN_DIR:=$(OUTPUT_DIR)/targets/$(BOARD)/$(SUBTARGET)
|
||||||
|
INCLUDE_DIR:=$(TOPDIR)/include
|
||||||
|
SCRIPT_DIR:=$(TOPDIR)/scripts
|
||||||
|
BUILD_DIR_BASE:=$(TOPDIR)/build_dir
|
||||||
|
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
|
||||||
|
GCCV:=$(call qstrip,$(CONFIG_GCC_VERSION))
|
||||||
|
LIBC:=$(call qstrip,$(CONFIG_LIBC))
|
||||||
|
REAL_GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))
|
||||||
|
GNU_TARGET_NAME=$(OPTIMIZE_FOR_CPU)-openwrt-linux
|
||||||
|
DIR_SUFFIX:=_$(LIBC)$(if $(CONFIG_arm),_eabi)
|
||||||
|
BIN_DIR:=$(BIN_DIR)$(if $(CONFIG_USE_MUSL),,-$(LIBC))
|
||||||
|
TARGET_DIR_NAME = target-$(ARCH)$(ARCH_SUFFIX)$(DIR_SUFFIX)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
|
||||||
|
TOOLCHAIN_DIR_NAME = toolchain-$(ARCH)$(ARCH_SUFFIX)_gcc-$(GCCV)$(DIR_SUFFIX)
|
||||||
|
else
|
||||||
|
ifeq ($(CONFIG_NATIVE_TOOLCHAIN),)
|
||||||
|
GNU_TARGET_NAME=$(call qstrip,$(CONFIG_TARGET_NAME))
|
||||||
|
else
|
||||||
|
GNU_TARGET_NAME=$(shell gcc -dumpmachine)
|
||||||
|
endif
|
||||||
|
REAL_GNU_TARGET_NAME=$(GNU_TARGET_NAME)
|
||||||
|
LIBC:=$(call qstrip,$(CONFIG_LIBC))
|
||||||
|
TARGET_DIR_NAME:=target-$(GNU_TARGET_NAME)_$(LIBC)$(if $(BUILD_SUFFIX),_$(BUILD_SUFFIX))
|
||||||
|
TOOLCHAIN_DIR_NAME:=toolchain-$(GNU_TARGET_NAME)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(or $(CONFIG_EXTERNAL_TOOLCHAIN),$(CONFIG_TARGET_uml)),)
|
||||||
|
ifeq ($(CONFIG_GCC_USE_IREMAP),y)
|
||||||
|
iremap = -iremap$(1):$(2)
|
||||||
|
else
|
||||||
|
iremap = -f$(if $(CONFIG_REPRODUCIBLE_DEBUG_INFO),file,macro)-prefix-map=$(1)=$(2)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
PACKAGE_DIR:=$(BIN_DIR)/packages
|
||||||
|
PACKAGE_DIR_ALL:=$(TOPDIR)/staging_dir/packages/$(BOARD)
|
||||||
|
BUILD_DIR:=$(BUILD_DIR_BASE)/$(TARGET_DIR_NAME)
|
||||||
|
STAGING_DIR:=$(TOPDIR)/staging_dir/$(TARGET_DIR_NAME)
|
||||||
|
BUILD_DIR_TOOLCHAIN:=$(BUILD_DIR_BASE)/$(TOOLCHAIN_DIR_NAME)
|
||||||
|
TOOLCHAIN_DIR:=$(TOPDIR)/staging_dir/$(TOOLCHAIN_DIR_NAME)
|
||||||
|
STAMP_DIR:=$(BUILD_DIR)/stamp
|
||||||
|
STAMP_DIR_HOST=$(BUILD_DIR_HOST)/stamp
|
||||||
|
TARGET_ROOTFS_DIR?=$(if $(call qstrip,$(CONFIG_TARGET_ROOTFS_DIR)),$(call qstrip,$(CONFIG_TARGET_ROOTFS_DIR)),$(BUILD_DIR))
|
||||||
|
TARGET_DIR:=$(TARGET_ROOTFS_DIR)/root-$(BOARD)
|
||||||
|
STAGING_DIR_ROOT:=$(STAGING_DIR)/root-$(BOARD)
|
||||||
|
STAGING_DIR_IMAGE:=$(STAGING_DIR)/image
|
||||||
|
BUILD_LOG_DIR:=$(if $(call qstrip,$(CONFIG_BUILD_LOG_DIR)),$(call qstrip,$(CONFIG_BUILD_LOG_DIR)),$(TOPDIR)/logs)
|
||||||
|
PKG_INFO_DIR := $(STAGING_DIR)/pkginfo
|
||||||
|
|
||||||
|
BUILD_DIR_HOST:=$(if $(IS_PACKAGE_BUILD),$(BUILD_DIR_BASE)/hostpkg,$(BUILD_DIR_BASE)/host)
|
||||||
|
STAGING_DIR_HOST:=$(TOPDIR)/staging_dir/host
|
||||||
|
STAGING_DIR_HOSTPKG:=$(TOPDIR)/staging_dir/hostpkg
|
||||||
|
|
||||||
|
TARGET_PATH:=$(subst $(space),:,$(filter-out .,$(filter-out ./,$(subst :,$(space),$(PATH)))))
|
||||||
|
TARGET_INIT_PATH:=$(call qstrip,$(CONFIG_TARGET_INIT_PATH))
|
||||||
|
TARGET_INIT_PATH:=$(if $(TARGET_INIT_PATH),$(TARGET_INIT_PATH),/usr/sbin:/sbin:/usr/bin:/bin)
|
||||||
|
TARGET_CFLAGS:=$(TARGET_OPTIMIZATION)$(if $(CONFIG_DEBUG), -g3) $(call qstrip,$(CONFIG_EXTRA_OPTIMIZATION))
|
||||||
|
TARGET_CXXFLAGS = $(TARGET_CFLAGS)
|
||||||
|
TARGET_ASFLAGS_DEFAULT = $(TARGET_CFLAGS)
|
||||||
|
TARGET_ASFLAGS = $(TARGET_ASFLAGS_DEFAULT)
|
||||||
|
TARGET_CPPFLAGS:=-I$(STAGING_DIR)/usr/include
|
||||||
|
TARGET_LDFLAGS:=-L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib
|
||||||
|
ifneq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
|
||||||
|
LIBGCC_S_PATH=$(realpath $(wildcard $(call qstrip,$(CONFIG_LIBGCC_ROOT_DIR))/$(call qstrip,$(CONFIG_LIBGCC_FILE_SPEC))))
|
||||||
|
LIBGCC_S=$(if $(LIBGCC_S_PATH),-L$(dir $(LIBGCC_S_PATH)) -lgcc_s)
|
||||||
|
LIBGCC_A=$(realpath $(lastword $(wildcard $(dir $(LIBGCC_S_PATH))/gcc/*/*/libgcc.a)))
|
||||||
|
else
|
||||||
|
LIBGCC_A=$(lastword $(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.a))
|
||||||
|
LIBGCC_S=$(if $(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so),-L$(TOOLCHAIN_DIR)/lib -lgcc_s,$(LIBGCC_A))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_ARCH_64BIT),y)
|
||||||
|
LIB_SUFFIX:=64
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifndef DUMP
|
||||||
|
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
|
||||||
|
-include $(TOOLCHAIN_DIR)/info.mk
|
||||||
|
export GCC_HONOUR_COPTS:=0
|
||||||
|
TARGET_CROSS:=$(if $(TARGET_CROSS),$(TARGET_CROSS),$(OPTIMIZE_FOR_CPU)-openwrt-linux$(if $(TARGET_SUFFIX),-$(TARGET_SUFFIX))-)
|
||||||
|
TARGET_CFLAGS+= -fhonour-copts -Wno-error=unused-but-set-variable -Wno-error=unused-result
|
||||||
|
TARGET_CPPFLAGS+= -I$(TOOLCHAIN_DIR)/usr/include
|
||||||
|
ifeq ($(CONFIG_USE_MUSL),y)
|
||||||
|
TARGET_CPPFLAGS+= -I$(TOOLCHAIN_DIR)/include/fortify
|
||||||
|
endif
|
||||||
|
TARGET_CPPFLAGS+= -I$(TOOLCHAIN_DIR)/include
|
||||||
|
TARGET_LDFLAGS+= -L$(TOOLCHAIN_DIR)/usr/lib -L$(TOOLCHAIN_DIR)/lib
|
||||||
|
TARGET_PATH:=$(TOOLCHAIN_DIR)/bin:$(TARGET_PATH)
|
||||||
|
else
|
||||||
|
ifeq ($(CONFIG_NATIVE_TOOLCHAIN),)
|
||||||
|
TARGET_CROSS:=$(call qstrip,$(CONFIG_TOOLCHAIN_PREFIX))
|
||||||
|
TOOLCHAIN_ROOT_DIR:=$(call qstrip,$(CONFIG_TOOLCHAIN_ROOT))
|
||||||
|
TOOLCHAIN_BIN_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_BIN_PATH)))
|
||||||
|
TOOLCHAIN_INC_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_INC_PATH)))
|
||||||
|
TOOLCHAIN_LIB_DIRS:=$(patsubst ./%,$(TOOLCHAIN_ROOT_DIR)/%,$(call qstrip,$(CONFIG_TOOLCHAIN_LIB_PATH)))
|
||||||
|
ifneq ($(TOOLCHAIN_BIN_DIRS),)
|
||||||
|
TARGET_PATH:=$(subst $(space),:,$(TOOLCHAIN_BIN_DIRS)):$(TARGET_PATH)
|
||||||
|
endif
|
||||||
|
ifneq ($(TOOLCHAIN_INC_DIRS),)
|
||||||
|
TARGET_CPPFLAGS+= $(patsubst %,-I%,$(TOOLCHAIN_INC_DIRS))
|
||||||
|
endif
|
||||||
|
ifneq ($(TOOLCHAIN_LIB_DIRS),)
|
||||||
|
TARGET_LDFLAGS+= $(patsubst %,-L%,$(TOOLCHAIN_LIB_DIRS))
|
||||||
|
endif
|
||||||
|
TARGET_PATH:=$(TOOLCHAIN_DIR)/bin:$(TARGET_PATH)
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
TARGET_PATH_PKG:=$(STAGING_DIR)/host/bin:$(STAGING_DIR_HOSTPKG)/bin:$(TARGET_PATH)
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_SOFT_FLOAT),y)
|
||||||
|
SOFT_FLOAT_CONFIG_OPTION:=--with-float=soft
|
||||||
|
ifeq ($(CONFIG_arm),y)
|
||||||
|
TARGET_CFLAGS+= -mfloat-abi=soft
|
||||||
|
else
|
||||||
|
TARGET_CFLAGS+= -msoft-float
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
SOFT_FLOAT_CONFIG_OPTION:=
|
||||||
|
ifeq ($(CONFIG_arm),y)
|
||||||
|
TARGET_CFLAGS+= -mfloat-abi=hard
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
export PATH:=$(TARGET_PATH)
|
||||||
|
export STAGING_DIR STAGING_DIR_HOST STAGING_DIR_HOSTPKG
|
||||||
|
export SH_FUNC:=. $(INCLUDE_DIR)/shell.sh;
|
||||||
|
|
||||||
|
PKG_CONFIG:=$(STAGING_DIR_HOST)/bin/pkg-config
|
||||||
|
|
||||||
|
export PKG_CONFIG
|
||||||
|
|
||||||
|
HOSTCC:=gcc
|
||||||
|
HOSTCXX:=g++
|
||||||
|
HOST_CPPFLAGS:=-I$(STAGING_DIR_HOST)/include $(if $(IS_PACKAGE_BUILD),-I$(STAGING_DIR_HOSTPKG)/include -I$(STAGING_DIR)/host/include)
|
||||||
|
HOST_CFLAGS:=-O2 $(HOST_CPPFLAGS)
|
||||||
|
HOST_LDFLAGS:=-L$(STAGING_DIR_HOST)/lib $(if $(IS_PACKAGE_BUILD),-L$(STAGING_DIR_HOSTPKG)/lib -L$(STAGING_DIR)/host/lib)
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
|
||||||
|
TARGET_AR:=$(TARGET_CROSS)gcc-ar
|
||||||
|
TARGET_RANLIB:=$(TARGET_CROSS)gcc-ranlib
|
||||||
|
TARGET_NM:=$(TARGET_CROSS)gcc-nm
|
||||||
|
else
|
||||||
|
TARGET_AR:=$(TARGET_CROSS)ar
|
||||||
|
TARGET_RANLIB:=$(TARGET_CROSS)ranlib
|
||||||
|
TARGET_NM:=$(TARGET_CROSS)nm
|
||||||
|
endif
|
||||||
|
|
||||||
|
BUILD_KEY=$(TOPDIR)/key-build
|
||||||
|
|
||||||
|
FAKEROOT:=$(STAGING_DIR_HOST)/bin/fakeroot
|
||||||
|
|
||||||
|
TARGET_CC:=$(TARGET_CROSS)gcc
|
||||||
|
TARGET_CXX:=$(TARGET_CROSS)g++
|
||||||
|
KPATCH:=$(SCRIPT_DIR)/patch-kernel.sh
|
||||||
|
SED:=$(STAGING_DIR_HOST)/bin/sed -i -e
|
||||||
|
ESED:=$(STAGING_DIR_HOST)/bin/sed -E -i -e
|
||||||
|
CP:=cp -fpR
|
||||||
|
LN:=ln -sf
|
||||||
|
XARGS:=xargs -r
|
||||||
|
|
||||||
|
BASH:=bash
|
||||||
|
TAR:=tar
|
||||||
|
FIND:=find
|
||||||
|
PATCH:=patch
|
||||||
|
PYTHON:=python
|
||||||
|
|
||||||
|
INSTALL_BIN:=install -m0755
|
||||||
|
INSTALL_SUID:=install -m4755
|
||||||
|
INSTALL_DIR:=install -d -m0755
|
||||||
|
INSTALL_DATA:=install -m0644
|
||||||
|
INSTALL_CONF:=install -m0600
|
||||||
|
|
||||||
|
TARGET_CC_NOCACHE:=$(TARGET_CC)
|
||||||
|
TARGET_CXX_NOCACHE:=$(TARGET_CXX)
|
||||||
|
HOSTCC_NOCACHE:=$(HOSTCC)
|
||||||
|
HOSTCXX_NOCACHE:=$(HOSTCXX)
|
||||||
|
export TARGET_CC_NOCACHE
|
||||||
|
export TARGET_CXX_NOCACHE
|
||||||
|
export HOSTCC_NOCACHE
|
||||||
|
export HOSTCXX_NOCACHE
|
||||||
|
|
||||||
|
ifneq ($(CONFIG_CCACHE),)
|
||||||
|
TARGET_CC:= ccache_cc
|
||||||
|
TARGET_CXX:= ccache_cxx
|
||||||
|
HOSTCC:= ccache $(HOSTCC)
|
||||||
|
HOSTCXX:= ccache $(HOSTCXX)
|
||||||
|
export CCACHE_BASEDIR:=$(TOPDIR)
|
||||||
|
export CCACHE_DIR:=$(if $(call qstrip,$(CONFIG_CCACHE_DIR)),$(call qstrip,$(CONFIG_CCACHE_DIR)),$(TOPDIR)/.ccache)
|
||||||
|
export CCACHE_COMPILERCHECK:=%compiler% -dumpmachine; %compiler% -dumpversion
|
||||||
|
endif
|
||||||
|
|
||||||
|
TARGET_CONFIGURE_OPTS = \
|
||||||
|
AR="$(TARGET_AR)" \
|
||||||
|
AS="$(TARGET_CC) -c $(TARGET_ASFLAGS)" \
|
||||||
|
LD=$(TARGET_CROSS)ld \
|
||||||
|
NM="$(TARGET_NM)" \
|
||||||
|
CC="$(TARGET_CC)" \
|
||||||
|
GCC="$(TARGET_CC)" \
|
||||||
|
CXX="$(TARGET_CXX)" \
|
||||||
|
RANLIB="$(TARGET_RANLIB)" \
|
||||||
|
STRIP=$(TARGET_CROSS)strip \
|
||||||
|
OBJCOPY=$(TARGET_CROSS)objcopy \
|
||||||
|
OBJDUMP=$(TARGET_CROSS)objdump \
|
||||||
|
SIZE=$(TARGET_CROSS)size
|
||||||
|
|
||||||
|
# strip an entire directory
|
||||||
|
ifneq ($(CONFIG_NO_STRIP),)
|
||||||
|
RSTRIP:=:
|
||||||
|
STRIP:=:
|
||||||
|
else
|
||||||
|
ifneq ($(CONFIG_USE_STRIP),)
|
||||||
|
STRIP:=$(TARGET_CROSS)strip $(call qstrip,$(CONFIG_STRIP_ARGS))
|
||||||
|
else
|
||||||
|
ifneq ($(CONFIG_USE_SSTRIP),)
|
||||||
|
STRIP:=$(STAGING_DIR_HOST)/bin/sstrip $(call qstrip,$(CONFIG_SSTRIP_ARGS))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
RSTRIP= \
|
||||||
|
export CROSS="$(TARGET_CROSS)" \
|
||||||
|
$(if $(PKG_BUILD_ID),KEEP_BUILD_ID=1) \
|
||||||
|
$(if $(CONFIG_KERNEL_KALLSYMS),NO_RENAME=1) \
|
||||||
|
$(if $(CONFIG_KERNEL_PROFILING),KEEP_SYMBOLS=1); \
|
||||||
|
NM="$(TARGET_CROSS)nm" \
|
||||||
|
STRIP="$(STRIP)" \
|
||||||
|
STRIP_KMOD="$(SCRIPT_DIR)/strip-kmod.sh" \
|
||||||
|
PATCHELF="$(STAGING_DIR_HOST)/bin/patchelf" \
|
||||||
|
$(SCRIPT_DIR)/rstrip.sh
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_IPV6),y)
|
||||||
|
DISABLE_IPV6:=
|
||||||
|
else
|
||||||
|
DISABLE_IPV6:=--disable-ipv6
|
||||||
|
endif
|
||||||
|
|
||||||
|
TAR_OPTIONS:=-xf -
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_BUILD_LOG),y)
|
||||||
|
BUILD_LOG:=1
|
||||||
|
endif
|
||||||
|
|
||||||
|
export BISON_PKGDATADIR:=$(STAGING_DIR_HOST)/share/bison
|
||||||
|
export M4:=$(STAGING_DIR_HOST)/bin/m4
|
||||||
|
|
||||||
|
define shvar
|
||||||
|
V_$(subst .,_,$(subst -,_,$(subst /,_,$(1))))
|
||||||
|
endef
|
||||||
|
|
||||||
|
define shexport
|
||||||
|
export $(call shvar,$(1))=$$(call $(1))
|
||||||
|
endef
|
||||||
|
|
||||||
|
# Execute commands under flock
|
||||||
|
# $(1) => The shell expression.
|
||||||
|
# $(2) => The lock name. If not given, the global lock will be used.
|
||||||
|
ifneq ($(wildcard $(STAGING_DIR_HOST)/bin/flock),)
|
||||||
|
define locked
|
||||||
|
SHELL= \
|
||||||
|
flock \
|
||||||
|
$(TMP_DIR)/.$(if $(2),$(strip $(2)),global).flock \
|
||||||
|
-c '$(subst ','\'',$(1))'
|
||||||
|
endef
|
||||||
|
else
|
||||||
|
locked=$(1)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Recursively copy paths into another directory, purge dangling
|
||||||
|
# symlinks before.
|
||||||
|
# $(1) => File glob expression
|
||||||
|
# $(2) => Destination directory
|
||||||
|
define file_copy
|
||||||
|
for src_dir in $(sort $(foreach d,$(wildcard $(1)),$(dir $(d)))); do \
|
||||||
|
( cd $$src_dir; find -type f -or -type d ) | \
|
||||||
|
( cd $(2); while :; do \
|
||||||
|
read FILE; \
|
||||||
|
[ -z "$$FILE" ] && break; \
|
||||||
|
[ -L "$$FILE" ] || continue; \
|
||||||
|
echo "Removing symlink $(2)/$$FILE"; \
|
||||||
|
rm -f "$$FILE"; \
|
||||||
|
done; ); \
|
||||||
|
done; \
|
||||||
|
$(CP) $(1) $(2)
|
||||||
|
endef
|
||||||
|
|
||||||
|
# Calculate sha256sum of any plain file within a given directory
|
||||||
|
# $(1) => Input directory
|
||||||
|
# $(2) => If set, recurse into subdirectories
|
||||||
|
define sha256sums
|
||||||
|
(cd $(1); find . $(if $(2),,-maxdepth 1) -type f -not -name 'sha256sums' -printf "%P\n" | sort | \
|
||||||
|
xargs -r $(STAGING_DIR_HOST)/bin/mkhash -n sha256 | sed -ne 's!^\(.*\) \(.*\)$$!\1 *\2!p' > sha256sums)
|
||||||
|
endef
|
||||||
|
|
||||||
|
# file extension
|
||||||
|
ext=$(word $(words $(subst ., ,$(1))),$(subst ., ,$(1)))
|
||||||
|
|
||||||
|
all:
|
||||||
|
FORCE: ;
|
||||||
|
.PHONY: FORCE
|
||||||
|
|
||||||
|
check: FORCE
|
||||||
|
@true
|
||||||
|
|
||||||
|
val.%:
|
||||||
|
@$(if $(filter undefined,$(origin $*)),\
|
||||||
|
echo "$* undefined" >&2, \
|
||||||
|
echo '$(subst ','"'"',$($*))' \
|
||||||
|
)
|
||||||
|
|
||||||
|
var.%:
|
||||||
|
@$(if $(filter undefined,$(origin $*)),\
|
||||||
|
echo "$* undefined" >&2, \
|
||||||
|
echo "$*='"'$(subst ','"'\"'\"'"',$($*))'"'" \
|
||||||
|
)
|
||||||
|
|
||||||
|
endif #__rules_inc
|
Loading…
Add table
Add a link
Reference in a new issue