Build Android cpu-features from sources (GH #491)
Thanks to Deadpikle for suggesting the strategypull/507/head
parent
fcee76594c
commit
6e1a07025c
|
|
@ -77,7 +77,12 @@ ifeq ($(IS_ANDROID),1)
|
||||||
CXXFLAGS += -I$(AOSP_BITS_INC)
|
CXXFLAGS += -I$(AOSP_BITS_INC)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# STL headers
|
||||||
LDLIBS += $(AOSP_STL_LIB)
|
LDLIBS += $(AOSP_STL_LIB)
|
||||||
|
|
||||||
|
# Source files copied into PWD for Android cpu-features
|
||||||
|
# setenv-android.sh does the copying. Its a dirty compile.
|
||||||
|
AOSP_CPU_OBJ = cpu-features.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# ARM embedded cross-compile configuration.
|
# ARM embedded cross-compile configuration.
|
||||||
|
|
@ -221,7 +226,7 @@ lean: static dynamic cryptest.exe
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
-$(RM) adhoc.cpp.o adhoc.cpp.proto.o $(LIBOBJS) $(TESTOBJS) $(DLLOBJS) $(LIBIMPORTOBJS) $(TESTIMPORTOBJS) $(DLLTESTOBJS)
|
-$(RM) adhoc.cpp.o adhoc.cpp.proto.o $(LIBOBJS) cpu-features.o $(TESTOBJS) $(DLLOBJS) $(LIBIMPORTOBJS) $(TESTIMPORTOBJS) $(DLLTESTOBJS)
|
||||||
@-$(RM) libcryptopp.a libcryptopp.dylib cryptopp.dll libcryptopp.dll.a libcryptopp.import.a
|
@-$(RM) libcryptopp.a libcryptopp.dylib cryptopp.dll libcryptopp.dll.a libcryptopp.import.a
|
||||||
@-$(RM) libcryptopp.so libcryptopp.so$(SOLIB_COMPAT_SUFFIX) libcryptopp.so$(SOLIB_VERSION_SUFFIX)
|
@-$(RM) libcryptopp.so libcryptopp.so$(SOLIB_COMPAT_SUFFIX) libcryptopp.so$(SOLIB_VERSION_SUFFIX)
|
||||||
@-$(RM) cryptest.exe dlltest.exe cryptest.import.exe cryptest.info ct rdrand-???.o
|
@-$(RM) cryptest.exe dlltest.exe cryptest.import.exe cryptest.info ct rdrand-???.o
|
||||||
|
|
@ -282,8 +287,8 @@ remove uninstall:
|
||||||
@-$(RM) $(DESTDIR)$(LIBDIR)/libcryptopp.so$(SOLIB_COMPAT_SUFFIX)
|
@-$(RM) $(DESTDIR)$(LIBDIR)/libcryptopp.so$(SOLIB_COMPAT_SUFFIX)
|
||||||
@-$(RM) $(DESTDIR)$(LIBDIR)/libcryptopp.so
|
@-$(RM) $(DESTDIR)$(LIBDIR)/libcryptopp.so
|
||||||
|
|
||||||
libcryptopp.a: $(LIBOBJS)
|
libcryptopp.a: $(LIBOBJS) $(AOSP_CPU_OBJ)
|
||||||
$(AR) $(ARFLAGS) $@ $(LIBOBJS)
|
$(AR) $(ARFLAGS) $@ $(LIBOBJS) $(AOSP_CPU_OBJ)
|
||||||
$(RANLIB) $@
|
$(RANLIB) $@
|
||||||
|
|
||||||
ifeq ($(HAS_SOLIB_VERSION),1)
|
ifeq ($(HAS_SOLIB_VERSION),1)
|
||||||
|
|
@ -323,6 +328,9 @@ ifeq ($(wildcard GNUmakefile.deps),GNUmakefile.deps)
|
||||||
-include GNUmakefile.deps
|
-include GNUmakefile.deps
|
||||||
endif # Dependencies
|
endif # Dependencies
|
||||||
|
|
||||||
|
cpu-features.o: cpu-features.h cpu-features.c
|
||||||
|
$(CXX) $(strip $(CXXFLAGS) -fpermissive) -c cpu-features.c
|
||||||
|
|
||||||
%.o : %.cpp
|
%.o : %.cpp
|
||||||
$(CXX) $(strip $(CXXFLAGS)) -c $<
|
$(CXX) $(strip $(CXXFLAGS)) -c $<
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -356,6 +356,22 @@ if [ ! -z "$AOSP_BITS_INC" ]; then
|
||||||
export AOSP_BITS_INC
|
export AOSP_BITS_INC
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Now that we are using cpu-features from Android rather than CPU probing, we
|
||||||
|
# need to copy cpu-features.h and cpu-features.c from the NDK into our source
|
||||||
|
# directory and then build it.
|
||||||
|
|
||||||
|
if [[ ! -e "$ANDROID_NDK_ROOT/sources/android/cpufeatures/cpu-features.h" ]]; then
|
||||||
|
echo "ERROR: Unable to locate cpu-features.h"
|
||||||
|
[ "$0" = "$BASH_SOURCE" ] && exit 1 || return 1
|
||||||
|
fi
|
||||||
|
cp "$ANDROID_NDK_ROOT/sources/android/cpufeatures/cpu-features.h" .
|
||||||
|
|
||||||
|
if [[ ! -e "$ANDROID_NDK_ROOT/sources/android/cpufeatures/cpu-features.c" ]]; then
|
||||||
|
echo "ERROR: Unable to locate cpu-features.c"
|
||||||
|
[ "$0" = "$BASH_SOURCE" ] && exit 1 || return 1
|
||||||
|
fi
|
||||||
|
cp "$ANDROID_NDK_ROOT/sources/android/cpufeatures/cpu-features.c" .
|
||||||
|
|
||||||
#####################################################################
|
#####################################################################
|
||||||
|
|
||||||
VERBOSE=1
|
VERBOSE=1
|
||||||
|
|
@ -371,6 +387,10 @@ if [ ! -z "$VERBOSE" ] && [ "$VERBOSE" != "0" ]; then
|
||||||
if [ ! -z "$AOSP_BITS_INC" ]; then
|
if [ ! -z "$AOSP_BITS_INC" ]; then
|
||||||
echo "AOSP_BITS_INC: $AOSP_BITS_INC"
|
echo "AOSP_BITS_INC: $AOSP_BITS_INC"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -e "cpu-features.h" ] && [ -e "cpu-features.c" ]; then
|
||||||
|
echo "CPU FEATURES: cpu-features.h and cpu-features.c are present"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#####################################################################
|
#####################################################################
|
||||||
|
|
|
||||||
152
cpu.cpp
152
cpu.cpp
|
|
@ -17,15 +17,62 @@
|
||||||
# include <sys/systemcfg.h>
|
# include <sys/systemcfg.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(__linux__)
|
||||||
|
# include <sys/auxv.h>
|
||||||
|
# ifndef HWCAP_ASIMD
|
||||||
|
# define HWCAP_ASIMD (1 << 1)
|
||||||
|
# endif
|
||||||
|
# ifndef HWCAP_ARM_NEON
|
||||||
|
# define HWCAP_ARM_NEON 4096
|
||||||
|
# endif
|
||||||
|
# ifndef HWCAP_CRC32
|
||||||
|
# define HWCAP_CRC32 (1 << 7)
|
||||||
|
# endif
|
||||||
|
# ifndef HWCAP2_CRC32
|
||||||
|
# define HWCAP2_CRC32 (1 << 4)
|
||||||
|
# endif
|
||||||
|
# ifndef HWCAP_PMULL
|
||||||
|
# define HWCAP_PMULL (1 << 4)
|
||||||
|
# endif
|
||||||
|
# ifndef HWCAP2_PMULL
|
||||||
|
# define HWCAP2_PMULL (1 << 1)
|
||||||
|
# endif
|
||||||
|
# ifndef HWCAP_AES
|
||||||
|
# define HWCAP_AES (1 << 3)
|
||||||
|
# endif
|
||||||
|
# ifndef HWCAP2_AES
|
||||||
|
# define HWCAP2_AES (1 << 0)
|
||||||
|
# endif
|
||||||
|
# ifndef HWCAP_SHA1
|
||||||
|
# define HWCAP_SHA1 (1 << 5)
|
||||||
|
# endif
|
||||||
|
# ifndef HWCAP_SHA2
|
||||||
|
# define HWCAP_SHA2 (1 << 6)
|
||||||
|
# endif
|
||||||
|
# ifndef HWCAP2_SHA1
|
||||||
|
# define HWCAP2_SHA1 (1 << 2)
|
||||||
|
# endif
|
||||||
|
# ifndef HWCAP2_SHA2
|
||||||
|
# define HWCAP2_SHA2 (1 << 3)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(__APPLE__) && defined(__aarch64__)
|
||||||
|
# include <sys/utsname.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// http://android.googlesource.com/platform/ndk/+/master/sources/android/cpufeatures/cpu-features.h
|
||||||
|
// The cpu-features header and source file are located in ANDROID_NDK_ROOT/sources/android
|
||||||
|
// setenv-android.sh will copy the header and source file into PWD and the makefile will build it in place.
|
||||||
|
#if defined(__ANDROID__)
|
||||||
|
# include "cpu-features.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef CRYPTOPP_GNU_STYLE_INLINE_ASSEMBLY
|
#ifdef CRYPTOPP_GNU_STYLE_INLINE_ASSEMBLY
|
||||||
# include <signal.h>
|
# include <signal.h>
|
||||||
# include <setjmp.h>
|
# include <setjmp.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__ANDROID__)
|
|
||||||
# include <machine/cpu-features.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
NAMESPACE_BEGIN(CryptoPP)
|
NAMESPACE_BEGIN(CryptoPP)
|
||||||
|
|
||||||
#ifndef CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY
|
#ifndef CRYPTOPP_MS_STYLE_INLINE_ASSEMBLY
|
||||||
|
|
@ -324,50 +371,6 @@ void DetectX86Features()
|
||||||
|
|
||||||
#elif (CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARM64)
|
#elif (CRYPTOPP_BOOL_ARM32 || CRYPTOPP_BOOL_ARM64)
|
||||||
|
|
||||||
#if defined(__linux__)
|
|
||||||
# include <sys/auxv.h>
|
|
||||||
# ifndef HWCAP_ASIMD
|
|
||||||
# define HWCAP_ASIMD (1 << 1)
|
|
||||||
# endif
|
|
||||||
# ifndef HWCAP_ARM_NEON
|
|
||||||
# define HWCAP_ARM_NEON 4096
|
|
||||||
# endif
|
|
||||||
# ifndef HWCAP_CRC32
|
|
||||||
# define HWCAP_CRC32 (1 << 7)
|
|
||||||
# endif
|
|
||||||
# ifndef HWCAP2_CRC32
|
|
||||||
# define HWCAP2_CRC32 (1 << 4)
|
|
||||||
# endif
|
|
||||||
# ifndef HWCAP_PMULL
|
|
||||||
# define HWCAP_PMULL (1 << 4)
|
|
||||||
# endif
|
|
||||||
# ifndef HWCAP2_PMULL
|
|
||||||
# define HWCAP2_PMULL (1 << 1)
|
|
||||||
# endif
|
|
||||||
# ifndef HWCAP_AES
|
|
||||||
# define HWCAP_AES (1 << 3)
|
|
||||||
# endif
|
|
||||||
# ifndef HWCAP2_AES
|
|
||||||
# define HWCAP2_AES (1 << 0)
|
|
||||||
# endif
|
|
||||||
# ifndef HWCAP_SHA1
|
|
||||||
# define HWCAP_SHA1 (1 << 5)
|
|
||||||
# endif
|
|
||||||
# ifndef HWCAP_SHA2
|
|
||||||
# define HWCAP_SHA2 (1 << 6)
|
|
||||||
# endif
|
|
||||||
# ifndef HWCAP2_SHA1
|
|
||||||
# define HWCAP2_SHA1 (1 << 2)
|
|
||||||
# endif
|
|
||||||
# ifndef HWCAP2_SHA2
|
|
||||||
# define HWCAP2_SHA2 (1 << 3)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__APPLE__) && defined(__aarch64__)
|
|
||||||
# include <sys/utsname.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool CRYPTOPP_SECTION_INIT g_ArmDetectionDone = false;
|
bool CRYPTOPP_SECTION_INIT g_ArmDetectionDone = false;
|
||||||
bool CRYPTOPP_SECTION_INIT g_hasNEON = false, CRYPTOPP_SECTION_INIT g_hasPMULL = false, CRYPTOPP_SECTION_INIT g_hasCRC32 = false;
|
bool CRYPTOPP_SECTION_INIT g_hasNEON = false, CRYPTOPP_SECTION_INIT g_hasPMULL = false, CRYPTOPP_SECTION_INIT g_hasCRC32 = false;
|
||||||
bool CRYPTOPP_SECTION_INIT g_hasAES = false, CRYPTOPP_SECTION_INIT g_hasSHA1 = false, CRYPTOPP_SECTION_INIT g_hasSHA2 = false;
|
bool CRYPTOPP_SECTION_INIT g_hasAES = false, CRYPTOPP_SECTION_INIT g_hasSHA1 = false, CRYPTOPP_SECTION_INIT g_hasSHA2 = false;
|
||||||
|
|
@ -395,11 +398,13 @@ extern bool CPU_ProbePMULL();
|
||||||
|
|
||||||
inline bool CPU_QueryNEON()
|
inline bool CPU_QueryNEON()
|
||||||
{
|
{
|
||||||
#if defined(__ANDROID__) && (defined(__aarch32__) || defined(__aarch64__))
|
#if defined(__ANDROID__) && defined(__aarch64__)
|
||||||
if (android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_ASIMD)
|
if ((android_getCpuFamily() & ANDROID_CPU_FAMILY_ARM64) &&
|
||||||
|
(android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_ASIMD))
|
||||||
return true;
|
return true;
|
||||||
#elif defined(__ANDROID__) && defined(__arm__)
|
#elif defined(__ANDROID__) && defined(__arm__)
|
||||||
if (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON)
|
if ((android_getCpuFamily() & ANDROID_CPU_FAMILY_ARM) &&
|
||||||
|
(android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON))
|
||||||
return true;
|
return true;
|
||||||
#elif defined(__linux__) && defined(__aarch64__)
|
#elif defined(__linux__) && defined(__aarch64__)
|
||||||
if (getauxval(AT_HWCAP) & HWCAP_ASIMD)
|
if (getauxval(AT_HWCAP) & HWCAP_ASIMD)
|
||||||
|
|
@ -419,8 +424,13 @@ inline bool CPU_QueryNEON()
|
||||||
|
|
||||||
inline bool CPU_QueryCRC32()
|
inline bool CPU_QueryCRC32()
|
||||||
{
|
{
|
||||||
#if defined(__ANDROID__) && (defined(__aarch64__) || defined(__aarch32__))
|
#if defined(__ANDROID__) && defined(__aarch64__)
|
||||||
if (android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_CRC32)
|
if ((android_getCpuFamily() & ANDROID_CPU_FAMILY_ARM64) &&
|
||||||
|
(android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_CRC32))
|
||||||
|
return true;
|
||||||
|
#elif defined(__ANDROID__) && defined(__aarch32__)
|
||||||
|
if ((android_getCpuFamily() & ANDROID_CPU_FAMILY_ARM) &&
|
||||||
|
(android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_CRC32))
|
||||||
return true;
|
return true;
|
||||||
#elif defined(__linux__) && defined(__aarch64__)
|
#elif defined(__linux__) && defined(__aarch64__)
|
||||||
if (getauxval(AT_HWCAP) & HWCAP_CRC32)
|
if (getauxval(AT_HWCAP) & HWCAP_CRC32)
|
||||||
|
|
@ -437,8 +447,13 @@ inline bool CPU_QueryCRC32()
|
||||||
|
|
||||||
inline bool CPU_QueryPMULL()
|
inline bool CPU_QueryPMULL()
|
||||||
{
|
{
|
||||||
#if defined(__ANDROID__) && (defined(__aarch64__) || defined(__aarch32__))
|
#if defined(__ANDROID__) && defined(__aarch64__)
|
||||||
if (android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_PMULL)
|
if ((android_getCpuFamily() & ANDROID_CPU_FAMILY_ARM64) &&
|
||||||
|
(android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_PMULL))
|
||||||
|
return true;
|
||||||
|
#elif defined(__ANDROID__) && defined(__aarch32__)
|
||||||
|
if ((android_getCpuFamily() & ANDROID_CPU_FAMILY_ARM) &&
|
||||||
|
(android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_PMULL))
|
||||||
return true;
|
return true;
|
||||||
#elif defined(__linux__) && defined(__aarch64__)
|
#elif defined(__linux__) && defined(__aarch64__)
|
||||||
if (getauxval(AT_HWCAP) & HWCAP_PMULL)
|
if (getauxval(AT_HWCAP) & HWCAP_PMULL)
|
||||||
|
|
@ -455,8 +470,13 @@ inline bool CPU_QueryPMULL()
|
||||||
|
|
||||||
inline bool CPU_QueryAES()
|
inline bool CPU_QueryAES()
|
||||||
{
|
{
|
||||||
#if defined(__ANDROID__) && (defined(__aarch64__) || defined(__aarch32__))
|
#if defined(__ANDROID__) && defined(__aarch64__)
|
||||||
if (android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_AES)
|
if ((android_getCpuFamily() & ANDROID_CPU_FAMILY_ARM64) &&
|
||||||
|
(android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_AES)
|
||||||
|
return true;
|
||||||
|
#elif defined(__ANDROID__) && defined(__aarch32__)
|
||||||
|
if (android_getCpuFamily() & ANDROID_CPU_FAMILY_ARM)) &&
|
||||||
|
(android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_AES)
|
||||||
return true;
|
return true;
|
||||||
#elif defined(__linux__) && defined(__aarch64__)
|
#elif defined(__linux__) && defined(__aarch64__)
|
||||||
if (getauxval(AT_HWCAP) & HWCAP_AES)
|
if (getauxval(AT_HWCAP) & HWCAP_AES)
|
||||||
|
|
@ -485,8 +505,13 @@ inline bool CPU_QueryAES()
|
||||||
|
|
||||||
inline bool CPU_QuerySHA1()
|
inline bool CPU_QuerySHA1()
|
||||||
{
|
{
|
||||||
#if defined(__ANDROID__) && (defined(__aarch64__) || defined(__aarch32__))
|
#if defined(__ANDROID__) && defined(__aarch64__)
|
||||||
if (android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_SHA1)
|
if ((android_getCpuFamily() & ANDROID_CPU_FAMILY_ARM64) &&
|
||||||
|
(android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_SHA1))
|
||||||
|
return true;
|
||||||
|
#elif defined(__ANDROID__) && defined(__aarch32__)
|
||||||
|
if ((android_getCpuFamily() & ANDROID_CPU_FAMILY_ARM) &&
|
||||||
|
(android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_SHA1))
|
||||||
return true;
|
return true;
|
||||||
#elif defined(__linux__) && defined(__aarch64__)
|
#elif defined(__linux__) && defined(__aarch64__)
|
||||||
if (getauxval(AT_HWCAP) & HWCAP_SHA1)
|
if (getauxval(AT_HWCAP) & HWCAP_SHA1)
|
||||||
|
|
@ -515,8 +540,13 @@ inline bool CPU_QuerySHA1()
|
||||||
|
|
||||||
inline bool CPU_QuerySHA2()
|
inline bool CPU_QuerySHA2()
|
||||||
{
|
{
|
||||||
#if defined(__ANDROID__) && (defined(__aarch64__) || defined(__aarch32__))
|
#if defined(__ANDROID__) && defined(__aarch64__)
|
||||||
if (android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_SHA2)
|
if ((android_getCpuFamily() & ANDROID_CPU_FAMILY_ARM64) &&
|
||||||
|
(android_getCpuFeatures() & ANDROID_CPU_ARM64_FEATURE_SHA2))
|
||||||
|
return true;
|
||||||
|
#elif defined(__ANDROID__) && defined(__aarch32__)
|
||||||
|
if ((android_getCpuFamily() & ANDROID_CPU_FAMILY_ARM) &&
|
||||||
|
(android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_SHA2))
|
||||||
return true;
|
return true;
|
||||||
#elif defined(__linux__) && defined(__aarch64__)
|
#elif defined(__linux__) && defined(__aarch64__)
|
||||||
if (getauxval(AT_HWCAP) & HWCAP_SHA2)
|
if (getauxval(AT_HWCAP) & HWCAP_SHA2)
|
||||||
|
|
|
||||||
|
|
@ -356,6 +356,22 @@ if [ ! -z "$AOSP_BITS_INC" ]; then
|
||||||
export AOSP_BITS_INC
|
export AOSP_BITS_INC
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Now that we are using cpu-features from Android rather than CPU probing, we
|
||||||
|
# need to copy cpu-features.h and cpu-features.c from the NDK into our source
|
||||||
|
# directory and then build it.
|
||||||
|
|
||||||
|
if [[ ! -e "$ANDROID_NDK_ROOT/sources/android/cpufeatures/cpu-features.h" ]]; then
|
||||||
|
echo "ERROR: Unable to locate cpu-features.h"
|
||||||
|
[ "$0" = "$BASH_SOURCE" ] && exit 1 || return 1
|
||||||
|
fi
|
||||||
|
cp "$ANDROID_NDK_ROOT/sources/android/cpufeatures/cpu-features.h" .
|
||||||
|
|
||||||
|
if [[ ! -e "$ANDROID_NDK_ROOT/sources/android/cpufeatures/cpu-features.c" ]]; then
|
||||||
|
echo "ERROR: Unable to locate cpu-features.c"
|
||||||
|
[ "$0" = "$BASH_SOURCE" ] && exit 1 || return 1
|
||||||
|
fi
|
||||||
|
cp "$ANDROID_NDK_ROOT/sources/android/cpufeatures/cpu-features.c" .
|
||||||
|
|
||||||
#####################################################################
|
#####################################################################
|
||||||
|
|
||||||
VERBOSE=1
|
VERBOSE=1
|
||||||
|
|
@ -371,6 +387,10 @@ if [ ! -z "$VERBOSE" ] && [ "$VERBOSE" != "0" ]; then
|
||||||
if [ ! -z "$AOSP_BITS_INC" ]; then
|
if [ ! -z "$AOSP_BITS_INC" ]; then
|
||||||
echo "AOSP_BITS_INC: $AOSP_BITS_INC"
|
echo "AOSP_BITS_INC: $AOSP_BITS_INC"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -e "cpu-features.h" ] && [ -e "cpu-features.c" ]; then
|
||||||
|
echo "CPU FEATURES: cpu-features.h and cpu-features.c are present"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#####################################################################
|
#####################################################################
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue