winlin

merge from srs2 to check cpus.

@@ -43,29 +43,6 @@ echo "" >> $SRS_AUTO_HEADERS_H @@ -43,29 +43,6 @@ echo "" >> $SRS_AUTO_HEADERS_H
43 ##################################################################################### 43 #####################################################################################
44 # generate auto headers file, depends on the finished of options.sh 44 # generate auto headers file, depends on the finished of options.sh
45 ##################################################################################### 45 #####################################################################################
46 -if [ $SRS_ARM_UBUNTU12 = YES ]; then  
47 - __SrsArmCC="arm-linux-gnueabi-gcc";  
48 - __SrsArmGCC="arm-linux-gnueabi-gcc";  
49 - __SrsArmCXX="arm-linux-gnueabi-g++";  
50 - __SrsArmAR="arm-linux-gnueabi-ar";  
51 - __SrsArmLD="arm-linux-gnueabi-ld";  
52 - __SrsArmRANDLIB="arm-linux-gnueabi-ranlib";  
53 -fi  
54 -if [ $SRS_MIPS_UBUNTU12 = YES ]; then  
55 - __SrsArmCC="mipsel-openwrt-linux-gcc";  
56 - __SrsArmGCC="mipsel-openwrt-linux-gcc";  
57 - __SrsArmCXX="mipsel-openwrt-linux-g++";  
58 - __SrsArmAR="mipsel-openwrt-linux-ar";  
59 - __SrsArmLD="mipsel-openwrt-linux-ld";  
60 - __SrsArmRANDLIB="mipsel-openwrt-linux-ranlib";  
61 -fi  
62 -# the arm-ubuntu12 options for make for depends  
63 -if [[ -z $SrsArmCC ]]; then SrsArmCC=$__SrsArmCC; fi  
64 -if [[ -z $SrsArmGCC ]]; then SrsArmGCC=$__SrsArmGCC; fi  
65 -if [[ -z $SrsArmCXX ]]; then SrsArmCXX=$__SrsArmCXX; fi  
66 -if [[ -z $SrsArmAR ]]; then SrsArmAR=$__SrsArmAR; fi  
67 -if [[ -z $SrsArmLD ]]; then SrsArmLD=$__SrsArmLD; fi  
68 -if [[ -z $SrsArmRANDLIB ]]; then SrsArmRANDLIB=$__SrsArmRANDLIB; fi  
69 # write to source file 46 # write to source file
70 if [ $SRS_CROSS_BUILD = YES ]; then 47 if [ $SRS_CROSS_BUILD = YES ]; then
71 echo "cc=$SrsArmCC gcc=$SrsArmGCC g++=$SrsArmCXX ar=$SrsArmAR ld=$SrsArmLD randlib=$SrsArmRANDLIB" 48 echo "cc=$SrsArmCC gcc=$SrsArmGCC g++=$SrsArmCXX ar=$SrsArmAR ld=$SrsArmLD randlib=$SrsArmRANDLIB"
@@ -38,7 +38,11 @@ function Ubuntu_prepare() @@ -38,7 +38,11 @@ function Ubuntu_prepare()
38 else 38 else
39 uname -v|grep Ubuntu >/dev/null 2>&1 39 uname -v|grep Ubuntu >/dev/null 2>&1
40 ret=$?; if [[ 0 -ne $ret ]]; then 40 ret=$?; if [[ 0 -ne $ret ]]; then
41 - return 0; 41 + # for debian, we think it's ubuntu also.
  42 + # for example, the wheezy/sid which is debian armv7 linux, can not identified by uname -v.
  43 + if [[ ! -f /etc/debian_version ]]; then
  44 + return 0;
  45 + fi
