mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Fix #1685, support RTC cross-build for armv7/armv8(aarch64). 4.0.128
This commit is contained in:
parent
1e9de0e191
commit
229578cc65
10 changed files with 34 additions and 119 deletions
|
@ -6,6 +6,7 @@ The changelog for SRS.
|
||||||
|
|
||||||
## SRS 4.0 Changelog
|
## SRS 4.0 Changelog
|
||||||
|
|
||||||
|
* v4.0, 2021-06-20, Fix [#1685](https://github.com/ossrs/srs/issues/1685), support RTC cross-build for armv7/armv8(aarch64). 4.0.128
|
||||||
* v4.0, 2021-06-17, Fix [#2214](https://github.com/ossrs/srs/issues/2214), remove detection for gmc and gmp.
|
* v4.0, 2021-06-17, Fix [#2214](https://github.com/ossrs/srs/issues/2214), remove detection for gmc and gmp.
|
||||||
* v4.0, 2021-06-16, Change [GB28181](https://github.com/ossrs/srs/issues/1500) to [feature/gb28181](https://github.com/ossrs/srs/tree/feature/gb28181). 4.0.127
|
* v4.0, 2021-06-16, Change [GB28181](https://github.com/ossrs/srs/issues/1500) to [feature/gb28181](https://github.com/ossrs/srs/tree/feature/gb28181). 4.0.127
|
||||||
* v4.0, 2021-06-01, Support --shared-ffmpeg to link with *.so for LGPL license. 4.0.126
|
* v4.0, 2021-06-01, Support --shared-ffmpeg to link with *.so for LGPL license. 4.0.126
|
||||||
|
|
3
trunk/3rdparty/libsrtp-2-fit/config_in.h
vendored
3
trunk/3rdparty/libsrtp-2-fit/config_in.h
vendored
|
@ -138,9 +138,6 @@
|
||||||
/* Define this to use OpenSSL crypto. */
|
/* Define this to use OpenSSL crypto. */
|
||||||
#undef OPENSSL
|
#undef OPENSSL
|
||||||
|
|
||||||
/* Define this if OPENSSL_cleanse is broken. */
|
|
||||||
#undef OPENSSL_CLEANSE_BROKEN
|
|
||||||
|
|
||||||
/* Define this to use OpenSSL KDF for SRTP. */
|
/* Define this to use OpenSSL KDF for SRTP. */
|
||||||
#undef OPENSSL_KDF
|
#undef OPENSSL_KDF
|
||||||
|
|
||||||
|
|
54
trunk/3rdparty/libsrtp-2-fit/configure
vendored
54
trunk/3rdparty/libsrtp-2-fit/configure
vendored
|
@ -5897,60 +5897,6 @@ $as_echo "#define OPENSSL 1" >>confdefs.h
|
||||||
USE_EXTERNAL_CRYPTO=1
|
USE_EXTERNAL_CRYPTO=1
|
||||||
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if OPENSSL_cleanse is broken" >&5
|
|
||||||
$as_echo_n "checking if OPENSSL_cleanse is broken... " >&6; }
|
|
||||||
if test "$cross_compiling" = yes; then :
|
|
||||||
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
|
|
||||||
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
|
|
||||||
as_fn_error $? "cannot run test program while cross compiling
|
|
||||||
See \`config.log' for more details" "$LINENO" 5; }
|
|
||||||
else
|
|
||||||
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
||||||
/* end confdefs.h. */
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <openssl/crypto.h>
|
|
||||||
|
|
||||||
int
|
|
||||||
main ()
|
|
||||||
{
|
|
||||||
|
|
||||||
#define BUFFER_SIZE (16)
|
|
||||||
char buffer[BUFFER_SIZE];
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < BUFFER_SIZE; i++) {
|
|
||||||
buffer[i] = i & 0xff;
|
|
||||||
}
|
|
||||||
OPENSSL_cleanse(buffer, BUFFER_SIZE);
|
|
||||||
for (i = 0; i < BUFFER_SIZE; i++) {
|
|
||||||
if (buffer[i]) {
|
|
||||||
printf("Buffer contents not zero at position %d (is %d)\n", i,
|
|
||||||
buffer[i]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
_ACEOF
|
|
||||||
if ac_fn_c_try_run "$LINENO"; then :
|
|
||||||
openssl_cleanse_broken=no
|
|
||||||
else
|
|
||||||
|
|
||||||
openssl_cleanse_broken=yes
|
|
||||||
|
|
||||||
$as_echo "#define OPENSSL_CLEANSE_BROKEN 1" >>confdefs.h
|
|
||||||
|
|
||||||
|
|
||||||
fi
|
|
||||||
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
|
|
||||||
conftest.$ac_objext conftest.beam conftest.$ac_ext
|
|
||||||
fi
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $openssl_cleanse_broken" >&5
|
|
||||||
$as_echo "$openssl_cleanse_broken" >&6; }
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to leverage OpenSSL KDF algorithm" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to leverage OpenSSL KDF algorithm" >&5
|
||||||
$as_echo_n "checking whether to leverage OpenSSL KDF algorithm... " >&6; }
|
$as_echo_n "checking whether to leverage OpenSSL KDF algorithm... " >&6; }
|
||||||
# Check whether --enable-openssl-kdf was given.
|
# Check whether --enable-openssl-kdf was given.
|
||||||
|
|
25
trunk/3rdparty/libsrtp-2-fit/configure.ac
vendored
25
trunk/3rdparty/libsrtp-2-fit/configure.ac
vendored
|
@ -263,31 +263,6 @@ if test "$enable_openssl" = "yes"; then
|
||||||
HMAC_OBJS=crypto/hash/hmac_ossl.o
|
HMAC_OBJS=crypto/hash/hmac_ossl.o
|
||||||
AC_SUBST([USE_EXTERNAL_CRYPTO], [1])
|
AC_SUBST([USE_EXTERNAL_CRYPTO], [1])
|
||||||
|
|
||||||
AC_MSG_CHECKING([if OPENSSL_cleanse is broken])
|
|
||||||
AC_RUN_IFELSE([AC_LANG_PROGRAM([
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <openssl/crypto.h>
|
|
||||||
], [
|
|
||||||
#define BUFFER_SIZE (16)
|
|
||||||
char buffer[[BUFFER_SIZE]];
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < BUFFER_SIZE; i++) {
|
|
||||||
buffer[[i]] = i & 0xff;
|
|
||||||
}
|
|
||||||
OPENSSL_cleanse(buffer, BUFFER_SIZE);
|
|
||||||
for (i = 0; i < BUFFER_SIZE; i++) {
|
|
||||||
if (buffer[[i]]) {
|
|
||||||
printf("Buffer contents not zero at position %d (is %d)\n", i,
|
|
||||||
buffer[[i]]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
])], [openssl_cleanse_broken=no], [
|
|
||||||
openssl_cleanse_broken=yes
|
|
||||||
AC_DEFINE([OPENSSL_CLEANSE_BROKEN], [1], [Define this if OPENSSL_cleanse is broken.])
|
|
||||||
])
|
|
||||||
AC_MSG_RESULT([$openssl_cleanse_broken])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to leverage OpenSSL KDF algorithm])
|
AC_MSG_CHECKING([whether to leverage OpenSSL KDF algorithm])
|
||||||
AC_ARG_ENABLE([openssl-kdf],
|
AC_ARG_ENABLE([openssl-kdf],
|
||||||
[AS_HELP_STRING([--enable-openssl-kdf], [Use OpenSSL KDF algorithm])],
|
[AS_HELP_STRING([--enable-openssl-kdf], [Use OpenSSL KDF algorithm])],
|
||||||
|
|
|
@ -436,7 +436,7 @@ void srtp_cleanse(void *s, size_t len)
|
||||||
|
|
||||||
void octet_string_set_to_zero(void *s, size_t len)
|
void octet_string_set_to_zero(void *s, size_t len)
|
||||||
{
|
{
|
||||||
#if defined(OPENSSL) && !defined(OPENSSL_CLEANSE_BROKEN)
|
#ifdef OPENSSL
|
||||||
OPENSSL_cleanse(s, len);
|
OPENSSL_cleanse(s, len);
|
||||||
#else
|
#else
|
||||||
srtp_cleanse(s, len);
|
srtp_cleanse(s, len);
|
||||||
|
|
|
@ -60,8 +60,6 @@ void print_string(char *s);
|
||||||
|
|
||||||
void test_bswap(void);
|
void test_bswap(void);
|
||||||
|
|
||||||
void test_set_to_zero(void);
|
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -137,7 +135,6 @@ int main(void)
|
||||||
printf(" } \n");
|
printf(" } \n");
|
||||||
|
|
||||||
test_bswap();
|
test_bswap();
|
||||||
test_set_to_zero();
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -231,26 +228,3 @@ void test_bswap(void)
|
||||||
printf("bswapped octet string: %s\n",
|
printf("bswapped octet string: %s\n",
|
||||||
octet_string_hex_string((uint8_t *)&y, 8));
|
octet_string_hex_string((uint8_t *)&y, 8));
|
||||||
}
|
}
|
||||||
|
|
||||||
void test_set_to_zero(void)
|
|
||||||
{
|
|
||||||
#define BUFFER_SIZE (16)
|
|
||||||
uint8_t buffer[BUFFER_SIZE];
|
|
||||||
size_t i;
|
|
||||||
|
|
||||||
for (i = 0; i < BUFFER_SIZE; i++) {
|
|
||||||
buffer[i] = i & 0xff;
|
|
||||||
}
|
|
||||||
printf("Buffer before: %s\n", octet_string_hex_string(buffer, BUFFER_SIZE));
|
|
||||||
octet_string_set_to_zero(buffer, BUFFER_SIZE);
|
|
||||||
printf("Buffer after: %s\n", octet_string_hex_string(buffer, BUFFER_SIZE));
|
|
||||||
for (i = 0; i < BUFFER_SIZE; i++) {
|
|
||||||
if (buffer[i]) {
|
|
||||||
fprintf(stderr,
|
|
||||||
"Buffer contents not zero at position %zu (is %d)\n", i,
|
|
||||||
buffer[i]);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#undef BUFFER_SIZE
|
|
||||||
}
|
|
||||||
|
|
|
@ -529,7 +529,9 @@ if [[ $SRS_SSL == YES && $SRS_USE_SYS_SSL != YES ]]; then
|
||||||
OPENSSL_CONFIG="./config"
|
OPENSSL_CONFIG="./config"
|
||||||
# https://stackoverflow.com/questions/15539062/cross-compiling-of-openssl-for-linux-arm-v5te-linux-gnueabi-toolchain
|
# https://stackoverflow.com/questions/15539062/cross-compiling-of-openssl-for-linux-arm-v5te-linux-gnueabi-toolchain
|
||||||
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
||||||
OPENSSL_CONFIG="./Configure linux-armv4"
|
OPENSSL_CONFIG="./Configure linux-generic32"
|
||||||
|
if [[ $SRS_CROSS_BUILD_ARMV7 == YES ]]; then OPENSSL_CONFIG="./Configure linux-armv4"; fi
|
||||||
|
if [[ $SRS_CROSS_BUILD_AARCH64 == YES ]]; then OPENSSL_CONFIG="./Configure linux-aarch64"; fi
|
||||||
elif [[ ! -f ${SRS_OBJS}/${SRS_PLATFORM}/openssl/lib/libssl.a ]]; then
|
elif [[ ! -f ${SRS_OBJS}/${SRS_PLATFORM}/openssl/lib/libssl.a ]]; then
|
||||||
# Try to use exists libraries.
|
# Try to use exists libraries.
|
||||||
if [[ -f /usr/local/ssl/lib/libssl.a && $SRS_SSL_LOCAL == NO ]]; then
|
if [[ -f /usr/local/ssl/lib/libssl.a && $SRS_SSL_LOCAL == NO ]]; then
|
||||||
|
@ -598,14 +600,16 @@ fi
|
||||||
#####################################################################################
|
#####################################################################################
|
||||||
# srtp
|
# srtp
|
||||||
#####################################################################################
|
#####################################################################################
|
||||||
SRTP_CONFIG="echo SRTP without openssl(ASM) optimization" && SRTP_OPTIONS=""
|
SRTP_OPTIONS=""
|
||||||
# If use ASM for SRTP, we enable openssl(with ASM).
|
# If use ASM for SRTP, we enable openssl(with ASM).
|
||||||
if [[ $SRS_SRTP_ASM == YES ]]; then
|
if [[ $SRS_SRTP_ASM == YES ]]; then
|
||||||
echo "SRTP with openssl(ASM) optimization" &&
|
SRTP_OPTIONS="--enable-openssl"
|
||||||
SRTP_CONFIG="export PKG_CONFIG_PATH=../openssl/lib/pkgconfig" && SRTP_OPTIONS="--enable-openssl"
|
SRTP_CONFIGURE="env PKG_CONFIG_PATH=$(cd ${SRS_OBJS}/${SRS_PLATFORM} && pwd)/openssl/lib/pkgconfig ./configure"
|
||||||
|
else
|
||||||
|
SRTP_CONFIGURE="./configure"
|
||||||
fi
|
fi
|
||||||
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
||||||
SRTP_OPTIONS="$SRTP_OPTIONS --host=$(echo $SRS_TOOL_CC|awk -F '-gcc' '{print $1}')"
|
SRTP_OPTIONS="$SRTP_OPTIONS --host=$SRS_CROSS_BUILD_HOST"
|
||||||
fi
|
fi
|
||||||
# Patched ST from https://github.com/ossrs/state-threads/tree/srs
|
# Patched ST from https://github.com/ossrs/state-threads/tree/srs
|
||||||
if [[ -f ${SRS_OBJS}/${SRS_PLATFORM}/libsrtp-2-fit/_release/lib/libsrtp2.a ]]; then
|
if [[ -f ${SRS_OBJS}/${SRS_PLATFORM}/libsrtp-2-fit/_release/lib/libsrtp2.a ]]; then
|
||||||
|
@ -615,7 +619,7 @@ else
|
||||||
(
|
(
|
||||||
rm -rf ${SRS_OBJS}/srtp2 && cd ${SRS_OBJS}/${SRS_PLATFORM} &&
|
rm -rf ${SRS_OBJS}/srtp2 && cd ${SRS_OBJS}/${SRS_PLATFORM} &&
|
||||||
rm -rf libsrtp-2-fit && cp -R ../../3rdparty/libsrtp-2-fit . && cd libsrtp-2-fit &&
|
rm -rf libsrtp-2-fit && cp -R ../../3rdparty/libsrtp-2-fit . && cd libsrtp-2-fit &&
|
||||||
${SRTP_CONFIG} && ./configure ${SRTP_OPTIONS} --prefix=`pwd`/_release &&
|
$SRTP_CONFIGURE ${SRTP_OPTIONS} --prefix=`pwd`/_release &&
|
||||||
make ${SRS_JOBS} && make install &&
|
make ${SRS_JOBS} && make install &&
|
||||||
cd .. && rm -rf srtp2 && ln -sf libsrtp-2-fit/_release srtp2
|
cd .. && rm -rf srtp2 && ln -sf libsrtp-2-fit/_release srtp2
|
||||||
)
|
)
|
||||||
|
@ -630,6 +634,7 @@ if [ ! -f ${SRS_OBJS}/srtp2/lib/libsrtp2.a ]; then echo "Build libsrtp-2-fit sta
|
||||||
#####################################################################################
|
#####################################################################################
|
||||||
# libopus, for WebRTC to transcode AAC with Opus.
|
# libopus, for WebRTC to transcode AAC with Opus.
|
||||||
#####################################################################################
|
#####################################################################################
|
||||||
|
# For cross build, we use opus of FFmpeg, so we don't build the libopus.
|
||||||
if [[ $SRS_RTC == YES && $SRS_CROSS_BUILD == NO ]]; then
|
if [[ $SRS_RTC == YES && $SRS_CROSS_BUILD == NO ]]; then
|
||||||
# Only build static libraries if no shared FFmpeg.
|
# Only build static libraries if no shared FFmpeg.
|
||||||
if [[ $SRS_SHARED_FFMPEG == NO ]]; then
|
if [[ $SRS_SHARED_FFMPEG == NO ]]; then
|
||||||
|
@ -677,8 +682,10 @@ if [[ $SRS_FFMPEG_FIT == YES ]]; then
|
||||||
fi
|
fi
|
||||||
# For cross-build.
|
# For cross-build.
|
||||||
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
||||||
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --enable-cross-compile --arch=arm --target-os=linux"
|
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --enable-cross-compile --target-os=linux"
|
||||||
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --cross-prefix=$(echo $SRS_TOOL_CC|awk -F 'gcc' '{print $1}')"
|
if [[ $SRS_CROSS_BUILD_ARMV7 ]]; then FFMPEG_OPTIONS="$FFMPEG_OPTIONS --arch=arm"; fi
|
||||||
|
if [[ $SRS_CROSS_BUILD_AARCH64 ]]; then FFMPEG_OPTIONS="$FFMPEG_OPTIONS --arch=aarch64"; fi
|
||||||
|
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --cross-prefix=$SRS_CROSS_BUILD_PREFIX"
|
||||||
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --cc=${SRS_TOOL_CC} --cxx=${SRS_TOOL_CXX} --ar=${SRS_TOOL_AR} --ld=${_ST_LD}"
|
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --cc=${SRS_TOOL_CC} --cxx=${SRS_TOOL_CXX} --ar=${SRS_TOOL_AR} --ld=${_ST_LD}"
|
||||||
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --enable-decoder=opus --enable-encoder=opus"
|
FFMPEG_OPTIONS="$FFMPEG_OPTIONS --enable-decoder=opus --enable-encoder=opus"
|
||||||
else
|
else
|
||||||
|
|
|
@ -77,6 +77,13 @@ SRS_GPROF=NO # Performance test: gprof
|
||||||
SRS_X86_X64=NO # For x86_64 servers
|
SRS_X86_X64=NO # For x86_64 servers
|
||||||
SRS_OSX=NO #For osx/macOS PC.
|
SRS_OSX=NO #For osx/macOS PC.
|
||||||
SRS_CROSS_BUILD=NO #For cross build, for example, on Ubuntu.
|
SRS_CROSS_BUILD=NO #For cross build, for example, on Ubuntu.
|
||||||
|
# For cross build, whether armv7 or armv8(aarch64).
|
||||||
|
SRS_CROSS_BUILD_ARMV7=NO
|
||||||
|
SRS_CROSS_BUILD_AARCH64=NO
|
||||||
|
# For cross build, the host, for example(libsrtp), --host=aarch64-linux-gnu
|
||||||
|
SRS_CROSS_BUILD_HOST=
|
||||||
|
# For cross build, the cross prefix, for example(FFmpeg), --cross-prefix=aarch64-linux-gnu-
|
||||||
|
SRS_CROSS_BUILD_PREFIX=
|
||||||
#
|
#
|
||||||
#####################################################################################
|
#####################################################################################
|
||||||
# Toolchain for cross-build on Ubuntu for ARM or MIPS.
|
# Toolchain for cross-build on Ubuntu for ARM or MIPS.
|
||||||
|
@ -383,6 +390,14 @@ function apply_auto_options() {
|
||||||
SRS_X86_X64=YES; opt="--x86-x64 $opt";
|
SRS_X86_X64=YES; opt="--x86-x64 $opt";
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
||||||
|
SRS_CROSS_BUILD_HOST=$(echo $SRS_TOOL_CC|awk -F '-gcc' '{print $1}')
|
||||||
|
SRS_CROSS_BUILD_PREFIX="${SRS_CROSS_BUILD_HOST}-"
|
||||||
|
echo $SRS_TOOL_CC| grep arm >/dev/null 2>&1 && SRS_CROSS_BUILD_ARMV7=YES
|
||||||
|
echo $SRS_TOOL_CC| grep aarch64 >/dev/null 2>&1 && SRS_CROSS_BUILD_AARCH64=YES
|
||||||
|
echo "For cross build, host: $SRS_CROSS_BUILD_HOST, prefix: $SRS_CROSS_BUILD_PREFIX, armv7: $SRS_CROSS_BUILD_ARMV7, aarch64: $SRS_CROSS_BUILD_AARCH64"
|
||||||
|
fi
|
||||||
|
|
||||||
# The SRT code in SRS requires c++11, although we build libsrt without c++11.
|
# The SRT code in SRS requires c++11, although we build libsrt without c++11.
|
||||||
# TODO: FIXME: Remove c++11 code in SRT of SRS.
|
# TODO: FIXME: Remove c++11 code in SRT of SRS.
|
||||||
if [[ $SRS_SRT == YES ]]; then
|
if [[ $SRS_SRT == YES ]]; then
|
||||||
|
|
|
@ -20,7 +20,7 @@ fi
|
||||||
SRS_PLATFORM="${SRS_PLATFORM}-SRS4"
|
SRS_PLATFORM="${SRS_PLATFORM}-SRS4"
|
||||||
|
|
||||||
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
if [[ $SRS_CROSS_BUILD == YES ]]; then
|
||||||
SRS_PLATFORM="${SRS_PLATFORM}-CROSSBUILD"
|
SRS_PLATFORM="${SRS_PLATFORM}-CROSSBUILD-$(echo $SRS_TOOL_CC|awk -F - '{print $1}')"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "SRS_WORKDIR: ${SRS_WORKDIR}, SRS_OBJS_DIR: ${SRS_OBJS_DIR}, SRS_OBJS: ${SRS_OBJS}, SRS_PLATFORM: ${SRS_PLATFORM}"
|
echo "SRS_WORKDIR: ${SRS_WORKDIR}, SRS_OBJS_DIR: ${SRS_OBJS_DIR}, SRS_OBJS: ${SRS_OBJS}, SRS_PLATFORM: ${SRS_PLATFORM}"
|
||||||
|
|
|
@ -9,6 +9,6 @@
|
||||||
|
|
||||||
#define VERSION_MAJOR 4
|
#define VERSION_MAJOR 4
|
||||||
#define VERSION_MINOR 0
|
#define VERSION_MINOR 0
|
||||||
#define VERSION_REVISION 127
|
#define VERSION_REVISION 128
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue