1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

For #1547, refine configure, remove some macros

This commit is contained in:
winlin 2020-01-20 10:44:46 +08:00
parent 84d69a51a4
commit 024433f327
6 changed files with 63 additions and 215 deletions

View file

@ -40,9 +40,6 @@ function srs_undefine_macro()
} }
# export the preset. # export the preset.
if [ $SRS_OSX = YES ]; then
srs_define_macro "SRS_OSX" $SRS_AUTO_HEADERS_H
fi
if [ $SRS_X86_X64 = YES ]; then if [ $SRS_X86_X64 = YES ]; then
srs_define_macro "SRS_X86_X64" $SRS_AUTO_HEADERS_H srs_define_macro "SRS_X86_X64" $SRS_AUTO_HEADERS_H
fi fi

View file

@ -185,101 +185,11 @@ fi
##################################################################################### #####################################################################################
# for Centos, auto install tools by yum # for Centos, auto install tools by yum
##################################################################################### #####################################################################################
OS_IS_OSX=NO
function OSX_prepare()
{
uname -s|grep Darwin >/dev/null 2>&1
ret=$?; if [[ 0 -ne $ret ]]; then
if [ $SRS_OSX = YES ]; then
echo "Current OS `uname -s` is not OSX, please check your configure options."
exit 1;
fi
return 0;
fi
OS_IS_OSX=YES
echo "Installing tools for OSX."
# requires the osx when os
if [ $OS_IS_OSX = YES ]; then
if [ $SRS_OSX = NO ]; then
echo "Invalid configure options for OSX, please specify --osx."
exit 1
fi
fi
brew --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
echo "Installing brew."
echo "ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\""
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
echo "The brew is installed."
fi
gcc --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
echo "Installing gcc."
echo "brew install gcc"
brew install gcc; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
echo "The gcc is installed."
fi
g++ --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
echo "Installing gcc-c++."
echo "brew install gcc-c++"
brew install gcc-c++; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
echo "The gcc-c++ is installed."
fi
make --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
echo "Installing make."
echo "brew install make"
brew install make; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
echo "The make is installed."
fi
patch --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
echo "Installing patch."
echo "brew install patch"
brew install patch; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
echo "The patch is installed."
fi
unzip --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
echo "Installing unzip."
echo "brew install unzip"
brew install unzip; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
echo "The unzip is installed."
fi
if [[ $SRS_VALGRIND == YES ]]; then
valgrind --help >/dev/null 2>&1; ret=$?; if [[ 0 -ne $ret ]]; then
echo "Installing valgrind."
echo "brew install valgrind"
brew install valgrind; ret=$?; if [[ 0 -ne $ret ]]; then return $ret; fi
echo "The valgrind is installed."
fi
fi
echo "Tools for OSX are installed."
return 0
}
# donot prepare tools, for srs-librtmp depends only gcc and g++.
if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
OSX_prepare; ret=$?; if [[ 0 -ne $ret ]]; then echo "Install tools for OSX failed, ret=$ret"; exit $ret; fi
fi
# We must use a bash function instead of variable. # We must use a bash function instead of variable.
function sed_utility() { function sed_utility() {
if [ $OS_IS_OSX = YES ]; then
sed -i '' "$@"
else
sed -i "$@" sed -i "$@"
fi
ret=$?; if [[ $ret -ne 0 ]]; then ret=$?; if [[ $ret -ne 0 ]]; then
if [ $OS_IS_OSX = YES ]; then
echo "sed -i '' \"$@\""
else
echo "sed -i \"$@\"" echo "sed -i \"$@\""
fi
return $ret return $ret
fi fi
} }
@ -294,7 +204,7 @@ SED="sed_utility" && echo "SED is $SED"
# directly build on arm/mips, for example, pi or cubie, # directly build on arm/mips, for example, pi or cubie,
# export srs-librtmp # export srs-librtmp
# others is invalid. # others is invalid.
if [[ $OS_IS_UBUNTU = NO && $OS_IS_CENTOS = NO && $OS_IS_OSX = NO && $SRS_EXPORT_LIBRTMP_PROJECT = NO ]]; then if [[ $OS_IS_UBUNTU = NO && $OS_IS_CENTOS = NO && $SRS_EXPORT_LIBRTMP_PROJECT = NO ]]; then
if [[ $SRS_PI = NO && $SRS_CUBIE = NO && $SRS_CROSS_BUILD = NO ]]; then if [[ $SRS_PI = NO && $SRS_CUBIE = NO && $SRS_CROSS_BUILD = NO ]]; then
echo "Your OS `uname -s` is not supported." echo "Your OS `uname -s` is not supported."
exit 1 exit 1
@ -307,10 +217,6 @@ fi
if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
# check the cross build flag file, if flag changed, need to rebuild the st. # check the cross build flag file, if flag changed, need to rebuild the st.
_ST_MAKE=linux-debug && _ST_EXTRA_CFLAGS="-DMD_HAVE_EPOLL" _ST_MAKE=linux-debug && _ST_EXTRA_CFLAGS="-DMD_HAVE_EPOLL"
# for osx, use darwin for st, donot use epoll.
if [ $OS_IS_OSX = YES ]; then
_ST_MAKE=darwin-debug && _ST_EXTRA_CFLAGS="-DMD_HAVE_KQUEUE -I/usr/local/include"
fi
if [[ $SRS_VALGRIND == YES ]]; then if [[ $SRS_VALGRIND == YES ]]; then
_ST_EXTRA_CFLAGS="$_ST_EXTRA_CFLAGS -DMD_VALGRIND" _ST_EXTRA_CFLAGS="$_ST_EXTRA_CFLAGS -DMD_VALGRIND"
fi fi
@ -416,10 +322,6 @@ fi
# openssl, for rtmp complex handshake # openssl, for rtmp complex handshake
##################################################################################### #####################################################################################
# extra configure options # extra configure options
CONFIGURE_TOOL="./config"
if [ $SRS_OSX = YES ]; then
CONFIGURE_TOOL="./Configure darwin64-`uname -m`-cc"
fi
OPENSSL_HOTFIX="-DOPENSSL_NO_HEARTBEATS" OPENSSL_HOTFIX="-DOPENSSL_NO_HEARTBEATS"
# @see http://www.openssl.org/news/secadv/20140407.txt # @see http://www.openssl.org/news/secadv/20140407.txt
# Affected users should upgrade to OpenSSL 1.1.0e. Users unable to immediately # Affected users should upgrade to OpenSSL 1.1.0e. Users unable to immediately
@ -442,7 +344,7 @@ if [ $SRS_SSL = YES ]; then
( (
rm -rf ${SRS_OBJS}/openssl-1.1.0e && cd ${SRS_OBJS} && rm -rf ${SRS_OBJS}/openssl-1.1.0e && cd ${SRS_OBJS} &&
unzip -q ../3rdparty/openssl-1.1.0e.zip && cd openssl-1.1.0e && unzip -q ../3rdparty/openssl-1.1.0e.zip && cd openssl-1.1.0e &&
$CONFIGURE_TOOL --prefix=`pwd`/_release -no-shared no-threads $OPENSSL_HOTFIX && ./config --prefix=`pwd`/_release -no-shared no-threads $OPENSSL_HOTFIX &&
make && make install_sw && make && make install_sw &&
cd .. && rm -rf openssl && ln -sf openssl-1.1.0e/_release openssl cd .. && rm -rf openssl && ln -sf openssl-1.1.0e/_release openssl
) )

View file

@ -1,12 +1,5 @@
#!/bin/bash #!/bin/bash
OS_IS_OSX=NO
uname -s|grep Darwin >/dev/null 2>&1
ret=$?; if [[ 0 -eq $ret ]]; then
OS_IS_OSX=YES
fi
echo "Is OSX: ${OS_IS_OSX}"
# when export srs-librtmp single files # when export srs-librtmp single files
# package the whole project to srs_librtmp.h and srs_librtmp.cpp # package the whole project to srs_librtmp.h and srs_librtmp.cpp
# #

View file

@ -77,7 +77,6 @@ SRS_VALGRIND=NO
SRS_X86_X64=NO SRS_X86_X64=NO
# for osx system # for osx system
SRS_OSX=NO SRS_OSX=NO
SRS_ALLOW_OSX=NO
# dev, open all features for dev, no gperf/prof/arm. # dev, open all features for dev, no gperf/prof/arm.
SRS_DEV=NO SRS_DEV=NO
# dev, open main server feature for dev, no utest/research/librtmp # dev, open main server feature for dev, no utest/research/librtmp
@ -98,7 +97,7 @@ SRS_DISABLE_ALL=NO
SRS_ENABLE_ALL=NO SRS_ENABLE_ALL=NO
# #
##################################################################################### #####################################################################################
# We don't support crossbuild for ARM/MIPS, please directly build it on ARM/MIPS server. # Whether enable crossbuild for ARM or MIPS.
SRS_CROSS_BUILD=NO SRS_CROSS_BUILD=NO
##################################################################################### #####################################################################################
@ -107,106 +106,79 @@ SRS_CROSS_BUILD=NO
function show_help() { function show_help() {
cat << END cat << END
Options: Presets:
-h, --help print this message --x86-64, --x86-x64 [default] For x86/x64 cpu, common pc and servers.
--arm Enable crossbuild for ARM, should also set bellow toolchain options.
--mips Enable crossbuild for MIPS
--with-ssl enable rtmp complex handshake, requires openssl-devel installed. Features:
--with-hds enable hds streaming, mux RTMP to F4M/F4V files. -h, --help Print this message and exit 0.
--with-nginx enable delivery HTTP stream with nginx.
--with-stream-caster enable stream caster to serve other stream over other protocol.
--with-ffmpeg enable transcoding tool ffmpeg.
--with-transcode enable transcoding features.
--with-ingest enable ingest features.
--with-stat enable the data statistic, for http api.
--with-librtmp enable srs-librtmp, library for client.
--with-research build the research tools.
--with-utest build the utest for SRS.
--with-gperf build SRS with gperf tools(no gmd/gmc/gmp/gcp, with tcmalloc only).
https://blog.csdn.net/win_lin/article/details/53503869
--with-gmc build memory check for SRS with gperf tools.
--with-gmd build memory defense(corrupt memory) for SRS with gperf tools.
--with-gmp build memory profile for SRS with gperf tools.
--with-gcp build cpu profile for SRS with gperf tools.
--with-gprof build SRS with gprof(GNU profile tool).
--with-arm-ubuntu12 cross build SRS on ubuntu12 for armhf(v7cpu).
--with-mips-ubuntu12 cross build SRS on ubuntu12 for mips.
--without-ssl disable rtmp complex handshake. --with-ssl Enable rtmp complex handshake, requires openssl-devel installed.
--without-hds disable hds, the adobe http dynamic streaming. --with-hds Enable hds streaming, mux RTMP to F4M/F4V files.
--without-nginx disable delivery HTTP stream with nginx. --with-stream-caster Enable stream caster to serve other stream over other protocol.
--without-stream-caster disable stream caster, only listen and serve RTMP/HTTP. --with-stat Enable the data statistic, for http api.
--without-ffmpeg disable the ffmpeg transcode tool feature. --with-librtmp Enable srs-librtmp, library for client.
--without-transcode disable the transcoding feature. --with-research Build the research tools.
--without-ingest disable the ingest feature. --with-utest Build the utest for SRS.
--without-stat disable the data statistic feature.
--without-librtmp disable srs-librtmp, library for client. --without-ssl Disable rtmp complex handshake.
--without-research do not build the research tools. --without-hds Disable hds, the adobe http dynamic streaming.
--without-utest do not build the utest for SRS. --without-stream-caster Disable stream caster, only listen and serve RTMP/HTTP.
--without-gperf do not build SRS with gperf tools(without tcmalloc and gmd/gmc/gmp/gcp). --without-stat Disable the data statistic feature.
--without-gmc do not build memory check for SRS with gperf tools. --without-librtmp Disable srs-librtmp, library for client.
--without-gmd do not build memory defense for SRS with gperf tools. --without-research Do not build the research tools.
--without-gmp do not build memory profile for SRS with gperf tools. --without-utest Do not build the utest for SRS.
--without-gcp do not build cpu profile for SRS with gperf tools.
--without-gprof do not build srs with gprof(GNU profile tool).
--without-arm-ubuntu12 do not cross build srs on ubuntu12 for armhf(v7cpu).
--without-mips-ubuntu12 do not cross build srs on ubuntu12 for mips.
--prefix=<path> The absolute installation path for srs. Default: $SRS_PREFIX --prefix=<path> The absolute installation path for srs. Default: $SRS_PREFIX
--static Whether add '-static' to link options. --static Whether add '-static' to link options.
--gcov Whether enable the GCOV compiler options. --gcov Whether enable the GCOV compiler options.
--jobs[=N] Allow N jobs at once; infinite jobs with no arg. --jobs[=N] Allow N jobs at once; infinite jobs with no arg.
used for make in the configure, for example, to make ffmpeg. Used for make in the configure, for example, to make ffmpeg.
--log-verbose whether enable the log verbose level. default: no. --log-verbose Whether enable the log verbose level. default: no.
--log-info whether enable the log info level. default: no. --log-info Whether enable the log info level. default: no.
--log-trace whether enable the log trace level. default: yes. --log-trace Whether enable the log trace level. default: yes.
Presets: Performance:
--x86-x64 [default] for x86/x64 cpu, common pc and servers. https://blog.csdn.net/win_lin/article/details/53503869
--osx for osx(darwin) system to build SRS. --with-valgrind Support valgrind for memory check.
--pi for raspberry-pi(directly build), open features hls/ssl/static. --with-gperf Build SRS with gperf tools(no gmd/gmc/gmp/gcp, with tcmalloc only).
--cubie for cubieboard(directly build), open features except ffmpeg/nginx. --with-gmc Build memory check for SRS with gperf tools.
--arm alias for --with-arm-ubuntu12, for ubuntu12, arm crossbuild --with-gmd Build memory defense(corrupt memory) for SRS with gperf tools.
--mips alias for --with-mips-ubuntu12, for ubuntu12, mips crossbuild --with-gmp Build memory profile for SRS with gperf tools.
--fast the most fast compile, nothing, only support vp6 RTMP. --with-gcp Build cpu profile for SRS with gperf tools.
--pure-rtmp only support RTMP with ssl. --with-gprof Build SRS with gprof(GNU profile tool).
--disable-all disable all features, only support vp6 RTMP.
--dev for dev, open all features, no nginx/gperf/gprof/arm. --without-valgrind Do not support valgrind for memory check.
--fast-dev for dev fast compile, the RTMP server, without librtmp/utest/research. --without-gperf Do not build SRS with gperf tools(without tcmalloc and gmd/gmc/gmp/gcp).
--demo for srs demo, @see: https://github.com/ossrs/srs/wiki/v1_CN_SampleDemo --without-gmc Do not build memory check for SRS with gperf tools.
--full enable all features, no gperf/gprof/arm. --without-gmd Do not build memory defense for SRS with gperf tools.
--x86-64 alias for --x86-x64. --without-gmp Do not build memory profile for SRS with gperf tools.
--without-gcp Do not build cpu profile for SRS with gperf tools.
--without-gprof Do not build srs with gprof(GNU profile tool).
Toolchain options: Toolchain options:
--extra-flags=<EFLAGS> Set EFLAGS as CFLAGS and CXXFLAGS. Pass to ST as EXTRA_CFLAGS. https://github.com/ossrs/srs/issues/1547#issuecomment-576078411
--extra-flags=<EFLAGS> Set EFLAGS as CFLAGS and CXXFLAGS. Also passed to ST as EXTRA_CFLAGS.
Recomment to enable:
--with-http-api enable HTTP API, to communicate with SRS.
--with-http-callback enable HTTP hooks, build cherrypy as demo api server.
--with-http-server enable HTTP server to delivery http stream.
--with-hls enable HLS streaming, mux RTMP to M3U8/TS files.
--with-dvr enable DVR, record RTMP to FLV/MP4 files.
Conflicts: Conflicts:
1. --with-gmc vs --with-gmp: 1. --with-gmc vs --with-gmp:
@see: http://google-perftools.googlecode.com/svn/trunk/doc/heap_checker.html @see: http://google-perftools.googlecode.com/svn/trunk/doc/heap_checker.html
2. --with-gperf/gmc/gmp vs --with-gprof: 2. --with-gperf/gmc/gmp vs --with-gprof:
gperftools not compatible with gprof. The gperftools not compatible with gprof.
3. --arm vs --with-ffmpeg/gperf/gmc/gmp/gprof: 3. --arm vs --with-ffmpeg/gperf/gmc/gmp/gprof:
the complex tools not available for arm. The complex tools not available for arm.
Experts: Experts:
--use-sys-ssl donot compile ssl, use system ssl(-lssl) if required. --use-sys-ssl Do not compile ssl, use system ssl(-lssl) if required.
--memory-watch enable memory watch to detect memory leaking(hurts performance). --export-librtmp-project=<path> Export srs-librtmp to specified project in path.
--export-librtmp-project=<path> export srs-librtmp to specified project in path. --export-librtmp-single=<path> Export srs-librtmp to a single file(.h+.cpp) in path.
--export-librtmp-single=<path> export srs-librtmp to a single file(.h+.cpp) in path.
--with-valgrind support valgrind for memory check.
--without-valgrind donot support valgrind for memory check.
Workflow: Workflow:
1. apply "Presets". if not specified, use default preset. 1. Apply "Presets". if not specified, use default preset.
2. apply "Options". user specified option will override the preset. 2. Apply "Features", "Performance" and others. user specified option will override the preset.
3. check conflicts. @see Conflicts section. 3. Check conflicts, fail if exists conflicts.
4. generate detail features. 4. Generate Makefile.
Remark: Remark:
1. For performance improving, read https://blog.csdn.net/win_lin/article/details/53503869 1. For performance improving, read https://blog.csdn.net/win_lin/article/details/53503869
@ -271,7 +243,7 @@ function parse_user_option() {
--x86-x64) SRS_X86_X64=YES ;; --x86-x64) SRS_X86_X64=YES ;;
--x86-64) SRS_X86_X64=YES ;; --x86-64) SRS_X86_X64=YES ;;
--osx) SRS_OSX=YES ;; --osx) SRS_OSX=YES ;;
--allow-osx) SRS_ALLOW_OSX=YES ;; --allow-osx) SRS_OSX=YES ;;
--arm) SRS_CROSS_BUILD=YES ;; --arm) SRS_CROSS_BUILD=YES ;;
--mips) SRS_CROSS_BUILD=YES ;; --mips) SRS_CROSS_BUILD=YES ;;
--pi) SRS_PI=YES ;; --pi) SRS_PI=YES ;;
@ -608,15 +580,5 @@ function check_option_conflicts() {
if [ $__check_ok = NO ]; then if [ $__check_ok = NO ]; then
exit 1; exit 1;
fi fi
if [[ $SRS_OSX == YES && $SRS_ALLOW_OSX == NO ]]; then
macOSVersion=`sw_vers -productVersion`
macOSVersionMajor=`echo $macOSVersion|awk -F '.' '{print $1}'`
macOSVersionMinor=`echo $macOSVersion|awk -F '.' '{print $2}'`
if [[ $macOSVersionMajor -ge 10 && $macOSVersionMinor -ge 14 ]]; then
echo "macOS $macOSVersion is not supported, read https://github.com/ossrs/srs/issues/1250"
exit -1
fi
fi
} }
check_option_conflicts check_option_conflicts

View file

@ -23,12 +23,6 @@ GTEST_DIR=${SRS_TRUNK_PREFIX}/${SRS_OBJS_DIR}/gtest
# the extra defines to compile utest. # the extra defines to compile utest.
EXTRA_DEFINES="" EXTRA_DEFINES=""
# for osx to disable the error.
# gtest/include/gtest/internal/gtest-port.h:499:13: fatal error: 'tr1/tuple' file not found
if [ $SRS_OSX = YES ]; then
EXTRA_DEFINES="$EXTRA_DEFINES -DGTEST_HAS_TR1_TUPLE=0"
fi
cat << END > ${FILE} cat << END > ${FILE}
# user must run make the ${SRS_OBJS_DIR}/utest dir # user must run make the ${SRS_OBJS_DIR}/utest dir
# at the same dir of Makefile. # at the same dir of Makefile.