42 fi 46 fi
43 fi 47 fi
44 48
@@ -378,7 +382,7 @@ fi @@ -378,7 +382,7 @@ fi
378 ##################################################################################### 382 #####################################################################################
379 if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then 383 if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
380 # check the cross build flag file, if flag changed, need to rebuild the st. 384 # check the cross build flag file, if flag changed, need to rebuild the st.
381 - _ST_MAKE=linux-debug && _ST_EXTRA_CFLAGS="EXTRA_CFLAGS=-DMD_HAVE_EPOLL" 385 + _ST_MAKE=linux-debug && _ST_EXTRA_CFLAGS="-DMD_HAVE_EPOLL"
382 # for osx, use darwin for st, donot use epoll. 386 # for osx, use darwin for st, donot use epoll.
383 if [ $OS_IS_OSX = YES ]; then 387 if [ $OS_IS_OSX = YES ]; then
384 _ST_MAKE=darwin-debug && _ST_EXTRA_CFLAGS="EXTRA_CFLAGS=-DMD_HAVE_KQUEUE" 388 _ST_MAKE=darwin-debug && _ST_EXTRA_CFLAGS="EXTRA_CFLAGS=-DMD_HAVE_KQUEUE"
@@ -399,7 +403,7 @@ if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then @@ -399,7 +403,7 @@ if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
399 patch -p0 < ../../3rdparty/patches/1.st.arm.patch && 403 patch -p0 < ../../3rdparty/patches/1.st.arm.patch &&
400 patch -p0 < ../../3rdparty/patches/3.st.osx.kqueue.patch && 404 patch -p0 < ../../3rdparty/patches/3.st.osx.kqueue.patch &&
401 patch -p0 < ../../3rdparty/patches/4.st.disable.examples.patch && 405 patch -p0 < ../../3rdparty/patches/4.st.disable.examples.patch &&
402 - make ${_ST_MAKE} CC=${SrsArmCC} AR=${SrsArmAR} LD=${SrsArmLD} RANDLIB=${SrsArmRANDLIB} ${_ST_EXTRA_CFLAGS} && 406 + make ${_ST_MAKE} CC=${SrsArmCC} AR=${SrsArmAR} LD=${SrsArmLD} RANDLIB=${SrsArmRANDLIB} EXTRA_CFLAGS="${_ST_EXTRA_CFLAGS}" &&
403 cd .. && rm -rf st && ln -sf st-1.9/obj st && 407 cd .. && rm -rf st && ln -sf st-1.9/obj st &&
404 cd .. && touch ${SRS_OBJS}/_flag.st.cross.build.tmp 408 cd .. && touch ${SRS_OBJS}/_flag.st.cross.build.tmp
405 ) 409 )
@@ -416,7 +420,7 @@ if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then @@ -416,7 +420,7 @@ if [ $SRS_EXPORT_LIBRTMP_PROJECT = NO ]; then
416 patch -p0 < ../../3rdparty/patches/1.st.arm.patch && 420 patch -p0 < ../../3rdparty/patches/1.st.arm.patch &&
417 patch -p0 < ../../3rdparty/patches/3.st.osx.kqueue.patch && 421 patch -p0 < ../../3rdparty/patches/3.st.osx.kqueue.patch &&
418 patch -p0 < ../../3rdparty/patches/4.st.disable.examples.patch && 422 patch -p0 < ../../3rdparty/patches/4.st.disable.examples.patch &&
419 - make ${_ST_MAKE} ${_ST_EXTRA_CFLAGS} && 423 + make ${_ST_MAKE} EXTRA_CFLAGS="${_ST_EXTRA_CFLAGS}" &&
420 cd .. && rm -rf st && ln -sf st-1.9/obj st && 424 cd .. && rm -rf st && ln -sf st-1.9/obj st &&
421 cd .. && rm -f ${SRS_OBJS}/_flag.st.cross.build.tmp 425 cd .. && rm -f ${SRS_OBJS}/_flag.st.cross.build.tmp
422 ) 426 )
  1 +#!/bin/bash
  2 +
  3 +# when options parsed, setup some variables, then build the depends.
  4 +
  5 +# when arm specified, setup the cross build variables.
  6 +if [ $SRS_ARM_UBUNTU12 = YES ]; then
  7 + __SrsArmCC="arm-linux-gnueabi-gcc";
  8 + __SrsArmGCC="arm-linux-gnueabi-gcc";
  9 + __SrsArmCXX="arm-linux-gnueabi-g++";
  10 + __SrsArmAR="arm-linux-gnueabi-ar";
  11 + __SrsArmLD="arm-linux-gnueabi-ld";
  12 + __SrsArmRANDLIB="arm-linux-gnueabi-ranlib";
  13 +fi
  14 +
  15 +if [ $SRS_MIPS_UBUNTU12 = YES ]; then
  16 + __SrsArmCC="mipsel-openwrt-linux-gcc";
  17 + __SrsArmGCC="mipsel-openwrt-linux-gcc";
  18 + __SrsArmCXX="mipsel-openwrt-linux-g++";
  19 + __SrsArmAR="mipsel-openwrt-linux-ar";
  20 + __SrsArmLD="mipsel-openwrt-linux-ld";
  21 + __SrsArmRANDLIB="mipsel-openwrt-linux-ranlib";
  22 +fi
  23 +
  24 +# the arm-ubuntu12 options for make for depends
  25 +if [[ -z $SrsArmCC ]]; then SrsArmCC=$__SrsArmCC; fi
  26 +if [[ -z $SrsArmGCC ]]; then SrsArmGCC=$__SrsArmGCC; fi
  27 +if [[ -z $SrsArmCXX ]]; then SrsArmCXX=$__SrsArmCXX; fi
  28 +if [[ -z $SrsArmAR ]]; then SrsArmAR=$__SrsArmAR; fi
  29 +if [[ -z $SrsArmLD ]]; then SrsArmLD=$__SrsArmLD; fi
  30 +if [[ -z $SrsArmRANDLIB ]]; then SrsArmRANDLIB=$__SrsArmRANDLIB; fi
