From 8685c9c12c97131cf30a51a267d579a2735a236e Mon Sep 17 00:00:00 2001 From: winlin Date: Sun, 3 Oct 2021 14:17:53 +0800 Subject: [PATCH] OpenWRT: Support cross-compile SRS --- trunk/auto/depends.sh | 9 +++--- trunk/auto/options.sh | 47 ++++++++++++++++++++++------ trunk/doc/CHANGELOG.md | 3 +- trunk/src/core/srs_core.hpp | 7 ++--- trunk/src/core/srs_core_version4.hpp | 2 +- trunk/src/core/srs_core_version5.hpp | 2 +- 6 files changed, 50 insertions(+), 20 deletions(-) diff --git a/trunk/auto/depends.sh b/trunk/auto/depends.sh index fac9b4583..80c9001e6 100755 --- a/trunk/auto/depends.sh +++ b/trunk/auto/depends.sh @@ -527,8 +527,9 @@ if [[ $SRS_SSL == YES && $SRS_USE_SYS_SSL != YES ]]; then # https://stackoverflow.com/questions/15539062/cross-compiling-of-openssl-for-linux-arm-v5te-linux-gnueabi-toolchain if [[ $SRS_CROSS_BUILD == YES ]]; then OPENSSL_CONFIG="./Configure linux-generic32" - if [[ $SRS_CROSS_BUILD_ARMV7 == YES ]]; then OPENSSL_CONFIG="./Configure linux-armv4"; fi - if [[ $SRS_CROSS_BUILD_AARCH64 == YES ]]; then OPENSSL_CONFIG="./Configure linux-aarch64"; fi + if [[ $SRS_CROSS_BUILD_ARCH == "arm" ]]; then OPENSSL_CONFIG="./Configure linux-armv4"; fi + if [[ $SRS_CROSS_BUILD_ARCH == "aarch64" ]]; then OPENSSL_CONFIG="./Configure linux-aarch64"; fi + if [[ $SRS_CROSS_BUILD_ARCH == "mipsel" ]]; then OPENSSL_CONFIG="./Configure linux-mips32"; fi elif [[ ! -f ${SRS_OBJS}/${SRS_PLATFORM}/openssl/lib/libssl.a ]]; then # Try to use exists libraries. if [[ -f /usr/local/ssl/lib/libssl.a && $SRS_SSL_LOCAL == NO ]]; then @@ -680,8 +681,8 @@ if [[ $SRS_FFMPEG_FIT == YES ]]; then # For cross-build. if [[ $SRS_CROSS_BUILD == YES ]]; then FFMPEG_OPTIONS="$FFMPEG_OPTIONS --enable-cross-compile --target-os=linux" - if [[ $SRS_CROSS_BUILD_ARMV7 ]]; then FFMPEG_OPTIONS="$FFMPEG_OPTIONS --arch=arm"; fi - if [[ $SRS_CROSS_BUILD_AARCH64 ]]; then FFMPEG_OPTIONS="$FFMPEG_OPTIONS --arch=aarch64"; fi + FFMPEG_OPTIONS="$FFMPEG_OPTIONS --arch=$SRS_CROSS_BUILD_ARCH"; + if [[ $SRS_CROSS_BUILD_CPU != "" ]]; then FFMPEG_OPTIONS="$FFMPEG_OPTIONS --cpu=$SRS_CROSS_BUILD_CPU"; fi FFMPEG_OPTIONS="$FFMPEG_OPTIONS --cross-prefix=$SRS_CROSS_BUILD_PREFIX" FFMPEG_OPTIONS="$FFMPEG_OPTIONS --cc=${SRS_TOOL_CC} --cxx=${SRS_TOOL_CXX} --ar=${SRS_TOOL_AR} --ld=${SRS_TOOL_LD}" FFMPEG_OPTIONS="$FFMPEG_OPTIONS --enable-decoder=opus --enable-encoder=opus" diff --git a/trunk/auto/options.sh b/trunk/auto/options.sh index 00025bf73..d9c940a02 100755 --- a/trunk/auto/options.sh +++ b/trunk/auto/options.sh @@ -77,9 +77,10 @@ SRS_GPROF=NO # Performance test: gprof SRS_X86_X64=NO # For x86_64 servers SRS_OSX=NO #For osx/macOS PC. SRS_CROSS_BUILD=NO #For cross build, for example, on Ubuntu. -# For cross build, whether armv7 or armv8(aarch64). -SRS_CROSS_BUILD_ARMV7=NO -SRS_CROSS_BUILD_AARCH64=NO +# For cross build, the cpu, for example(FFmpeg), --cpu=24kc +SRS_CROSS_BUILD_CPU= +# For cross build, the arch, for example(FFmpeg), --arch=aarch64 +SRS_CROSS_BUILD_ARCH= # For cross build, the host, for example(libsrtp), --host=aarch64-linux-gnu SRS_CROSS_BUILD_HOST= # For cross build, the cross prefix, for example(FFmpeg), --cross-prefix=aarch64-linux-gnu- @@ -109,7 +110,7 @@ function show_help() { Presets: --x86-64, --x86-x64 For x86/x64 cpu, common pc and servers. Default: $(value2switch $SRS_X86_X64) - --cross-build Enable cross-build for ARM, please set bellow Toolchain also. Default: $(value2switch $SRS_CROSS_BUILD) + --cross-build Enable cross-build, please set bellow Toolchain also. Default: $(value2switch $SRS_CROSS_BUILD) --osx Enable build for OSX/Darwin AppleOS. Default: $(value2switch $SRS_OSX) Features: @@ -148,6 +149,10 @@ Performance: @see https://blog.csdn.net/win_lin/article/details/5 Toolchain options: @see https://github.com/ossrs/srs/wiki/v4_CN_SrsLinuxArm#ubuntu-cross-build-srs --static=on|off Whether add '-static' to link options. Default: $(value2switch $SRS_STATIC) + --cpu= Toolchain: Select the minimum required CPU for cross-build. + --arch= Toolchain: Select architecture for cross-build. + --host= Toolchain: Cross-compile to build programs to run on HOST. + --cross-prefix= Toolchain: Use PREFIX for compilation tools. --cc= Toolchain: Use c compiler CC. Default: $SRS_TOOL_CC --cxx= Toolchain: Use c++ compiler CXX. Default: $SRS_TOOL_CXX --ar= Toolchain: Use archive tool AR. Default: $SRS_TOOL_CXX @@ -217,6 +222,10 @@ function parse_user_option() { --prefix) SRS_PREFIX=${value} ;; --static) SRS_STATIC=$(switch2value $value) ;; + --cpu) SRS_CROSS_BUILD_CPU=${value} ;; + --arch) SRS_CROSS_BUILD_ARCH=${value} ;; + --host) SRS_CROSS_BUILD_HOST=${value} ;; + --cross-prefix) SRS_CROSS_BUILD_PREFIX=${value} ;; --cc) SRS_TOOL_CC=${value} ;; --cxx) SRS_TOOL_CXX=${value} ;; --ar) SRS_TOOL_AR=${value} ;; @@ -327,6 +336,7 @@ function parse_user_option() { # Alias for --arm, cross build. --cross-build) SRS_CROSS_BUILD=YES ;; + --enable-cross-compile) SRS_CROSS_BUILD=YES ;; # Deprecated, might be removed in future. --with-nginx) SRS_NGINX=YES ;; @@ -393,11 +403,26 @@ function apply_auto_options() { fi if [[ $SRS_CROSS_BUILD == YES ]]; then - SRS_CROSS_BUILD_HOST=$(echo $SRS_TOOL_CC|awk -F '-gcc' '{print $1}') - SRS_CROSS_BUILD_PREFIX="${SRS_CROSS_BUILD_HOST}-" - echo $SRS_TOOL_CC| grep arm >/dev/null 2>&1 && SRS_CROSS_BUILD_ARMV7=YES - echo $SRS_TOOL_CC| grep aarch64 >/dev/null 2>&1 && SRS_CROSS_BUILD_AARCH64=YES - echo "For cross build, host: $SRS_CROSS_BUILD_HOST, prefix: $SRS_CROSS_BUILD_PREFIX, armv7: $SRS_CROSS_BUILD_ARMV7, aarch64: $SRS_CROSS_BUILD_AARCH64" + if [[ $SRS_CROSS_BUILD_PREFIX != "" && $SRS_CROSS_BUILD_HOST == "" ]]; then + SRS_CROSS_BUILD_HOST=$(echo $SRS_CROSS_BUILD_PREFIX| sed 's/-$//g') + fi + if [[ $SRS_TOOL_CC != "" && $SRS_CROSS_BUILD_HOST == "" ]]; then + SRS_CROSS_BUILD_HOST=$(echo $SRS_TOOL_CC| sed 's/-gcc$//g') + fi + if [[ $SRS_CROSS_BUILD_PREFIX == "" ]]; then + SRS_CROSS_BUILD_PREFIX="${SRS_CROSS_BUILD_HOST}-" + fi + SRS_TOOL_CC=${SRS_CROSS_BUILD_PREFIX}gcc + SRS_TOOL_CXX=${SRS_CROSS_BUILD_PREFIX}g++ + SRS_TOOL_AR=${SRS_CROSS_BUILD_PREFIX}ar + SRS_TOOL_LD=${SRS_CROSS_BUILD_PREFIX}ld + SRS_TOOL_RANDLIB=${SRS_CROSS_BUILD_PREFIX}randlib + if [[ $SRS_CROSS_BUILD_ARCH == "" ]]; then + echo $SRS_TOOL_CC| grep arm >/dev/null 2>&1 && SRS_CROSS_BUILD_ARCH="arm" + echo $SRS_TOOL_CC| grep aarch64 >/dev/null 2>&1 && SRS_CROSS_BUILD_ARCH="aarch64" + echo $SRS_TOOL_CC| grep mipsel >/dev/null 2>&1 && SRS_CROSS_BUILD_ARCH="mipsel" + fi + echo "For cross build, host: $SRS_CROSS_BUILD_HOST, prefix: $SRS_CROSS_BUILD_PREFIX, arch: $SRS_CROSS_BUILD_ARCH, cpu: $SRS_CROSS_BUILD_CPU gcc: $SRS_TOOL_CC" fi if [[ $SRS_OSX == YES ]]; then @@ -513,6 +538,10 @@ function regenerate_options() { SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --debug=$(value2switch $SRS_DEBUG)" SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --debug-stats=$(value2switch $SRS_DEBUG_STATS)" SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --cross-build=$(value2switch $SRS_CROSS_BUILD)" + if [[ $SRS_CROSS_BUILD_ARCH != "" ]]; then SRS_AUTO_CONFIGURE="$SRS_AUTO_CONFIGURE --arch=$SRS_CROSS_BUILD_ARCH"; fi + if [[ $SRS_CROSS_BUILD_CPU != "" ]]; then SRS_AUTO_CONFIGURE="$SRS_AUTO_CONFIGURE --cpu=$SRS_CROSS_BUILD_CPU"; fi + if [[ $SRS_CROSS_BUILD_HOST != "" ]]; then SRS_AUTO_CONFIGURE="$SRS_AUTO_CONFIGURE --host=$SRS_CROSS_BUILD_HOST"; fi + if [[ $SRS_CROSS_BUILD_PREFIX != "" ]]; then SRS_AUTO_CONFIGURE="$SRS_AUTO_CONFIGURE --cross-prefix=$SRS_CROSS_BUILD_PREFIX"; fi if [[ $SRS_EXTRA_FLAGS != '' ]]; then SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --extra-flags=\\\"$SRS_EXTRA_FLAGS\\\""; fi if [[ $SRS_BUILD_TAG != '' ]]; then SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --build-tag=\\\"$SRS_BUILD_TAG\\\""; fi if [[ $SRS_TOOL_CC != '' ]]; then SRS_AUTO_CONFIGURE="${SRS_AUTO_CONFIGURE} --cc=$SRS_TOOL_CC"; fi diff --git a/trunk/doc/CHANGELOG.md b/trunk/doc/CHANGELOG.md index 90f6d8b45..a48d11927 100644 --- a/trunk/doc/CHANGELOG.md +++ b/trunk/doc/CHANGELOG.md @@ -26,7 +26,8 @@ The changelog for SRS. ## SRS 4.0 Changelog -* v4.0, 2021-10-03, Actions: Create source tar lik srs-server-4.0.165.tar.gz +* v4.0, 2021-10-03, Support --arch and --cross-prefix for cross compile. 4.0.166 +* v4.0, 2021-10-03, Actions: Create source tar file srs-server-4.0.165.tar.gz * v4.0, 2021-09-23, Merge [#2578](https://github.com/ossrs/srs/pull/2578) Support http callback on_play/stop. 4.0.163 * v4.0, 2021-09-23, Merge [#2618](https://github.com/ossrs/srs/pull/2618) to fix FUA bug. * v4.0, 2021-09-05, RTC: Merge [#2581](https://github.com/ossrs/srs/pull/2581), Fix listen ipv6 and port. 4.0.161 diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp index d9a5b77b8..7bb505872 100644 --- a/trunk/src/core/srs_core.hpp +++ b/trunk/src/core/srs_core.hpp @@ -81,10 +81,9 @@ } \ (void)0 -// Checking for st(state-threads), only support the following cpus: i386/amd64/x86_64/arm -// @reamrk To patch ST for arm, read https://github.com/ossrs/state-threads/issues/1 -#if !defined(__amd64__) && !defined(__x86_64__) && !defined(__i386__) && !defined(__arm__) && !defined(__aarch64__) - #error "only support i386/amd64/x86_64/arm cpu" +// Check CPU for ST(state-threads), please read https://github.com/ossrs/state-threads/issues/22 +#if !defined(__amd64__) && !defined(__x86_64__) && !defined(__i386__) && !defined(__arm__) && !defined(__aarch64__) && !defined(__mips__) + #error "Only support i386/amd64/x86_64/arm/aarch64/mips cpu" #endif // Error predefined for all modules. diff --git a/trunk/src/core/srs_core_version4.hpp b/trunk/src/core/srs_core_version4.hpp index 6ae8a3710..ad8805c9a 100644 --- a/trunk/src/core/srs_core_version4.hpp +++ b/trunk/src/core/srs_core_version4.hpp @@ -9,6 +9,6 @@ #define VERSION_MAJOR 4 #define VERSION_MINOR 0 -#define VERSION_REVISION 165 +#define VERSION_REVISION 166 #endif diff --git a/trunk/src/core/srs_core_version5.hpp b/trunk/src/core/srs_core_version5.hpp index 7f55002e2..8d8d06e93 100644 --- a/trunk/src/core/srs_core_version5.hpp +++ b/trunk/src/core/srs_core_version5.hpp @@ -9,6 +9,6 @@ #define VERSION_MAJOR 5 #define VERSION_MINOR 0 -#define VERSION_REVISION 14 +#define VERSION_REVISION 15 #endif