Skip to content

Commit

Permalink
For #1547, refine configure, remove some macros
Browse files Browse the repository at this point in the history
  • Loading branch information
winlinvip committed Jan 20, 2020
1 parent 84d69a5 commit 024433f
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 217 deletions.
3 changes: 0 additions & 3 deletions trunk/auto/auto_headers.sh
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,6 @@ function srs_undefine_macro()
}

# export the preset.
if [ $SRS_OSX = YES ]; then
srs_define_macro "SRS_OSX" $SRS_AUTO_HEADERS_H
fi
if [ $SRS_X86_X64 = YES ]; then
srs_define_macro "SRS_X86_X64" $SRS_AUTO_HEADERS_H
fi
Expand Down
106 changes: 4 additions & 102 deletions trunk/auto/depends.sh
Original file line number Diff line number Diff line change
Expand Up @@ -185,101 +185,11 @@ fi
#####################################################################################
# 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.
function sed_utility() {
if [ $OS_IS_OSX = YES ]; then
sed -i '' "$@"
else
sed -i "$@"
fi

sed -i "$@"
ret=$?; if [[ $ret -ne 0 ]]; then
if [ $OS_IS_OSX = YES ]; then
echo "sed -i '' \"$@\""
else
echo "sed -i \"$@\""
fi
echo "sed -i \"$@\""
return $ret
fi
}
Expand All @@ -294,7 +204,7 @@ SED="sed_utility" && echo "SED is $SED"
# directly build on arm/mips, for example, pi or cubie,
# export srs-librtmp
# 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
echo "Your OS `uname -s` is not supported."
exit 1
Expand All @@ -307,10 +217,6 @@ fi
if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
# check the cross build flag file, if flag changed, need to rebuild the st.
_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
_ST_EXTRA_CFLAGS="$_ST_EXTRA_CFLAGS -DMD_VALGRIND"
fi
Expand Down Expand Up @@ -416,10 +322,6 @@ fi
# openssl, for rtmp complex handshake
#####################################################################################
# extra configure options
CONFIGURE_TOOL="./config"
if [ $SRS_OSX = YES ]; then
CONFIGURE_TOOL="./Configure darwin64-`uname -m`-cc"
fi
OPENSSL_HOTFIX="-DOPENSSL_NO_HEARTBEATS"
# @see http://www.openssl.org/news/secadv/20140407.txt
# Affected users should upgrade to OpenSSL 1.1.0e. Users unable to immediately
Expand All @@ -442,7 +344,7 @@ if [ $SRS_SSL = YES ]; then
(
rm -rf ${SRS_OBJS}/openssl-1.1.0e && cd ${SRS_OBJS} &&
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 &&
cd .. && rm -rf openssl && ln -sf openssl-1.1.0e/_release openssl
)
Expand Down
7 changes: 0 additions & 7 deletions trunk/auto/generate-srs-librtmp-single.sh
Original file line number Diff line number Diff line change
@@ -1,12 +1,5 @@
#!/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
# package the whole project to srs_librtmp.h and srs_librtmp.cpp
#
Expand Down
158 changes: 60 additions & 98 deletions trunk/auto/options.sh
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ SRS_VALGRIND=NO
SRS_X86_X64=NO
# for osx system
SRS_OSX=NO
SRS_ALLOW_OSX=NO
# dev, open all features for dev, no gperf/prof/arm.
SRS_DEV=NO
# dev, open main server feature for dev, no utest/research/librtmp
Expand All @@ -98,7 +97,7 @@ SRS_DISABLE_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

#####################################################################################
Expand All @@ -107,106 +106,79 @@ SRS_CROSS_BUILD=NO
function show_help() {
cat << END
Options:
-h, --help print this message
--with-ssl enable rtmp complex handshake, requires openssl-devel installed.
--with-hds enable hds streaming, mux RTMP to F4M/F4V files.
--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.
--without-hds disable hds, the adobe http dynamic streaming.
--without-nginx disable delivery HTTP stream with nginx.
--without-stream-caster disable stream caster, only listen and serve RTMP/HTTP.
--without-ffmpeg disable the ffmpeg transcode tool feature.
--without-transcode disable the transcoding feature.
--without-ingest disable the ingest feature.
--without-stat disable the data statistic feature.
--without-librtmp disable srs-librtmp, library for client.
--without-research do not build the research tools.
--without-utest do not build the utest for SRS.
--without-gperf do not build SRS with gperf tools(without tcmalloc and gmd/gmc/gmp/gcp).
--without-gmc do not build memory check for SRS with gperf tools.
--without-gmd do not build memory defense for SRS with gperf tools.
--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).
--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.
Presets:
--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
Features:
-h, --help Print this message and exit 0.
--with-ssl Enable rtmp complex handshake, requires openssl-devel installed.
--with-hds Enable hds streaming, mux RTMP to F4M/F4V files.
--with-stream-caster Enable stream caster to serve other stream over other protocol.
--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.
--without-ssl Disable rtmp complex handshake.
--without-hds Disable hds, the adobe http dynamic streaming.
--without-stream-caster Disable stream caster, only listen and serve RTMP/HTTP.
--without-stat Disable the data statistic feature.
--without-librtmp Disable srs-librtmp, library for client.
--without-research Do not build the research tools.
--without-utest Do not build the utest for SRS.
--prefix=<path> The absolute installation path for srs. Default: $SRS_PREFIX
--static Whether add '-static' to link options.
--gcov Whether enable the GCOV compiler options.
--jobs[=N] Allow N jobs at once; infinite jobs with no arg.
used for make in the configure, for example, to make ffmpeg.
--log-verbose whether enable the log verbose level. default: no.
--log-info whether enable the log info level. default: no.
--log-trace whether enable the log trace level. default: yes.
Presets:
--x86-x64 [default] for x86/x64 cpu, common pc and servers.
--osx for osx(darwin) system to build SRS.
--pi for raspberry-pi(directly build), open features hls/ssl/static.
--cubie for cubieboard(directly build), open features except ffmpeg/nginx.
--arm alias for --with-arm-ubuntu12, for ubuntu12, arm crossbuild
--mips alias for --with-mips-ubuntu12, for ubuntu12, mips crossbuild
--fast the most fast compile, nothing, only support vp6 RTMP.
--pure-rtmp only support RTMP with ssl.
--disable-all disable all features, only support vp6 RTMP.
--dev for dev, open all features, no nginx/gperf/gprof/arm.
--fast-dev for dev fast compile, the RTMP server, without librtmp/utest/research.
--demo for srs demo, @see: https://github.com/ossrs/srs/wiki/v1_CN_SampleDemo
--full enable all features, no gperf/gprof/arm.
--x86-64 alias for --x86-x64.
Used for make in the configure, for example, to make ffmpeg.
--log-verbose Whether enable the log verbose level. default: no.
--log-info Whether enable the log info level. default: no.
--log-trace Whether enable the log trace level. default: yes.
Performance:
https://blog.csdn.net/win_lin/article/details/53503869
--with-valgrind Support valgrind for memory check.
--with-gperf Build SRS with gperf tools(no gmd/gmc/gmp/gcp, with tcmalloc only).
--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).
--without-valgrind Do not support valgrind for memory check.
--without-gperf Do not build SRS with gperf tools(without tcmalloc and gmd/gmc/gmp/gcp).
--without-gmc Do not build memory check for SRS with gperf tools.
--without-gmd Do not build memory defense for SRS with gperf tools.
--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:
--extra-flags=<EFLAGS> Set EFLAGS as CFLAGS and CXXFLAGS. Pass 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.
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.
Conflicts:
1. --with-gmc vs --with-gmp:
@see: http://google-perftools.googlecode.com/svn/trunk/doc/heap_checker.html
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:
the complex tools not available for arm.
The complex tools not available for arm.
Experts:
--use-sys-ssl donot 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-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.
--use-sys-ssl Do not compile ssl, use system ssl(-lssl) if required.
--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.
Workflow:
1. apply "Presets". if not specified, use default preset.
2. apply "Options". user specified option will override the preset.
3. check conflicts. @see Conflicts section.
4. generate detail features.
1. Apply "Presets". if not specified, use default preset.
2. Apply "Features", "Performance" and others. user specified option will override the preset.
3. Check conflicts, fail if exists conflicts.
4. Generate Makefile.
Remark:
1. For performance improving, read https://blog.csdn.net/win_lin/article/details/53503869
Expand Down Expand Up @@ -271,7 +243,7 @@ function parse_user_option() {
--x86-x64) SRS_X86_X64=YES ;;
--x86-64) SRS_X86_X64=YES ;;
--osx) SRS_OSX=YES ;;
--allow-osx) SRS_ALLOW_OSX=YES ;;
--allow-osx) SRS_OSX=YES ;;
--arm) SRS_CROSS_BUILD=YES ;;
--mips) SRS_CROSS_BUILD=YES ;;
--pi) SRS_PI=YES ;;
Expand Down Expand Up @@ -608,15 +580,5 @@ function check_option_conflicts() {
if [ $__check_ok = NO ]; then
exit 1;
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
6 changes: 0 additions & 6 deletions trunk/auto/utest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,6 @@ GTEST_DIR=${SRS_TRUNK_PREFIX}/${SRS_OBJS_DIR}/gtest
# the extra defines to compile utest.
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}
# user must run make the ${SRS_OBJS_DIR}/utest dir
# at the same dir of Makefile.
Expand Down
2 changes: 1 addition & 1 deletion trunk/configure
Original file line number Diff line number Diff line change
Expand Up @@ -568,7 +568,7 @@ if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
echo ""
echo "Configure summary:"
echo " ${SRS_AUTO_USER_CONFIGURE}"
echo " ${SRS_AUTO_CONFIGURE}"
echo " ${SRS_AUTO_CONFIGURE}"
if [ $SRS_HLS = YES ]; then
echo -e "${GREEN}HLS is enabled.${BLACK}"
else
Expand Down

0 comments on commit 024433f

Please sign in to comment.