import feature : feature ; project libdatachannel ; path-constant CWD : . ; feature gnutls : off on : composite propagated ; feature.compose off : USE_GNUTLS=0 ; feature.compose on : USE_GNUTLS=1 ; lib libdatachannel : # sources [ glob ./src/*.cpp ] [ glob ./src/impl/*.cpp ] : # requirements 17 ./include ./include/rtc ./src RTC_ENABLE_MEDIA=0 RTC_ENABLE_WEBSOCKET=0 USE_NICE=0 RTC_EXPORTS RTC_STATIC msvc:WIN32_LEAN_AND_MEAN msvc:NOMINMAX msvc:_CRT_SECURE_NO_WARNINGS /libdatachannel//usrsctp /libdatachannel//juice /libdatachannel//plog on:gnutls/shared off:ssl off:crypto : # default build static : # usage requirements ./include RTC_ENABLE_MEDIA=0 RTC_ENABLE_WEBSOCKET=0 RTC_STATIC /libdatachannel//plog gcc:"-pthread -Wno-pedantic -Wno-unused-parameter -Wno-unused-variable" clang:"-pthread -Wno-pedantic -Wno-unused-parameter -Wno-unused-variable" ; alias plog : # no sources : # no build requirements : # no default build : # usage requirements ./deps/plog/include ; alias usrsctp : # no sources : # no build requirements : # no default build : # usage requirements ./deps/usrsctp/usrsctplib libusrsctp.a ; alias usrsctp : # no sources : msvc : # no default build : # usage requirements ./deps/usrsctp/usrsctplib usrsctp.lib ; alias juice : # no sources : # no build requirements : # no default build : # usage requirements ./deps/libjuice/include JUICE_STATIC on:libjuice-gnutls.a on:nettle/shared off:libjuice-openssl.a ; alias juice : # no sources : msvc : # no default build : # usage requirements ./deps/libjuice/include JUICE_STATIC juice-static.lib ; make libusrsctp.a : : @make_libusrsctp ; make usrsctp.lib : : @make_libusrsctp_msvc ; rule make_libusrsctp ( targets * : sources * : properties * ) { local VARIANT = [ feature.get-values : $(properties) ] ; VARIANT on $(targets) = $(VARIANT) ; BUILD_DIR on $(targets) = "build-$(VARIANT)" ; } actions make_libusrsctp { (cd $(CWD)/deps/usrsctp && mkdir -p $(BUILD_DIR) && cd $(BUILD_DIR) && cmake -DCMAKE_BUILD_TYPE=$(VARIANT) -DCMAKE_C_FLAGS="-fPIC -Wno-unknown-warning-option -Wno-format-truncation" -Dsctp_build_shared_lib=0 -Dsctp_build_programs=0 -Dsctp_inet=0 -Dsctp_inet6=0 .. && make -j2 usrsctp) cp $(CWD)/deps/usrsctp/$(BUILD_DIR)/usrsctplib/libusrsctp.a $(<) } rule make_libusrsctp_msvc ( targets * : sources * : properties * ) { local VARIANT = [ feature.get-values : $(properties) ] ; VARIANT on $(targets) = $(VARIANT) ; BUILD_DIR on $(targets) = "build-$(VARIANT)" ; } actions make_libusrsctp_msvc { SET OLDD=%CD% cd $(CWD)/deps/usrsctp mkdir $(BUILD_DIR) cd $(BUILD_DIR) cmake -G "Visual Studio 16 2019" -Dsctp_build_shared_lib=0 -Dsctp_build_programs=0 .. msbuild usrsctplib.sln /property:Configuration=$(VARIANT) cd %OLDD% cp $(CWD)/deps/usrsctp/$(BUILD_DIR)/usrsctplib/Release/usrsctp.lib $(<) } make libjuice-gnutls.a : : @make_libjuice_gnutls ; make libjuice-openssl.a : : @make_libjuice_openssl ; make juice-static.lib : : @make_libjuice_msvc ; rule make_libjuice_gnutls ( targets * : sources * : properties * ) { local VARIANT = [ feature.get-values : $(properties) ] ; BUILD_DIR on $(targets) = "build-gnutls-$(VARIANT)" ; CMAKEOPTS on $(targets) = "-DCMAKE_C_FLAGS=\"-fPIC\" -DCMAKE_BUILD_TYPE=$(VARIANT) -DUSE_NETTLE=1" ; } actions make_libjuice_gnutls { (cd $(CWD)/deps/libjuice && mkdir -p $(BUILD_DIR) && cd $(BUILD_DIR) && cmake $(CMAKEOPTS) .. && make -j2 juice-static) cp $(CWD)/deps/libjuice/$(BUILD_DIR)/libjuice-static.a $(<) } rule make_libjuice_openssl ( targets * : sources * : properties * ) { local VARIANT = [ feature.get-values : $(properties) ] ; BUILD_DIR on $(targets) = "build-openssl-$(VARIANT)" ; CMAKEOPTS on $(targets) = "-DCMAKE_C_FLAGS=\"-fPIC\" -DCMAKE_BUILD_TYPE=$(VARIANT) -DUSE_NETTLE=0" ; local OPENSSL_INCLUDE = [ feature.get-values : $(properties) ] ; if darwin in $(properties) && $(OPENSSL_INCLUDE) = "" { # on macOS, default to pick up openssl from the homebrew installation # brew install openssl OPENSSL_INCLUDE = /opt/homebrew/opt/openssl /usr/local/opt/openssl/include ; } if $(OPENSSL_INCLUDE) != "" { CMAKEOPTS on $(targets) += " -DOPENSSL_ROOT_DIR=$(OPENSSL_INCLUDE)/.." ; } } actions make_libjuice_openssl { (cd $(CWD)/deps/libjuice && mkdir -p $(BUILD_DIR) && cd $(BUILD_DIR) && cmake $(CMAKEOPTS) .. && make -j2 juice-static) cp $(CWD)/deps/libjuice/$(BUILD_DIR)/libjuice-static.a $(<) } rule make_libjuice_msvc ( targets * : sources * : properties * ) { local VARIANT = [ feature.get-values : $(properties) ] ; VARIANT on $(targets) = $(VARIANT) ; if on in $(properties) { BUILD_DIR on $(targets) += "build-gnutls-$(VARIANT)" ; CMAKEOPTS on $(targets) = "-DUSE_NETTLE=1" ; } else { BUILD_DIR on $(targets) += "build-openssl-$(VARIANT)" ; CMAKEOPTS on $(targets) = "-DUSE_NETTLE=0" ; } } actions make_libjuice_msvc { SET OLDD=%CD% cd $(CWD)/deps/libjuice mkdir $(BUILD_DIR) cd $(BUILD_DIR) cmake -G "Visual Studio 16 2019" $(CMAKEOPTS) .. msbuild libjuice.sln /property:Configuration=$(VARIANT) cd %OLDD% cp $(CWD)/deps/libjuice/$(BUILD_DIR)/Release/juice-static.lib $(<) } # the search path to pick up the openssl libraries from. This is the # property of those libraries rule openssl-lib-path ( properties * ) { local OPENSSL_LIB = [ feature.get-values : $(properties) ] ; if darwin in $(properties) && $(OPENSSL_LIB) = "" { # on macOS, default to pick up openssl from the homebrew installation # brew install openssl OPENSSL_LIB = /opt/homebrew/opt/openssl/lib /usr/local/opt/openssl/lib ; } else if windows in $(properties) && $(OPENSSL_LIB) = "" { # on windows, assume openssl is installed to c:\OpenSSL-Win32 if 64 in $(properties) { OPENSSL_LIB = c:\\OpenSSL-Win64\\lib ; } else { OPENSSL_LIB = c:\\OpenSSL-Win32\\lib ; } } local result ; result += $(OPENSSL_LIB) ; return $(result) ; } # the include path to pick up openssl headers from. This is the # usage-requirement for the openssl-related libraries rule openssl-include-path ( properties * ) { local OPENSSL_INCLUDE = [ feature.get-values : $(properties) ] ; if darwin in $(properties) && $(OPENSSL_INCLUDE) = "" { # on macOS, default to pick up openssl from the homebrew installation # brew install openssl OPENSSL_INCLUDE = /opt/homebrew/opt/openssl/include /usr/local/opt/openssl/include ; } else if windows in $(properties) && $(OPENSSL_INCLUDE) = "" { # on windows, assume openssl is installed to c:\OpenSSL-Win32 if 64 in $(properties) { OPENSSL_INCLUDE = c:\\OpenSSL-Win64\\include ; } else { OPENSSL_INCLUDE = c:\\OpenSSL-Win32\\include ; } } local result ; result += $(OPENSSL_INCLUDE) ; return $(result) ; } # libraries for OpenSSL on Windows lib advapi32 : : advapi32 ; lib user32 : : user32 ; lib shell32 : : shell32 ; lib gdi32 : : gdi32 ; lib bcrypt : : bcrypt ; lib z : : shared z ; alias ssl-deps : advapi32 user32 shell32 gdi32 ; # OpenSSL on Windows lib crypto : ssl-deps : msvc 1.1 libcrypto @openssl-lib-path : : @openssl-include-path ; lib ssl : ssl-deps : msvc 1.1 libssl crypto @openssl-lib-path : : @openssl-include-path ; # OpenSSL on other platforms lib crypto : : crypto z @openssl-lib-path : : @openssl-include-path ; lib ssl : : ssl crypto @openssl-lib-path : : @openssl-include-path ; # GnuTLS lib gnutls : : shared gnutls ; lib nettle : : shared nettle ;