build: split core/ from frontends/; prepare for multiple GUI/TUI targets

Reorganise the tree into business vs frontend as separate directories:
  src/core/{domain,imports,app}   (was system/, imports/, app/)
  src/frontends/tui/              (was tui/ + main.cpp)
  tests/tui/                      (the FTXUI-coupled helper test)
All cross-dir #include paths rewritten; same-dir includes untouched.

CMake: essim_core is the frontend-agnostic business library — links libzip,
pugixml and bsdl, NO GUI toolkit. Each frontend is a self-contained
src/frontends/<name>/ (own CMakeLists, toolkit, main.cpp) that links
essim_core, selected with -DESSIM_FRONTEND=<name> (default tui; 'none' = core +
tests only, no toolkit fetched). FTXUI moved into the tui frontend. Tests are
split: essim_tests links essim_core (no FTXUI), essim_tui_tests links essim_tui.

Verified: default tui build green (ctest 2/2); ESSIM_FRONTEND=none builds the
core + tests with FTXUI never fetched and no `essim` binary.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-03 19:33:06 +02:00
parent 3010bb25eb
commit 63ca17d048
83 changed files with 282 additions and 228 deletions

View File

@@ -1,13 +1,13 @@
#include "app/export.hpp"
#include "core/app/export.hpp"
#include "imports/ods_writer.hpp"
#include "system/connect.hpp"
#include "system/modules.hpp"
#include "system/parts.hpp"
#include "system/pins.hpp"
#include "system/signal_type.hpp"
#include "system/signals.hpp"
#include "system/system.hpp"
#include "core/imports/ods_writer.hpp"
#include "core/domain/connect.hpp"
#include "core/domain/modules.hpp"
#include "core/domain/parts.hpp"
#include "core/domain/pins.hpp"
#include "core/domain/signal_type.hpp"
#include "core/domain/signals.hpp"
#include "core/domain/system.hpp"
#include <cctype>
#include <fstream>

View File

@@ -1,4 +1,4 @@
#include "system/component_kind.hpp"
#include "core/domain/component_kind.hpp"
#include <cctype>
#include <string>

View File

@@ -1,11 +1,11 @@
#include "system/nets.hpp"
#include "core/domain/nets.hpp"
#include "system/connect.hpp"
#include "system/modules.hpp"
#include "system/parts.hpp"
#include "system/pins.hpp"
#include "system/signals.hpp"
#include "system/system.hpp"
#include "core/domain/connect.hpp"
#include "core/domain/modules.hpp"
#include "core/domain/parts.hpp"
#include "core/domain/pins.hpp"
#include "core/domain/signals.hpp"
#include "core/domain/system.hpp"
#include <queue>
#include <unordered_map>

View File

@@ -1,4 +1,4 @@
#include "system/pin_name.hpp"
#include "core/domain/pin_name.hpp"
#include <cstdio>
#include <stdexcept>

View File

