Building BoringSSL for Android

1,130 views
Skip to first unread message

liorl...@gmail.com

unread,
Jun 30, 2015, 5:44:04 AM6/30/15
to securi...@chromium.org
Hi Everyone,

I'm trying to build Boringssl (https://boringssl.googlesource.com) as a shared library for Android, I followed the build instructions but the build failed.
Here is the log in case that anyone knows what could be the problem:

Liors-MacBook-Pro-2:build liorlevy$ cmake -DANDROID_NATIVE_API_LEVEL=android-9 -DANDROID_ABI=armeabi-v7a -DCMAKE_TOOLCHAIN_FILE=../util/android-cmake/android.toolchain.cmake -DANDROID_NATIVE_API_LEVEL=16 -DBUILD_SHARED_LIBS=1 -GNinja ..
-- The ASM compiler identification is GNU
-- Found assembler: /Users/liorlevy/Desktop/boringssl/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/liorlevy/Desktop/boringssl/build
Liors-MacBook-Pro-2:build liorlevy$ cmake -DANDROID_NATIVE_API_LEVEL=android-9 -DANDROID_ABI=armeabi-v7a -DCMAKE_TOOLCHAIN_FILE=../util/android-cmake/android.toolchain.cmake -DANDROID_NATIVE_API_LEVEL=16 -DBUILD_SHARED_LIBS=1 -GNinja ..
-- Configuring done
-- Generating done
-- Build files have been written to: /Users/liorlevy/Desktop/boringssl/build
Liors-MacBook-Pro-2:build liorlevy$ ninja
[63/401] Generating err_data.c
Function: 2736 bytes of list and 13347 bytes of string data.
Reason: 2556 bytes of list and 12948 bytes of string data.
[324/401] Linking C shared library decrepit/libdecrepit.so
FAILED: : && /Users/liorlevy/Desktop/boringssl/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc -fPIC -fexceptions -Wno-psabi --sysroot=/Users/liorlevy/Desktop/boringssl/android-ndk-r10e/platforms/android-16/arch-arm -funwind-tables -finline-limit=64 -fsigned-char -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fdata-sections -ffunction-sections -Wa,--noexecstack -Wall -Werror -ggdb -fvisibility=hidden -Wshadow -std=c11 -D_XOPEN_SOURCE=700 -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libdecrepit.so -o decrepit/libdecrepit.so decrepit/bio/CMakeFiles/bio_decrepit.dir/base64_bio.c.o decrepit/blowfish/CMakeFiles/blowfish.dir/blowfish.c.o decrepit/cast/CMakeFiles/cast.dir/cast.c.o decrepit/cast/CMakeFiles/cast.dir/cast_tables.c.o decrepit/des/CMakeFiles/des_decrepit.dir/cfb64ede.c.o decrepit/rsa/CMakeFiles/rsa_decrepit.dir/rsa_decrepit.c.o -L/Users/liorlevy/Desktop/boringssl/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/user/libs/armeabi-v7a "/Users/liorlevy/Desktop/boringssl/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libsupc++.a" && :
../decrepit/bio/base64_bio.c:132: error: undefined reference to 'BIO_clear_retry_flags'
../decrepit/bio/base64_bio.c:139: error: undefined reference to 'EVP_DecodeInit'
../decrepit/bio/base64_bio.c:170: error: undefined reference to 'BIO_read'
../decrepit/bio/base64_bio.c:177: error: undefined reference to 'BIO_should_retry'
../decrepit/bio/base64_bio.c:196: error: undefined reference to 'BIO_test_flags'
../decrepit/bio/base64_bio.c:215: error: undefined reference to 'EVP_DecodeUpdate'
../decrepit/bio/base64_bio.c:219: error: undefined reference to 'EVP_DecodeInit'
../decrepit/bio/base64_bio.c:227: error: undefined reference to 'EVP_DecodeInit'
../decrepit/bio/base64_bio.c:262: error: undefined reference to 'BIO_test_flags'
../decrepit/bio/base64_bio.c:266: error: undefined reference to 'EVP_DecodeBlock'
../decrepit/bio/base64_bio.c:286: error: undefined reference to 'EVP_DecodeUpdate'
../decrepit/bio/base64_bio.c:314: error: undefined reference to 'BIO_copy_next_retry'
../decrepit/bio/base64_bio.c:323: error: undefined reference to 'BIO_clear_retry_flags'
../decrepit/bio/base64_bio.c:330: error: undefined reference to 'EVP_EncodeInit'
../decrepit/bio/base64_bio.c:339: error: undefined reference to 'BIO_write'
../decrepit/bio/base64_bio.c:341: error: undefined reference to 'BIO_copy_next_retry'
../decrepit/bio/base64_bio.c:362: error: undefined reference to 'BIO_test_flags'
../decrepit/bio/base64_bio.c:376: error: undefined reference to 'EVP_EncodeBlock'
../decrepit/bio/base64_bio.c:393: error: undefined reference to 'EVP_EncodeBlock'
../decrepit/bio/base64_bio.c:399: error: undefined reference to 'EVP_EncodeUpdate'
../decrepit/bio/base64_bio.c:412: error: undefined reference to 'BIO_write'
../decrepit/bio/base64_bio.c:414: error: undefined reference to 'BIO_copy_next_retry'
../decrepit/bio/base64_bio.c:441: error: undefined reference to 'BIO_ctrl'
../decrepit/bio/base64_bio.c:448: error: undefined reference to 'BIO_ctrl'
../decrepit/bio/base64_bio.c:458: error: undefined reference to 'BIO_ctrl'
../decrepit/bio/base64_bio.c:466: error: undefined reference to 'BIO_ctrl'
../decrepit/bio/base64_bio.c:479: error: undefined reference to 'BIO_test_flags'
../decrepit/bio/base64_bio.c:481: error: undefined reference to 'EVP_EncodeBlock'
../decrepit/bio/base64_bio.c:489: error: undefined reference to 'EVP_EncodeFinal'
../decrepit/bio/base64_bio.c:498: error: undefined reference to 'BIO_clear_retry_flags'
../decrepit/bio/base64_bio.c:500: error: undefined reference to 'BIO_copy_next_retry'
../decrepit/bio/base64_bio.c:521: error: undefined reference to 'BIO_callback_ctrl'
../decrepit/des/cfb64ede.c:92: error: undefined reference to 'DES_encrypt3'
../decrepit/des/cfb64ede.c:114: error: undefined reference to 'DES_encrypt3'
../decrepit/des/cfb64ede.c:161: error: undefined reference to 'DES_encrypt3'
../decrepit/des/cfb64ede.c:201: error: undefined reference to 'DES_encrypt3'
../decrepit/rsa/rsa_decrepit.c:69: error: undefined reference to 'RSA_new'
../decrepit/rsa/rsa_decrepit.c:70: error: undefined reference to 'BN_new'
../decrepit/rsa/rsa_decrepit.c:74: error: undefined reference to 'BN_set_word'
../decrepit/rsa/rsa_decrepit.c:75: error: undefined reference to 'RSA_generate_key_ex'
../decrepit/rsa/rsa_decrepit.c:79: error: undefined reference to 'BN_free'
../decrepit/rsa/rsa_decrepit.c:83: error: undefined reference to 'BN_free'
../decrepit/rsa/rsa_decrepit.c:84: error: undefined reference to 'RSA_free'
collect2: error: ld returned 1 exit status
[324/401] Building CXX object crypto/t...eFiles/test_support.dir/file_test.cc.o
ninja: build stopped: subcommand failed.


