diff --git a/trunk/auto/auto_headers.sh b/trunk/auto/auto_headers.sh index 10e76e99f..10b2afb77 100755 --- a/trunk/auto/auto_headers.sh +++ b/trunk/auto/auto_headers.sh @@ -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 diff --git a/trunk/auto/depends.sh b/trunk/auto/depends.sh index dd4471f62..7d301b637 100755 --- a/trunk/auto/depends.sh +++ b/trunk/auto/depends.sh @@ -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 } @@ -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 @@ -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 @@ -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 @@ -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 ) diff --git a/trunk/auto/generate-srs-librtmp-single.sh b/trunk/auto/generate-srs-librtmp-single.sh index 6def4b9a4..cb2174daa 100755 --- a/trunk/auto/generate-srs-librtmp-single.sh +++ b/trunk/auto/generate-srs-librtmp-single.sh @@ -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 # diff --git a/trunk/auto/options.sh b/trunk/auto/options.sh index d19e18356..e6c40439c 100755 --- a/trunk/auto/options.sh +++ b/trunk/auto/options.sh @@ -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 @@ -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 ##################################################################################### @@ -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= 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. + 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. +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= Set EFLAGS as CFLAGS and CXXFLAGS. Pass to ST as EXTRA_CFLAGS. + https://github.com/ossrs/srs/issues/1547#issuecomment-576078411 + --extra-flags= 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: 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= export srs-librtmp to specified project in path. - --export-librtmp-single= 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= Export srs-librtmp to specified project in path. + --export-librtmp-single= 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 @@ -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 ;; @@ -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 diff --git a/trunk/auto/utest.sh b/trunk/auto/utest.sh index d658bf7f4..18b4978cd 100755 --- a/trunk/auto/utest.sh +++ b/trunk/auto/utest.sh @@ -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. diff --git a/trunk/configure b/trunk/configure index 3b366397f..876e3daa0 100755 --- a/trunk/configure +++ b/trunk/configure @@ -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