@@ -3,9 +3,9 @@
#include "connect.hpp"
#include "modules.hpp"
#include "imports/import_altium.hpp"
#include "imports/import_mentor.hpp"
#include "imports/import_ods.hpp"
#include "core/imports/import_altium.hpp"
#include "core/imports/import_mentor.hpp"
#include "core/imports/import_ods.hpp"
System::System() : mods(nullptr), conns(nullptr)
{

View File

@@ -1,7 +1,7 @@
#ifndef _SYSTEM_HPP_
#define _SYSTEM_HPP_
#include "imports/import_base.hpp"
#include "core/imports/import_base.hpp"
#pragma once
class Modules; ///< Forward declaration of the Modules class.

View File

@@ -1,8 +1,8 @@
#include "import_altium.hpp"
#include "system/parts.hpp"
#include "system/pins.hpp"
#include "system/signals.hpp"
#include "core/domain/parts.hpp"
#include "core/domain/pins.hpp"
#include "core/domain/signals.hpp"
#include <cctype>
#include <string>

View File

@@ -4,8 +4,8 @@
#include <string>
#include <fstream>
#include "system/parts.hpp"
#include "system/signals.hpp"
#include "core/domain/parts.hpp"
#include "core/domain/signals.hpp"
/**
* @brief Base class for importing data from a file.

View File

@@ -1,6 +1,6 @@
#include "import_mentor.hpp"
#include "system/pins.hpp"
#include "system/parts.hpp"
#include "core/domain/pins.hpp"
#include "core/domain/parts.hpp"
#include <cctype>
#include <vector>

View File

@@ -1,8 +1,8 @@
#include "import_ods.hpp"
#include "system/parts.hpp"
#include "system/pins.hpp"
#include "system/signals.hpp"
#include "core/domain/parts.hpp"
#include "core/domain/pins.hpp"
#include "core/domain/signals.hpp"
#include <pugixml.hpp>
#include <zip.h>

View File

@@ -0,0 +1,35 @@
# TUI frontend (FTXUI). Builds the `essim` executable against essim_core.
#
# A frontend is self-contained here: it pulls its own GUI toolkit, compiles its
# sources into a library that links essim_core, and produces the `essim` binary
# from its own entry point (main.cpp). To add another frontend, create a sibling
# src/frontends/<name>/ with the same shape and select it with
# -DESSIM_FRONTEND=<name>.
set(FTXUI_BUILD_DOCS OFF CACHE INTERNAL "")
set(FTXUI_BUILD_EXAMPLES OFF CACHE INTERNAL "")
set(FTXUI_BUILD_TESTS OFF CACHE INTERNAL "")
set(FTXUI_ENABLE_INSTALL OFF CACHE INTERNAL "")
FetchContent_Declare(ftxui
GIT_REPOSITORY https://github.com/ArthurSonzogni/FTXUI.git
GIT_TAG v6.1.9
GIT_SHALLOW TRUE
)
FetchContent_MakeAvailable(ftxui)
# Frontend library = every .cpp here except the entry point.
file(GLOB TUI_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.cpp")
list(REMOVE_ITEM TUI_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp")
add_library(essim_tui STATIC ${TUI_SOURCES})
target_link_libraries(essim_tui
PUBLIC
essim_core
ftxui::screen
ftxui::dom
ftxui::component
)
add_executable(essim "${CMAKE_CURRENT_SOURCE_DIR}/main.cpp")
target_link_libraries(essim PRIVATE essim_tui)

View File

@@ -1,21 +1,21 @@
#include "tui/tui.hpp"
#include "tui/tui_helpers.hpp"
#include "frontends/tui/tui.hpp"
#include "frontends/tui/tui_helpers.hpp"
#include "system/analysis.hpp"
#include "system/connect.hpp"
#include "system/modules.hpp"
#include "system/nets.hpp"
#include "system/parts.hpp"
#include "system/persist.hpp"
#include "system/pin_role.hpp"
#include "system/pin_model.hpp"
#include "system/bsdl_model.hpp"
#include "system/bsdl_check.hpp"
#include "system/pins.hpp"
#include "system/signals.hpp"
#include "system/system.hpp"
#include "system/transform.hpp"
#include "system/transform_vpx.hpp"
#include "core/domain/analysis.hpp"
#include "core/domain/connect.hpp"
#include "core/domain/modules.hpp"
#include "core/domain/nets.hpp"
#include "core/domain/parts.hpp"
#include "core/domain/persist.hpp"
#include "core/domain/pin_role.hpp"
#include "core/domain/pin_model.hpp"
#include "core/domain/bsdl_model.hpp"
#include "core/domain/bsdl_check.hpp"
#include "core/domain/pins.hpp"
#include "core/domain/signals.hpp"
#include "core/domain/system.hpp"
#include "core/domain/transform.hpp"
#include "core/domain/transform_vpx.hpp"
#include <algorithm>
#include <cctype>

View File

@@ -1,8 +1,8 @@
#include "tui/tui.hpp"
#include "frontends/tui/tui.hpp"
#include "app/export.hpp"
#include "system/connect.hpp"
#include "system/system.hpp"
#include "core/app/export.hpp"
#include "core/domain/connect.hpp"
#include "core/domain/system.hpp"
#include <string>
#include <vector>

View File

@@ -1,5 +1,5 @@
#include "tui/tui.hpp"
#include "tui/tui_helpers.hpp"
#include "frontends/tui/tui.hpp"
#include "frontends/tui/tui_helpers.hpp"
#include <cctype>
#include <cstdlib>

View File

@@ -1,4 +1,4 @@
#include "tui/tui.hpp"
#include "frontends/tui/tui.hpp"
#include <fstream>
#include <iostream>

View File

@@ -1,15 +1,15 @@
#include "tui/tui.hpp"
#include "tui/tui_helpers.hpp"
#include "frontends/tui/tui.hpp"
#include "frontends/tui/tui_helpers.hpp"
#include "system/analysis.hpp"
#include "system/bsdl_check.hpp"
#include "system/connect.hpp"
#include "system/modules.hpp"
#include "system/nets.hpp"
#include "system/parts.hpp"
#include "system/pins.hpp"
#include "system/signals.hpp"
#include "system/system.hpp"
#include "core/domain/analysis.hpp"
#include "core/domain/bsdl_check.hpp"
#include "core/domain/connect.hpp"
#include "core/domain/modules.hpp"
#include "core/domain/nets.hpp"
#include "core/domain/parts.hpp"
#include "core/domain/pins.hpp"
#include "core/domain/signals.hpp"
#include "core/domain/system.hpp"
#include <ftxui/component/component.hpp>
#include <ftxui/component/component_options.hpp>

View File

@@ -1,4 +1,4 @@
#include "tui/tui.hpp"
#include "frontends/tui/tui.hpp"
#include <ftxui/component/component.hpp>
#include <ftxui/component/event.hpp>

View File

@@ -1,11 +1,11 @@
#include "tui/tui.hpp"
#include "tui/tui_helpers.hpp"
#include "frontends/tui/tui.hpp"
#include "frontends/tui/tui_helpers.hpp"
#include "system/connect.hpp"
#include "system/modules.hpp"
#include "system/parts.hpp"
#include "system/system.hpp"
#include "system/transform.hpp"
#include "core/domain/connect.hpp"
#include "core/domain/modules.hpp"
#include "core/domain/parts.hpp"
#include "core/domain/system.hpp"
#include "core/domain/transform.hpp"
#include <ftxui/component/component.hpp>
#include <ftxui/component/component_options.hpp>

View File

@@ -1,15 +1,15 @@
#include "tui/tui.hpp"
#include "tui/tui_helpers.hpp"
#include "frontends/tui/tui.hpp"
#include "frontends/tui/tui_helpers.hpp"
#include "system/analysis.hpp"
#include "system/bsdl_check.hpp"
#include "system/connect.hpp"
#include "system/modules.hpp"
#include "system/nets.hpp"
#include "system/parts.hpp"
#include "system/pins.hpp"
#include "system/signals.hpp"
#include "system/system.hpp"
#include "core/domain/analysis.hpp"
#include "core/domain/bsdl_check.hpp"
#include "core/domain/connect.hpp"
#include "core/domain/modules.hpp"
#include "core/domain/nets.hpp"
#include "core/domain/parts.hpp"
#include "core/domain/pins.hpp"
#include "core/domain/signals.hpp"
#include "core/domain/system.hpp"
#include <ftxui/component/component.hpp>
#include <ftxui/dom/elements.hpp>

View File

@@ -1,4 +1,4 @@
#include "tui/tui.hpp"
#include "frontends/tui/tui.hpp"
#include <ftxui/component/component.hpp>
#include <ftxui/component/event.hpp>

View File

@@ -1,13 +1,13 @@
#include "tui/tui.hpp"
#include "tui/tui_helpers.hpp"
#include "frontends/tui/tui.hpp"
#include "frontends/tui/tui_helpers.hpp"
#include "system/connect.hpp"
#include "system/modules.hpp"
#include "system/nets.hpp"
#include "system/parts.hpp"
#include "system/pins.hpp"
#include "system/signals.hpp"
#include "system/system.hpp"
#include "core/domain/connect.hpp"
#include "core/domain/modules.hpp"
#include "core/domain/nets.hpp"
#include "core/domain/parts.hpp"
#include "core/domain/pins.hpp"
#include "core/domain/signals.hpp"
#include "core/domain/system.hpp"
#include <ftxui/component/component.hpp>
#include <ftxui/component/component_options.hpp>

View File

@@ -1,5 +1,5 @@
#include "tui/tui.hpp"
#include "tui/tui_helpers.hpp"
#include "frontends/tui/tui.hpp"
#include "frontends/tui/tui_helpers.hpp"
#include <ftxui/component/component.hpp>
#include <ftxui/component/component_options.hpp>

View File

@@ -1,5 +1,5 @@
#include "tui/tui.hpp"
#include "tui/tui_helpers.hpp"
#include "frontends/tui/tui.hpp"
#include "frontends/tui/tui_helpers.hpp"
#include <ftxui/component/component.hpp>
#include <ftxui/component/component_options.hpp>

View File

@@ -1,5 +1,5 @@
#include "tui/tui.hpp"
#include "tui/tui_helpers.hpp"
#include "frontends/tui/tui.hpp"
#include "frontends/tui/tui_helpers.hpp"
#include <ftxui/component/component.hpp>
#include <ftxui/component/component_options.hpp>

View File

@@ -1,9 +1,9 @@
#include "tui/tui.hpp"
#include "tui/tui_helpers.hpp"
#include "frontends/tui/tui.hpp"
#include "frontends/tui/tui_helpers.hpp"
#include "system/modules.hpp"
#include "system/signals.hpp"
#include "system/system.hpp"
#include "core/domain/modules.hpp"
#include "core/domain/signals.hpp"
#include "core/domain/system.hpp"
#include <ftxui/component/component.hpp>
#include <ftxui/component/component_options.hpp>

View File

@@ -1,13 +1,13 @@
#include "tui/tui.hpp"
#include "tui/tui_helpers.hpp"
#include "frontends/tui/tui.hpp"
#include "frontends/tui/tui_helpers.hpp"
#include "system/modules.hpp"
#include "system/parts.hpp"
#include "system/pin_model.hpp"
#include "system/pin_role.hpp"
#include "system/pins.hpp"
#include "system/system.hpp"
#include "system/transform_vpx.hpp"
#include "core/domain/modules.hpp"
#include "core/domain/parts.hpp"
#include "core/domain/pin_model.hpp"
#include "core/domain/pin_role.hpp"
#include "core/domain/pins.hpp"
#include "core/domain/system.hpp"
#include "core/domain/transform_vpx.hpp"
#include <ftxui/component/component.hpp>
#include <ftxui/component/component_options.hpp>

View File

@@ -1,8 +1,8 @@
#include "tui/tui.hpp"
#include "frontends/tui/tui.hpp"
#include "system/modules.hpp"
#include "system/signals.hpp"
#include "system/system.hpp"
#include "core/domain/modules.hpp"
#include "core/domain/signals.hpp"
#include "core/domain/system.hpp"
#include <ftxui/component/component.hpp>
#include <ftxui/component/component_options.hpp>

View File

@@ -1,9 +1,9 @@
#include "tui/tui.hpp"
#include "tui/tui_helpers.hpp"
#include "frontends/tui/tui.hpp"
#include "frontends/tui/tui_helpers.hpp"
#include "system/modules.hpp"
#include "system/signals.hpp"
#include "system/system.hpp"
#include "core/domain/modules.hpp"
#include "core/domain/signals.hpp"
#include "core/domain/system.hpp"
#include <cctype>
#include <chrono>

View File

@@ -1,6 +1,6 @@
#include "tui/tui.hpp"
#include "frontends/tui/tui.hpp"
#include "system/system.hpp"
#include "core/domain/system.hpp"
#include <ftxui/component/component.hpp>
#include <ftxui/component/event.hpp>

View File

@@ -1,4 +1,4 @@
#include "tui/tui_helpers.hpp"
#include "frontends/tui/tui_helpers.hpp"
#include <ftxui/dom/elements.hpp>