@@ -23,6 +23,9 @@ BLACK="\\033[0m" @@ -23,6 +23,9 @@ BLACK="\\033[0m"
23 # parse options, exit with error when parse options invalid. 23 # parse options, exit with error when parse options invalid.
24 . auto/options.sh 24 . auto/options.sh
25 25
  26 +# setup variables when options parsed.
  27 +. auto/setup_variables.sh
  28 +
26 # clean the exists, when not export srs-librtmp. 29 # clean the exists, when not export srs-librtmp.
27 # do this only when the options is ok. 30 # do this only when the options is ok.
28 if [[ -f Makefile ]]; then 31 if [[ -f Makefile ]]; then
@@ -103,6 +103,7 @@ @@ -103,6 +103,7 @@
103 3C689FA01AB6AAC800C9CEEE /* stk.c in Sources */ = {isa = PBXBuildFile; fileRef = 3C689F9C1AB6AAC800C9CEEE /* stk.c */; }; 103 3C689FA01AB6AAC800C9CEEE /* stk.c in Sources */ = {isa = PBXBuildFile; fileRef = 3C689F9C1AB6AAC800C9CEEE /* stk.c */; };
104 3C689FA11AB6AAC800C9CEEE /* sync.c in Sources */ = {isa = PBXBuildFile; fileRef = 3C689F9D1AB6AAC800C9CEEE /* sync.c */; }; 104 3C689FA11AB6AAC800C9CEEE /* sync.c in Sources */ = {isa = PBXBuildFile; fileRef = 3C689F9D1AB6AAC800C9CEEE /* sync.c */; };
105 3C82802C1BAFF8CC004A1794 /* srs_kafka_stack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C82802A1BAFF8CC004A1794 /* srs_kafka_stack.cpp */; }; 105 3C82802C1BAFF8CC004A1794 /* srs_kafka_stack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3C82802A1BAFF8CC004A1794 /* srs_kafka_stack.cpp */; };
  106 + 3CB25C2A1BB269FD00C97A63 /* jmp_sp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CB25C291BB269FD00C97A63 /* jmp_sp.cpp */; };
