[SCons] Simplify building cmake libraries.

Add an extra "CMakeBuild" method to reduce configuration needed by each
library.
This commit is contained in:
Fabio Alessandrelli
2023-06-24 19:55:26 +02:00
parent ae0dd0626a
commit 0771084b54
2 changed files with 36 additions and 32 deletions

View File

@@ -101,6 +101,18 @@ def cmake_generator(target, source, env, for_signature):
]
def cmake_build(env, target_dir, source_dir, cmake_outputs=[], cmake_targets=[], cmake_options=[], dependencies=[]):
cmake_env = env.Clone()
target = env.Dir("{}/{}/{}".format(target_dir, env["platform"], env["arch"]))
source = env.Dir(source_dir)
builder_targets = [target] + [str(target) + "/" + f for f in cmake_outputs]
builder_sources = [source] + dependencies
cmake_env.Append(CMAKECONFFLAGS=["-D%s=%s" % it for it in cmake_options.items()])
if len(cmake_targets) > 0:
cmake_env.Append(CMAKEBUILDFLAGS=["-t"] + [t for t in cmake_targets])
return cmake_env.CMake(builder_targets, builder_sources)
def options(opts):
opts.Add("cmake_default_flags", "Default CMake platform flags override, will be autodetected if not specified.", "")
@@ -120,3 +132,4 @@ def generate(env):
env["CMAKEBUILDFLAGS"] = SCons.Util.CLVar("")
env["CMAKEBUILDCOM"] = "$CMAKE --build ${TARGET.dir} $CMAKEBUILDFLAGS -j$CMAKEBUILDJOBS"
env["BUILDERS"]["CMake"] = SCons.Builder.Builder(generator=cmake_generator, emitter=cmake_emitter)
env.AddMethod(cmake_build, "CMakeBuild")

View File

@@ -1,8 +1,8 @@
import os
def rtc_cmake_config(env):
config = {
def build_library(env, ssl):
rtc_config = {
"CMAKE_BUILD_TYPE": "RelWithDebInfo" if env["debug_symbols"] else "Release",
"USE_NICE": 0,
"NO_WEBSOCKET": 1,
@@ -15,21 +15,31 @@ def rtc_cmake_config(env):
"OPENSSL_CRYPTO_LIBRARY": env["SSL_CRYPTO_LIBRARY"],
"OPENSSL_ROOT_DIR": env["SSL_INSTALL"],
}
return config
is_msvc = env.get("is_msvc", False)
lib_ext = ".lib" if is_msvc else ".a"
lib_prefix = "" if is_msvc else "lib"
rtc_libs = [
"{}datachannel-static{}".format(lib_prefix, lib_ext),
"deps/libjuice/{}juice-static{}".format(lib_prefix, lib_ext),
"deps/libsrtp/{}srtp2{}".format(lib_prefix, lib_ext),
"deps/usrsctp/usrsctplib/{}usrsctp{}".format(lib_prefix, lib_ext),
]
# Build libdatachannel
rtc = env.CMakeBuild(
"#bin/thirdparty/libdatachannel/",
"#thirdparty/libdatachannel",
cmake_options=rtc_config,
cmake_outputs=rtc_libs,
cmake_targets=["datachannel-static"],
dependencies=ssl,
)
def build_library(env, ssl):
# Configure env.
if env["platform"] == "windows":
env.PrependUnique(LIBS=["iphlpapi", "bcrypt"])
env.Prepend(LIBS=list(filter(lambda f: str(f).endswith(lib_ext), rtc)))
env.Append(CPPPATH=["#thirdparty/libdatachannel/include"])
env.Prepend(LIBS=env["RTC_LIBS"])
rtc_env = env.Clone()
rtc_targets = [env.Dir(env["RTC_BUILD"])] + env["RTC_LIBS"]
rtc_sources = [env.Dir(env["RTC_SOURCE"])] + ssl
rtc_env.Append(CMAKECONFFLAGS=["-D%s=%s" % it for it in rtc_cmake_config(env).items()])
rtc_env.Append(CMAKEBUILDFLAGS=["-t", "datachannel-static"])
rtc = rtc_env.CMake(rtc_targets, rtc_sources)
return rtc
@@ -38,23 +48,4 @@ def exists(env):
def generate(env):
env["RTC_SOURCE"] = env.Dir("#thirdparty/libdatachannel").abspath
env["RTC_BUILD"] = env.Dir("#bin/thirdparty/libdatachannel/{}/{}".format(env["platform"], env["arch"])).abspath
env["RTC_INCLUDE"] = env["RTC_SOURCE"] + "/include"
lib_ext = ".a"
lib_prefix = "lib"
if env.get("is_msvc", False):
lib_ext = ".lib"
lib_prefix = ""
env["RTC_LIBS"] = [
env.File(env["RTC_BUILD"] + "/" + lib)
for lib in [
"{}datachannel-static{}".format(lib_prefix, lib_ext),
"deps/libjuice/{}juice-static{}".format(lib_prefix, lib_ext),
"deps/libsrtp/{}srtp2{}".format(lib_prefix, lib_ext),
"deps/usrsctp/usrsctplib/{}usrsctp{}".format(lib_prefix, lib_ext),
]
]
env.AddMethod(build_library, "BuildLibDataChannel")
env.Append(LIBPATH=[env["RTC_BUILD"]])
env.Append(CPPPATH=[env["RTC_INCLUDE"]])