diff --git a/nix/dev-shell.nix b/nix/dev-shell.nix index 8bd9d3b43..998b30579 100644 --- a/nix/dev-shell.nix +++ b/nix/dev-shell.nix @@ -1,151 +1,149 @@ { mkShell , stdenv , lib , amqp-cpp , arcanist , aws-sdk-cpp , better-prompt , boost , bundler , c-ares_cmake-config , cmake , cmake-format , cocoapods , corrosion -, cryptopp , darwin , double-conversion , folly , fmt , glog , grpc , gtest , libiconv , libuv , localstack , mariadb , mariadb-up , nodejs-16_x-openssl_1_1 , olm , openjdk11 , openssl , pkg-config , protobuf_3_15_cmake , python3 , rabbitmq-server , redis , redis-up , rustup , shellcheck , sqlite , terraform , watchman , rustfmt , yarn }: mkShell { # programs which are meant to be executed should go here nativeBuildInputs = [ # generic development or tools arcanist shellcheck terraform # android openjdk11 # node development mariadb nodejs-16_x-openssl_1_1 yarn watchman # react native python3 redis # native dependencies # C/CXX toolchains are already brought in with mkShell # Identity Service rustfmt rustup # Tunnelbroker + CMake amqp-cpp c-ares_cmake-config - cryptopp cmake cmake-format # linting libuv # Localstack is currently broken by partial update # See https://github.com/NixOS/nixpkgs/pull/197572 #localstack pkg-config protobuf_3_15_cmake grpc rabbitmq-server # runtime service ] ++ lib.optionals stdenv.isDarwin [ cocoapods # needed for ios bundler ]; # include any libraries buildInputs buildInputs = [ # protobuf exposes both a library and a command # thus should appear in both inputs protobuf_3_15_cmake aws-sdk-cpp # tunnelbroker corrosion # tunnelbroker double-conversion # tunnelbroker glog # tunnelbroker gtest # testing services folly # cpp tools fmt # needed for folly boost # needed for folly olm # needed for CryptoTools sqlite # needed for sqlite_orm openssl # needed for grpc ] ++ lib.optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [ CoreFoundation CoreServices Security libiconv # identity service ]); JAVA_HOME = openjdk11.passthru.home; # shell commands to be ran upon entering shell shellHook = '' PRJ_ROOT=$(git rev-parse --show-toplevel) # Set development environment variable defaults source "${../scripts/source_development_defaults.sh}" # Cache development path for some use cases such as XCode "$PRJ_ROOT/scripts/save_path.sh" '' # Darwin condition can be removed once linux services are supported + lib.optionalString stdenv.isDarwin '' # Start MariaDB development services "${mariadb-up}"/bin/mariadb-up & mariadb_pid=$! "${redis-up}"/bin/redis-up & redis_pid=$! wait "$mariadb_pid" "$redis_pid" '' + '' # Render default configuration for keyserver $PRJ_ROOT/scripts/create_url_facts.sh # Ensure rustup tooling is installed $PRJ_ROOT/scripts/ensure_rustup_setup.sh # Provide decent bash prompt source "${better-prompt}/bin/better-prompt" echo "Welcome to Comm dev environment! :)" ''; } diff --git a/services/tunnelbroker/Dockerfile b/services/tunnelbroker/Dockerfile index 665216038..58ba0f21d 100644 --- a/services/tunnelbroker/Dockerfile +++ b/services/tunnelbroker/Dockerfile @@ -1,49 +1,48 @@ FROM commapp/services-base:1.3.2 ENV PATH=/root/.cargo/bin:$PATH ARG COMM_TEST_SERVICES ARG COMM_SERVICES_SANDBOX ENV COMM_TEST_SERVICES=${COMM_TEST_SERVICES} ENV COMM_SERVICES_SANDBOX=${COMM_SERVICES_SANDBOX} # Install Curl RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y curl # Install Rust RUN curl https://sh.rustup.rs -sSf | sh -s -- -y # Copying of the installation scripts WORKDIR /transferred/services/tunnelbroker/docker COPY services/tunnelbroker/docker . # Install SDKs RUN ./install_amqp_cpp.sh -RUN ./install_cryptopp.sh RUN ./install_libuv.sh # Copying of the shared code WORKDIR /transferred COPY services/lib/src/ services/lib/src/ COPY shared/ shared/ # Copying of the Tunnelbroker code WORKDIR /transferred/services/tunnelbroker COPY services/tunnelbroker/ . # Build C++ library gTests by CMake WORKDIR /transferred/services/tunnelbroker/src/libcpp/test RUN cmake -B build . && make -C build -j$(nproc) # Build Rust by Cargo WORKDIR /transferred/services/tunnelbroker RUN cargo build CMD if [ "$COMM_TEST_SERVICES" -eq 1 ];\ then\ src/libcpp/test/build/bin/runTests --gtest_filter='-AmqpManager*:DatabaseManager*'\ && cargo test;\ else\ cargo run;\ fi diff --git a/services/tunnelbroker/build.rs b/services/tunnelbroker/build.rs index 129f71a8f..5267a7fad 100644 --- a/services/tunnelbroker/build.rs +++ b/services/tunnelbroker/build.rs @@ -1,58 +1,57 @@ use cxx_build::CFG; use glob::glob; use std::fs; use std::path::Path; fn get_cpp_sources(path: &str) -> Vec { let mut sources = vec![]; let files = glob(String::from(path.to_owned() + "/**/*.cpp").as_str()) .expect("Error gathering .cpp file paths"); for entry in files { sources.push(entry.unwrap().display().to_string()); } sources } fn add_import_path(import_path: &str) { let shared_headers_import_path = fs::canonicalize(import_path).expect("Error getting full import path"); CFG.exported_header_dirs.push(&shared_headers_import_path); } fn main() { add_import_path("../lib/src"); add_import_path("src/libcpp/src"); add_import_path("src/libcpp/src/Amqp"); add_import_path("src/libcpp/src/Database"); add_import_path("src/libcpp/src/DeliveryBroker"); add_import_path("src/libcpp/src/Tools"); cxx_build::bridge("src/cxx_bridge.rs") .files(get_cpp_sources("../lib/src")) .files(get_cpp_sources("src/libcpp/src")) .file(Path::new("src/libcpp/Tunnelbroker.cpp")) .flag_if_supported("-std=c++17") .flag_if_supported("-w") .compile("tunnelbroker"); println!("cargo:rustc-link-lib=boost_program_options"); println!("cargo:rustc-link-lib=boost_system"); println!("cargo:rustc-link-lib=folly"); println!("cargo:rustc-link-lib=double-conversion"); println!("cargo:rustc-link-lib=gflags"); println!("cargo:rustc-link-lib=amqpcpp"); println!("cargo:rustc-link-lib=glog"); - println!("cargo:rustc-link-lib=cryptopp"); println!("cargo:rustc-link-lib=ssl"); println!("cargo:rustc-link-lib=uv"); println!("cargo:rustc-link-lib=aws-cpp-sdk-core"); println!("cargo:rustc-link-lib=aws-cpp-sdk-dynamodb"); println!("cargo:rerun-if-changed=src/main.rs"); println!("cargo:rerun-if-changed=src/libcpp/Tunnelbroker.h"); println!("cargo:rerun-if-changed=src/libcpp/Tunnelbroker.cpp"); println!("cargo:rerun-if-changed=../../shared/protos/tunnelbroker.proto"); tonic_build::compile_protos("../../shared/protos/tunnelbroker.proto") .expect("Failed to compile protobuf file"); } diff --git a/services/tunnelbroker/docker/install_cryptopp.sh b/services/tunnelbroker/docker/install_cryptopp.sh deleted file mode 100755 index 1cbb003e6..000000000 --- a/services/tunnelbroker/docker/install_cryptopp.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -set -e - -cd /tmp - -git clone --recurse-submodules -b CRYPTOPP_8_6_0 --single-branch https://github.com/weidai11/cryptopp -pushd cryptopp -mkdir build -make CXXFLAGS="-DNDEBUG -g2 -O3 -std=c++11" -make libcryptopp.pc -make install - -popd # cryptopp -rm -rf cryptopp diff --git a/services/tunnelbroker/src/libcpp/test/CMakeLists.txt b/services/tunnelbroker/src/libcpp/test/CMakeLists.txt index a15a68a8c..ab66400fb 100644 --- a/services/tunnelbroker/src/libcpp/test/CMakeLists.txt +++ b/services/tunnelbroker/src/libcpp/test/CMakeLists.txt @@ -1,108 +1,100 @@ PROJECT(tunnelbroker-libcpp C CXX) cmake_minimum_required(VERSION 3.16) # To fix full path libraries linking we are using the CMP0003 policy # https://cmake.org/cmake/help/latest/policy/CMP0003.html if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) endif(COMMAND cmake_policy) set(CMAKE_CXX_STANDARD 17) # For C++17 on MacOS, we must set minimum target to 10.14+ set(CMAKE_OSX_DEPLOYMENT_TARGET 10.14) option(BUILD_TESTING "Build test suite" ON) option(WITH_GFLAGS "Turn on GFLAGS" ON) enable_testing() find_package(PkgConfig REQUIRED) find_package(double-conversion REQUIRED) find_package(Folly REQUIRED) find_package(amqpcpp CONFIG REQUIRED) find_package(AWSSDK REQUIRED COMPONENTS core dynamodb ) find_package(Boost 1.40 REQUIRED COMPONENTS system program_options context filesystem regex thread ) find_package(OpenSSL REQUIRED) find_package(glog REQUIRED) find_package(GTest REQUIRED) -# Find Cryptopp installation -pkg_check_modules(CRYPTOPP - REQUIRED - IMPORTED_TARGET - libcryptopp=8.6 -) - # Find Libuv installation pkg_check_modules(LIBUV REQUIRED IMPORTED_TARGET libuv>=1.43 ) file(GLOB_RECURSE SHARED_CODE "../../../../lib/src/*.cpp") file(GLOB_RECURSE SOURCE_CODE "../src/*.cpp") file(GLOB TEST_CODE "*.cpp") set(SHARED_INCLUDE_DIRS ../../../../lib/src) set( INCLUDE_DIRS ../src ../src/Database ../src/DeliveryBroker ../src/Service ../src/Tools ../src/Amqp ) set( LIBS ${AWSSDK_LINK_LIBRARIES} ${Boost_LIBRARIES} - PkgConfig::CRYPTOPP PkgConfig::LIBUV amqpcpp OpenSSL::SSL glog::glog double-conversion::double-conversion Folly::folly ) add_executable( runTests ${SHARED_CODE} ${SOURCE_CODE} ${TEST_CODE} ) target_link_libraries( runTests ${LIBS} gtest gtest_main ) target_include_directories( runTests PUBLIC ${INCLUDE_DIRS} ${SHARED_INCLUDE_DIRS} ) include(GoogleTest) gtest_discover_tests(runTests)