# This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. include(${CMAKE_SOURCE_DIR}/scripts/cmake/rustlang.cmake) ## Custom target to build the web-extension bridge with Rust/Cargo if(APPLE AND CMAKE_OSX_ARCHITECTURES) add_custom_target(cargo_mozillavpnnp_all COMMENT "Build vpnnp for all Architectures") # For each requested Arch , create a new target and # make it a dependency for cargo_mozillavpnnp_all foreach(OSXARCH ${CMAKE_OSX_ARCHITECTURES}) string(REPLACE "arm64" "aarch64" OSXARCH ${OSXARCH}) add_custom_target(cargo_mozillavpnnp_${OSXARCH} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bridge COMMAND ${CMAKE_COMMAND} -E env CARGO_HOME=${CMAKE_BINARY_DIR}/cargo_home ${CARGO_BUILD_TOOL} build --release --target-dir ${CMAKE_CURRENT_BINARY_DIR}/bridge --target ${OSXARCH}-apple-darwin ) list(APPEND MOZILLAVPNNP_TARGET_OUTPUTS ${CMAKE_CURRENT_BINARY_DIR}/bridge/${OSXARCH}-apple-darwin/release/mozillavpnnp) add_dependencies(cargo_mozillavpnnp_all cargo_mozillavpnnp_${OSXARCH}) endforeach() # Create a target that runs after all-arches have been build # Create a far binary using all lipo add_custom_target(cargo_mozillavpnnp ALL COMMENT "Create a universal binary for mozillavpnp" DEPENDS cargo_mozillavpnnp_all COMMAND ${LIPO_BUILD_TOOL} -create -output ${CMAKE_CURRENT_BINARY_DIR}/bridge/target/release/mozillavpnnp ${MOZILLAVPNNP_TARGET_OUTPUTS} ) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bridge/target/release/) elseif(NOT CMAKE_CROSSCOMPILING) # Single Plattform add_custom_target(cargo_mozillavpnnp ALL COMMENT "Building web extension crate" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bridge COMMAND ${CMAKE_COMMAND} -E env CARGO_HOME=${CMAKE_BINARY_DIR}/cargo_home ${CARGO_BUILD_TOOL} build --release --target-dir ${CMAKE_CURRENT_BINARY_DIR}/bridge/target ) set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_CURRENT_BINARY_DIR}/bridge/target) elseif(CMAKE_C_COMPILER_TARGET) add_custom_target(cargo_mozillavpnnp ALL COMMENT "Building web extension crate" WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bridge COMMAND ${CMAKE_COMMAND} -E env CARGO_HOME=${CMAKE_BINARY_DIR}/cargo_home ${CARGO_BUILD_TOOL} build --release --target-dir ${CMAKE_CURRENT_BINARY_DIR}/bridge --target ${CMAKE_C_COMPILER_TARGET} COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/bridge/target COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_BINARY_DIR}/bridge/${CMAKE_C_COMPILER_TARGET}/release ${CMAKE_CURRENT_BINARY_DIR}/bridge/target/release ) set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${CMAKE_CURRENT_BINARY_DIR}/bridge/target) endif() ## Wrap the build artifacts as a CMake target. add_executable(mozillavpnnp IMPORTED GLOBAL) add_dependencies(mozillavpnnp cargo_mozillavpnnp) set_property(TARGET mozillavpnnp PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/bridge/target/release/mozillavpnnp${CMAKE_EXECUTABLE_SUFFIX}) ## Handle installation by platform. if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") include(GNUInstallDirs) if(NOT DEFINED WEBEXT_INSTALL_LIBDIR) set(WEBEXT_INSTALL_LIBDIR ${CMAKE_INSTALL_FULL_LIBDIR}) endif() install(PROGRAMS $ DESTINATION ${WEBEXT_INSTALL_LIBDIR}/mozillavpn) configure_file(manifests/linux/mozillavpn.json.in manifests/linux/mozillavpn.json) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/manifests/linux/mozillavpn.json DESTINATION ${WEBEXT_INSTALL_LIBDIR}/mozilla/native-messaging-hosts) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/manifests/linux/mozillavpn.json DESTINATION /etc/opt/chrome/native-messaging-hosts) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/manifests/linux/mozillavpn.json DESTINATION /etc/chromium/native-messaging-hosts) elseif(WIN32) install(PROGRAMS $ DESTINATION .) install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/manifests/windows/mozillavpn.json DESTINATION .) endif() add_subdirectory(socks5proxy)