Skip to content

Commit b45d3a3

Browse files
authored
Merge pull request #164 from Faless/feat/mbedtls
[TLS] Move from OpenSSL to mbedTLS
2 parents 41648bb + b1ee39e commit b45d3a3

File tree

12 files changed

+162
-370
lines changed

12 files changed

+162
-370
lines changed

.github/workflows/build_release.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ jobs:
193193
fi
194194
tar -xjf ${{ matrix.buildroot }}.tar.bz2
195195
${{ matrix.buildroot }}/relocate-sdk.sh
196+
rm ${{ matrix.buildroot }}/bin/cmake
196197
echo "$GITHUB_WORKSPACE/${{ matrix.buildroot }}/bin" >> $GITHUB_PATH
197198
echo "PKG_CONFIG=$GITHUB_WORKSPACE/${{ matrix.buildroot }}/share/pkgconfig/" >> $GITHUB_ENV
198199
patch -p1 < misc/patches/scons_path.diff
@@ -252,11 +253,10 @@ jobs:
252253
run: |
253254
cp LICENSE artifacts/LICENSE.webrtc-native
254255
cp thirdparty/libdatachannel/LICENSE artifacts/LICENSE.libdatachannel
255-
cp thirdparty/openssl/LICENSE.txt artifacts/LICENSE.openssl
256+
cp thirdparty/mbedtls/LICENSE artifacts/LICENSE.mbedtls
256257
cp thirdparty/libdatachannel/deps/libjuice/LICENSE artifacts/LICENSE.libjuice
257258
cp thirdparty/libdatachannel/deps/usrsctp/LICENSE.md artifacts/LICENSE.usrsctp
258259
cp thirdparty/libdatachannel/deps/libsrtp/LICENSE artifacts/LICENSE.libsrtp
259-
cp thirdparty/libdatachannel/deps/json/LICENSE.MIT artifacts/LICENSE.json
260260
cp thirdparty/libdatachannel/deps/plog/LICENSE artifacts/LICENSE.plog
261261
262262
- name: Package artifacts for release

.gitmodules

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@
77
[submodule "libdatachannel"]
88
path = thirdparty/libdatachannel
99
url = https://github.com/paullouisageneau/libdatachannel.git
10-
[submodule "openssl"]
11-
path = thirdparty/openssl
12-
url = https://github.com/openssl/openssl.git
10+
[submodule "mbedtls"]
11+
path = thirdparty/mbedtls
12+
url = https://github.com/Mbed-TLS/mbedtls.git

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
### Compiling
99