106 3CC52DD81ACE4023006FEB01 /* srs_utest_amf0.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CC52DCA1ACE4023006FEB01 /* srs_utest_amf0.cpp */; }; 107 3CC52DD81ACE4023006FEB01 /* srs_utest_amf0.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CC52DCA1ACE4023006FEB01 /* srs_utest_amf0.cpp */; };
107 3CC52DD91ACE4023006FEB01 /* srs_utest_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CC52DCC1ACE4023006FEB01 /* srs_utest_config.cpp */; }; 108 3CC52DD91ACE4023006FEB01 /* srs_utest_config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CC52DCC1ACE4023006FEB01 /* srs_utest_config.cpp */; };
108 3CC52DDA1ACE4023006FEB01 /* srs_utest_core.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CC52DCE1ACE4023006FEB01 /* srs_utest_core.cpp */; }; 109 3CC52DDA1ACE4023006FEB01 /* srs_utest_core.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3CC52DCE1ACE4023006FEB01 /* srs_utest_core.cpp */; };
@@ -372,6 +373,8 @@ @@ -372,6 +373,8 @@
372 3C8280291BAFF896004A1794 /* transform.edge.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = transform.edge.conf; path = ../../../conf/transform.edge.conf; sourceTree = "<group>"; }; 373 3C8280291BAFF896004A1794 /* transform.edge.conf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = transform.edge.conf; path = ../../../conf/transform.edge.conf; sourceTree = "<group>"; };
373 3C82802A1BAFF8CC004A1794 /* srs_kafka_stack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_kafka_stack.cpp; path = ../../../src/protocol/srs_kafka_stack.cpp; sourceTree = "<group>"; }; 374 3C82802A1BAFF8CC004A1794 /* srs_kafka_stack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_kafka_stack.cpp; path = ../../../src/protocol/srs_kafka_stack.cpp; sourceTree = "<group>"; };
374 3C82802B1BAFF8CC004A1794 /* srs_kafka_stack.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kafka_stack.hpp; path = ../../../src/protocol/srs_kafka_stack.hpp; sourceTree = "<group>"; }; 375 3C82802B1BAFF8CC004A1794 /* srs_kafka_stack.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_kafka_stack.hpp; path = ../../../src/protocol/srs_kafka_stack.hpp; sourceTree = "<group>"; };
  376 + 3CB25C281BB2596300C97A63 /* setup_variables.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; name = setup_variables.sh; path = ../../../auto/setup_variables.sh; sourceTree = "<group>"; };
  377 + 3CB25C291BB269FD00C97A63 /* jmp_sp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = jmp_sp.cpp; path = ../../../research/arm/jmp_sp.cpp; sourceTree = "<group>"; };
375 3CC52DCA1ACE4023006FEB01 /* srs_utest_amf0.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_utest_amf0.cpp; path = ../../src/utest/srs_utest_amf0.cpp; sourceTree = "<group>"; }; 378 3CC52DCA1ACE4023006FEB01 /* srs_utest_amf0.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_utest_amf0.cpp; path = ../../src/utest/srs_utest_amf0.cpp; sourceTree = "<group>"; };
376 3CC52DCB1ACE4023006FEB01 /* srs_utest_amf0.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_utest_amf0.hpp; path = ../../src/utest/srs_utest_amf0.hpp; sourceTree = "<group>"; }; 379 3CC52DCB1ACE4023006FEB01 /* srs_utest_amf0.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; name = srs_utest_amf0.hpp; path = ../../src/utest/srs_utest_amf0.hpp; sourceTree = "<group>"; };
377 3CC52DCC1ACE4023006FEB01 /* srs_utest_config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_utest_config.cpp; path = ../../src/utest/srs_utest_config.cpp; sourceTree = "<group>"; }; 380 3CC52DCC1ACE4023006FEB01 /* srs_utest_config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = srs_utest_config.cpp; path = ../../src/utest/srs_utest_config.cpp; sourceTree = "<group>"; };
@@ -661,6 +664,7 @@ @@ -661,6 +664,7 @@
661 3C1232C31AAE827E00CE8F6C /* local_ip.sh */, 664 3C1232C31AAE827E00CE8F6C /* local_ip.sh */,
662 3C1232C41AAE827E00CE8F6C /* modules.sh */, 665 3C1232C41AAE827E00CE8F6C /* modules.sh */,
663 3C1232C51AAE827E00CE8F6C /* options.sh */, 666 3C1232C51AAE827E00CE8F6C /* options.sh */,
  667 + 3CB25C281BB2596300C97A63 /* setup_variables.sh */,
