diff --git a/CMakeLists.txt b/CMakeLists.txt index e792c5f..081bcb9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -4,21 +4,35 @@ project(tablo) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -# Tablo shared libraries +# Build options -# libtabcrypt -add_subdirectory(lib/libtabcrypt) +option(DEF_LIBTABCRYPT "Build libtabcrypt" ON) +option(DEF_LIBTABNET "Build libtabnet" ON) -# libtabnet -add_subdirectory(lib/libtabnet) +option(DEF_CLIENT "Build TabloClient" ON) +option(DEF_MASTER "Build TabloMaster" ON) +option(DEF_NODE "Build TabloNode" ON) -# Test executables +# Shared libraries -add_subdirectory(TCTest) +if(DEF_LIBTABCRYPT) + add_subdirectory(lib/libtabcrypt) +endif() +if(DEF_LIBTABNET) + add_subdirectory(lib/libtabnet) +endif() -# TabloClient, TabloMaster and TabloNode executables (provided by own CMakeLists.txt files) +# Executables -add_subdirectory(TabloClient) -add_subdirectory(TabloMaster) -add_subdirectory(TabloNode) +if(DEF_CLIENT) + add_subdirectory(TabloClient) +endif() + +if(DEF_MASTER) + add_subdirectory(TabloMaster) +endif() + +if(DEF_NODE) + add_subdirectory(TabloNode) +endif() diff --git a/TCTest/CMakeLists.txt b/TCTest/CMakeLists.txt deleted file mode 100644 index 9eee444..0000000 --- a/TCTest/CMakeLists.txt +++ /dev/null @@ -1,14 +0,0 @@ -cmake_minimum_required(VERSION 3.10) -project(tablo) - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - -file(GLOB_RECURSE SOURCES "src/*.cpp" "src/*.h") - -add_executable(tabcrypt-test ${SOURCES}) - -# Link against the tabcrypt library -target_link_libraries(tabcrypt-test PRIVATE tabcrypt) - -install(TARGETS tabcrypt-test DESTINATION bin) diff --git a/TCTest/src/main.cpp b/TCTest/src/main.cpp deleted file mode 100644 index 3d7b702..0000000 --- a/TCTest/src/main.cpp +++ /dev/null @@ -1,50 +0,0 @@ -#include -#include -#include "tabcrypt_test.h" - - -void handleLine(const std::string& line) { - if (encrypt_mode) { - std::cout << tabcrypt::encrypt(line, secret) << "\n"; - } else { - try { - std::cout << tabcrypt::decrypt(line, secret) << "\n"; - } catch (const std::exception& e) { - std::cerr << "Decryption failed: " << e.what() << "\n"; - } - } -} - - -/* - * Arguments: - * tabcrypt_test [-d|-e] - * Messages via stdin/stdout - */ -int main(int argc, char *argv[]) { - if (argc < 2) { - std::cerr << "Usage: " << argv[0] << " [-d|-e]\n" - " -d: decrypt (default)\n" - " -e: encrypt\n"; - return EXIT_FAILURE; - }; - std::string secret = argv[1]; - - // parse argv[2] - - if (std::string(argv[2]) == "-e") { - encrypt_mode = true; - } else if (std::string(argv[2]) != "-d") { - std::cerr << "Unknown option: " << argv[2] << "\n"; - return EXIT_FAILURE; - } - - std::string line; - - while (std::getline(std::cin, line)) { - if (line.empty()) { - break; // Exit on empty line - } - handleLine(line); - } -} diff --git a/TCTest/src/tabcrypt_test.h b/TCTest/src/tabcrypt_test.h deleted file mode 100644 index 4762f02..0000000 --- a/TCTest/src/tabcrypt_test.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// Created by Tureb on 22.07.2025. -// - -#ifndef TABCRYPT_TEST_H -#define TABCRYPT_TEST_H - -inline bool encrypt_mode = false; -inline std::string secret; - -void handleLine(const std::string& line); - -#endif //TABCRYPT_TEST_H diff --git a/flake.nix b/flake.nix index 194ba0c..6812b53 100644 --- a/flake.nix +++ b/flake.nix @@ -3,6 +3,7 @@ inputs = { nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; + ttp2 = { url = "github:Sobottasgithub/ttp2"; }; @@ -16,9 +17,12 @@ }: let system = "x86_64-linux"; - pkgs = import nixpkgs { inherit system; }; - version = "1.2"; + pkgs = import nixpkgs { + inherit system; + }; + + version = "1.3"; libttp2 = ttp2.packages.${system}.lib; @@ -33,51 +37,169 @@ { packages.${system} = let - tablo-full = pkgs.stdenv.mkDerivation { + mkTabloPackage = + { + pname, + buildTarget ? pname, + + enableLibtabcrypt ? false, + enableLibtabnet ? false, + + enableNode ? false, + enableClient ? false, + enableMaster ? false, + + extraInputs ? [ ], + }: + pkgs.stdenv.mkDerivation { + inherit pname version; + + src = ./.; + + meta = { + description = "${pname} package"; + mainProgram = pname; + }; + + buildInputs = packages ++ extraInputs; + + configurePhase = '' + cmake -B build -S $src \ + -DCMAKE_BUILD_TYPE=Release \ + -DDEF_LIBTABCRYPT=${if enableLibtabcrypt then "ON" else "OFF"} \ + -DDEF_LIBTABNET=${if enableLibtabnet then "ON" else "OFF"} \ + -DDEF_NODE=${if enableNode then "ON" else "OFF"} \ + -DDEF_CLIENT=${if enableClient then "ON" else "OFF"} \ + -DDEF_MASTER=${if enableMaster then "ON" else "OFF"} + ''; + + buildPhase = '' + cmake --build build \ + --target ${buildTarget} \ + -j$NIX_BUILD_CORES + ''; + + installPhase = '' + cmake --install build --prefix=$out + cp LICENSE $out/ + ''; + }; + + libtabcrypt = mkTabloPackage { + pname = "libtabcrypt"; + buildTarget = "tabcrypt"; + + enableLibtabcrypt = true; + }; + + libtabnet = mkTabloPackage { + pname = "libtabnet"; + buildTarget = "tabnet"; + + enableLibtabnet = true; + + extraInputs = [ + libtabcrypt + # include libttp2 just here for later setup! + ]; + }; + + tablo-node = mkTabloPackage { + pname = "tablo-node"; + + enableNode = true; + + extraInputs = [ + libtabcrypt + libtabnet + ]; + }; + + tablo-client = mkTabloPackage { + pname = "tablo-client"; + + enableClient = true; + enableLibtabcrypt = true; + enableLibtabnet = true; + + extraInputs = [ + libtabcrypt + libtabnet + ]; + }; + + tablo-master = mkTabloPackage { + pname = "tablo-master"; + + enableMaster = true; + enableLibtabcrypt = true; + enableLibtabnet = true; + + extraInputs = [ + libtabcrypt + libtabnet + ]; + }; + + tablo-full = mkTabloPackage { pname = "tablo-full"; - inherit version; - src = ./.; + buildTarget = "all"; - meta = { - description = "Full tablo package"; - mainProgram = "tablo-node"; - }; + enableLibtabcrypt = true; + enableLibtabnet = true; - buildInputs = packages; + enableNode = true; + enableClient = true; + enableMaster = true; - configurePhase = '' - cmake -B build -S $src -DCMAKE_BUILD_TYPE=Release - ''; + extraInputs = [ + libtabcrypt + libtabnet + ]; + }; - buildPhase = '' - cmake --build build - ''; + tablo = pkgs.symlinkJoin { + name = "tablo-${version}"; - installPhase = '' - cmake --install build --prefix=$out - cp LICENSE $out/ - ''; + paths = [ + libtabcrypt + libtabnet + tablo-node + tablo-client + tablo-master + ]; }; mkTabloDocker = - name: extraConfig: + package: binary: pkgs.dockerTools.buildImage { - inherit name; + name = binary; tag = version; + config = { - Cmd = [ "${tablo-full}/bin/${name}" ]; - } - // extraConfig; + Cmd = [ "${package}/bin/${binary}" ]; + }; }; in { - inherit tablo-full libttp2; - default = tablo-full; - tablo-node-docker = mkTabloDocker "tablo-node" { }; - tablo-master-docker = mkTabloDocker "tablo-master" { }; + inherit + tablo + tablo-node + tablo-client + tablo-master + tablo-full + libtabcrypt + libtabnet + libttp2 + ; + + default = tablo; + + tablo-node-docker = mkTabloDocker tablo-node "tablo-node"; - # used for client containers not deployed via swarm - tablo-client-docker = mkTabloDocker "tablo-client" { }; + tablo-master-docker = mkTabloDocker tablo-master "tablo-master"; + + tablo-client-docker = mkTabloDocker tablo-client "tablo-client"; }; devShells.${system}.default = @@ -91,13 +213,14 @@ pkgs.mkShell { packages = devPackages; - inputsFrom = [ self.packages.${system}.default ]; + inputsFrom = [ + self.packages.${system}.default + ]; shellHook = '' git status cmake -S . -B build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ''; }; - }; }