git » swiftpm » main » tree

[main] / Package.swift

// swift-tools-version: 5.8
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
	name: "Snikket",
	platforms: [
		.iOS(.v13),
		.macOS(.v10_15),
		.tvOS(.v12),
	],
	products: [
		.library(
			name: "Snikket",
			targets: ["Snikket"]),
	],
	dependencies: [
		.package(url: "https://github.com/apple/swift-docc-plugin", branch: "main"),
		.package(url: "https://github.com/krzyzanowskim/OpenSSL-Package", from: "3.3.3000"),
		.package(url: "https://github.com/alta/swift-opus", branch: "main"),
	],
	targets: [
		// Targets are the basic building blocks of a package, defining a module or a test suite.
		// Targets can depend on other targets in this package and products from dependencies.
		.target(
			name: "strophe",
			dependencies: [.product(name: "OpenSSL", package: "OpenSSL-Package")],
			exclude: [
				"libstrophe/src/compression_dummy.c",
				"libstrophe/src/parser_expat.c",
				"libstrophe/src/tls_gnutls.c",
				"libstrophe/src/tls_schannel.c",
				"libstrophe/src/tls_dummy.c"
			],
			sources: ["libstrophe/src"],
			linkerSettings: [
				.linkedLibrary("resolv")
			]
		),
		.target(
			name: "usrsctp",
			dependencies: [],
			exclude: [
				"usrsctp/.github",
				"usrsctp/programs",
				"usrsctp/fuzzer",
				"usrsctp/cmake",
				"usrsctp/usrsctplib/netinet6/meson.build"
			],
			cxxSettings: [
				CXXSetting.headerSearchPath("usrsctp/usrsctplib"),
				CXXSetting.define("HAVE_NETINET_IP_ICMP_H"), 
				CXXSetting.define("HAVE_SA_LEN"), 
				CXXSetting.define("HAVE_SCONN_LEN"), 
				CXXSetting.define("HAVE_SIN6_LEN"), 
				CXXSetting.define("HAVE_SIN_LEN"),
				CXXSetting.define("HAVE_STDATOMIC_H"),
				CXXSetting.define("HAVE_SYS_QUEUE_H"),
				CXXSetting.define("INET"),
				CXXSetting.define("INET6"),
				CXXSetting.define("SCTP_DEBUG"), 
				CXXSetting.define("SCTP_PROCESS_LEVEL_LOCKS"),
				CXXSetting.define("SCTP_SIMPLE_ALLOCATOR"),
				CXXSetting.define("__APPLE_USE_RFC_2292", .when(platforms: [.iOS, .macOS, .tvOS, .watchOS])),
				CXXSetting.define("__Userspace__"),
			]
		),
		.target(
			name: "libdatachannel",
			dependencies: [.product(name: "OpenSSL", package: "OpenSSL-Package"), "usrsctp"],
			exclude: [
				"libdatachannel/test",
				"libdatachannel/src/websocketserver.cpp",
				"libdatachannel/src/impl/websocketserver.cpp",
				"libdatachannel/deps/libsrtp/crypto/test",
				"libdatachannel/deps/libsrtp/crypto/Makefile.in",
				"libdatachannel/deps/libsrtp/crypto/hash/hmac.c",
				"libdatachannel/deps/libsrtp/crypto/hash/hmac_mbedtls.c",
				"libdatachannel/deps/libsrtp/crypto/hash/hmac_nss.c",
				"libdatachannel/deps/libsrtp/crypto/cipher/aes.c",
				"libdatachannel/deps/libsrtp/crypto/cipher/aes_icm.c",
				"libdatachannel/deps/libsrtp/crypto/cipher/aes_icm_nss.c",
				"libdatachannel/deps/libsrtp/crypto/cipher/aes_gcm_nss.c",
				"libdatachannel/deps/libsrtp/crypto/cipher/aes_icm_mbedtls.c",
				"libdatachannel/deps/libsrtp/crypto/cipher/aes_gcm_mbedtls.c",
			],
			sources: ["libdatachannel/src", "libdatachannel/deps/libsrtp/crypto", "libdatachannel/deps/libsrtp/srtp", "libdatachannel/deps/libjuice/src"],
			cxxSettings: [
				CXXSetting.headerSearchPath("include/rtc"),
				CXXSetting.headerSearchPath("libdatachannel/src"),
				CXXSetting.headerSearchPath("libdatachannel/deps/plog/include"),
				CXXSetting.headerSearchPath("libdatachannel/deps/libsrtp/include"),
				CXXSetting.headerSearchPath("libdatachannel/deps/libsrtp"),
				CXXSetting.headerSearchPath("libdatachannel/deps/libsrtp/crypto/include"),
				CXXSetting.headerSearchPath("libdatachannel/deps/libjuice/include"),
				CXXSetting.headerSearchPath("libdatachannel/deps/libjuice/include/juice"),
				CXXSetting.define("OPENSSL"), 
				CXXSetting.define("GCM"), 
				CXXSetting.define("RTC_ENABLE_MEDIA=1"),
				CXXSetting.define("RTC_ENABLE_WEBSOCKET=0"),
				CXXSetting.define("RTC_EXPORTS"),
				CXXSetting.define("HAVE_CONFIG_H"),
				CXXSetting.define("HAVE_ARPA_INET_H"),
				CXXSetting.define("HAVE_INTTYPES_H"),
				CXXSetting.define("HAVE_MACHINE_TYPES_H"),
				CXXSetting.define("HAVE_NETINET_IN_H"),
				CXXSetting.define("HAVE_STDINT_H"),
				CXXSetting.define("HAVE_STDLIB_H"),
				CXXSetting.define("HAVE_SYS_SOCKET_H"),
				CXXSetting.define("HAVE_SYS_TYPES_H"),
				CXXSetting.define("HAVE_UNISTD_H"),
				CXXSetting.define("HAVE_INET_ATON"),
				CXXSetting.define("HAVE_INET_PTON"),
				CXXSetting.define("HAVE_SIGACTION"),
				CXXSetting.define("HAVE_USLEEP"),
				CXXSetting.define("HAVE_UINT8_T"),
				CXXSetting.define("HAVE_UINT16_T"),
				CXXSetting.define("HAVE_UINT32_T"),
				CXXSetting.define("HAVE_UINT64_T"),
				CXXSetting.define("HAVE_INT32_T"),
				CXXSetting.define("SIZEOF_UNSIGNED_LONG=8"),
				CXXSetting.define("SIZEOF_UNSIGNED_LONG_LONG=8"),
				CXXSetting.define("HAVE_INLINE"),
				CXXSetting.define("PACKAGE_VERSION=\"2.5.0\""),
				CXXSetting.define("PACKAGE_STRING=\"libsrtp2 2.5.0\""),
			]
		),
		.target(
			name: "libpcre2-8",
			exclude: [
				"pcre2/deps",
				"pcre2/maint",
				"pcre2/src/pcre2demo.c",
				"pcre2/src/pcre2test.c",
				"pcre2/src/pcre2grep.c",
				"pcre2/src/pcre2posix.c",
				"pcre2/src/pcre2_jit_compile.c",
				"pcre2/src/pcre2_jit_test.c",
				"pcre2/src/pcre2_dftables.c",
				"pcre2/src/pcre2test.c",
				"pcre2/src/pcre2posix_test.c",
				"pcre2/src/pcre2_jit_test.c",
				"pcre2/src/pcre2_fuzzsupport.c",
			],
			cSettings: [
				CSetting.headerSearchPath("pcre2/src"),
				CSetting.define("PCRE2_CODE_UNIT_WIDTH=8"),
				CSetting.define("SUPPORT_PCRE2_8"),
				CSetting.define("HAVE_CONFIG_H"),
				CSetting.define("SUPPORT_UNICODE"),
			]
		),
		.target(
			name: "libpcre2-16",
			exclude: [
				"pcre2/deps",
				"pcre2/maint",
				"pcre2/src/pcre2demo.c",
				"pcre2/src/pcre2test.c",
				"pcre2/src/pcre2grep.c",
				"pcre2/src/pcre2posix.c",
				"pcre2/src/pcre2_dftables.c",
				"pcre2/src/pcre2test.c",
				"pcre2/src/pcre2posix_test.c",
				"pcre2/src/pcre2_jit_test.c",
				"pcre2/src/pcre2_fuzzsupport.c",
			],
			cSettings: [
				CSetting.headerSearchPath("pcre2/src"),
				CSetting.define("PCRE2_CODE_UNIT_WIDTH=16"),
				CSetting.define("SUPPORT_PCRE2_16"),
				CSetting.define("HAVE_CONFIG_H"),
				CSetting.define("SUPPORT_UNICODE"),
			]
		),
		.target(
			name: "c_snikket",
			dependencies: ["strophe", "libdatachannel", "libpcre2-8", "libpcre2-16", .product(name: "Copus", package: "swift-opus")],
			cSettings: [
				CSetting.headerSearchPath("iinclude"),
				CSetting.define("HX_SMART_STRINGS=1"),
				CSetting.define("HXCPP_M64"),
				CSetting.define("HXCPP_VISIT_ALLOCS"),
				CSetting.define("HXCPP_API_LEVEL=430"),
				CSetting.define("HXCPP_ALIGN_ALLOC=1"),
				CSetting.define("SQLITE_NOHAVE_SYSTEM", .when(platforms: [.iOS, .tvOS, .watchOS])),
				CSetting.define("IPHONE", .when(platforms: [.iOS])),
				CSetting.define("APPLETV", .when(platforms: [.tvOS])),
				CSetting.define("HX_APPLEWATCH", .when(platforms: [.watchOS])),
				CSetting.define("HX_MACOS", .when(platforms: [.macOS])),
			]
		),
		.target(name: "Snikket", dependencies: ["c_snikket"]),
	],
	cLanguageStandard: CLanguageStandard.c17,
	cxxLanguageStandard: CXXLanguageStandard.cxx17
)