10-
Clone this repository with the following command to checkout all the dependencies: [godot-cpp](https://github.com/godotengine/godot-cpp), [openssl](https://www.openssl.org/) and [libdatachannel](https://github.com/paullouisageneau/libdatachannel) (and sub-dependencies).
10+
Clone this repository with the following command to checkout all the dependencies: [godot-cpp](https://github.com/godotengine/godot-cpp), [mbedTLS](https://github.com/Mbed-TLS/mbedtls) and [libdatachannel](https://github.com/paullouisageneau/libdatachannel) (and sub-dependencies).
1111

1212
```
1313
$ git clone --recurse-submodules https://github.com/godotengine/webrtc-native.git

SConstruct

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -183,18 +183,21 @@ else:
183183
sources.append("src/init_gdextension.cpp")
184184

185185
# Add our build tools
186-
for tool in ["openssl", "cmake", "rtc"]:
186+
for tool in ["cmake", "mbedtls", "rtc"]:
187187
env.Tool(tool, toolpath=["tools"])
188188

189-
ssl = env.OpenSSL()
189+
# Make sure Substfile is also loaded
190+
env.Tool("textfile")
190191

191-
rtc = env.BuildLibDataChannel(ssl)
192+
mbedtls = env.BuildMbedTLS()
193+
194+
rtc = env.BuildLibDataChannel(mbedtls)
192195

193196
# Forces building our sources after OpenSSL and libdatachannel.
194197
# This is because OpenSSL headers are generated by their build system and SCons doesn't know about them.
195198
# Note: This might not be necessary in this specific case since our sources doesn't include OpenSSL headers directly,
196199
# but it's better to be safe in case of indirect inclusions by one of our other dependencies.
197-
env.Depends(sources, ssl + rtc)
200+
env.Depends(sources, rtc + mbedtls)
198201

199202
# We want to statically link against libstdc++ on Linux to maximize compatibility, but we must restrict the exported
200203
# symbols using a GCC version script, or we might end up overriding symbols from other libraries.

thirdparty/README.md

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,10 @@ respective folder names. Use two empty lines to separate categories for
55
readability.
66

77

8-
## json
9-
10-
- Upstream: https://github.com/nlohmann/json
11-
- Version: 3.11.3 (9cca280a4d0ccf0c08f47a99aa71d1b0e52f8d03, 2023)
12-
- License: MIT
13-
14-
Module location:
15-
16-
- thirdparty/libdatachannel/deps/json
17-
18-
198
## libdatachannel
209

2110
- Upstream: https://github.com/paullouisageneau/libdatachannel
22-
- Version: 0.22.3 (d74748fd46f75cee5090d187841c6921820eb9d0, 2024)
11+
- Version: 0.22.6 (0d6adc021953d7263fd4503482ea7bde33553724, 2025)
2312
- License: MPL 2.0
2413

2514
Module location:
@@ -30,7 +19,7 @@ Module location:
3019
# libjuice
3120

3221
- Upstream: https://github.com/paullouisageneau/libjuice
33-
- Version: 1.5.7 (70ba50cce33350b64404557ea63658e925758ce6, 2024)
22+
- Version: 1.5.9 (8d1a99a0683a811876c03a73ff764a92774027ad, 2025)
3423
- License: MPL 2.0
3524

3625
Module location:
@@ -49,15 +38,15 @@ Module location:
4938
- thirdparty/libdatachannel/deps/libsrtp
5039

5140

52-
## openssl
41+
## mbedTLS
5342

54-
- Upstream: git://git.openssl.org/openssl.git
55-
- Version: 3.4.0 (98acb6b02839c609ef5b837794e08d906d965335, 2024)
43+
- Upstream: https://github.com/Mbed-TLS/mbedtls.git
44+
- Version: 3.6.3 (22098d41c6620ce07cf8a0134d37302355e1e5ef, 2025)
5645
- License: Apache 2.0
5746

5847
Module location:
5948

60-
- thirdparty/openssl
49+
- thirdparty/mbedtls
6150

6251

6352
## plog

thirdparty/mbedtls

Submodule mbedtls added at 22098d4

thirdparty/openssl

Lines changed: 0 additions & 1 deletion
This file was deleted.

tools/cmake.py

Lines changed: 60 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
import os, sys
1+
import os
2+
import shlex
3+
import sys
24

3-
import SCons.Util
4-
import SCons.Builder
55
import SCons.Action
6+
import SCons.Builder
7+
import SCons.Util
68

79

810
# This must be kept in sync with the value in https://github.com/godotengine/godot/blob/master/platform/android/detect.py#L58.
@@ -12,7 +14,7 @@ def get_ndk_version():
1214

1315
def cmake_default_flags(env):
1416
if env.get("cmake_default_flags", ""):
15-
return SCons.Util.CLVar(env["cmake_default_flags"])
17+
return shlex.split(env["cmake_default_flags"])
1618

1719
config = {}
1820

@@ -79,18 +81,17 @@ def cmake_default_flags(env):
7981

8082
elif env["platform"] == "windows":
8183
config["CMAKE_SYSTEM_NAME"] = "Windows"
82-
83-
flags = ["-D%s=%s" % it for it in config.items()]
84-
if env["CMAKEGENERATOR"]:
85-
flags.extend(["-G", env["CMAKEGENERATOR"]])
86-
elif env["platform"] == "windows":
8784
if env.get("is_msvc", False):
88-
flags.extend(["-G", "NMake Makefiles"])
89-
elif sys.platform in ["win32", "msys", "cygwin"]:
90-
flags.extend(["-G", "Ninja"])
91-
else:
92-
flags.extend(["-G", "Unix Makefiles"])
93-
return flags
85+
config["CMAKE_POLICY_DEFAULT_CMP0091"] = "NEW"
86+
if env.get("debug_crt", False):
87+
config["CMAKE_MSVC_RUNTIME_LIBRARY"] = "MultiThreadedDebugDLL"
88+
else:
89+
if env.get("use_static_cpp", False):
90+
config["CMAKE_MSVC_RUNTIME_LIBRARY"] = "MultiThreaded"
91+
else:
92+
config["CMAKE_MSVC_RUNTIME_LIBRARY"] = "MultiThreadedDLL"
93+
94+
return ["-D%s=%s" % it for it in config.items()]
9495

9596

9697
def cmake_emitter(target, source, env):
@@ -100,41 +101,77 @@ def cmake_emitter(target, source, env):
100101
def cmake_generator(target, source, env, for_signature):
101102
# Strip the -j option for signature to avoid rebuilding when num_jobs changes.
102103
build = env["CMAKEBUILDCOM"].replace("-j$CMAKEBUILDJOBS", "") if for_signature else env["CMAKEBUILDCOM"]
103-
return [
104+
actions = [
104105
SCons.Action.Action("$CMAKECONFCOM", "$CMAKECONFCOMSTR"),
105106
SCons.Action.Action(build, "$CMAKEBUILDCOMSTR"),
106107
]
108+
if env["CMAKE_INSTALL"]:
109+
actions.append(
110+
SCons.Action.Action("$CMAKEINSTALLCOM", "$CMAKEINSTALLCOMSTR"),
111+
)
112+
return actions
107113

108114

109-
def cmake_build(env, target_dir, source_dir, cmake_outputs=[], cmake_targets=[], cmake_options=[], dependencies=[]):
115+
def cmake_build(
116+
env, target_dir, source_dir, cmake_outputs=[], cmake_targets=[], cmake_options=[], dependencies=[], install=False
117+
):
110118
cmake_env = env.Clone()
111119
target = env.Dir("{}/{}/{}".format(target_dir, env["platform"], env["arch"]))
112120
source = env.Dir(source_dir)
113121
builder_targets = [target] + [str(target) + "/" + f for f in cmake_outputs]
114122
builder_sources = [source] + dependencies
115-
cmake_env.Append(CMAKECONFFLAGS=["-D%s=%s" % it for it in cmake_options.items()])
123+
default_flags = cmake_default_flags(env)
124+
125+
# Merge flags
126+
flags = []
127+
for df in default_flags:
128+
if not df.startswith("-D"):
129+
flags.append(df)
130+
else:
131+
f = df[2:].split("=")[0]
132+
if f in cmake_options:
133+
df += " " + cmake_options[f]
134+
cmake_options.pop(f)
135+
flags.append(df)
136+
for opt in cmake_options:
137+
flags.append("-D%s=%s" % (opt, cmake_options[opt]))
138+
139+
# Select generator
140+
if env["cmake_generator"]:
141+
flags.extend(["-G", env["cmake_generator"]])
142+
elif env["platform"] == "windows":
143+
if env.get("is_msvc", False):
144+
flags.extend(["-G", "NMake Makefiles"])
145+
elif sys.platform in ["win32", "msys", "cygwin"]:
146+
flags.extend(["-G", "Ninja"])
147+
else:
148+
flags.extend(["-G", "Unix Makefiles"])
149+
150+
cmake_env.Append(CMAKECONFFLAGS=flags)
116151
if len(cmake_targets) > 0:
117152
cmake_env.Append(CMAKEBUILDFLAGS=["-t"] + [t for t in cmake_targets])
153+
cmake_env["CMAKE_INSTALL"] = install
118154
return cmake_env.CMake(builder_targets, builder_sources)
119155

120156

121157
def options(opts):
122158
opts.Add("cmake_default_flags", "Default CMake platform flags override, will be autodetected if not specified.", "")
159+
opts.Add("cmake_generator", "CMake generator override, will be autodetected from platform if not specified.", "")
160+
opts.Add("cmake", "CMake binary to use", "cmake")
123161

124162

125163
def exists(env):
126164
return True
127165

128166

129167
def generate(env):
130-
env["CMAKE"] = "cmake"
131-
env["_cmake_default_flags"] = cmake_default_flags
132-
env["CMAKEDEFAULTFLAGS"] = "${_cmake_default_flags(__env__)}"
133-
env["CMAKEGENERATOR"] = ""
168+
env["CMAKE"] = env["cmake"]
134169
env["CMAKECONFFLAGS"] = SCons.Util.CLVar("")
135-
env["CMAKECONFCOM"] = "$CMAKE -B ${TARGET.dir} $CMAKEDEFAULTFLAGS $CMAKECONFFLAGS ${SOURCE.dir}"
170+
env["CMAKECONFCOM"] = "$CMAKE -B ${TARGET.dir} $CMAKECONFFLAGS ${SOURCE.dir}"
136171
env["CMAKEBUILDJOBS"] = "${__env__.GetOption('num_jobs')}"
137172
env["CMAKEBUILDFLAGS"] = SCons.Util.CLVar("")
173+
env["CMAKEINSTALLFLAGS"] = SCons.Util.CLVar("")
138174
env["CMAKEBUILDCOM"] = "$CMAKE --build ${TARGET.dir} $CMAKEBUILDFLAGS -j$CMAKEBUILDJOBS"
175+
env["CMAKEINSTALLCOM"] = "$CMAKE --install ${TARGET.dir} $CMAKEINSTALLFLAGS"
139176
env["BUILDERS"]["CMake"] = SCons.Builder.Builder(generator=cmake_generator, emitter=cmake_emitter)
140177
env.AddMethod(cmake_build, "CMakeBuild")

tools/mbedtls.py

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
def build_library(env):
2+
mbedtls_bin = env.Dir("bin/thirdparty/mbedtls/{}/{}/install".format(env["platform"], env["arch"]))
3+
is_msvc = env.get("is_msvc", False)
4+
c_flags = "-DMBEDTLS_SSL_DTLS_SRTP"
5+
if env["platform"] == "linux":
6+
# This is needed on some arch when building with the godot buildroot toolchain
7+
c_flags += " -fPIC"
8+
elif env["platform"] == "windows" and not is_msvc:
9+
c_flags += " -D__USE_MINGW_ANSI_STDIO=0" # See https://github.com/Mbed-TLS/mbedtls/issues/10161
10+
11+
mbedtls_config = {
12+
"CMAKE_BUILD_TYPE": "RelWithDebInfo" if env["debug_symbols"] else "Release",
13+
"ENABLE_TESTING": 0,
14+
"ENABLE_PROGRAMS": 0,
15+
"CMAKE_INSTALL_PREFIX": env.Dir(mbedtls_bin).abspath,
16+
"CMAKE_C_FLAGS": c_flags,
17+
}
18+
lib_ext = ".lib" if is_msvc else ".a"
19+
lib_prefix = "" if is_msvc else "lib"
20+
mbedtls_libs = [
21+
"/install/lib/{}mbedtls{}".format(lib_prefix, lib_ext),
22+
"/install/lib/{}mbedx509{}".format(lib_prefix, lib_ext),
23+
"/install/lib/{}mbedcrypto{}".format(lib_prefix, lib_ext),
24+
]
25+
26+
mbedtls_cmake_config = [
27+
"/install/lib/cmake/MbedTLS/MbedTLSConfig.cmake",
28+
"/install/lib/cmake/MbedTLS/MbedTLSConfigVersion.cmake",
29+
"/install/lib/cmake/MbedTLS/MbedTLSTargets.cmake",
30+
]
31+
32+
# Build libdatachannel
33+
mbedtls = env.CMakeBuild(
34+
env.Dir("bin/thirdparty/mbedtls/"),
35+
env.Dir("thirdparty/mbedtls"),
36+
cmake_options=mbedtls_config,
37+
cmake_outputs=mbedtls_libs + mbedtls_cmake_config,
38+
install=True,
39+
)
40+
41+
# Configure env.
42+
if env["platform"] == "windows":
43+
env.PrependUnique(LIBS=["bcrypt", "ws2_32", "iphlpapi"])
44+
if env["platform"] == "linux":
45+
env.PrependUnique(LIBS=["pthread"])
46+
env.Prepend(LIBS=list(filter(lambda f: str(f).endswith(lib_ext), mbedtls)))
47+
env.Append(CPPPATH=[env.Dir("thirdparty/mbedtls/include")])
48+
49+
return mbedtls
50+
51+
52+
def exists(env):
53+
return "CMake" in env
54+
55+
56+
def generate(env):
57+
mbedtls_install_dir = "bin/thirdparty/mbedtls/{}/{}/install".format(env["platform"], env["arch"])
58+
lib_ext = ".lib" if env.get("is_msvc", False) else ".a"
59+
mbedtls = env.File(mbedtls_install_dir + "/lib/libmbedtls" + lib_ext)
60+
crypto = env.File(mbedtls_install_dir + "/lib/libmbedcrypto" + lib_ext)
61+
x509 = env.File(mbedtls_install_dir + "/lib/libmbedx509" + lib_ext)
62+
includes = env.Dir("thirdparty/mbedtls/include")
63+
env.AddMethod(build_library, "BuildMbedTLS")
64+
env["MBEDTLS_LIBRARY"] = mbedtls.abspath
65+
env["MBEDTLS_CRYPTO_LIBRARY"] = crypto.abspath
66+
env["MBEDTLS_X509_LIBRARY"] = x509.abspath
67+
env["MBEDTLS_INCLUDE"] = includes.abspath

0 commit comments

Comments
 (0)