Changeset 6120


Ignore:
Timestamp:
Dec 19, 2019 2:57:20 AM (4 years ago)
Author:
nanang
Message:

Fix #2256: Mini refactored Android configure script:

  • added CXXFLAGS & LDFLAGS parsing (from ndk-build output), CXXFLAGS was set to CFLAGS.
  • updated WebRTC instruction set to use SSE2, was generic, for Android emulator (x86 ABI).
  • updated C++ library/STL backend to use c++_shared, somehow '-lc++_static' is ignored after the refactor, also the official NDK docs mentions that c++_static may cause undefined behavior for app with multiple shared libraries (note pjsua2 app may use other shared libraries).
Location:
pjproject/trunk
Files:
1 added
10 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/aconfigure

    r6110 r6120  
    90239023                                ac_webrtc_instset=mips 
    90249024                                ;; 
     9025                            x86*) 
     9026                                ac_webrtc_instset=sse2 
     9027                                ;; 
    90259028                            *) 
    90269029                                ac_webrtc_instset=generic 
  • pjproject/trunk/aconfigure.ac

    r6110 r6120  
    20852085                                ac_webrtc_instset=mips 
    20862086                                ;; 
     2087                            x86*) 
     2088                                ac_webrtc_instset=sse2 
     2089                                ;; 
    20872090                            *) 
    20882091                                ac_webrtc_instset=generic 
  • pjproject/trunk/configure-android

    r6033 r6120  
    6767  ADD_CFLAGS="0" 
    6868  ADD_CXXFLAGS="0" 
     69  ADD_LDFLAGS="0" 
    6970  ADD_NDK_TOOLCHAIN="0" 
    7071  ADD_NDK_TARGET="0" 
    7172  if test "x${IGNORE_CFLAGS}" = "x"; then 
    72     IGNORE_CFLAGS="\-M\|\-f*stack\|\-f*alias\|\-\<g\>" 
     73    IGNORE_CFLAGS="\-M\|\-f*stack\|\-f*alias\|\-\<g\>\|\-DNDEBUG\|\-O" 
     74  fi 
     75  if test "x${IGNORE_CPPFLAGS}" = "x"; then 
     76    IGNORE_CPPFLAGS="\-M\|\-f*stack\|\-f*alias\|\-\<g\>\|\-DNDEBUG\|\-O\|\-std\=" 
    7377  fi 
    7478   
     
    8589  fi 
    8690 
    87    echo "=====" 
    88    echo "NDK_OUT : ${NDK_OUT}" 
    89    echo "=====" 
     91  #echo "=====" 
     92  #echo "NDK_OUT : ${NDK_OUT}" 
     93  #echo "=====" 
    9094 
    9195  for i in $NDK_OUT; do 
     
    97101        continue 
    98102      fi 
     103      if test "$i" = "-c"; then 
     104        continue 
     105      fi 
    99106      if test "x`echo $i|grep 'dummy'`" != "x"; then 
    100107        continue 
    101108      fi 
    102       if test "x`echo $i|grep '\-\-sysroot='`" != "x"; then 
    103         ANDROID_SYSROOT=`echo $i|sed 's/--sysroot=//'`; 
    104       fi 
    105       NDK_CXXFLAGS="${NDK_CXXFLAGS} $i" 
     109      if test "x`echo $i|grep ${IGNORE_CPPFLAGS}`" = "x"; then 
     110        NDK_CXXFLAGS="${NDK_CXXFLAGS} $i" 
     111      fi 
    106112      continue 
    107113    fi 
     
    133139    fi 
    134140 
     141    # Parse NDK LDFLAGS 
     142    if test "${ADD_LDFLAGS}" = "1"; then 
     143      if test "$i" = "-o"; then 
     144        ADD_LDFLAGS="0" 
     145        continue 
     146      fi 
     147      if test "x`echo $i|grep 'dummy'`" != "x"; then 
     148        continue 
     149      fi 
     150      if test "x`echo $i|grep '.so'`" != "x"; then 
     151        continue 
     152      fi 
     153      NDK_LDFLAGS="${NDK_LDFLAGS} $i" 
     154      continue 
     155    fi 
     156 
    135157    # Find gcc or clang 
    136158    if test "x${NDK_CC}" = "x"; then 
     
    142164          #echo "---using llvm" 
    143165        fi 
     166        continue 
    144167      fi 
    145168    fi 
     
    150173        NDK_CXX=$i 
    151174        ADD_CXXFLAGS="1" 
     175        continue 
     176      fi 
     177    fi 
     178 
     179    # Find linking/LDFLAGS 
     180    if test "x${NDK_LDFLAGS}" = "x"; then 
     181      if test "x`echo $i | grep '\-\<shared\>'`" != "x"; then 
     182        ADD_LDFLAGS="1" 
     183        continue 
    152184      fi 
    153185    fi 
    154186 
    155187    # Find ar tool 
    156     if test "x${NDK_AR}" = "x" -a "x${NDK_CC}" != "x" -a "x`echo $i|grep '\-ar'`" != "x"; then 
    157       if test "$(dirname \"${NDK_CC}\")" = "$(dirname \"${i}\")"; then 
     188    if test "x${NDK_AR}" = "x" -a "x${NDK_CC}" != "x" -a "x`echo $i|grep '\-\<ar\>'`" != "x"; then 
     189      # In some NDKs, e.g: r17c, gcc/clang and ar have different path 
     190      #if test "$(dirname \"${NDK_CC}\")" = "$(dirname \"${i}\")"; then 
    158191        NDK_AR=$i 
    159192        #echo "--- found AR=${NDK_AR}" 
    160       fi 
     193        continue 
     194      #fi 
    161195    fi 
    162196 
    163197    # Find ranlib tool 
    164     if test "x${NDK_RANLIB}" = "x" -a "x${NDK_CC}" != "x" -a "x`echo $i|grep '\-ranlib'`" != "x"; then 
    165       if test "$(dirname \"${NDK_CC}\")" = "$(dirname \"${i}\")"; then 
     198    if test "x${NDK_RANLIB}" = "x" -a "x${NDK_CC}" != "x" -a "x`echo $i|grep '\-\<ranlib\>'`" != "x"; then 
     199      #if test "$(dirname \"${NDK_CC}\")" = "$(dirname \"${i}\")"; then 
    166200        NDK_RANLIB=$i 
    167201        #echo "--- found RANLIB=${NDK_RANLIB}" 
    168       fi 
     202      #fi 
    169203    fi 
    170204  done 
     
    193227      NDK_AR=`find ${NDK_CC_DIR} -name "*ar" | grep -m 1 -v "gcc"` 
    194228    fi 
    195     export LDFLAGS="${LDFLAGS} --sysroot=${ANDROID_SYSROOT}" 
     229    export LDFLAGS="${LDFLAGS}" 
    196230  else 
    197231    # find ar and ranlib 
     
    202236      NDK_RANLIB=`find ${NDK_TOOLCHAIN}/bin/ -name "*-ranlib" | grep -m 1 -v "gcc"` 
    203237    fi 
    204     export LDFLAGS="${LDFLAGS} --sysroot=${ANDROID_SYSROOT} -target ${NDK_TARGET} -gcc-toolchain ${NDK_TOOLCHAIN}" 
     238    export LDFLAGS="${LDFLAGS} -target ${NDK_TARGET} -gcc-toolchain ${NDK_TOOLCHAIN}" 
    205239  fi 
    206240 
     
    220254  export CXX="${NDK_CXX}" 
    221255 
    222   export LIBS="${LIBS} -lc -lgcc -ldl" 
     256  export LDFLAGS="${NDK_LDFLAGS}" 
     257  export LIBS="${LIBS}" 
    223258  export CFLAGS="${NDK_CFLAGS} ${CFLAGS}" 
    224   export CPPFLAGS="${CFLAGS} -fexceptions -frtti" 
    225   export CXXFLAGS="${NDK_CXXFLAGS} -fexceptions -frtti" 
     259  export CPPFLAGS="${NDK_CXXFLAGS} ${CPPFLAGS}" 
     260  export CXXFLAGS="${CPPFLAGS}" 
    226261 
    227262else 
     
    272307  # llvm 
    273308  STDCPP_TC="${ANDROID_NDK_ROOT}/sources/cxx-stl/llvm-libc++" 
    274   STDCPP_CFLAGS="-I${STDCPP_TC}/include" 
    275   STDCPP_LIBS="-lc++_static -lc++abi" 
    276   STDCPP_LDFLAGS="-L${STDCPP_TC}/libs/${TARGET_ABI}/" 
     309  #STDCPP_CFLAGS="-I${STDCPP_TC}/include" 
     310  #STDCPP_LIBS="-lc++_static -lc++abi" 
     311  STDCPP_LIBS="${STDCPP_TC}/libs/${TARGET_ABI}/libc++_shared.so" 
     312  #STDCPP_LDFLAGS="-L${STDCPP_TC}/libs/${TARGET_ABI}/" 
    277313else 
    278314  # gnustl 
     
    291327export LIBS="${STDCPP_LIBS} ${LIBS}" 
    292328export LDFLAGS="${LDFLAGS} ${STDCPP_LDFLAGS}" 
     329export CPPFLAGS="${CPPFLAGS} ${STDCPP_CFLAGS}" 
     330export CXXFLAGS="${CPPFLAGS}" 
    293331 
    294332# Print settings 
  • pjproject/trunk/pjsip-apps/src/samples/android_sample/jni/Android.mk

    r5932 r6120  
    22 
    33include $(CLEAR_VARS) 
    4  
    54LOCAL_MODULE    := dummy_static 
    6 LOCAL_SRC_FILES := dummy.c 
    7  
     5LOCAL_SRC_FILES := dummy.c dummy2.cc 
    86include $(BUILD_STATIC_LIBRARY) 
    97 
     
    119LOCAL_MODULE    := dummy_shared 
    1210LOCAL_STATIC_LIBRARIES := dummy_static 
    13 LOCAL_SRC_FILES := dummy.c 
    14  
     11LOCAL_SRC_FILES := dummy.c dummy2.cc 
    1512include $(BUILD_SHARED_LIBRARY) 
  • pjproject/trunk/pjsip-apps/src/samples/android_sample/jni/Application.mk

    r5409 r6120  
    11APP_ABI := all 
     2APP_CPPFLAGS := -fexceptions -frtti 
     3APP_STL := c++_shared 
  • pjproject/trunk/pjsip-apps/src/swig/java/Makefile

    r5895 r6120  
    164164ifeq ($(OS),android) 
    165165        mkdir -p android/app/src/main/jniLibs/$(TARGET_ARCH) 
     166        # copy libc++_shared.so manually 
     167        cp -f ${ANDROID_NDK_ROOT}/sources/cxx-stl/llvm-libc++/libs/${TARGET_ARCH}/libc++_shared.so android/app/src/main/jniLibs/$(TARGET_ARCH) 
    166168endif 
    167169        $(PJ_CXX) -shared -o $(LIBPJSUA2_SO) $(OUT_DIR)/pjsua2_wrap.o \ 
    168                 $(MY_CFLAGS) $(MY_LDFLAGS) 
     170                $(MY_LDFLAGS) 
    169171 
    170172$(OUT_DIR)/pjsua2_wrap.o: $(OUT_DIR)/pjsua2_wrap.cpp Makefile 
  • pjproject/trunk/pjsip-apps/src/swig/java/android/app/build.gradle

    r5502 r6120  
    1313            moduleName "libpjsua2" 
    1414        } 
     15 
     16        externalNativeBuild { 
     17            cmake { 
     18                arguments "-DANDROID_STL=c++_shared" 
     19            } 
     20        } 
    1521    } 
    1622 
  • pjproject/trunk/pjsip/build/Makefile

    r5761 r6120  
    4747                   $(CC_INC)../../pjnath/include \ 
    4848                   $(CC_INC)../../pjmedia/include 
    49 export _CXXFLAGS:= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \ 
    50                    $(HOST_CXXFLAGS) $(CXXFLAGS) 
     49export _CXXFLAGS:= $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \ 
     50                   $(HOST_CXXFLAGS) $(CXXFLAGS) $(CC_INC)../include \ 
     51                   $(CC_INC)../../pjlib/include \ 
     52                   $(CC_INC)../../pjlib-util/include \ 
     53                   $(CC_INC)../../pjnath/include \ 
     54                   $(CC_INC)../../pjmedia/include 
    5155export _LDFLAGS := $(APP_THIRD_PARTY_LIBS) \ 
    5256                   $(APP_THIRD_PARTY_EXT) \ 
     
    141145                           siptypes.o call.o presence.o media.o 
    142146export PJSUA2_LIB_CFLAGS += $(_CFLAGS) $(PJ_VIDEO_CFLAGS) 
    143 export PJSUA2_LIB_CXXFLAGS = $(_CXXFLAGS) $(PJSUA2_LIB_CFLAGS)  
     147export PJSUA2_LIB_CXXFLAGS = $(_CXXFLAGS) 
    144148export PJSUA2_LIB_LDFLAGS += $(PJSUA_LIB_LDLIB) \ 
    145149                             $(PJSIP_UA_LDLIB) \ 
  • pjproject/trunk/third_party/build/webrtc/Makefile

    r5428 r6120  
    2121                   $(CFLAGS) $(CC_INC). $(CC_INC)../../webrtc/src       \ 
    2222                   $(CC_INC)../../../pjlib/include 
    23 export _CXXFLAGS:= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \ 
     23export _CXXFLAGS:= $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \ 
    2424                   $(HOST_CXXFLAGS) $(CXXFLAGS) 
    2525export _LDFLAGS := $(CC_LDFLAGS) $(OS_LDFLAGS) $(M_LDFLAGS) $(HOST_LDFLAGS) \ 
  • pjproject/trunk/third_party/build/yuv/Makefile

    r6032 r6120  
    2020                   $(CFLAGS) $(CC_INC). $(CC_INC)../../yuv/include \ 
    2121                   $(CC_INC)../../../pjlib/include 
    22 export _CXXFLAGS:= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \ 
    23                    $(HOST_CXXFLAGS) $(CXXFLAGS) 
     22export _CXXFLAGS:= $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \ 
     23                   $(HOST_CXXFLAGS) $(CXXFLAGS) $(CC_INC). $(CC_INC)../../yuv/include 
    2424export _LDFLAGS := $(CC_LDFLAGS) $(OS_LDFLAGS) $(M_LDFLAGS) $(HOST_LDFLAGS) \ 
    2525                   $(LDFLAGS)  
Note: See TracChangeset for help on using the changeset viewer.