664 3C1232C61AAE827E00CE8F6C /* summary.sh */, 668 3C1232C61AAE827E00CE8F6C /* summary.sh */,
665 3C1232C71AAE827E00CE8F6C /* utest.sh */, 669 3C1232C71AAE827E00CE8F6C /* utest.sh */,
666 ); 670 );
@@ -772,6 +776,7 @@ @@ -772,6 +776,7 @@
772 3C663F001AB014B500286D8B /* research */ = { 776 3C663F001AB014B500286D8B /* research */ = {
773 isa = PBXGroup; 777 isa = PBXGroup;
774 children = ( 778 children = (
  779 + 3CB25C291BB269FD00C97A63 /* jmp_sp.cpp */,
775 3C663F021AB0155100286D8B /* srs_aac_raw_publish.c */, 780 3C663F021AB0155100286D8B /* srs_aac_raw_publish.c */,
776 3C663F031AB0155100286D8B /* srs_audio_raw_publish.c */, 781 3C663F031AB0155100286D8B /* srs_audio_raw_publish.c */,
777 3C663F041AB0155100286D8B /* srs_bandwidth_check.c */, 782 3C663F041AB0155100286D8B /* srs_bandwidth_check.c */,
@@ -964,6 +969,8 @@ @@ -964,6 +969,8 @@
964 3C1232241AAE814D00CE8F6C /* srs_kernel_error.cpp in Sources */, 969 3C1232241AAE814D00CE8F6C /* srs_kernel_error.cpp in Sources */,
965 3C036B561B2D0AC10078E2E0 /* srs_app_http_stream.cpp in Sources */, 970 3C036B561B2D0AC10078E2E0 /* srs_app_http_stream.cpp in Sources */,
966 3C068D6D1B10175500AA722C /* srs_protocol_stream.cpp in Sources */, 971 3C068D6D1B10175500AA722C /* srs_protocol_stream.cpp in Sources */,
  972 + 3CB25C2A1BB269FD00C97A63 /* jmp_sp.cpp in Sources */,
  973 + 3C068D6D1B10175500AA722C /* srs_protocol_buffer.cpp in Sources */,
967 3C1232441AAE81A400CE8F6C /* srs_rtmp_handshake.cpp in Sources */, 974 3C1232441AAE81A400CE8F6C /* srs_rtmp_handshake.cpp in Sources */,
968 3C1232291AAE814D00CE8F6C /* srs_kernel_buffer.cpp in Sources */, 975 3C1232291AAE814D00CE8F6C /* srs_kernel_buffer.cpp in Sources */,
969 3C663F181AB0155100286D8B /* srs_play.c in Sources */, 976 3C663F181AB0155100286D8B /* srs_play.c in Sources */,
@@ -11,22 +11,7 @@ @@ -11,22 +11,7 @@
11 11
12 jmp_buf context; 12 jmp_buf context;
13 13
14 -void func1()  
15 -{  
16 -#if defined(__amd64__) || defined(__x86_64__)  
17 - register long int rsp0 asm("rsp");  
18 -  
19 - int ret = setjmp(context);  
20 - printf("setjmp func1 ret=%d, rsp=%#lx\n", ret, rsp0);  
21 - // enter by longjmp  
22 - if (ret != 0) {  
23 - printf("call by longjmp.\n");  
24 - exit(0);  
25 - }  
26 -#endif  
27 -}  
28 -  
29 -void func0() 14 +void do_longjmp()
30 { 15 {
31 /** 16 /**
32 the definition of jmp_buf: 17 the definition of jmp_buf:
@@ -78,8 +63,6 @@ void func0() @@ -78,8 +63,6 @@ void func0()
78 printf("env[%d]=%#x, ", i, (int)context[0].__jmpbuf[i]); 63 printf("env[%d]=%#x, ", i, (int)context[0].__jmpbuf[i]);
79 } 64 }
80 printf("\n"); 65 printf("\n");
81 -  
82 - func1();  
83 #endif 66 #endif
84 67
85 #if defined(__arm__) 68 #if defined(__arm__)
@@ -105,7 +88,7 @@ void func0() @@ -105,7 +88,7 @@ void func0()
105 */ 88 */
106 /** 89 /**
107 For example, on raspberry-pi, armv6 cpu: 90 For example, on raspberry-pi, armv6 cpu:
108 - (gdb) x /64 context[0].__jmpbuf 91 + (gdb) x /64xb (char*)context[0].__jmpbuf
109 v1, 0: 0x00 0x00 0x00 0x00 92 v1, 0: 0x00 0x00 0x00 0x00
110 v2, 1: 0x00 0x00 0x00 0x00 93 v2, 1: 0x00 0x00 0x00 0x00
111 v3, 2: 0x2c 0x84 0x00 0x00 94 v3, 2: 0x2c 0x84 0x00 0x00
@@ -147,8 +130,7 @@ int main(int argc, char** argv) @@ -147,8 +130,7 @@ int main(int argc, char** argv)
147 (int)__GLIBC__, (int)__GLIBC_MINOR__); 130 (int)__GLIBC__, (int)__GLIBC_MINOR__);
148 #endif 131 #endif
149 132
150 - func0();  
151 - longjmp(context, 1); 133 + do_longjmp();
152 134
153 printf("terminated\n"); 135 printf("terminated\n");
154 136
@@ -119,5 +119,17 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -119,5 +119,17 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
119 className(const className&); \ 119 className(const className&); \
120 className& operator= (const className&) 120 className& operator= (const className&)
121 121
  122 +/**
  123 + * important check for st(state-threads),
  124 + * only support the following cpus:
  125 + * 1. i386/amd64/x86_64
  126 + * 2. arm, glibc <= 2.15
  127 + */
  128 +#if !defined(__amd64__) && !defined(__x86_64__) && !defined(__i386__) && !defined(__arm__)
  129 + #error "only support i386/amd64/x86_64/arm cpu"
  130 +#endif
  131 +#if defined(__arm__) && __GLIBC__ != 2 || __GLIBC_MINOR__ > 15
  132 + #error "for arm, only support glibc <= 2.15"
122 #endif 133 #endif
123 134
  135 +#endif