const path = require('path'); let project = new Project('datachannel', __dirname); project.addFile('cpp/src/datachannel.c'); project.addFile('cpp/src/ssl3.c'); project.addFile('cpp/src/aegis128x4.c'); project.addIncludeDir('cpp/libdatachannel/include'); project.addIncludeDir('cpp/libdatachannel/deps/mbedtls/include'); project.addDefine('RTC_STATIC'); project.addDefine('MBEDTLS_ALLOW_PRIVATE_ACCESS'); project.addDefine('MBEDTLS_SSL_DTLS_SRTP'); if (platform === Platform.Windows) { project.addLibFor('x64', path.join(__dirname, 'lib/datachannel-static')); project.addLibFor('x64', path.join(__dirname, 'lib/juice-static')); project.addLibFor('x64', path.join(__dirname, 'lib/usrsctp')); project.addLibFor('x64', path.join(__dirname, 'lib/MbedTLS')); project.addLib('ws2_32'); project.addLib('Crypt32'); project.addLib('bcrypt'); } else if (platform === Platform.OSX) { // macOS links prebuilt .a (libdatachannel 0.24.6, mbedtls 3.6.4, OpenSSL backend) with 'brew install openssl@3' for the static ssl/crypto archives below const isArm64 = arch === 'arm64' || (arch === 'default' && process.arch === 'arm64'); const libdir = path.join(__dirname, 'lib', isArm64 ? 'macos_arm64' : 'macos_x64'); project.addLinkerFlag(path.join(libdir, 'libdatachannel-static.a')); project.addLinkerFlag(path.join(libdir, 'libjuice-static.a')); project.addLinkerFlag(path.join(libdir, 'libusrsctp.a')); project.addLinkerFlag(path.join(libdir, 'libsrtp2.a')); project.addLinkerFlag(path.join(libdir, 'libMbedTLS.a')); const odir = '/opt/homebrew/opt/openssl@3/lib'; project.addLinkerFlag(path.join(odir, 'libssl.a')); project.addLinkerFlag(path.join(odir, 'libcrypto.a')); } else if (platform === Platform.Linux) { // TODO const libdir = path.join(__dirname, 'lib/linux_x64'); project.addLinkerFlag(path.join(libdir, 'libdatachannel-static.a')); project.addLinkerFlag(path.join(libdir, 'libjuice-static.a')); project.addLinkerFlag(path.join(libdir, 'libusrsctp.a')); project.addLinkerFlag(path.join(libdir, 'libsrtp2.a')); project.addLinkerFlag(path.join(libdir, 'libMbedTLS.a')); project.addLinkerFlag('-lssl'); project.addLinkerFlag('-lcrypto'); } if (parentProject) { for (let sub of parentProject.subProjects) { if (sub.name === 'Kha') { sub.addExclude('hl/include/mbedtls/**'); sub.addExclude('hl/libs/ssl/ssl.c'); sub.includeDirs = sub.includeDirs.filter( dir => dir !== 'hl/include/mbedtls/include'); break; } } } resolve(project);