1

I'm trying to compile WebRTC M85 with OpenSSL and I have to edit some BUILD.gn files to modify hard-coded dependencies to BoringSSL.

The command line is something like (simplified) :

gn gen "intermediate/" --args="target_cpu=\"x64\" rtc_build_ssl=false rtc_ssl_root=\"path/to/openssl/include\""

But when it runs I receive this error :

ERROR at //third_party/libsrtp/BUILD.gn:118:7: Undefined identifier
if (rtc_build_ssl) {
  ^------------
See //pc/BUILD.gn:135:15: which caused the file to be included.
deps += [ "//third_party/libsrtp" ]

The code in third_party/libsrtp/BUILD.gn :

static_library("libsrtp") {
 
  ...
  if (rtc_build_ssl) {
      public_deps += [ "//third_party/boringssl:boringssl" ]
  }
}

third_party/libsrtp/BUILD.gn is called via pc/BUILD.gn :

rtc_library("rtc_pc_base") {
    visibility = [ "*" ]
    ...

    if (rtc_build_libsrtp) {
      deps += [ "//third_party/libsrtp" ]
    }
}

And pc/BUILD.gn is loaded directly in the root BUILD.gn :

if (!build_with_chromium) {
  # Target to build all the WebRTC production code.
  rtc_static_library("webrtc") {

    deps = [
      ":webrtc_common",
      "api:create_peerconnection_factory",
      ...
      "pc:libjingle_peerconnection",
      "pc:peerconnection",
      "pc:rtc_pc",
      "pc:rtc_pc_base",
      "rtc_base",
      ...
    ]
  }
}

So it seems that the argument rtc_build_ssl, that is working everywhere else in BUILD.gn files is not populated to this third_party/libsrtp/BUILD.gn

I'm not familiar to GN files, is there something to add in order the arguments to stay defined in sub-included files ?

SamT
  • 528
  • 4
  • 14

1 Answers1

0

what is your version?I fail to build webrtc with openssl in m86, m96. you can change the ninjia file in the out//obj/third_party/libsrtp.ninjia. I have this kind error in the link for the application in example.

root@ubuntu:~/webrtc/webrtc-checkout/src$ gn gen out/Release --args="is_debug=false use_custom_libcxx=false use_sysroot=false rtc_include_tests=false rtc_build_ssl=false rtc_builtin_ssl_root_certificates=false rtc_ssl_root=\"/usr/include\""
Done. Made 1116 targets from 268 files in 623ms

root@ubuntu:~/webrtc/webrtc-checkout/src$ ninja -C out/Release
ninja: Entering directory `out/Release'
[2442/2576] LINK ./stun_prober
FAILED: stun_prober 
python3 "../../build/toolchain/gcc_link_wrapper.py" --output="./stun_prober" -- ../../third_party/llvm-build/Release+Asserts/bin/clang++ -fuse-ld=lld -Wl,--fatal-warnings -Wl,--build-id -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--icf=all -Wl,--color-diagnostics -Wl,--no-call-graph-profile-sort -m64 -no-canonical-prefixes -Werror -Wl,-O2 -Wl,--gc-sections -rdynamic -Wl,-z,defs -Wl,--as-needed -pie -Wl,--disable-new-dtags -o "./stun_prober" -Wl,--start-group @"./stun_prober.rsp"  -Wl,--end-group  -latomic -ldl -lpthread -lrt -lX11
ld.lld: error: undefined symbol: RAND_bytes
>>> referenced by helpers.cc
>>>               rtc_base/helpers.o:(rtc::SecureRandomGenerator::Generate(void*, unsigned long)) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: EVP_MD_CTX_new
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::OpenSSLDigest(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: EVP_MD_CTX_reset
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::OpenSSLDigest(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: EVP_DigestInit_ex
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::OpenSSLDigest(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)) in archive obj/rtc_base/librtc_base.a
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::Finish(void*, unsigned long)) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: EVP_md5
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::GetDigestEVP(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, evp_md_st const**)) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: EVP_sha1
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::GetDigestEVP(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, evp_md_st const**)) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: EVP_sha224
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::GetDigestEVP(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, evp_md_st const**)) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: EVP_sha256
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::GetDigestEVP(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, evp_md_st const**)) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: EVP_sha384
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::GetDigestEVP(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, evp_md_st const**)) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: EVP_sha512
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::GetDigestEVP(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, evp_md_st const**)) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: EVP_MD_CTX_free
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::~OpenSSLDigest()) in archive obj/rtc_base/librtc_base.a
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::~OpenSSLDigest()) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: EVP_MD_size
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::Size() const) in archive obj/rtc_base/librtc_base.a
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::Finish(void*, unsigned long)) in archive obj/rtc_base/librtc_base.a
>>> referenced by openssl_certificate.cc
>>>               rtc_base/openssl_certificate.o:(rtc::OpenSSLCertificate::ComputeDigest(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned char*, unsigned long, unsigned long*) const) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: EVP_DigestUpdate
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::Update(void const*, unsigned long)) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: EVP_DigestFinal_ex
>>> referenced by openssl_digest.cc
>>>               rtc_base/openssl_digest.o:(rtc::OpenSSLDigest::Finish(void*, unsigned long)) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: OPENSSL_init_ssl
>>> referenced by openssl_adapter.cc
>>>               rtc_base/openssl_adapter.o:(rtc::OpenSSLAdapter::InitializeSSL()) in archive obj/rtc_base/librtc_base.a
>>> referenced by openssl_adapter.cc
>>>               rtc_base/openssl_adapter.o:(rtc::OpenSSLAdapter::InitializeSSL()) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: ERR_load_BIO_strings
>>> referenced by openssl_adapter.cc
>>>               rtc_base/openssl_adapter.o:(rtc::OpenSSLAdapter::InitializeSSL()) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: OPENSSL_init_crypto
>>> referenced by openssl_adapter.cc
>>>               rtc_base/openssl_adapter.o:(rtc::OpenSSLAdapter::InitializeSSL()) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: RAND_poll
>>> referenced by openssl_adapter.cc
>>>               rtc_base/openssl_adapter.o:(rtc::OpenSSLAdapter::InitializeSSL()) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: SSL_CTX_up_ref
>>> referenced by openssl_adapter.cc
>>>               rtc_base/openssl_adapter.o:(rtc::OpenSSLAdapter::OpenSSLAdapter(rtc::Socket*, rtc::OpenSSLSessionCache*, rtc::SSLCertificateVerifier*)) in archive obj/rtc_base/librtc_base.a

ld.lld: error: undefined symbol: SSL_free
>>> referenced by openssl_adapter.cc
>>>               rtc_base/openssl_adapter.o:(rtc::OpenSSLAdapter::Cleanup()) in archive obj/rtc_base/librtc_base.a

ld.lld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
[2447/2576] CXX obj/pc/rtp_sender/rtp_sender.o
ninja: build stopped: subcommand failed.

cat
  • 11
  • 1