Any help would be greatly appreciated.

Thanks,
Lior

Adam Langley

unread,
Jun 30, 2015, 9:03:48 AM6/30/15
to Lior Levy, security-dev
On Tue, Jun 30, 2015 at 2:44 AM, <liorl...@gmail.com> wrote:
> I'm trying to build Boringssl (https://boringssl.googlesource.com) as a shared library for Android, I followed the build instructions but the build failed.
> Here is the log in case that anyone knows what could be the problem:

I'll see if I can fix this today, although I don't have much time.
It's just because we haven't done shared-lib builds for Android from
CMake before. However, you're probably ok: it's just decrepit that
failed, everything else might be ok. You can just delete the reference
to decrepit from the top-level CMake file and it might all work.


Cheers

AGL

anir...@gmail.com

unread,
Aug 4, 2015, 7:57:33 PM8/4/15
to Security-dev, liorl...@gmail.com
I was facing the same issue for libssl.so (even after commenting out libdecrepit.so). All these are symbols in libcrypto.so (which was successfully built). What's happening is that the link commands for libssl.so don't seem to include -lcrypto:

FAILED: : && /opt/android_ndk/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc -fPIC -fexceptions -Wno-psabi --sysroot=/opt/android_ndk/android-ndk-r10e/platforms/android-16/arch-arm -funwind-tables -finline-limit=64 -fsigned-char -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fdata-sections -ffunction-sections -Wa,--noexecstack -Wall -Werror -ggdb -fvisibility=hidden -Wshadow -std=c11 -D_XOPEN_SOURCE=700 -Wl,--fix-cortex-a8 -Wl,--no-undefined -Wl,--gc-sections -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,libssl.so -o ssl/libssl.so ssl/pqueue/CMakeFiles/pqueue.dir/pqueue.c.o ssl/CMakeFiles/ssl.dir/custom_extensions.c.o ssl/CMakeFiles/ssl.dir/d1_both.c.o ssl/CMakeFiles/ssl.dir/d1_clnt.c.o ssl/CMakeFiles/ssl.dir/d1_lib.c.o ssl/CMakeFiles/ssl.dir/d1_meth.c.o ssl/CMakeFiles/ssl.dir/d1_pkt.c.o ssl/CMakeFiles/ssl.dir/d1_srtp.c.o ssl/CMakeFiles/ssl.dir/d1_srvr.c.o ssl/CMakeFiles/ssl.dir/s3_both.c.o ssl/CMakeFiles/ssl.dir/s3_clnt.c.o ssl/CMakeFiles/ssl.dir/s3_enc.c.o ssl/CMakeFiles/ssl.dir/s3_lib.c.o ssl/CMakeFiles/ssl.dir/s3_meth.c.o ssl/CMakeFiles/ssl.dir/s3_pkt.c.o ssl/CMakeFiles/ssl.dir/s3_srvr.c.o ssl/CMakeFiles/ssl.dir/ssl_aead_ctx.c.o ssl/CMakeFiles/ssl.dir/ssl_algs.c.o ssl/CMakeFiles/ssl.dir/ssl_asn1.c.o ssl/CMakeFiles/ssl.dir/ssl_cert.c.o ssl/CMakeFiles/ssl.dir/ssl_cipher.c.o ssl/CMakeFiles/ssl.dir/ssl_lib.c.o ssl/CMakeFiles/ssl.dir/ssl_rsa.c.o ssl/CMakeFiles/ssl.dir/ssl_sess.c.o ssl/CMakeFiles/ssl.dir/ssl_stat.c.o ssl/CMakeFiles/ssl.dir/ssl_txt.c.o ssl/CMakeFiles/ssl.dir/t1_enc.c.o ssl/CMakeFiles/ssl.dir/t1_lib.c.o -L/opt/android_ndk/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/user/libs/armeabi-v7a "/opt/android_ndk/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/libsupc++.a" && :

This is weird because "crypto" is listed in target_link_libraries of ssl/CMakeLists.txt. A temporary solution seems to be to add

set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Lcrypto -lcrypto")

at the bottom of ssl/CMakeLists.txt.

(BoringSSL 78fe4f pulled from master today, cmake 3.2.3, NDK r10e, ninja compiled from source)

Anirudh
Reply all
Reply to author
Forward
0 new messages