From 688890cd7ac9e416b2890eb9eb3d35747c3e19b3 Mon Sep 17 00:00:00 2001 From: winlin Date: Sat, 7 Mar 2015 16:37:29 +0800 Subject: [PATCH] refine configure, generate objs/makefile first. --- trunk/configure | 318 ++++++++++++++++++++++++------------------------ 1 file changed, 159 insertions(+), 159 deletions(-) diff --git a/trunk/configure b/trunk/configure index 03a34a676..aded307f1 100755 --- a/trunk/configure +++ b/trunk/configure @@ -48,6 +48,165 @@ if [ $SRS_SSL = YES ]; then SrsLibrtmpSampleEntry="ssl";fi SrsUtestMakeEntry="@echo -e \"ignore utest for it's disabled\"" if [ $SRS_UTEST = YES ]; then SrsUtestMakeEntry="(cd ${SRS_OBJS_DIR}/utest; \$(MAKE))"; fi +##################################################################################### +# build tools or compiler args. +# enable gdb debug +GDBDebug=" -g -O0" +# the warning level. +WarnLevel=" -Wall" +# the compile standard. +CppStd="-ansi" +# for library compile +LibraryCompile=" -fPIC" +# performance of gprof +SrsGprof=""; SrsGprofLink=""; if [ $SRS_GPROF = YES ]; then SrsGprof=" -pg -lc_p"; SrsGprofLink=" -pg"; fi +# performance of gperf +SrsGperf=""; SrsGperfLink=""; if [ $SRS_GPERF = YES ]; then SrsGperfLink=" -lpthread"; fi +# the cxx flag generated. +CXXFLAGS="${CppStd}${WarnLevel}${GDBDebug}${LibraryCompile}${SrsGprof}" +if [ $SRS_GPERF = YES ]; then CXXFLAGS="${CXXFLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free"; fi +cat << END > ${SRS_OBJS}/${SRS_MAKEFILE} +GCC = gcc +CXX = g++ +AR = ar +LINK = g++ +CXXFLAGS = ${CXXFLAGS} + +.PHONY: default srs librtmp + +default: + +END + +##################################################################################### +# Libraries, external library to build in srs, +# header(.h): add to ModuleLibIncs if need the specified library. for example, LibSTRoot +# library(.a): add to ModuleLibFiles if binary need the specifeid library. for example, LibSTfile +# +# st(state-threads) the basic network library for SRS. +LibSTRoot="${SRS_OBJS_DIR}/st"; LibSTfile="${LibSTRoot}/libst.a" +# hp(http-parser) the http request/url parser, for SRS to support HTTP callback. +LibHttpParserRoot=""; LibHttpParserfile="" +if [ $SRS_HTTP_PARSER = YES ]; then LibHttpParserRoot="${SRS_OBJS_DIR}/hp"; LibHttpParserfile="${LibHttpParserRoot}/libhttp_parser.a"; fi +# openssl-1.0.1f, for the RTMP complex handshake. +LibSSLRoot="";LibSSLfile="" +if [ $SRS_SSL = YES ]; then if [ $SRS_USE_SYS_SSL = NO ]; then LibSSLRoot="${SRS_OBJS_DIR}/openssl/include"; LibSSLfile="${SRS_OBJS_DIR}/openssl/lib/libssl.a ${SRS_OBJS_DIR}/openssl/lib/libcrypto.a"; fi fi +# gperftools-2.1, for mem check and mem/cpu profile +LibGperfRoot=""; LibGperfFile="" +if [ $SRS_GPERF = YES ]; then LibGperfRoot="${SRS_OBJS_DIR}/gperf/include"; LibGperfFile="${SRS_OBJS_DIR}/gperf/lib/libtcmalloc_and_profiler.a"; fi +# the link options, always use static link +SrsLinkOptions="-ldl"; +if [ $SRS_SSL = YES ]; then if [ $SRS_USE_SYS_SSL = YES ]; then SrsLinkOptions="${SrsLinkOptions} -lssl"; fi fi +# if static specified, add static +# TODO: FIXME: remove static. +if [ $SRS_STATIC = YES ]; then SrsLinkOptions="${SrsLinkOptions} -static"; fi +# if mips, add -lgcc_eh, or stl compile failed. +if [ $SRS_MIPS_UBUNTU12 = YES ]; then SrsLinkOptions="${SrsLinkOptions} -lgcc_eh"; fi + +##################################################################################### +# Modules, compile each module, then link to binary +# +#Core, depends only on system apis. +MODULE_ID="CORE" +MODULE_DEPENDS=() +ModuleLibIncs=(${SRS_OBJS_DIR}) +MODULE_FILES=("srs_core" "srs_core_autofree" "srs_core_performance") +CORE_INCS="src/core"; MODULE_DIR=${CORE_INCS} . auto/modules.sh +CORE_OBJS="${MODULE_OBJS[@]}" +# +#Kernel, depends on core, provides error/log/config, nothing about stream information. +MODULE_ID="KERNEL" +MODULE_DEPENDS=("CORE") +ModuleLibIncs=(${SRS_OBJS_DIR}) +MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_stream" + "srs_kernel_utility" "srs_kernel_flv" "srs_kernel_codec" "srs_kernel_file" + "srs_kernel_consts" "srs_kernel_aac" "srs_kernel_mp3" "srs_kernel_ts" + "srs_kernel_buffer") +KERNEL_INCS="src/kernel"; MODULE_DIR=${KERNEL_INCS} . auto/modules.sh +KERNEL_OBJS="${MODULE_OBJS[@]}" +# +#RTMP Protocol, depends on core/kernel, provides rtmp/htttp protocol features. +MODULE_ID="RTMP" +MODULE_DEPENDS=("CORE" "KERNEL") +ModuleLibIncs=(${SRS_OBJS_DIR} ${LibSSLRoot}) +MODULE_FILES=("srs_rtmp_amf0" "srs_rtmp_io" "srs_rtmp_stack" "srs_rtmp_sdk" + "srs_rtmp_handshake" "srs_rtmp_utility" "srs_rtmp_msg_array" "srs_rtmp_buffer" + "srs_raw_avc" "srs_rtsp_stack") +RTMP_INCS="src/protocol"; MODULE_DIR=${RTMP_INCS} . auto/modules.sh +RTMP_OBJS="${MODULE_OBJS[@]}" +# +#App Module +if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then + MODULE_ID="APP" + MODULE_DEPENDS=("CORE" "KERNEL" "RTMP") + ModuleLibIncs=(${LibSTRoot} ${LibHttpParserRoot} ${SRS_OBJS_DIR}) + MODULE_FILES=("srs_app_server" "srs_app_conn" "srs_app_rtmp_conn" "srs_app_st_socket" "srs_app_source" + "srs_app_refer" "srs_app_hls" "srs_app_forward" "srs_app_encoder" "srs_app_http" + "srs_app_thread" "srs_app_bandwidth" "srs_app_st" "srs_app_log" "srs_app_config" + "srs_app_pithy_print" "srs_app_reload" "srs_app_http_api" "srs_app_http_conn" "srs_app_http_hooks" + "srs_app_json" "srs_app_ingest" "srs_app_ffmpeg" "srs_app_utility" "srs_app_dvr" "srs_app_edge" + "srs_app_kbps" "srs_app_heartbeat" "srs_app_empty" "srs_app_http_client" + "srs_app_recv_thread" "srs_app_security" "srs_app_statistic" + "srs_app_mpegts_udp" "srs_app_rtsp" "srs_app_listener") + APP_INCS="src/app"; MODULE_DIR=${APP_INCS} . auto/modules.sh + APP_OBJS="${MODULE_OBJS[@]}" +fi +# +#LIBS Module, build libsrs.a for static link. +MODULE_ID="LIBS" +MODULE_DEPENDS=("CORE" "KERNEL" "RTMP") +ModuleLibIncs=(${SRS_OBJS_DIR}) +MODULE_FILES=("srs_librtmp" "srs_lib_simple_socket" "srs_lib_bandwidth") +LIBS_INCS="src/libs"; MODULE_DIR=${LIBS_INCS} . auto/modules.sh +LIBS_OBJS="${MODULE_OBJS[@]}" +# +#Main Module +if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then + MODULE_ID="MAIN" + MODULE_DEPENDS=("CORE" "KERNEL" "RTMP" "APP") + ModuleLibIncs=(${LibSTRoot} ${SRS_OBJS_DIR} ${LibGperfRoot} ${LibHttpParserRoot}) + MODULE_FILES=("srs_main_server") + MAIN_INCS="src/main"; MODULE_DIR=${MAIN_INCS} . auto/modules.sh + MAIN_OBJS="${MODULE_OBJS[@]}" +fi + +##################################################################################### +# Binaries, main entrances, link the module and its depends modules, +# then link to a binary, for example, objs/srs +# +# disable all app when export librtmp +if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then + # all main entrances + MAIN_ENTRANCES=("srs_main_server") + # + # all depends libraries + ModuleLibFiles=(${LibSTfile} ${LibHttpParserfile} ${LibSSLfile} ${LibGperfFile}) + # all depends objects + MODULE_OBJS="${CORE_OBJS[@]} ${KERNEL_OBJS[@]} ${RTMP_OBJS[@]} ${APP_OBJS[@]} ${MAIN_OBJS[@]}" + LINK_OPTIONS="${SrsLinkOptions}${SrsGprofLink}${SrsGperfLink}" + # + # srs: + # srs(simple rtmp server) over st(state-threads) + BUILD_KEY="srs" APP_MAIN="srs_main_server" APP_NAME="srs" . auto/apps.sh +fi +# srs librtmp +if [ $SRS_LIBRTMP = YES ]; then + MODULE_OBJS="${CORE_OBJS[@]} ${KERNEL_OBJS[@]} ${RTMP_OBJS[@]} ${LIBS_OBJS[@]}" + BUILD_KEY="librtmp" LIB_NAME="lib/srs_librtmp" . auto/libs.sh +fi +# +# utest, the unit-test cases of srs, base on gtest1.6 +if [ $SRS_UTEST = YES ]; then + MODULE_FILES=("srs_utest" "srs_utest_amf0" "srs_utest_protocol" + "srs_utest_kernel" "srs_utest_core" "srs_utest_config" + "srs_utest_reload") + ModuleLibIncs=(${SRS_OBJS_DIR} ${LibSTRoot} ${LibSSLRoot}) + ModuleLibFiles=(${LibSTfile} ${LibHttpParserfile} ${LibSSLfile}) + MODULE_DEPENDS=("CORE" "KERNEL" "RTMP" "APP") + MODULE_OBJS="${CORE_OBJS[@]} ${KERNEL_OBJS[@]} ${RTMP_OBJS[@]} ${APP_OBJS[@]}" + LINK_OPTIONS="-lpthread ${SrsLinkOptions}" MODULE_DIR="src/utest" APP_NAME="srs_utest" . auto/utest.sh +fi + ##################################################################################### # generate colorful summary script . auto/summary.sh @@ -231,165 +390,6 @@ _prepare_dir: @mkdir -p ${SRS_OBJS_DIR} END -##################################################################################### -# build tools or compiler args. -# enable gdb debug -GDBDebug=" -g -O0" -# the warning level. -WarnLevel=" -Wall" -# the compile standard. -CppStd="-ansi" -# for library compile -LibraryCompile=" -fPIC" -# performance of gprof -SrsGprof=""; SrsGprofLink=""; if [ $SRS_GPROF = YES ]; then SrsGprof=" -pg -lc_p"; SrsGprofLink=" -pg"; fi -# performance of gperf -SrsGperf=""; SrsGperfLink=""; if [ $SRS_GPERF = YES ]; then SrsGperfLink=" -lpthread"; fi -# the cxx flag generated. -CXXFLAGS="${CppStd}${WarnLevel}${GDBDebug}${LibraryCompile}${SrsGprof}" -if [ $SRS_GPERF = YES ]; then CXXFLAGS="${CXXFLAGS} -fno-builtin-malloc -fno-builtin-calloc -fno-builtin-realloc -fno-builtin-free"; fi -cat << END > ${SRS_OBJS}/${SRS_MAKEFILE} -GCC = gcc -CXX = g++ -AR = ar -LINK = g++ -CXXFLAGS = ${CXXFLAGS} - -.PHONY: default srs librtmp - -default: - -END - -##################################################################################### -# Libraries, external library to build in srs, -# header(.h): add to ModuleLibIncs if need the specified library. for example, LibSTRoot -# library(.a): add to ModuleLibFiles if binary need the specifeid library. for example, LibSTfile -# -# st(state-threads) the basic network library for SRS. -LibSTRoot="${SRS_OBJS_DIR}/st"; LibSTfile="${LibSTRoot}/libst.a" -# hp(http-parser) the http request/url parser, for SRS to support HTTP callback. -LibHttpParserRoot=""; LibHttpParserfile="" -if [ $SRS_HTTP_PARSER = YES ]; then LibHttpParserRoot="${SRS_OBJS_DIR}/hp"; LibHttpParserfile="${LibHttpParserRoot}/libhttp_parser.a"; fi -# openssl-1.0.1f, for the RTMP complex handshake. -LibSSLRoot="";LibSSLfile="" -if [ $SRS_SSL = YES ]; then if [ $SRS_USE_SYS_SSL = NO ]; then LibSSLRoot="${SRS_OBJS_DIR}/openssl/include"; LibSSLfile="${SRS_OBJS_DIR}/openssl/lib/libssl.a ${SRS_OBJS_DIR}/openssl/lib/libcrypto.a"; fi fi -# gperftools-2.1, for mem check and mem/cpu profile -LibGperfRoot=""; LibGperfFile="" -if [ $SRS_GPERF = YES ]; then LibGperfRoot="${SRS_OBJS_DIR}/gperf/include"; LibGperfFile="${SRS_OBJS_DIR}/gperf/lib/libtcmalloc_and_profiler.a"; fi -# the link options, always use static link -SrsLinkOptions="-ldl"; -if [ $SRS_SSL = YES ]; then if [ $SRS_USE_SYS_SSL = YES ]; then SrsLinkOptions="${SrsLinkOptions} -lssl"; fi fi -# if static specified, add static -# TODO: FIXME: remove static. -if [ $SRS_STATIC = YES ]; then SrsLinkOptions="${SrsLinkOptions} -static"; fi -# if mips, add -lgcc_eh, or stl compile failed. -if [ $SRS_MIPS_UBUNTU12 = YES ]; then SrsLinkOptions="${SrsLinkOptions} -lgcc_eh"; fi - -##################################################################################### -# Modules, compile each module, then link to binary -# -#Core, depends only on system apis. -MODULE_ID="CORE" -MODULE_DEPENDS=() -ModuleLibIncs=(${SRS_OBJS_DIR}) -MODULE_FILES=("srs_core" "srs_core_autofree" "srs_core_performance") -CORE_INCS="src/core"; MODULE_DIR=${CORE_INCS} . auto/modules.sh -CORE_OBJS="${MODULE_OBJS[@]}" -# -#Kernel, depends on core, provides error/log/config, nothing about stream information. -MODULE_ID="KERNEL" -MODULE_DEPENDS=("CORE") -ModuleLibIncs=(${SRS_OBJS_DIR}) -MODULE_FILES=("srs_kernel_error" "srs_kernel_log" "srs_kernel_stream" - "srs_kernel_utility" "srs_kernel_flv" "srs_kernel_codec" "srs_kernel_file" - "srs_kernel_consts" "srs_kernel_aac" "srs_kernel_mp3" "srs_kernel_ts" - "srs_kernel_buffer") -KERNEL_INCS="src/kernel"; MODULE_DIR=${KERNEL_INCS} . auto/modules.sh -KERNEL_OBJS="${MODULE_OBJS[@]}" -# -#RTMP Protocol, depends on core/kernel, provides rtmp/htttp protocol features. -MODULE_ID="RTMP" -MODULE_DEPENDS=("CORE" "KERNEL") -ModuleLibIncs=(${SRS_OBJS_DIR} ${LibSSLRoot}) -MODULE_FILES=("srs_rtmp_amf0" "srs_rtmp_io" "srs_rtmp_stack" "srs_rtmp_sdk" - "srs_rtmp_handshake" "srs_rtmp_utility" "srs_rtmp_msg_array" "srs_rtmp_buffer" - "srs_raw_avc" "srs_rtsp_stack") -RTMP_INCS="src/protocol"; MODULE_DIR=${RTMP_INCS} . auto/modules.sh -RTMP_OBJS="${MODULE_OBJS[@]}" -# -#App Module -if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then - MODULE_ID="APP" - MODULE_DEPENDS=("CORE" "KERNEL" "RTMP") - ModuleLibIncs=(${LibSTRoot} ${LibHttpParserRoot} ${SRS_OBJS_DIR}) - MODULE_FILES=("srs_app_server" "srs_app_conn" "srs_app_rtmp_conn" "srs_app_st_socket" "srs_app_source" - "srs_app_refer" "srs_app_hls" "srs_app_forward" "srs_app_encoder" "srs_app_http" - "srs_app_thread" "srs_app_bandwidth" "srs_app_st" "srs_app_log" "srs_app_config" - "srs_app_pithy_print" "srs_app_reload" "srs_app_http_api" "srs_app_http_conn" "srs_app_http_hooks" - "srs_app_json" "srs_app_ingest" "srs_app_ffmpeg" "srs_app_utility" "srs_app_dvr" "srs_app_edge" - "srs_app_kbps" "srs_app_heartbeat" "srs_app_empty" "srs_app_http_client" - "srs_app_recv_thread" "srs_app_security" "srs_app_statistic" - "srs_app_mpegts_udp" "srs_app_rtsp" "srs_app_listener") - APP_INCS="src/app"; MODULE_DIR=${APP_INCS} . auto/modules.sh - APP_OBJS="${MODULE_OBJS[@]}" -fi -# -#LIBS Module, build libsrs.a for static link. -MODULE_ID="LIBS" -MODULE_DEPENDS=("CORE" "KERNEL" "RTMP") -ModuleLibIncs=(${SRS_OBJS_DIR}) -MODULE_FILES=("srs_librtmp" "srs_lib_simple_socket" "srs_lib_bandwidth") -LIBS_INCS="src/libs"; MODULE_DIR=${LIBS_INCS} . auto/modules.sh -LIBS_OBJS="${MODULE_OBJS[@]}" -# -#Main Module -if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then - MODULE_ID="MAIN" - MODULE_DEPENDS=("CORE" "KERNEL" "RTMP" "APP") - ModuleLibIncs=(${LibSTRoot} ${SRS_OBJS_DIR} ${LibGperfRoot} ${LibHttpParserRoot}) - MODULE_FILES=("srs_main_server") - MAIN_INCS="src/main"; MODULE_DIR=${MAIN_INCS} . auto/modules.sh - MAIN_OBJS="${MODULE_OBJS[@]}" -fi - -##################################################################################### -# Binaries, main entrances, link the module and its depends modules, -# then link to a binary, for example, objs/srs -# -# disable all app when export librtmp -if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then - # all main entrances - MAIN_ENTRANCES=("srs_main_server") - # - # all depends libraries - ModuleLibFiles=(${LibSTfile} ${LibHttpParserfile} ${LibSSLfile} ${LibGperfFile}) - # all depends objects - MODULE_OBJS="${CORE_OBJS[@]} ${KERNEL_OBJS[@]} ${RTMP_OBJS[@]} ${APP_OBJS[@]} ${MAIN_OBJS[@]}" - LINK_OPTIONS="${SrsLinkOptions}${SrsGprofLink}${SrsGperfLink}" - # - # srs: - # srs(simple rtmp server) over st(state-threads) - BUILD_KEY="srs" APP_MAIN="srs_main_server" APP_NAME="srs" . auto/apps.sh -fi -# srs librtmp -if [ $SRS_LIBRTMP = YES ]; then - MODULE_OBJS="${CORE_OBJS[@]} ${KERNEL_OBJS[@]} ${RTMP_OBJS[@]} ${LIBS_OBJS[@]}" - BUILD_KEY="librtmp" LIB_NAME="lib/srs_librtmp" . auto/libs.sh -fi -# -# utest, the unit-test cases of srs, base on gtest1.6 -if [ $SRS_UTEST = YES ]; then - MODULE_FILES=("srs_utest" "srs_utest_amf0" "srs_utest_protocol" - "srs_utest_kernel" "srs_utest_core" "srs_utest_config" - "srs_utest_reload") - ModuleLibIncs=(${SRS_OBJS_DIR} ${LibSTRoot} ${LibSSLRoot}) - ModuleLibFiles=(${LibSTfile} ${LibHttpParserfile} ${LibSSLfile}) - MODULE_DEPENDS=("CORE" "KERNEL" "RTMP" "APP") - MODULE_OBJS="${CORE_OBJS[@]} ${KERNEL_OBJS[@]} ${RTMP_OBJS[@]} ${APP_OBJS[@]}" - LINK_OPTIONS="-lpthread ${SrsLinkOptions}" MODULE_DIR="src/utest" APP_NAME="srs_utest" . auto/utest.sh -fi - echo 'configure ok! ' #####################################################################################