Implemented new C++ logic
This commit is contained in:
+359
-49
@@ -6,13 +6,15 @@ This document describes the internal architecture of the MARTe2 Integrated Compo
|
||||
|
||||
## 1. Repository Overview
|
||||
|
||||
### DebugService path (legacy introspection / breakpoints)
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────────────────────────┐
|
||||
│ MARTe2 Application │
|
||||
│ ┌──────────┐ ┌───────────────────────┐ ┌──────────────────┐ │
|
||||
│ │ GAM(s) │ │ DebugBrokerWrapper │ │ FastScheduler │ │
|
||||
│ │ │◄──│ (Registry-patched) │ │ (unmodified) │ │
|
||||
│ └──────────┘ └──────────┬────────────┘ └──────────────────┘ │
|
||||
│ MARTe2 Application │
|
||||
│ ┌──────────┐ ┌───────────────────────┐ ┌──────────────────┐ │
|
||||
│ │ GAM(s) │ │ DebugBrokerWrapper │ │ FastScheduler │ │
|
||||
│ │ │◄──│ (Registry-patched) │ │ (unmodified) │ │
|
||||
│ └──────────┘ └──────────┬────────────┘ └──────────────────┘ │
|
||||
│ │ RT-path API │
|
||||
└────────────────────────────┼───────────────────────────────────────┘
|
||||
│
|
||||
@@ -32,28 +34,41 @@ This document describes the internal architecture of the MARTe2 Integrated Compo
|
||||
│ Client/debugger │
|
||||
│ Go web client (browser) │
|
||||
└───────────────────────────────┘
|
||||
```
|
||||
|
||||
### UDPStreamer / StreamHub path (high-throughput signal streaming)
|
||||
|
||||
```
|
||||
┌────────────────────────────────────────────────────────────────────┐
|
||||
│ MARTe2 Application │
|
||||
│ ┌─────────────────────────────────────────────┐ │
|
||||
│ │ UDPStreamer DataSource │ │
|
||||
│ │ - Receives signals from GAMs via IOGAM │ │
|
||||
│ │ - Serialises to UDPS binary protocol │ │
|
||||
│ │ - Manages per-client sessions │ │
|
||||
│ └──────────────────────┬──────────────────────┘ │
|
||||
│ MARTe2 Application │
|
||||
│ ┌─────────────────────────────────────────────┐ │
|
||||
│ │ UDPStreamer DataSource │ │
|
||||
│ │ - Receives signals from GAMs via IOGAM │ │
|
||||
│ │ - Serialises to UDPS binary protocol │ │
|
||||
│ │ - Manages per-client sessions │ │
|
||||
│ └──────────────────────┬──────────────────────┘ │
|
||||
└─────────────────────────┼──────────────────────────────────────────┘
|
||||
UDP 44500
|
||||
UDP 44500 (unicast or multicast)
|
||||
│
|
||||
┌───────────▼──────────────┐
|
||||
│ Common/Client/go │
|
||||
│ udpsprotocol package │
|
||||
│ (decode CONFIG+DATA) │
|
||||
└───────────┬──────────────┘
|
||||
│ WebSocket
|
||||
┌───────────▼──────────────┐
|
||||
│ Browser oscilloscope │
|
||||
│ (Chart.js plots) │
|
||||
└──────────────────────────┘
|
||||
┌───────────────▼───────────────┐
|
||||
│ StreamHub │
|
||||
│ Source/Applications/StreamHub│
|
||||
│ - N simultaneous sources │
|
||||
│ - Ring buffers per signal │
|
||||
│ - LTTB decimation │
|
||||
│ - Trigger engine (FSM) │
|
||||
│ - M WebSocket clients │
|
||||
└──────────────┬────────────────┘
|
||||
WebSocket 8090
|
||||
│
|
||||
┌──────────────┴──────────────┐
|
||||
│ │
|
||||
┌───────▼──────────┐ ┌────────────▼──────────────┐
|
||||
│ Browser (any) │ │ ImGui Desktop Client │
|
||||
│ Client/udpstreamer│ │ Client/streamhub/ │
|
||||
│ Go web server + │ │ C++ native window │
|
||||
│ JS oscilloscope │ │ (SDL2 + OpenGL + ImPlot) │
|
||||
└──────────────────┘ └───────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
@@ -65,45 +80,72 @@ Defined in `Common/UDP/UDPSProtocol.h` and shared between:
|
||||
- `UDPStreamer` (C++ producer)
|
||||
- `DebugService` (C++ producer for trace packets)
|
||||
- `Common/Client/go/udpsprotocol` (Go decoder)
|
||||
- `Source/Components/Interfaces/UDPStream/UDPSClient` (C++ consumer)
|
||||
|
||||
### Packet Header (17 bytes, little-endian, packed)
|
||||
|
||||
| Offset | Size | Type | Field | Description |
|
||||
|---|---|---|---|---|
|
||||
| 0 | 4 | uint32 | `magic` | Always `0x53504455` ('UDPS' LE) |
|
||||
| 4 | 1 | uint8 | `type` | Packet type (DATA=0, CONFIG=1, ACK=2, CONNECT=3, DISCONNECT=4) |
|
||||
| 5 | 4 | uint32 | `counter` | Per-update sequence number (same across all fragments) |
|
||||
| 9 | 2 | uint16 | `fragmentIdx` | 0-based fragment index |
|
||||
| 11 | 2 | uint16 | `totalFragments` | Total fragments for this update |
|
||||
| 13 | 4 | uint32 | `payloadBytes` | Bytes of payload following this header |
|
||||
| Offset | Size | Type | Field | Description |
|
||||
| ------ | ---- | ------ | ---------------- | -------------------------------------------------------------- |
|
||||
| 0 | 4 | uint32 | `magic` | Always `0x53504455` ('UDPS' LE) |
|
||||
| 4 | 1 | uint8 | `type` | Packet type (DATA=0, CONFIG=1, ACK=2, CONNECT=3, DISCONNECT=4) |
|
||||
| 5 | 4 | uint32 | `counter` | Per-update sequence number (same across all fragments) |
|
||||
| 9 | 2 | uint16 | `fragmentIdx` | 0-based fragment index |
|
||||
| 11 | 2 | uint16 | `totalFragments` | Total fragments for this update |
|
||||
| 13 | 4 | uint32 | `payloadBytes` | Bytes of payload following this header |
|
||||
|
||||
### Signal Descriptor (136 bytes, packed)
|
||||
|
||||
| Field | Type | Description |
|
||||
| -------------- | ------- | --------------------------------------------------------- |
|
||||
| `name` | char[64]| Null-terminated signal name |
|
||||
| `typeCode` | uint8 | UDPS_TYPECODE_* (0=u8, 1=i8, … 9=f32, 10=f64) |
|
||||
| `quantType` | uint8 | UDPS_QUANT_* (0=none, 1=u8, 2=i8, 3=u16, 4=i16) |
|
||||
| `numDimensions`| uint8 | 0=scalar, 1=array, 2=matrix |
|
||||
| `numRows` | uint32 | Element count for 1D; rows for 2D |
|
||||
| `numCols` | uint32 | 1 for scalar/1D; columns for 2D |
|
||||
| `rangeMin` | float64 | Physical range minimum (for dequantisation) |
|
||||
| `rangeMax` | float64 | Physical range maximum (for dequantisation) |
|
||||
| `timeMode` | uint8 | UDPS_TIMEMODE_* (0=packet, 1=first, 2=last, 3=full_array)|
|
||||
| `samplingRate` | float64 | Hz; used for first/last sample interpolation |
|
||||
| `timeSignalIdx`| uint32 | Index of time-ref signal; 0xFFFFFFFF if none |
|
||||
| `unit` | char[32]| Null-terminated physical unit string |
|
||||
|
||||
### CONFIG Payload
|
||||
|
||||
Sent when the signal set changes or a client connects:
|
||||
|
||||
```
|
||||
[uint32 numSigs]
|
||||
numSigs × UDPSSignalDescriptor (136 bytes each, packed)
|
||||
[uint8 publishMode]
|
||||
[uint8 publishMode] 0=Strict/Decimate, 1=Accumulate
|
||||
```
|
||||
|
||||
### DATA Payload (Strict / Decimate modes)
|
||||
|
||||
```
|
||||
[uint64 HRT timestamp]
|
||||
per-signal data in CONFIG order (quantised or raw, no inter-signal padding)
|
||||
```
|
||||
|
||||
### DATA Payload (Accumulate mode)
|
||||
|
||||
```
|
||||
[uint64 HRT timestamp]
|
||||
[uint32 numSamples]
|
||||
for each signal: if scalar → numSamples elements; else → NumElements once
|
||||
```
|
||||
|
||||
### Quantization
|
||||
### Quantization / Dequantization
|
||||
|
||||
When `QuantizedType` is set on a signal, the server maps `[RangeMin, RangeMax]` to the
|
||||
full integer range of the quantized type before transmission. The Go client reverses this
|
||||
using the `Scale` and `Offset` fields from `UDPSSignalDescriptor`.
|
||||
When `quantType != QUANT_NONE`, the server maps `[rangeMin, rangeMax]` to the full
|
||||
integer range. Clients reverse with:
|
||||
|
||||
| quantType | Formula |
|
||||
|-----------|---------|
|
||||
| QUANT_UINT8 | `rangeMin + (q / 255.0) × (rangeMax − rangeMin)` |
|
||||
| QUANT_INT8 | `rangeMin + ((q + 127.0) / 254.0) × (rangeMax − rangeMin)` |
|
||||
| QUANT_UINT16 | `rangeMin + (q / 65535.0) × (rangeMax − rangeMin)` |
|
||||
| QUANT_INT16 | `rangeMin + ((q + 32767.0) / 65534.0) × (rangeMax − rangeMin)` |
|
||||
|
||||
---
|
||||
|
||||
@@ -112,8 +154,8 @@ using the `Scale` and `Offset` fields from `UDPSSignalDescriptor`.
|
||||
### 3.1 Registry Patching (Zero-Code-Change Instrumentation)
|
||||
|
||||
`DebugService::PatchRegistry()` replaces the `ObjectBuilder` for all `MemoryMap*Broker`
|
||||
types in the MARTe2 `ClassRegistryDatabase`. Any subsequent `ConfigureApplication()` call
|
||||
will instantiate `DebugBrokerWrapper<T>` objects instead of the originals. No application
|
||||
types in the MARTe2 `ClassRegistryDatabase`. Any subsequent `ConfigureApplication()` call
|
||||
will instantiate `DebugBrokerWrapper<T>` objects instead of the originals. No application
|
||||
source changes are needed.
|
||||
|
||||
Wrapped types: `MemoryMapInputBroker`, `MemoryMapOutputBroker`,
|
||||
@@ -134,10 +176,11 @@ ConfigureApplication()
|
||||
```
|
||||
|
||||
Each signal is registered twice:
|
||||
|
||||
1. **Canonical**: `<DataSourcePath>.<SignalName>` (e.g. `App.Data.DDB.Counter`)
|
||||
2. **GAM alias**: `<GAMPath>.In.<SignalName>` or `<GAMPath>.Out.<SignalName>`
|
||||
|
||||
Both map to the same `DebugSignalInfo*`. `AliasMatch()` in `DebugServiceBase.cpp`
|
||||
Both map to the same `DebugSignalInfo*`. `AliasMatch()` in `DebugServiceBase.cpp`
|
||||
performs bidirectional suffix matching so short unqualified names work in commands.
|
||||
|
||||
### 3.3 RT Hot Path
|
||||
@@ -166,9 +209,9 @@ Entry format: `[ID:4][Timestamp:8][Size:4][Data:N]`.
|
||||
|
||||
### 3.5 DebugService Threads
|
||||
|
||||
| Thread | Role |
|
||||
|---|---|
|
||||
| `Server()` | Accepts one TCP client; reads text commands; writes JSON/text responses |
|
||||
| Thread | Role |
|
||||
| ------------ | -------------------------------------------------------------------------------- |
|
||||
| `Server()` | Accepts one TCP client; reads text commands; writes JSON/text responses |
|
||||
| `Streamer()` | Drains `TraceRingBuffer`; assembles/sends UDP datagrams; polls monitored signals |
|
||||
|
||||
### 3.6 DebugServiceI Abstraction
|
||||
@@ -194,21 +237,273 @@ DebugServiceI *svc = DebugServiceI::GetInstance(); // broker wrapper retrieves i
|
||||
3. Handles `CONNECT` / `DISCONNECT` / `ACK` packets from clients
|
||||
4. Sends `CONFIG` packets when the signal list changes or a new client connects
|
||||
5. Applies quantization (`QuantizedType`, `RangeMin`, `RangeMax`) per signal
|
||||
6. Supports unicast and multicast UDP delivery (configurable per instance)
|
||||
|
||||
### Packed Signals (Accumulate mode)
|
||||
|
||||
When a signal has `NumberOfElements > 1` and `SamplingRate` is configured:
|
||||
|
||||
- `TimeMode = FirstSample`: the `TimeSignal` value anchors the burst timestamp
|
||||
- The Go client interpolates per-sample timestamps as `t0 + e/SamplingRate * dt`
|
||||
- Clients interpolate per-sample timestamps as `t0 + e/SamplingRate`
|
||||
- `UDPStreamer` packs all elements contiguously with no per-element header
|
||||
|
||||
---
|
||||
|
||||
## 5. Go Client Packages
|
||||
## 5. StreamHub C++ Application
|
||||
|
||||
`StreamHub` (`Source/Applications/StreamHub/`) is a **headless standalone process** that
|
||||
bridges N MARTe2 UDPStreamer sources to M simultaneous WebSocket clients. It replaces the
|
||||
Go-based `Client/udpstreamer/` hub for deployments where a Go toolchain is unavailable
|
||||
or where the hub must run as a C++ service.
|
||||
|
||||
### Components
|
||||
|
||||
| File | Purpose |
|
||||
|------|---------|
|
||||
| `main.cpp` | Entry point; parses `-cfg`, `-port`, `-maxPoints` flags |
|
||||
| `StreamHub.h/.cpp` | Top-level orchestrator; push loop; WS command dispatch |
|
||||
| `UDPSourceSession.h/.cpp` | One UDPS source: `UDPSClient` + ring buffers + wall-clock calibration + stats |
|
||||
| `TriggerEngine.h/.cpp` | FSM: IDLE / ARMED / COLLECTING / TRIGGERED (web-client semantics) |
|
||||
| `WSServer.h/.cpp` | RFC 6455 WebSocket server; multi-client accept+read threads |
|
||||
| `WSFrame.h` | WebSocket frame encode/decode helpers |
|
||||
| `SignalRingBuffer.h` | Thread-safe fixed-capacity circular buffer (float64 t, v) |
|
||||
| `UDPSourceStats.h` | Per-source statistics struct |
|
||||
| `LTTB.h` | Largest Triangle Three Buckets decimation (header-only) |
|
||||
| `SHA1.h` | Inline SHA-1 for WebSocket handshake Accept key |
|
||||
| `Base64.h` | Inline Base64 encoder for WebSocket handshake |
|
||||
|
||||
### Time Base (wall-clock calibration)
|
||||
|
||||
All ring-buffer timestamps are **Unix wall-clock seconds** (float64). Each
|
||||
`UDPSourceSession` calibrates source time to the hub's `CLOCK_REALTIME` on the
|
||||
first packet (offset = wallNow − sourceTime) and re-anchors automatically if the
|
||||
computed time drifts more than 2 s from arrival time (source restart). Per-sample
|
||||
time depends on the signal's UDPS `timeMode`:
|
||||
|
||||
| timeMode | Per-sample timestamp |
|
||||
|----------|---------------------|
|
||||
| `FirstSample` / `LastSample` | calibrated time-signal anchor ± k/samplingRate |
|
||||
| `FullArray` | calibrated per-element time-signal array |
|
||||
| Packet (scalar) | packet arrival wall time |
|
||||
| Packet (array, n>1) | elements span `(lastPktWall, wallNow]`, interpolated from the inter-packet gap |
|
||||
|
||||
### Push Loop
|
||||
|
||||
Runs at `PushRate` Hz (default 30 Hz):
|
||||
|
||||
1. For each configured source:
|
||||
- On first CONFIG: broadcast `sources` + `config`, reset push cursors
|
||||
- For each signal: read **only the samples written since the last tick**
|
||||
(per-signal monotonic cursor into the ring; overrun clamps to oldest)
|
||||
- LTTB-decimate temporal signals to `MaxPushPoints` (default 50); scalars
|
||||
and packet-timed arrays go verbatim
|
||||
- Serialise one binary v1 frame per source; broadcast to all WS clients
|
||||
- Cursors advance even with zero clients (no backlog burst on connect)
|
||||
2. Trigger servicing (capture finalisation, auto-rearm, state events)
|
||||
3. Every `PushRate / StatsRate` ticks: broadcast JSON stats frame
|
||||
|
||||
Pushing only-new samples is essential: re-reading overlapping windows and
|
||||
re-LTTBing them picks different points per window and corrupts the traces.
|
||||
|
||||
### Trigger Engine
|
||||
|
||||
Hub-side trigger with the web client's semantics (config: signal key
|
||||
`"src:sig"` or `"src:sig[i]"`, edge rising/falling/both, threshold, window
|
||||
0.1 ms–10 s, pre-trigger percent, mode normal/single):
|
||||
|
||||
```
|
||||
IDLE →[arm]→ ARMED
|
||||
ARMED →[edge crossing]→ COLLECTING (latches trigTime, pre/postSec)
|
||||
COLLECTING →[post window + margin elapsed]→ TRIGGERED (broadcast binary v2 capture)
|
||||
TRIGGERED →[auto-rearm (normal, ~200 ms) | rearm (single)]→ ARMED
|
||||
any →[disarm]→ IDLE
|
||||
```
|
||||
|
||||
`CheckSample()` is called from the UDPSClient receive thread for every decoded
|
||||
sample of the configured signal. The capture is assembled in the push loop from
|
||||
`ReadSignalRange(trigTime−preSec, trigTime+postSec)` over **all** signals,
|
||||
LTTB-capped at 20 000 points/signal, and broadcast as a binary version-2 frame.
|
||||
A `stopped` flag (`trigStop`) freezes auto-rearm.
|
||||
|
||||
### Configuration File (MARTe2 cfg format)
|
||||
|
||||
```
|
||||
Hub = {
|
||||
WSPort = 8090
|
||||
MaxPoints = 20000 // zoom/live window cap (setMaxPoints)
|
||||
PushRate = 30 // push loop Hz
|
||||
MaxPushPoints = 50 // LTTB cap per signal per tick
|
||||
StatsRate = 1 // stats broadcast Hz
|
||||
RingTemporal = 1000000 // ring capacity (points) for multi-element signals
|
||||
RingScalar = 100000 // ring capacity (points) for scalar signals
|
||||
SourcesFile = "streamhub_sources.json" // dynamic-source persistence
|
||||
Sources = {
|
||||
App1 = {
|
||||
Label = "MARTe2 App 1"
|
||||
Addr = "127.0.0.1"
|
||||
Port = 44500
|
||||
}
|
||||
App2 = {
|
||||
Label = "MARTe2 App 2"
|
||||
Addr = "192.168.1.10"
|
||||
Port = 44501
|
||||
MulticastGroup = "239.0.0.1"
|
||||
DataPort = 44504
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Sources added at runtime (`addSource`) get generated ids `s1, s2, …`;
|
||||
`saveSources` persists them to `SourcesFile` (JSON array of
|
||||
`{label, addr, multicastGroup?, dataPort?}`), reloaded at start-up.
|
||||
|
||||
### Build
|
||||
|
||||
```bash
|
||||
MARTe2_DIR=/path/to/MARTe2 \
|
||||
make -C Source/Applications/StreamHub -f Makefile.gcc TARGET=x86-linux
|
||||
# Produces: Build/x86-linux/StreamHub/StreamHub.ex
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. StreamHub WebSocket Protocol
|
||||
|
||||
All client↔hub communication uses WebSocket (RFC 6455). Text frames carry JSON;
|
||||
binary frames carry data push payloads.
|
||||
|
||||
### Commands (client → hub, JSON text frames)
|
||||
|
||||
| `type` field | Additional fields | Action |
|
||||
|------------------|-------------------|--------|
|
||||
| `ping` | — | Hub replies `{"type":"pong"}` |
|
||||
| `addSource` | `label`, `addr` (`"host:port"`), `multicastGroup?`, `dataPort?` | Connect to a new UDPS source; hub assigns id `s1, s2, …` |
|
||||
| `removeSource` | `id` | Disconnect and remove a source |
|
||||
| `saveSources` | — | Persist the current dynamic source list to `SourcesFile` (JSON) |
|
||||
| `getSources` | — | Trigger `sources` broadcast |
|
||||
| `getConfig` | `sourceId` | Trigger `config` broadcast for one source |
|
||||
| `getStats` | — | Trigger `stats` broadcast |
|
||||
| `setTrigger` | `signal` (`"src:sig"` or `"src:sig[i]"`), `edge` (`"rising"`\|`"falling"`\|`"both"`), `threshold`, `windowSec`, `prePercent`, `mode` (`"normal"`\|`"single"`) | Configure the hub-side trigger |
|
||||
| `arm` | — | IDLE → ARMED |
|
||||
| `disarm` | — | Any state → IDLE |
|
||||
| `rearm` | — | TRIGGERED → ARMED (used in single mode) |
|
||||
| `trigStop` | `stopped?` (bool; absent = toggle) | Suppress auto-rearm in normal mode |
|
||||
| `zoom` | `reqId`, `t0`, `t1`, `n?`, `signals?` (comma-separated `"src:sig"` keys; absent = all) | Hi-res window read; reply is **unicast** to the requester. `n` absent → 2400; `n≤0` → no decimation |
|
||||
| `setMaxPoints` | `maxPoints` | Resize all ring buffers (applied in push loop; cursors reset) |
|
||||
|
||||
### Events (hub → client, JSON text frames)
|
||||
|
||||
| `type` field | Fields | When sent |
|
||||
|--------------------|--------|-----------|
|
||||
| `sources` | `sources:[{id, label, addr:"host:port", state}]` | On connect; after add/remove/getSources; on first CONFIG |
|
||||
| `config` | `sourceId`, `publishMode`, `signals:[{name, typeCode, quantType, numDimensions, numRows, numCols, rangeMin, rangeMax, timeMode, samplingRate, timeSignalIdx, unit}]` | After CONFIG received from source |
|
||||
| `stats` | `sources:{id:{state, totalReceived, totalLost, rateHz, rateStdHz, fragsPerCycle, bytesPerCycle, cycleAvgMs, cycleStdMs, cycleMinMs, cycleMaxMs, cycleHistMin, cycleHistMax, cycleHist:[20]}}` | At `StatsRate` Hz |
|
||||
| `triggerState` | `state` (`"idle"`\|`"armed"`\|`"collecting"`\|`"triggered"`), `mode`, `stopped`, `trigTime?` | On any trigger FSM transition |
|
||||
| `zoom` | `reqId`, `signals:{"src:sig":{t:[…], v:[…]}}` (`t` printed `%.17g`, `v` `%.9g`) | Unicast reply to `zoom` |
|
||||
| `maxPointsUpdated` | `maxPoints` | After ring buffer resize |
|
||||
| `pong` | — | In reply to `ping` |
|
||||
|
||||
### Binary Push Frame (version 1, hub → client, binary WS frame)
|
||||
|
||||
Little-endian throughout. Sent at `PushRate` Hz per source; contains **only
|
||||
samples new since the previous push** (per-signal cursors), decimated to
|
||||
`MaxPushPoints` per signal.
|
||||
|
||||
```
|
||||
[1] version = 1
|
||||
[1] sourceIdLen (L)
|
||||
[L] sourceId (UTF-8, no null terminator)
|
||||
[4] numSignals (uint32 LE)
|
||||
|
||||
Per signal:
|
||||
[2] keyLen (uint16 LE) (K)
|
||||
[K] key = signal name (UTF-8; "name[i]" per element for multi-element PACKET signals)
|
||||
[4] pairCount (uint32 LE) (N)
|
||||
[N×8] time array (float64 LE, Unix wall-clock seconds)
|
||||
[N×8] value array (float64 LE, physical units)
|
||||
```
|
||||
|
||||
### Binary Capture Frame (version 2, hub → client, binary WS frame)
|
||||
|
||||
Broadcast once per trigger capture (FSM COLLECTING → TRIGGERED). Each signal is
|
||||
LTTB-decimated to at most 20 000 points.
|
||||
|
||||
```
|
||||
[1] version = 2
|
||||
[8] trigTime (float64 LE, Unix seconds)
|
||||
[8] preSec (float64 LE)
|
||||
[8] postSec (float64 LE)
|
||||
[4] numSignals (uint32 LE)
|
||||
|
||||
Per signal:
|
||||
[2] keyLen (uint16 LE) (K)
|
||||
[K] fullKey = "src:sig" (UTF-8)
|
||||
[4] pairCount (uint32 LE) (N)
|
||||
[N×8] time array (float64 LE, Unix seconds)
|
||||
[N×8] value array (float64 LE)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. ImGui Desktop Client
|
||||
|
||||
`Client/streamhub/` is a **native C++ desktop oscilloscope** that connects directly to
|
||||
StreamHub via WebSocket and provides the same feature set as the browser client.
|
||||
|
||||
### Technology Stack
|
||||
|
||||
| Component | Library | Notes |
|
||||
|-----------|---------|-------|
|
||||
| UI framework | Dear ImGui (v1.91.x) | Fetched by CMake FetchContent |
|
||||
| Time-series plots | ImPlot (v0.17.x) | Fetched by CMake FetchContent |
|
||||
| Window + input | SDL2 | System package (`sdl2`) |
|
||||
| GPU rendering | OpenGL 3.3 core | System package |
|
||||
| WebSocket client | Custom (POSIX) | Reuses `WSFrame.h`, `SHA1.h`, `Base64.h` from StreamHub |
|
||||
|
||||
### Features
|
||||
|
||||
| Feature | Implementation |
|
||||
|---------|---------------|
|
||||
| Source sidebar | `ImGui::TreeNodeEx` per source; draggable signal leaves |
|
||||
| Drag & drop signals | `ImGui::BeginDragDropSource` → `ImGui::BeginDragDropTarget` on plots |
|
||||
| Multi-plot layout | 1×1, 1×2, 2×1, 1×3, 3×1, 2×2, 1×4, 4×1 grid; `ImGui::BeginTable` |
|
||||
| Live data streaming | Binary v1 frame parser → per-signal ring buffer → ImPlot; live x-axis follows wall clock |
|
||||
| LTTB decimation | Client-side, before plotting |
|
||||
| Pause / resume | Per-plot toggle; frozen data still rendered |
|
||||
| Zoom | ImPlot scroll+drag with history stack (Back / Fit / Reset-to-live); hub WS `zoom` for hi-res when zoomed in |
|
||||
| Cursor A / B | ImPlot `DragLineX` annotations + ΔT and per-trace readouts |
|
||||
| Trigger panel | Signal/edge/threshold/window/pre%/mode controls; Arm/Disarm/Rearm/Stop; badge (IDLE/ARMED/COLLECTING/TRIGGERED) |
|
||||
| Trigger capture view | Binary v2 frames rendered relative to trigTime in `[-preSec, +postSec]`, marker at 0 |
|
||||
| V-scale modes | normal / digital / mixed normalisation (parity with web client) |
|
||||
| Stats panel | Per-source rate/cycle stats + 20-bin cycle-time histogram (`ImPlot::PlotBars`) |
|
||||
| Add / remove source | Modal dialog; sends `addSource` / `removeSource` JSON |
|
||||
| Signal styles | Per-signal color picker, line width, markers |
|
||||
| Auto-reconnect | WSClient receive thread retries every 3 s |
|
||||
|
||||
### Build
|
||||
|
||||
```bash
|
||||
# Install SDL2 (Arch Linux)
|
||||
sudo pacman -S sdl2
|
||||
|
||||
cd Client/streamhub
|
||||
cmake -B build -DCMAKE_BUILD_TYPE=Release
|
||||
cmake --build build -j$(nproc)
|
||||
# Produces: build/StreamHubClient
|
||||
|
||||
# Run (StreamHub must already be running on port 8090)
|
||||
./build/StreamHubClient -host 127.0.0.1 -port 8090
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. Go Client Packages
|
||||
|
||||
### `Common/Client/go/udpsprotocol`
|
||||
|
||||
Pure Go decoder for UDPS packets:
|
||||
|
||||
- `Decoder` — reassembles fragments; returns complete CONFIG or DATA payloads
|
||||
- `SignalDescriptor` — mirrors `UDPSSignalDescriptor` from C++
|
||||
- `DataPacket` — decoded signal values with per-sample timestamps
|
||||
@@ -216,25 +511,40 @@ Pure Go decoder for UDPS packets:
|
||||
### `Common/Client/go/wshub`
|
||||
|
||||
WebSocket broadcast hub:
|
||||
|
||||
- Multiple browser clients share one UDP → WebSocket relay
|
||||
- JSON-encodes signal samples and broadcasts to all connected browsers
|
||||
|
||||
### `Client/debugger`
|
||||
|
||||
Go HTTP server providing the debug web UI:
|
||||
|
||||
- `main.go` — CLI entry point; starts TCP relay and HTTP server
|
||||
- `martecontrol.go` — TCP client to `DebugService`; routes commands from browser
|
||||
- `static/` — Single-page application (HTML/JS/CSS) with Chart.js plots
|
||||
|
||||
### `Client/udpstreamer`
|
||||
|
||||
Go HTTP server providing the UDP streamer oscilloscope web UI:
|
||||
|
||||
- `main.go` — CLI entry point; connects to one or more UDPStreamer ports
|
||||
- `static/` — Full-featured SPA (uPlot plots, LTTB decimation, trigger UI, zoom)
|
||||
- Compatible with StreamHub's WebSocket protocol (identical binary frame format)
|
||||
|
||||
---
|
||||
|
||||
## 6. Key Design Decisions
|
||||
## 9. Key Design Decisions
|
||||
|
||||
| Decision | Rationale |
|
||||
|---|---|
|
||||
| Shared `UDPSProtocol.h` in `Common/UDP/` | Eliminates duplication between `UDPStreamer` and any future UDP producer; Go packages decode the same binary layout |
|
||||
|----------|-----------|
|
||||
| Shared `UDPSProtocol.h` in `Common/UDP/` | Eliminates duplication between `UDPStreamer`, `UDPSClient`, and any future UDPS producer; Go packages decode the same binary layout |
|
||||
| `DebugServiceI` abstract interface | Allows `DebugService` (TCP/UDP) and `WebDebugService` (HTTP/SSE) to share broker injection without coupling |
|
||||
| No STL in C++ components | MARTe2 coding convention; `Vec<T>` used instead of `std::vector` |
|
||||
| No STL in C++ MARTe2 components | MARTe2 coding convention; `FastPollingMutexSem` and fixed arrays used throughout |
|
||||
| STL allowed in ImGui client | `Client/streamhub/` is not a MARTe2 component; C++17 + STL reduce boilerplate without any architectural conflict |
|
||||
| `FastPollingMutexSem` on hot path | Lowest-latency synchronisation primitive available in MARTe2; avoids OS scheduler involvement |
|
||||
| Separate `TCPLogger` component | Decoupled from `DebugService`; can be used with any MARTe2 application independently |
|
||||
| Go for clients | Minimal dependencies, single binary, easy cross-compilation; no Node/npm toolchain required |
|
||||
| C++ StreamHub instead of Go hub | Single binary, no Go toolchain required on deployment host; reuses MARTe2 `UDPSClient` directly; embeds trigger engine |
|
||||
| ImPlot for time-series in native client | Best-in-class ImGui plotting extension; handles millions of points with GPU acceleration; native zoom/pan without custom code |
|
||||
| Reuse `WSFrame.h` / `SHA1.h` / `Base64.h` in ImGui client | Avoids duplicating the WebSocket framing implementation; CMake include path points directly at `Source/Applications/StreamHub/` |
|
||||
| POSIX WebSocket client (no external library) | Keeps the client self-contained; RFC 6455 frame parsing is already implemented in `WSFrame.h`; only handshake SHA-1 and Base64 are needed |
|
||||
| Go for browser-based clients | Minimal dependencies, single binary, easy cross-compilation; no Node/npm toolchain required for the web UI path |
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Overview
|
||||
|
||||
MARTe2 component library providing real-time signal streaming (`UDPStreamer` DataSource → StreamHub → web/ImGui oscilloscopes) and zero-code-change debugging (`DebugService` Interface: trace/force/breakpoint via registry-patched broker wrappers). See `ARCHITECTURE.md` for full detail and `Docs/` for per-component references.
|
||||
|
||||
## Build & Test
|
||||
|
||||
Requires MARTe2 and MARTe2-components built externally; `env.sh` sets `MARTe2_DIR`, `MARTe2_Components_DIR`, `TARGET=x86-linux`, and `LD_LIBRARY_PATH` (needed both for building and for running anything).
|
||||
|
||||
```bash
|
||||
source env.sh
|
||||
|
||||
make -f Makefile.gcc core # all C++ MARTe2 components
|
||||
make -f Makefile.gcc apps # StreamHub standalone app
|
||||
make -f Makefile.gcc test # build GTest + Integration tests
|
||||
make -f Makefile.gcc clean
|
||||
|
||||
# Run tests (after source env.sh)
|
||||
./Build/x86-linux/GTest/MainGTest.ex # unit tests (UDPStreamer)
|
||||
./Build/x86-linux/GTest/MainGTest.ex --gtest_filter='Name*' # single test
|
||||
./Build/x86-linux/Test/Integration/Integration/IntegrationTests.ex # DebugService integration tests
|
||||
|
||||
# Build a single component (each component dir has its own Makefile.gcc)
|
||||
make -C Source/Components/DataSources/UDPStreamer -f Makefile.gcc
|
||||
|
||||
# Go clients
|
||||
cd Common/Client/go && go build ./...
|
||||
cd Client/debugger && go build ./...
|
||||
|
||||
# ImGui desktop client (not a MARTe2 component; needs SDL2)
|
||||
cd Client/streamhub && cmake -B build -DCMAKE_BUILD_TYPE=Release && cmake --build build
|
||||
```
|
||||
|
||||
End-to-end demo scripts (build + launch full stack, see headers for ports/options): `./run_combined_test.sh`, `./run_streamhub.sh`.
|
||||
|
||||
Build output goes to `Build/x86-linux/` (shared libs per component, `.ex` executables).
|
||||
|
||||
## Architecture
|
||||
|
||||
Two independent data paths:
|
||||
|
||||
1. **Streaming path**: `UDPStreamer` DataSource serialises signals each RT cycle to UDPS binary packets (UDP 44500, unicast/multicast) → `StreamHub` (`Source/Applications/StreamHub/`, headless C++ app: ring buffers, LTTB decimation, trigger FSM) → WebSocket 8090 → browser (`Client/udpstreamer`, Go) or native ImGui client (`Client/streamhub`).
|
||||
2. **Debug path**: `DebugService` patches the `ClassRegistryDatabase` at `Initialise()` so subsequent `ConfigureApplication()` instantiates `DebugBrokerWrapper<T>` around all `MemoryMap*Broker` types — no application changes. RT hot path goes through `DebugServiceI` (abstract singleton in `DebugServiceI.h`) for forcing/tracing/breakpoints. Exposes TCP 8080 (text commands), UDP 8081 (trace telemetry), works with `TcpLogger` on 8082. Web UI: `Client/debugger` (Go).
|
||||
|
||||
**Shared wire format**: `Common/UDP/UDPSProtocol.h` defines the UDPS binary protocol (17-byte packed header, 136-byte signal descriptors, little-endian). It is deliberately MARTe2-free so it's shared by C++ producers (`UDPStreamer`, `DebugService`), the C++ consumer (`Source/Components/Interfaces/UDPStream/UDPSClient`), and the Go decoder (`Common/Client/go/udpsprotocol`). Changes to the protocol must be mirrored across all of these, plus the JS client parsers.
|
||||
|
||||
**StreamHub WebSocket protocol**: JSON text frames for commands/events, binary frames for data pushes — spec in `ARCHITECTURE.md` §6. The Go hub (`Client/udpstreamer`) and C++ StreamHub implement the identical protocol; both clients (browser JS and ImGui) must stay compatible with both.
|
||||
|
||||
## Conventions
|
||||
|
||||
- **No STL in MARTe2 components** (`Source/Components/`): use MARTe2 types (`StreamString`, `FastPollingMutexSem`, fixed arrays). STL/C++17 is fine in `Client/streamhub/` and `Source/Applications/StreamHub/` follows MARTe2 style but links MARTe2 core.
|
||||
- `FastPollingMutexSem` on RT hot paths (never OS mutexes).
|
||||
- Each component dir has `Makefile.gcc` (wrapper), `Makefile.inc` (sources/includes), and `depends.x86-linux`/`dependsRaw.x86-linux` (generated dependency files).
|
||||
- EUPL v1.1 license headers on C++ sources.
|
||||
@@ -82,6 +82,14 @@ type MarteController struct {
|
||||
cmdPort int
|
||||
udpPort int
|
||||
logPort int
|
||||
|
||||
// rawSigs holds the most-recently received UDP CONFIG signals before
|
||||
// translation. After DISCOVER populates m.signals, we re-translate and
|
||||
// push a corrected config to the hub so that src.signals names match the
|
||||
// s.Values keys used by ParseData (which also re-translates rawSigs).
|
||||
rawSigsMu sync.RWMutex
|
||||
rawSigs []udpsprotocol.SignalInfo
|
||||
rawPm uint8
|
||||
}
|
||||
|
||||
// NewMarteController creates a MarteController bound to the given hub.
|
||||
@@ -483,8 +491,19 @@ func (m *MarteController) handleJSONResponse(tag, data string) {
|
||||
all := append(m.discoverAcc, resp.Signals...)
|
||||
m.discoverAcc = nil
|
||||
m.parseDiscoverSignals(all)
|
||||
// Synthesize SignalInfo for the hub so the plot system gets a config
|
||||
m.synthesizeHubConfig(all)
|
||||
// Update hub config now that m.signals is populated for name translation.
|
||||
// If UDP CONFIG was already received (rawSigs non-empty), re-translate the
|
||||
// real config so that src.signals uses the same names as s.Values produced
|
||||
// by ParseData (which also re-translates rawSigs on every PktData).
|
||||
// If UDP CONFIG has not arrived yet, fall back to synthesizing from DISCOVER.
|
||||
m.rawSigsMu.RLock()
|
||||
raw := m.rawSigs
|
||||
m.rawSigsMu.RUnlock()
|
||||
if len(raw) > 0 {
|
||||
m.hub.UpdateConfigForSource("debug", m.translateSignalNames(raw))
|
||||
} else {
|
||||
m.synthesizeHubConfig(all)
|
||||
}
|
||||
// Re-marshal the merged list so the browser gets a single consistent blob.
|
||||
merged, _ := json.Marshal(discoverResp{Signals: all})
|
||||
broadcastHub(m.hub, map[string]any{
|
||||
@@ -747,7 +766,15 @@ func (m *MarteController) synthesizeHubConfig(sigs []discoverSignalJSON) {
|
||||
}
|
||||
sigInfos = append(sigInfos, si)
|
||||
}
|
||||
m.hub.UpdateConfigForSource("debug", sigInfos)
|
||||
// Translate to GAM-path names so the synthesised config matches the names
|
||||
// that the real UDP CONFIG (and data frames) use. Without this translation,
|
||||
// synthesizeHubConfig would overwrite the real config with DISCOVER-canonical
|
||||
// names (e.g. "DDB1.Ch3"), causing buildBinaryDataMessageForSource to fail to
|
||||
// find signals in s.Values (which uses translated names), starving the JS
|
||||
// buffer and limiting live streaming to the fraction of a second that
|
||||
// accumulated before the DISCOVER response arrived.
|
||||
translated := m.translateSignalNames(sigInfos)
|
||||
m.hub.UpdateConfigForSource("debug", translated)
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -829,6 +856,12 @@ func (m *MarteController) runDebugUDP(host string, port int) {
|
||||
log.Printf("[debug-udp] parse config: %v", err)
|
||||
continue
|
||||
}
|
||||
// Store raw (untranslated) sigs so that after DISCOVER populates
|
||||
// m.signals we can re-translate and push a corrected config to the hub.
|
||||
m.rawSigsMu.Lock()
|
||||
m.rawSigs = sigs
|
||||
m.rawPm = pm
|
||||
m.rawSigsMu.Unlock()
|
||||
sigs = m.translateSignalNames(sigs)
|
||||
currentSigs = sigs
|
||||
currentPublishMode = pm
|
||||
@@ -839,6 +872,17 @@ func (m *MarteController) runDebugUDP(host string, port int) {
|
||||
if len(currentSigs) == 0 {
|
||||
continue
|
||||
}
|
||||
// Re-translate on every data packet: if DISCOVER ran since the last
|
||||
// UDP CONFIG arrived (which is the common case — CONFIG is sent once
|
||||
// at startup, before the browser connects and triggers DISCOVER),
|
||||
// m.signals is now populated and we must use translated names so that
|
||||
// s.Values keys match src.signals keys in buildBinaryDataMessageForSource.
|
||||
m.rawSigsMu.RLock()
|
||||
raw := m.rawSigs
|
||||
m.rawSigsMu.RUnlock()
|
||||
if len(raw) > 0 {
|
||||
currentSigs = m.translateSignalNames(raw)
|
||||
}
|
||||
samples, err := udpsprotocol.ParseData(complete, currentSigs, currentPublishMode, arrivalTime)
|
||||
if err != nil {
|
||||
log.Printf("[debug-udp] parse data: %v", err)
|
||||
|
||||
@@ -338,6 +338,12 @@ function connectWS() {
|
||||
ws.onopen = () => { wsBackoff = 1000; setStatus('orange', 'Connected – waiting for data'); };
|
||||
ws.onclose = () => {
|
||||
setStatus('red', 'Disconnected (reconnecting…)');
|
||||
// Reset MARTe connection state so that when the WS reconnects the hub can
|
||||
// replay the 'connected' message and trigger a fresh DISCOVER/TREE sequence.
|
||||
// Without this, the marteConnected guard in onMarteConnected blocks the
|
||||
// sequence from re-running after a hub-WS reconnect (even if the MARTe2 TCP
|
||||
// connection stayed alive and no 'disconnected' message was sent).
|
||||
marteConnected = false;
|
||||
setTimeout(connectWS, wsBackoff);
|
||||
wsBackoff = Math.min(wsBackoff * 2, 30000);
|
||||
};
|
||||
@@ -353,7 +359,7 @@ function connectWS() {
|
||||
else if (msg.type === 'connected') onMarteConnected();
|
||||
else if (msg.type === 'disconnected') onMarteDisconnected();
|
||||
else if (msg.type === 'log') onLog(msg);
|
||||
else if (msg.type === 'response') onResponse(msg);
|
||||
else if (msg.type === 'response') { onResponse(msg); }
|
||||
else if (msg.type === 'tree_node') { try { onTreeNode(JSON.parse(msg.data)); } catch(e) { console.error('tree_node error:', e, msg.data); appendLog('sys','ERROR','Tree render error: '+e.message); } }
|
||||
else if (msg.type === 'text_line') onTextLine(msg.data);
|
||||
else if (msg.type === 'service_config') onServiceConfig(msg);
|
||||
@@ -411,7 +417,12 @@ function onConfig(msg) {
|
||||
const src = sourcesMap[sid];
|
||||
const newSigs = msg.signals || [];
|
||||
const oldSigs = src.signals || [];
|
||||
const fp = s => s.name + ':' + s.typeCode + ':' + (s.numRows || 1) + ':' + (s.numCols || 1) + ':' + (s.timeMode || 0);
|
||||
// Fingerprint only covers fields that change the binary layout of the data.
|
||||
// timeMode and samplingRate are intentionally excluded: synthesizeHubConfig
|
||||
// always sets timeMode=TimeModePacket, so including it would cause a buffer
|
||||
// reset on every real UDP CONFIG arrival (synthesized→real transition), wiping
|
||||
// the fast-signal buffer and limiting visible history to ~0.5 s.
|
||||
const fp = s => s.name + ':' + s.typeCode + ':' + numElements(s);
|
||||
const changed = newSigs.length !== oldSigs.length || newSigs.some((s, i) => fp(s) !== fp(oldSigs[i]));
|
||||
src.signals = newSigs;
|
||||
if (changed) {
|
||||
@@ -1011,14 +1022,17 @@ function buildDataFromFetched(p, fetchedSignals, targetPts) {
|
||||
const t0 = p.xRange ? p.xRange[0] : -Infinity;
|
||||
const t1 = p.xRange ? p.xRange[1] : Infinity;
|
||||
|
||||
let masterKey = p.traces[0], masterCount = -1, masterRate = -1;
|
||||
let masterKey = p.traces[0], masterCount = -1, masterRate = -1, masterSpan = -1;
|
||||
for (const key of p.traces) {
|
||||
let sd = fetchedSignals[key];
|
||||
if (!sd || !sd.t || sd.t.length < 2) sd = supplementWithBrackets(sd, buffers[key], t0, t1);
|
||||
if (!sd || !sd.t.length) continue;
|
||||
const rate = getKeySamplingRate(key);
|
||||
if (rate > masterRate || (rate === masterRate && sd.t.length > masterCount)) {
|
||||
masterRate = rate; masterCount = sd.t.length; masterKey = key;
|
||||
const span = sd.t.length > 1 ? sd.t[sd.t.length - 1] - sd.t[0] : 0;
|
||||
if (span > masterSpan ||
|
||||
(span === masterSpan && rate > masterRate) ||
|
||||
(span === masterSpan && rate === masterRate && sd.t.length > masterCount)) {
|
||||
masterRate = rate; masterSpan = span; masterCount = sd.t.length; masterKey = key;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1244,7 +1258,7 @@ function drawBandSeparators(u, p) {
|
||||
const dpr = window.devicePixelRatio || 1;
|
||||
const bandH = 8 / n;
|
||||
ctx.save();
|
||||
ctx.strokeStyle = 'rgba(127,132,156,0.25)';
|
||||
ctx.strokeStyle = 'rgba(127,132,156,0.55)';
|
||||
ctx.lineWidth = dpr;
|
||||
for (let i = 1; i < n; i++) {
|
||||
const yNorm = 4 - i * bandH; // boundary between band i-1 and band i
|
||||
@@ -1841,20 +1855,26 @@ function buildLiveData(p) {
|
||||
}
|
||||
}
|
||||
|
||||
// Slice all traces; pick master by sampling rate then count.
|
||||
// Slice all traces; pick master by time span (widest window wins), then
|
||||
// by sampling rate, then by point count. A fast signal that has only 0.5s
|
||||
// of history must NOT beat a slow signal that has 5s of history — otherwise
|
||||
// sharedT covers only 0.5s and all other signals appear truncated.
|
||||
// In zoom mode, include one bracketing point on each side so lines are drawn
|
||||
// across the visible area even when the window contains 0 or 1 samples.
|
||||
const sliceFn = isRolling ? getBufferSliceRange : getBufferSliceRangeWithBrackets;
|
||||
const slices = {};
|
||||
let masterKey = p.traces[0], masterCount = -1, masterRate = -1;
|
||||
let masterKey = p.traces[0], masterCount = -1, masterRate = -1, masterSpan = -1;
|
||||
for (const key of p.traces) {
|
||||
const buf = buffers[key];
|
||||
if (!buf || buf.size === 0) continue;
|
||||
const sl = sliceFn(buf, t0, t1);
|
||||
slices[key] = sl;
|
||||
const rate = getKeySamplingRate(key);
|
||||
if (rate > masterRate || (rate === masterRate && sl.t.length > masterCount)) {
|
||||
masterRate = rate; masterCount = sl.t.length; masterKey = key;
|
||||
const span = sl.t.length > 1 ? sl.t[sl.t.length - 1] - sl.t[0] : 0;
|
||||
if (span > masterSpan ||
|
||||
(span === masterSpan && rate > masterRate) ||
|
||||
(span === masterSpan && rate === masterRate && sl.t.length > masterCount)) {
|
||||
masterRate = rate; masterSpan = span; masterCount = sl.t.length; masterKey = key;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2090,19 +2110,9 @@ document.getElementById('btn-zoom-fit').addEventListener('click', zoomFit);
|
||||
/* ════════════════════════════════════════════════════════════════
|
||||
Cursor controls
|
||||
════════════════════════════════════════════════════════════════ */
|
||||
// Show the cursor button only when paused or in trigger-snapshot mode.
|
||||
// Cursor button is always visible; readout visibility follows cursors.mode.
|
||||
function updateCursorBtnVisibility() {
|
||||
const canUseCursors = globalPause || (trig.enabled && trig.snapshot !== null);
|
||||
const btn = document.getElementById('btn-cursor');
|
||||
btn.style.display = canUseCursors ? '' : 'none';
|
||||
if (!canUseCursors && cursors.mode !== 'off') {
|
||||
cursors.mode = 'off';
|
||||
cursors.tA = null; cursors.tB = null; // context changed, clear positions
|
||||
btn.textContent = 'Cursors';
|
||||
btn.classList.remove('active');
|
||||
document.getElementById('cursor-readout').classList.remove('visible');
|
||||
cursorsDirty = true;
|
||||
}
|
||||
document.getElementById('btn-cursor').style.display = '';
|
||||
}
|
||||
|
||||
document.getElementById('btn-cursor').addEventListener('click', () => {
|
||||
@@ -3684,6 +3694,11 @@ function onTracedState(msg) {
|
||||
}
|
||||
|
||||
function onMarteConnected() {
|
||||
// Guard against double-invocation: onSources() may call us when it detects
|
||||
// debug.state==='connected', and replayStateToClient also sends a 'connected'
|
||||
// message. A second call would wipe _cmdSent mid-flight (via _clearStartupState),
|
||||
// cancelling the in-progress DISCOVER/TREE sequence.
|
||||
if (marteConnected) return;
|
||||
marteConnected = true;
|
||||
_clearStartupState();
|
||||
const el = document.getElementById('conn-status');
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
<option value="10">10 s</option><option value="30">30 s</option>
|
||||
<option value="60">60 s</option>
|
||||
</select>
|
||||
<button id="btn-cursor" class="ctrl-btn" style="display:none">Cursor</button>
|
||||
<button id="btn-cursor" class="ctrl-btn">Cursors</button>
|
||||
<button id="btn-zoom-back" class="ctrl-btn" style="display:none">← Back</button>
|
||||
<button id="btn-zoom-fit" class="ctrl-btn">Fit</button>
|
||||
<button id="btn-csv-all" class="ctrl-btn" title="Export all signals to CSV">⬇ CSV</button>
|
||||
|
||||
@@ -0,0 +1,708 @@
|
||||
/**
|
||||
* @file App.cpp
|
||||
* @brief Application state machine implementation.
|
||||
*/
|
||||
|
||||
#include "App.h"
|
||||
#include "SourcePanel.h"
|
||||
#include "PlotPanel.h"
|
||||
#include "TriggerPanel.h"
|
||||
#include "StatsPanel.h"
|
||||
|
||||
#include "imgui.h"
|
||||
#include "implot.h"
|
||||
#include "Icons.h"
|
||||
|
||||
#include <cstring>
|
||||
#include <cstdio>
|
||||
#include <cmath>
|
||||
#include <chrono>
|
||||
#include <algorithm>
|
||||
|
||||
namespace StreamHubClient {
|
||||
|
||||
/* ── Layout icon helper ──────────────────────────────────────────────────── */
|
||||
|
||||
static void DrawLayoutIcon(ImDrawList* dl, ImVec2 tl, ImVec2 sz,
|
||||
int cols, int rows, bool selected) {
|
||||
ImU32 bg = selected ? IM_COL32(49,50,68,255) : IM_COL32(24,24,37,255);
|
||||
ImU32 cell = selected ? IM_COL32(137,180,250,200) : IM_COL32(88,91,112,160);
|
||||
ImU32 bord = selected ? IM_COL32(137,180,250,255) : IM_COL32(69,71,90,255);
|
||||
dl->AddRectFilled(tl, ImVec2(tl.x+sz.x, tl.y+sz.y), bg, 4.f);
|
||||
dl->AddRect(tl, ImVec2(tl.x+sz.x, tl.y+sz.y), bord, 4.f, 0, 1.f);
|
||||
float cw = sz.x / cols, rh = sz.y / rows;
|
||||
for (int c = 0; c < cols; c++) {
|
||||
for (int r = 0; r < rows; r++) {
|
||||
ImVec2 p0(tl.x + c*cw + 2.f, tl.y + r*rh + 2.f);
|
||||
ImVec2 p1(tl.x + (c+1)*cw - 2.f, tl.y + (r+1)*rh - 2.f);
|
||||
dl->AddRectFilled(p0, p1, cell, 2.f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ── Signal ─────────────────────────────────────────────────────────────── */
|
||||
|
||||
/* ── App ─────────────────────────────────────────────────────────────────── */
|
||||
|
||||
App::App() {
|
||||
for (int i = 0; i < kMaxPlotSlots; i++) {
|
||||
plotPaused_[i] = false;
|
||||
liveFollow_[i] = true;
|
||||
activeSlot_[i] = -1;
|
||||
}
|
||||
}
|
||||
|
||||
App::~App() {
|
||||
shutdown();
|
||||
}
|
||||
|
||||
void App::init(const std::string& host, uint16_t port) {
|
||||
snprintf(hostBuf_, sizeof(hostBuf_), "%s", host.c_str());
|
||||
snprintf(portBuf_, sizeof(portBuf_), "%u", static_cast<unsigned>(port));
|
||||
ws_.connect(host, port);
|
||||
/* Initial queries are sent on first connect transition in update() */
|
||||
}
|
||||
|
||||
void App::shutdown() {
|
||||
ws_.disconnect();
|
||||
}
|
||||
|
||||
/* ── Per-frame update ────────────────────────────────────────────────────── */
|
||||
|
||||
void App::update() {
|
||||
/* Send initial queries on first successful connect */
|
||||
bool nowConnected = ws_.isConnected();
|
||||
if (nowConnected && !prevConnected_) {
|
||||
ws_.sendText(BuildGetSources());
|
||||
ws_.sendText(BuildGetStats());
|
||||
}
|
||||
prevConnected_ = nowConnected;
|
||||
|
||||
/* Drain WebSocket receive queue */
|
||||
ws_.poll([this](const WSMessage& msg) {
|
||||
if (msg.isBinary) {
|
||||
handleBinary(msg.data.data(), msg.data.size());
|
||||
} else {
|
||||
std::string json(reinterpret_cast<const char*>(msg.data.data()),
|
||||
msg.data.size());
|
||||
handleJSON(json);
|
||||
}
|
||||
});
|
||||
|
||||
/* ── Full-screen dockspace ─────────────────────────────────────────── */
|
||||
ImGuiViewport* vp = ImGui::GetMainViewport();
|
||||
ImGui::SetNextWindowPos(vp->WorkPos);
|
||||
ImGui::SetNextWindowSize(vp->WorkSize);
|
||||
|
||||
ImGuiWindowFlags wf = ImGuiWindowFlags_NoTitleBar
|
||||
| ImGuiWindowFlags_NoCollapse
|
||||
| ImGuiWindowFlags_NoResize
|
||||
| ImGuiWindowFlags_NoMove
|
||||
| ImGuiWindowFlags_NoBringToFrontOnFocus
|
||||
| ImGuiWindowFlags_NoNavFocus
|
||||
| ImGuiWindowFlags_MenuBar;
|
||||
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.f, 0.f));
|
||||
ImGui::Begin("##main", nullptr, wf);
|
||||
ImGui::PopStyleVar(3);
|
||||
|
||||
renderMenuBar();
|
||||
renderToolbar();
|
||||
if (showTrigBar_) { renderTriggerBar(); }
|
||||
|
||||
/* Horizontal split: sidebar | plot grid */
|
||||
float sidebarW = sidebarOpen_ ? 220.f : 0.f;
|
||||
float avail = ImGui::GetContentRegionAvail().x;
|
||||
float plotW = avail - sidebarW;
|
||||
|
||||
if (sidebarOpen_) {
|
||||
ImGui::BeginChild("##sidebar", ImVec2(sidebarW, 0.f), false,
|
||||
ImGuiWindowFlags_NoMove);
|
||||
RenderSourcePanel(*this);
|
||||
ImGui::EndChild();
|
||||
ImGui::SameLine();
|
||||
}
|
||||
|
||||
ImGui::BeginChild("##plots", ImVec2(plotW, 0.f), false);
|
||||
renderPlotGrid();
|
||||
ImGui::EndChild();
|
||||
|
||||
ImGui::End();
|
||||
|
||||
/* Overlays / modals */
|
||||
if (showStats_) { renderStatsModal(); }
|
||||
if (showAddSrc_) { renderAddSourceModal(); }
|
||||
}
|
||||
|
||||
/* ── Menu bar ────────────────────────────────────────────────────────────── */
|
||||
|
||||
void App::renderMenuBar() {
|
||||
if (!ImGui::BeginMenuBar()) { return; }
|
||||
|
||||
if (ImGui::BeginMenu("File")) {
|
||||
if (ImGui::MenuItem("Quit", "Alt+F4")) {
|
||||
/* Signal quit via SDL event — handled in main.cpp via flag */
|
||||
}
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
|
||||
if (ImGui::BeginMenu("View")) {
|
||||
ImGui::MenuItem("Sidebar", nullptr, &sidebarOpen_);
|
||||
ImGui::MenuItem("Trigger Bar", nullptr, &showTrigBar_);
|
||||
ImGui::MenuItem("Statistics", nullptr, &showStats_);
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
|
||||
if (ImGui::BeginMenu("Sources")) {
|
||||
if (ImGui::MenuItem(ICON_FA_PLUS " Add Source...")) { showAddSrc_ = true; }
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
|
||||
if (ImGui::BeginMenu("Layout")) {
|
||||
for (int i = 0; i < static_cast<int>(PlotLayout::kCount); i++) {
|
||||
bool sel = (static_cast<int>(layout_) == i);
|
||||
if (ImGui::MenuItem(PlotLayoutNames[i], nullptr, sel)) {
|
||||
setLayout(static_cast<PlotLayout>(i));
|
||||
}
|
||||
}
|
||||
ImGui::EndMenu();
|
||||
}
|
||||
|
||||
/* Right-aligned: [host] : [port] [Connect/Reconnect] ● status */
|
||||
bool connected = ws_.isConnected();
|
||||
const char* btnLbl = connected ? "Reconnect" : "Connect";
|
||||
const char* ledLbl = connected ? ICON_FA_CIRCLE " Connected"
|
||||
: ICON_FA_CIRCLE " Disconnected";
|
||||
/* Measure widget widths to right-align the whole group */
|
||||
const ImGuiStyle& st = ImGui::GetStyle();
|
||||
const float kHostW = 130.f;
|
||||
const float kPortW = 52.f;
|
||||
const float kBtnW = ImGui::CalcTextSize(btnLbl).x + st.FramePadding.x * 2.f;
|
||||
const float kLedW = ImGui::CalcTextSize(ledLbl).x;
|
||||
const float kGroupW = kHostW + 8.f + kPortW + 8.f + kBtnW + 8.f + kLedW;
|
||||
ImGui::SetCursorPosX(
|
||||
ImGui::GetCursorPosX() +
|
||||
ImGui::GetContentRegionAvail().x - kGroupW);
|
||||
|
||||
ImGui::SetNextItemWidth(kHostW);
|
||||
ImGui::InputText("##hubhost", hostBuf_, sizeof(hostBuf_));
|
||||
ImGui::SameLine(0.f, 2.f);
|
||||
ImGui::TextUnformatted(":");
|
||||
ImGui::SameLine(0.f, 2.f);
|
||||
ImGui::SetNextItemWidth(kPortW);
|
||||
ImGui::InputText("##hubport", portBuf_, sizeof(portBuf_),
|
||||
ImGuiInputTextFlags_CharsDecimal);
|
||||
ImGui::SameLine(0.f, 6.f);
|
||||
if (ImGui::Button(btnLbl)) {
|
||||
ws_.reconnect(hostBuf_, static_cast<uint16_t>(atoi(portBuf_)));
|
||||
}
|
||||
ImGui::SameLine(0.f, 8.f);
|
||||
ImVec4 ledColor = connected
|
||||
? ImVec4(0.1f, 0.9f, 0.3f, 1.f)
|
||||
: ImVec4(0.9f, 0.2f, 0.2f, 1.f);
|
||||
ImGui::TextColored(ledColor, "%s", ledLbl);
|
||||
|
||||
ImGui::EndMenuBar();
|
||||
}
|
||||
|
||||
/* ── Toolbar ─────────────────────────────────────────────────────────────── */
|
||||
|
||||
void App::renderToolbar() {
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4.f, 4.f));
|
||||
|
||||
/* Layout picker — pictogram popup */
|
||||
static const int kIconCols[] = {1,2,1,3,1,2,4,1};
|
||||
static const int kIconRows[] = {1,1,2,1,3,2,1,4};
|
||||
static const ImVec2 kIconSz = ImVec2(36.f, 24.f);
|
||||
|
||||
if (ImGui::Button(ICON_FA_TABLE_CELLS_LARGE " Layout")) {
|
||||
ImGui::OpenPopup("##layout_pop");
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::BeginPopup("##layout_pop")) {
|
||||
ImGui::TextDisabled("Select layout");
|
||||
ImGui::Separator();
|
||||
ImDrawList* ldl = ImGui::GetWindowDrawList();
|
||||
for (int li = 0; li < static_cast<int>(PlotLayout::kCount); li++) {
|
||||
bool sel = (static_cast<int>(layout_) == li);
|
||||
ImVec2 p = ImGui::GetCursorScreenPos();
|
||||
/* Invisible button sized to the icon */
|
||||
if (ImGui::InvisibleButton(PlotLayoutNames[li], kIconSz)) {
|
||||
setLayout(static_cast<PlotLayout>(li));
|
||||
ImGui::CloseCurrentPopup();
|
||||
}
|
||||
DrawLayoutIcon(ldl, p, kIconSz,
|
||||
kIconCols[li], kIconRows[li], sel);
|
||||
if (li < static_cast<int>(PlotLayout::kCount) - 1) {
|
||||
ImGui::SameLine(0.f, 4.f);
|
||||
}
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
|
||||
/* Global pause */
|
||||
if (ImGui::Button(globalPaused_ ? ICON_FA_PLAY " Resume"
|
||||
: ICON_FA_PAUSE " Pause")) {
|
||||
globalPaused_ = !globalPaused_;
|
||||
for (int i = 0; i < numPlotSlots(); i++) {
|
||||
plotPaused_[i] = globalPaused_;
|
||||
if (!globalPaused_) { liveFollow_[i] = true; }
|
||||
}
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
/* Cursors A/B (global: shared & synchronised across all plots) */
|
||||
{
|
||||
if (cursorsOn_) {
|
||||
ImGui::PushStyleColor(ImGuiCol_Button, ImVec4(0.537f,0.706f,0.980f,0.4f));
|
||||
}
|
||||
if (ImGui::Button(ICON_FA_CROSSHAIRS " Cursors")) {
|
||||
cursorsOn_ = !cursorsOn_;
|
||||
if (cursorsOn_) {
|
||||
/* seed cursors at 25% / 75% of the live window */
|
||||
const double wallNow = std::chrono::duration<double>(
|
||||
std::chrono::system_clock::now().time_since_epoch()).count();
|
||||
const double x0 = wallNow - windowSec_;
|
||||
cursorA_ = x0 + windowSec_ * 0.25;
|
||||
cursorB_ = x0 + windowSec_ * 0.75;
|
||||
}
|
||||
}
|
||||
if (cursorsOn_) { ImGui::PopStyleColor(); }
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
/* Trigger bar toggle */
|
||||
if (ImGui::Button(ICON_FA_BOLT " Trigger")) { showTrigBar_ = !showTrigBar_; }
|
||||
ImGui::SameLine();
|
||||
|
||||
/* Stats */
|
||||
if (ImGui::Button(ICON_FA_CHART_COLUMN " Stats")) { showStats_ = !showStats_; }
|
||||
ImGui::SameLine();
|
||||
|
||||
/* Add source */
|
||||
if (ImGui::Button(ICON_FA_PLUS " Source")) { showAddSrc_ = true; }
|
||||
ImGui::SameLine();
|
||||
|
||||
/* Time window presets (Ctrl+scroll on a plot still adjusts freely) */
|
||||
static const double kWinPresets[] = {1.0, 5.0, 10.0, 30.0, 60.0};
|
||||
static const char* kWinLabels[] = {"1 s", "5 s", "10 s", "30 s", "60 s"};
|
||||
char winPreview[16];
|
||||
snprintf(winPreview, sizeof(winPreview), "%.3g s", windowSec_);
|
||||
ImGui::SetNextItemWidth(70.f);
|
||||
if (ImGui::BeginCombo("Win", winPreview)) {
|
||||
for (int wi = 0; wi < 5; wi++) {
|
||||
bool sel = std::fabs(windowSec_ - kWinPresets[wi]) < 1e-9;
|
||||
if (ImGui::Selectable(kWinLabels[wi], sel)) {
|
||||
windowSec_ = kWinPresets[wi];
|
||||
}
|
||||
if (sel) { ImGui::SetItemDefaultFocus(); }
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
/* Max points control */
|
||||
ImGui::SetNextItemWidth(80.f);
|
||||
int mp = static_cast<int>(maxPoints_);
|
||||
if (ImGui::InputInt("MaxPts", &mp, 0, 0,
|
||||
ImGuiInputTextFlags_EnterReturnsTrue)) {
|
||||
if (mp >= 2) {
|
||||
maxPoints_ = static_cast<uint32_t>(mp);
|
||||
ws_.sendText(BuildSetMaxPoints(maxPoints_));
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::PopStyleVar();
|
||||
ImGui::Separator();
|
||||
}
|
||||
|
||||
/* ── Plot grid ───────────────────────────────────────────────────────────── */
|
||||
|
||||
void App::renderPlotGrid() {
|
||||
int cols, rows;
|
||||
PlotLayoutDims(layout_, cols, rows);
|
||||
|
||||
/* Per-cell fraction arrays (reset when layout changes) */
|
||||
static float rowFrac[8] = {1,1,1,1,1,1,1,1};
|
||||
static float colFrac[8] = {1,1,1,1,1,1,1,1};
|
||||
static PlotLayout prevLayout = PlotLayout::kCount;
|
||||
if (layout_ != prevLayout) {
|
||||
for (int i = 0; i < 8; i++) { rowFrac[i] = 1.f; colFrac[i] = 1.f; }
|
||||
prevLayout = layout_;
|
||||
}
|
||||
|
||||
const float kSep = 5.f; /* separator strip width/height in px */
|
||||
|
||||
float avW = ImGui::GetContentRegionAvail().x;
|
||||
float avH = ImGui::GetContentRegionAvail().y;
|
||||
float cellTotalW = avW - kSep * (cols - 1);
|
||||
float cellTotalH = avH - kSep * (rows - 1);
|
||||
|
||||
/* Normalise fractions */
|
||||
float rowSum = 0.f; for (int r = 0; r < rows; r++) rowSum += rowFrac[r];
|
||||
float colSum = 0.f; for (int c = 0; c < cols; c++) colSum += colFrac[c];
|
||||
if (rowSum < 1e-6f) rowSum = 1.f;
|
||||
if (colSum < 1e-6f) colSum = 1.f;
|
||||
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0.f, 0.f));
|
||||
|
||||
for (int r = 0; r < rows; r++) {
|
||||
float rh = std::max(30.f, cellTotalH * rowFrac[r] / rowSum);
|
||||
|
||||
for (int c = 0; c < cols; c++) {
|
||||
float cw = std::max(60.f, cellTotalW * colFrac[c] / colSum);
|
||||
int plotIdx = r * cols + c;
|
||||
|
||||
char cellId[32]; snprintf(cellId, sizeof(cellId), "##cell%d", plotIdx);
|
||||
ImGui::BeginChild(cellId, ImVec2(cw, rh), false,
|
||||
ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoScrollWithMouse);
|
||||
if (plotIdx < kMaxPlotSlots) {
|
||||
RenderPlotPanel(*this, plotIdx, plotPaused_[plotIdx]);
|
||||
}
|
||||
ImGui::EndChild();
|
||||
|
||||
/* ── Column separator ── */
|
||||
if (c < cols - 1) {
|
||||
ImGui::SameLine(0.f, 0.f);
|
||||
char csId[32]; snprintf(csId, sizeof(csId), "##cs%d_%d", r, c);
|
||||
ImVec2 p0 = ImGui::GetCursorScreenPos();
|
||||
ImGui::InvisibleButton(csId, ImVec2(kSep, rh));
|
||||
if (ImGui::IsItemActive()) {
|
||||
float dx = ImGui::GetIO().MouseDelta.x;
|
||||
colFrac[c] += dx * colSum / cellTotalW;
|
||||
colFrac[c+1] -= dx * colSum / cellTotalW;
|
||||
colFrac[c] = std::max(0.05f * colSum, colFrac[c]);
|
||||
colFrac[c+1] = std::max(0.05f * colSum, colFrac[c+1]);
|
||||
}
|
||||
if (ImGui::IsItemHovered() || ImGui::IsItemActive())
|
||||
ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeEW);
|
||||
ImGui::GetWindowDrawList()->AddRectFilled(
|
||||
p0, ImVec2(p0.x + kSep, p0.y + rh), IM_COL32(49,50,68,255));
|
||||
ImGui::SameLine(0.f, 0.f);
|
||||
}
|
||||
} /* end col loop */
|
||||
|
||||
/* ── Row separator ── */
|
||||
if (r < rows - 1) {
|
||||
char rsId[32]; snprintf(rsId, sizeof(rsId), "##rs%d", r);
|
||||
/* Reposition X to left content edge before drawing full-width strip */
|
||||
ImGui::SetCursorPosX(0.f);
|
||||
ImVec2 p0 = ImGui::GetCursorScreenPos();
|
||||
ImGui::InvisibleButton(rsId, ImVec2(avW, kSep));
|
||||
if (ImGui::IsItemActive()) {
|
||||
float dy = ImGui::GetIO().MouseDelta.y;
|
||||
rowFrac[r] += dy * rowSum / cellTotalH;
|
||||
rowFrac[r+1] -= dy * rowSum / cellTotalH;
|
||||
rowFrac[r] = std::max(0.05f * rowSum, rowFrac[r]);
|
||||
rowFrac[r+1] = std::max(0.05f * rowSum, rowFrac[r+1]);
|
||||
}
|
||||
if (ImGui::IsItemHovered() || ImGui::IsItemActive())
|
||||
ImGui::SetMouseCursor(ImGuiMouseCursor_ResizeNS);
|
||||
ImGui::GetWindowDrawList()->AddRectFilled(
|
||||
p0, ImVec2(p0.x + avW, p0.y + kSep), IM_COL32(49,50,68,255));
|
||||
}
|
||||
} /* end row loop */
|
||||
|
||||
ImGui::PopStyleVar();
|
||||
}
|
||||
|
||||
/* ── Stats modal ─────────────────────────────────────────────────────────── */
|
||||
|
||||
void App::renderStatsModal() {
|
||||
ImGui::SetNextWindowSize(ImVec2(700.f, 300.f), ImGuiCond_FirstUseEver);
|
||||
if (ImGui::Begin("Statistics", &showStats_)) {
|
||||
RenderStatsPanel(*this);
|
||||
}
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
/* ── Add-source modal ────────────────────────────────────────────────────── */
|
||||
|
||||
void App::renderAddSourceModal() {
|
||||
ImGui::SetNextWindowSize(ImVec2(360.f, 260.f), ImGuiCond_Always);
|
||||
ImGui::SetNextWindowPos(ImGui::GetMainViewport()->GetCenter(),
|
||||
ImGuiCond_Always, ImVec2(0.5f, 0.5f));
|
||||
if (ImGui::Begin("Add Source", &showAddSrc_,
|
||||
ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse)) {
|
||||
static char label[128]= "";
|
||||
static char host[64] = "127.0.0.1";
|
||||
static int port = 44500;
|
||||
static char mcast[64] = "";
|
||||
static int dataPort = 0;
|
||||
|
||||
ImGui::InputText("Label", label, sizeof(label));
|
||||
ImGui::InputText("Host", host, sizeof(host));
|
||||
ImGui::InputInt("Port", &port);
|
||||
ImGui::InputText("Multicast", mcast, sizeof(mcast));
|
||||
ImGui::InputInt("Data Port", &dataPort);
|
||||
|
||||
ImGui::Spacing();
|
||||
if (ImGui::Button("Connect", ImVec2(100.f, 0.f))) {
|
||||
if (host[0] != '\0' && port > 0 && port < 65536) {
|
||||
char addr[96];
|
||||
snprintf(addr, sizeof(addr), "%s:%d", host, port);
|
||||
ws_.sendText(BuildAddSource(label, addr, mcast,
|
||||
static_cast<uint16_t>(
|
||||
(dataPort > 0 && dataPort < 65536)
|
||||
? dataPort : 0)));
|
||||
showAddSrc_ = false;
|
||||
label[0] = '\0';
|
||||
}
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (ImGui::Button("Cancel", ImVec2(80.f, 0.f))) {
|
||||
showAddSrc_ = false;
|
||||
}
|
||||
}
|
||||
ImGui::End();
|
||||
}
|
||||
|
||||
/* ── Trigger bar ─────────────────────────────────────────────────────────── */
|
||||
|
||||
void App::renderTriggerBar() {
|
||||
RenderTriggerPanel(*this);
|
||||
}
|
||||
|
||||
/* ── Layout ──────────────────────────────────────────────────────────────── */
|
||||
|
||||
int App::numPlotSlots() const {
|
||||
int cols, rows;
|
||||
PlotLayoutDims(layout_, cols, rows);
|
||||
return cols * rows;
|
||||
}
|
||||
|
||||
void App::setLayout(PlotLayout l) {
|
||||
layout_ = l;
|
||||
}
|
||||
|
||||
/* ── Source helpers ──────────────────────────────────────────────────────── */
|
||||
|
||||
int App::findSource(const std::string& id) const {
|
||||
for (int i = 0; i < static_cast<int>(sources_.size()); i++) {
|
||||
if (sources_[i].id == id) { return i; }
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
int App::findSignal(const Source& src, const std::string& name) const {
|
||||
for (int i = 0; i < static_cast<int>(src.signals.size()); i++) {
|
||||
if (src.signals[i].meta.name == name) { return i; }
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* ── WS message dispatch ─────────────────────────────────────────────────── */
|
||||
|
||||
void App::handleJSON(const std::string& json) {
|
||||
std::string type = ParseType(json);
|
||||
|
||||
if (type == "sources") { onSources(json); }
|
||||
else if (type == "config") { onConfig(json); }
|
||||
else if (type == "stats") { onStats(json); }
|
||||
else if (type == "triggerState") { onTriggerState(json); }
|
||||
else if (type == "zoom") { onZoom(json); }
|
||||
else if (type == "maxPointsUpdated") { onMaxPointsUpdated(json); }
|
||||
/* pong: ignore */
|
||||
}
|
||||
|
||||
void App::handleBinary(const uint8_t* data, size_t len) {
|
||||
if (len == 0) { return; }
|
||||
|
||||
/* Version 2: trigger capture frame */
|
||||
if (data[0] == 2u) {
|
||||
CaptureFrame cf;
|
||||
if (ParseCaptureFrame(data, len, cf)) {
|
||||
capture_ = std::move(cf);
|
||||
hasCapture_ = true;
|
||||
trigger_.status = "triggered";
|
||||
trigger_.trigTime = capture_.trigTime;
|
||||
trigger_.hasTrigTime = true;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/* Version 1: live push frame. The hub pushes only samples that are new
|
||||
* since the previous tick (non-overlapping), so push verbatim. */
|
||||
DataFrame frame;
|
||||
if (!ParseBinaryFrame(data, len, frame)) { return; }
|
||||
|
||||
std::lock_guard<std::mutex> lk(srcMutex_);
|
||||
int srcIdx = findSource(frame.sourceId);
|
||||
if (srcIdx < 0) { return; }
|
||||
|
||||
Source& src = sources_[srcIdx];
|
||||
for (const auto& fs : frame.signals) {
|
||||
int sigIdx = findSignal(src, fs.name);
|
||||
if (sigIdx < 0) { continue; }
|
||||
/* Always push: the ring is the "active" buffer; paused plots render
|
||||
* from their frozen view snapshot, so no data is ever dropped. */
|
||||
size_t n = std::min(fs.t.size(), fs.v.size());
|
||||
auto& buf = src.signals[sigIdx].buf;
|
||||
for (size_t i = 0; i < n; i++) {
|
||||
buf.push(fs.t[i], fs.v[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ── JSON event handlers ─────────────────────────────────────────────────── */
|
||||
|
||||
void App::onSources(const std::string& json) {
|
||||
std::vector<SourceInfo> infos;
|
||||
ParseSources(json, infos);
|
||||
|
||||
std::lock_guard<std::mutex> lk(srcMutex_);
|
||||
for (const auto& info : infos) {
|
||||
int idx = findSource(info.id);
|
||||
if (idx < 0) {
|
||||
Source s;
|
||||
s.id = info.id;
|
||||
s.label = info.label;
|
||||
s.addr = info.addr;
|
||||
s.port = info.port;
|
||||
s.state = info.state;
|
||||
sources_.push_back(std::move(s));
|
||||
} else {
|
||||
sources_[idx].state = info.state;
|
||||
sources_[idx].label = info.label;
|
||||
}
|
||||
}
|
||||
|
||||
/* Remove sources that are no longer listed */
|
||||
sources_.erase(std::remove_if(sources_.begin(), sources_.end(),
|
||||
[&infos](const Source& s) {
|
||||
for (const auto& i : infos) { if (i.id == s.id) { return false; } }
|
||||
return true;
|
||||
}), sources_.end());
|
||||
}
|
||||
|
||||
void App::onConfig(const std::string& json) {
|
||||
std::string sourceId;
|
||||
int publishMode = 0;
|
||||
std::vector<SignalMeta> metas;
|
||||
|
||||
if (!ParseConfig(json, sourceId, publishMode, metas)) { return; }
|
||||
|
||||
std::lock_guard<std::mutex> lk(srcMutex_);
|
||||
int idx = findSource(sourceId);
|
||||
if (idx < 0) { return; }
|
||||
|
||||
Source& src = sources_[idx];
|
||||
src.configured = true;
|
||||
src.publishMode = publishMode;
|
||||
|
||||
/* Colour palette — Catppuccin Mocha trace colours */
|
||||
static const ImVec4 kPalette[] = {
|
||||
{0.537f,0.706f,0.980f,1.f}, /* blue */
|
||||
{0.651f,0.890f,0.631f,1.f}, /* green */
|
||||
{0.953f,0.545f,0.659f,1.f}, /* red */
|
||||
{0.980f,0.702f,0.529f,1.f}, /* peach */
|
||||
{0.796f,0.651f,0.969f,1.f}, /* mauve */
|
||||
{0.580f,0.886f,0.835f,1.f}, /* teal */
|
||||
{0.537f,0.863f,0.922f,1.f}, /* sky */
|
||||
{0.706f,0.745f,0.996f,1.f}, /* lavender */
|
||||
};
|
||||
|
||||
/* Merge: add new signals, keep existing ring buffers */
|
||||
for (size_t m = 0; m < metas.size(); m++) {
|
||||
int si = findSignal(src, metas[m].name);
|
||||
if (si < 0) {
|
||||
Signal sig;
|
||||
sig.meta = metas[m];
|
||||
sig.color = kPalette[src.signals.size() % 8];
|
||||
src.signals.push_back(std::move(sig));
|
||||
} else {
|
||||
src.signals[si].meta = metas[m];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void App::onStats(const std::string& json) {
|
||||
std::vector<std::pair<std::string, SourceStats>> statsVec;
|
||||
ParseStats(json, statsVec);
|
||||
|
||||
std::lock_guard<std::mutex> lk(srcMutex_);
|
||||
for (const auto& kv : statsVec) {
|
||||
int idx = findSource(kv.first);
|
||||
if (idx >= 0) {
|
||||
sources_[idx].stats = kv.second;
|
||||
sources_[idx].state = kv.second.state;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void App::onTriggerState(const std::string& json) {
|
||||
TriggerStateMsg msg;
|
||||
if (!ParseTriggerState(json, msg)) { return; }
|
||||
|
||||
trigger_.status = msg.state;
|
||||
trigger_.stopped = msg.stopped;
|
||||
if (msg.hasTrigTime) {
|
||||
trigger_.trigTime = msg.trigTime;
|
||||
trigger_.hasTrigTime = true;
|
||||
}
|
||||
/* Double-buffer semantics: the last recorded capture stays on display
|
||||
* (even while re-armed/collecting) and is only replaced when a new
|
||||
* capture frame has been fully received and parsed (handleBinary v2). */
|
||||
if (msg.state == "idle") {
|
||||
trigger_.hasTrigTime = false;
|
||||
}
|
||||
}
|
||||
|
||||
void App::onZoom(const std::string& json) {
|
||||
ZoomResponse resp;
|
||||
if (!ParseZoom(json, resp)) { return; }
|
||||
|
||||
/* Route the reply to the plot that requested it */
|
||||
for (int i = 0; i < kMaxPlotSlots; i++) {
|
||||
auto& zc = zoomCache_[i];
|
||||
if (zc.pending && zc.reqId == resp.reqId) {
|
||||
zc.signals = std::move(resp.signals);
|
||||
zc.t0 = zc.reqT0;
|
||||
zc.t1 = zc.reqT1;
|
||||
zc.valid = true;
|
||||
zc.pending = false;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void App::requestZoom(int plotIdx, double t0, double t1,
|
||||
const std::string& signalsCsv) {
|
||||
if (plotIdx < 0 || plotIdx >= kMaxPlotSlots) { return; }
|
||||
if (!ws_.isConnected() || signalsCsv.empty()) { return; }
|
||||
auto& zc = zoomCache_[plotIdx];
|
||||
zc.reqId = nextZoomReqId_++;
|
||||
zc.reqT0 = t0;
|
||||
zc.reqT1 = t1;
|
||||
zc.pending = true;
|
||||
ws_.sendText(BuildZoom(zc.reqId, t0, t1, 2400, signalsCsv));
|
||||
}
|
||||
|
||||
std::string App::slotKey(const PlotAssignment& a) const {
|
||||
if (a.sourceIdx < 0 || a.sourceIdx >= static_cast<int>(sources_.size())) {
|
||||
return std::string();
|
||||
}
|
||||
const Source& src = sources_[a.sourceIdx];
|
||||
if (a.signalIdx < 0 || a.signalIdx >= static_cast<int>(src.signals.size())) {
|
||||
return std::string();
|
||||
}
|
||||
return src.id + ":" + src.signals[a.signalIdx].meta.name;
|
||||
}
|
||||
|
||||
void App::onMaxPointsUpdated(const std::string& json) {
|
||||
uint32_t mp = 0;
|
||||
ParseMaxPointsUpdated(json, mp);
|
||||
if (mp >= 2) {
|
||||
maxPoints_ = mp;
|
||||
std::lock_guard<std::mutex> lk(srcMutex_);
|
||||
for (auto& src : sources_) {
|
||||
for (auto& sig : src.signals) {
|
||||
sig.buf.setCapacity(mp);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,319 @@
|
||||
/**
|
||||
* @file App.h
|
||||
* @brief Top-level application state and frame dispatch.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "WSClient.h"
|
||||
#include "Protocol.h"
|
||||
#include "SignalBuffer.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <memory>
|
||||
#include <mutex>
|
||||
#include <cstdint>
|
||||
|
||||
#include "imgui.h"
|
||||
|
||||
namespace StreamHubClient {
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/* Domain types */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
/** One signal as known to the client. */
|
||||
struct Signal {
|
||||
SignalMeta meta;
|
||||
SignalBuffer buf{20000};
|
||||
ImVec4 color{0.4f, 0.8f, 1.0f, 1.0f};
|
||||
float lineWidth = 1.5f;
|
||||
int marker = -1; /* ImPlotMarker (-1 = none) */
|
||||
bool visible = true;
|
||||
};
|
||||
|
||||
/** One connected UDPStreamer source. */
|
||||
struct Source {
|
||||
std::string id;
|
||||
std::string label;
|
||||
std::string addr;
|
||||
std::string state = "disconnected";
|
||||
uint32_t port = 0;
|
||||
bool configured = false;
|
||||
int publishMode = 0;
|
||||
std::vector<Signal> signals;
|
||||
SourceStats stats;
|
||||
};
|
||||
|
||||
/** Trigger configuration and live state (hub-side trigger semantics). */
|
||||
struct TriggerState {
|
||||
/* Config (sent to the hub via setTrigger) */
|
||||
std::string signalKey; /* full key "src:sig" or "src:sig[i]" */
|
||||
int edge = 0; /* 0=rising 1=falling 2=both */
|
||||
double threshold = 0.0;
|
||||
double windowSec = 0.1; /* 100 µs .. 10 s */
|
||||
double prePercent = 20.0;
|
||||
bool single = false; /* false=normal true=single */
|
||||
|
||||
/* Live (driven by hub triggerState broadcasts) */
|
||||
std::string status = "idle"; /* idle|armed|collecting|triggered */
|
||||
bool stopped = false;
|
||||
bool hasTrigTime = false;
|
||||
double trigTime = 0.0;
|
||||
};
|
||||
|
||||
/** Per-signal vertical scale state (oscilloscope style). */
|
||||
struct VScale {
|
||||
int mode = 0; /* 0=auto 1=range 2=manual */
|
||||
double divValue = 1.0; /* units per division (manual mode) */
|
||||
double offset = 0.0; /* raw value at center (manual mode) */
|
||||
double screenPos = 0.0; /* position offset in divisions from center */
|
||||
bool digitalInMixed = false; /* quantize this trace in mixed plot mode */
|
||||
/* Resolved each frame (read-only): */
|
||||
double resolvedDiv = 1.0;
|
||||
double resolvedOffset = 0.0;
|
||||
};
|
||||
|
||||
/** Assignment of one signal to a plot panel. */
|
||||
struct PlotAssignment {
|
||||
int sourceIdx = -1;
|
||||
int signalIdx = -1;
|
||||
VScale vs;
|
||||
};
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/* Plot layouts */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
/* Layout set mirrors the web UI: cols×rows */
|
||||
enum class PlotLayout {
|
||||
kLayout1x1 = 0,
|
||||
kLayout2x1, /* 2 side by side */
|
||||
kLayout1x2, /* 2 stacked */
|
||||
kLayout3x1,
|
||||
kLayout1x3,
|
||||
kLayout2x2,
|
||||
kLayout4x1,
|
||||
kLayout1x4,
|
||||
kCount
|
||||
};
|
||||
|
||||
static inline const char* const PlotLayoutNames[] = {
|
||||
"1×1", "2×1", "1×2", "3×1", "1×3", "2×2", "4×1", "1×4"
|
||||
};
|
||||
|
||||
static inline void PlotLayoutDims(PlotLayout l, int& cols, int& rows) {
|
||||
switch (l) {
|
||||
case PlotLayout::kLayout1x1: cols=1; rows=1; break;
|
||||
case PlotLayout::kLayout2x1: cols=2; rows=1; break;
|
||||
case PlotLayout::kLayout1x2: cols=1; rows=2; break;
|
||||
case PlotLayout::kLayout3x1: cols=3; rows=1; break;
|
||||
case PlotLayout::kLayout1x3: cols=1; rows=3; break;
|
||||
case PlotLayout::kLayout2x2: cols=2; rows=2; break;
|
||||
case PlotLayout::kLayout4x1: cols=4; rows=1; break;
|
||||
case PlotLayout::kLayout1x4: cols=1; rows=4; break;
|
||||
default: cols=1; rows=1; break;
|
||||
}
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/* App */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
class App {
|
||||
public:
|
||||
App();
|
||||
~App();
|
||||
|
||||
/** @brief Initialise and start the WebSocket connection. */
|
||||
void init(const std::string& host, uint16_t port);
|
||||
|
||||
/**
|
||||
* @brief Call once per ImGui frame.
|
||||
* Drains the WS receive queue, dispatches messages, renders all panels.
|
||||
*/
|
||||
void update();
|
||||
|
||||
/** @brief Disconnect and clean up. */
|
||||
void shutdown();
|
||||
|
||||
/* ---- Accessors used by sub-panels ----------------------------------- */
|
||||
|
||||
std::vector<Source>& sources() { return sources_; }
|
||||
const std::vector<Source>& sources() const { return sources_; }
|
||||
TriggerState& trigger() { return trigger_; }
|
||||
WSClient& ws() { return ws_; }
|
||||
uint32_t maxPoints() const { return maxPoints_; }
|
||||
|
||||
/** @brief Last trigger capture received from the hub (nullptr if none). */
|
||||
const CaptureFrame* capture() const { return hasCapture_ ? &capture_ : nullptr; }
|
||||
void clearCapture() { hasCapture_ = false; }
|
||||
|
||||
/** @brief Get the plot assignment vector for plot index i. */
|
||||
std::vector<PlotAssignment>& plotSlot(int i) { return plotSlots_[i]; }
|
||||
int numPlotSlots() const;
|
||||
|
||||
PlotLayout plotLayout() const { return layout_; }
|
||||
void setLayout(PlotLayout l);
|
||||
|
||||
/** @brief True if all plots are paused (global pause). */
|
||||
bool globalPaused() const { return globalPaused_; }
|
||||
void setGlobalPaused(bool p) { globalPaused_ = p; }
|
||||
|
||||
/** @brief Live-follow state per plot (true = auto-scroll with newest data). */
|
||||
bool& liveFollow(int i) { return liveFollow_[i]; }
|
||||
|
||||
/** @brief Which slot index is "active" (selected) in the given plot (-1 = none). */
|
||||
int& activeSlot(int i) { return activeSlot_[i]; }
|
||||
|
||||
/** @brief Time window width in seconds used by live scroll. */
|
||||
double windowSec() const { return windowSec_; }
|
||||
void setWindowSec(double s){ if (s >= 1e-4 && s <= 3600.0) windowSec_ = s; }
|
||||
|
||||
/** @brief Stored X range for non-live (zoom/pan) mode per plot. */
|
||||
double plotXMin(int i) const { return plotXMin_[i]; }
|
||||
double plotXMax(int i) const { return plotXMax_[i]; }
|
||||
void setPlotX(int i, double mn, double mx) {
|
||||
if (mx > mn + 1e-9) { plotXMin_[i] = mn; plotXMax_[i] = mx; }
|
||||
}
|
||||
/** @brief Call when transitioning live→non-live to seed the stored X range. */
|
||||
void initPlotX(int i, double tMax) {
|
||||
plotXMin_[i] = tMax - windowSec_;
|
||||
plotXMax_[i] = tMax;
|
||||
}
|
||||
|
||||
/** @brief Per-plot vertical normalisation: 0=normal 1=digital 2=mixed. */
|
||||
int& plotVMode(int i) { return plotVMode_[i]; }
|
||||
|
||||
/* ---- Cursors A/B (global: shared & synchronised across all plots) ---- */
|
||||
bool& cursorsOn() { return cursorsOn_; }
|
||||
double& cursorA() { return cursorA_; }
|
||||
double& cursorB() { return cursorB_; }
|
||||
|
||||
/* ---- Paused view snapshot (per plot) ---------------------------------- *
|
||||
* Double-buffer scheme: the per-signal ring buffers stay "active" (always
|
||||
* written by the WS thread-drain); a paused plot freezes a "view" copy of
|
||||
* its slots' data at pause time and renders from it, so the picture does
|
||||
* not drain away while the rings keep rolling. */
|
||||
struct PlotSnapshot {
|
||||
bool valid = false;
|
||||
std::vector<std::string> keys; /* slot key "src:sig" */
|
||||
std::vector<std::vector<double>> t, v;
|
||||
};
|
||||
PlotSnapshot& plotSnap(int i) { return plotSnap_[i]; }
|
||||
|
||||
/* ---- Zoom history (per plot) ----------------------------------------- */
|
||||
std::vector<std::pair<double,double>>& zoomHist(int i) { return zoomHist_[i]; }
|
||||
/** @brief Push the current stored X range onto the history (capped). */
|
||||
void pushZoomHist(int i) {
|
||||
auto& h = zoomHist_[i];
|
||||
if (!h.empty() && h.back().first == plotXMin_[i] &&
|
||||
h.back().second == plotXMax_[i]) { return; }
|
||||
if (h.size() >= 64) { h.erase(h.begin()); }
|
||||
h.emplace_back(plotXMin_[i], plotXMax_[i]);
|
||||
}
|
||||
|
||||
/* ---- Hi-res WS zoom (per plot) ---------------------------------------- */
|
||||
struct PlotZoomCache {
|
||||
bool valid = false; /* signals[] match [t0,t1] */
|
||||
bool pending = false; /* request in flight */
|
||||
uint32_t reqId = 0;
|
||||
double t0 = 0.0, t1 = 0.0; /* range of valid data */
|
||||
double reqT0 = 0.0, reqT1 = 0.0; /* range of pending request */
|
||||
std::vector<ZoomSignal> signals;
|
||||
};
|
||||
PlotZoomCache& zoomCache(int i) { return zoomCache_[i]; }
|
||||
|
||||
/** @brief Send a hub zoom request for plot i over [t0,t1] (2400 pts). */
|
||||
void requestZoom(int plotIdx, double t0, double t1,
|
||||
const std::string& signalsCsv);
|
||||
|
||||
/** @brief Full key "src:sig" for an assignment (empty if invalid). */
|
||||
std::string slotKey(const PlotAssignment& a) const;
|
||||
|
||||
/** @brief True if the stats panel is open. */
|
||||
bool& showStats() { return showStats_; }
|
||||
bool& showAddSrc() { return showAddSrc_; }
|
||||
bool& showTrigBar() { return showTrigBar_; }
|
||||
|
||||
/** @brief Find source index by id (-1 if not found). */
|
||||
int findSource(const std::string& id) const;
|
||||
|
||||
/** @brief Find signal index in source by name (-1 if not found). */
|
||||
int findSignal(const Source& src, const std::string& name) const;
|
||||
|
||||
private:
|
||||
/* ---- WS message dispatch ------------------------------------------- */
|
||||
void handleJSON(const std::string& json);
|
||||
void handleBinary(const uint8_t* data, size_t len);
|
||||
|
||||
void onSources(const std::string& json);
|
||||
void onConfig(const std::string& json);
|
||||
void onStats(const std::string& json);
|
||||
void onTriggerState(const std::string& json);
|
||||
void onZoom(const std::string& json);
|
||||
void onMaxPointsUpdated(const std::string& json);
|
||||
|
||||
/* ---- Rendering ------------------------------------------------------ */
|
||||
void renderMenuBar();
|
||||
void renderToolbar();
|
||||
void renderTriggerBar();
|
||||
void renderSidebar();
|
||||
void renderPlotGrid();
|
||||
void renderStatsModal();
|
||||
void renderAddSourceModal();
|
||||
|
||||
/* ---- State ---------------------------------------------------------- */
|
||||
WSClient ws_;
|
||||
std::vector<Source> sources_;
|
||||
mutable std::mutex srcMutex_; /* protects sources_ */
|
||||
|
||||
TriggerState trigger_;
|
||||
PlotLayout layout_ = PlotLayout::kLayout1x1;
|
||||
uint32_t maxPoints_ = 20000u;
|
||||
bool globalPaused_ = false;
|
||||
|
||||
/* Plot slots: one vector of assignments per plot panel */
|
||||
static const int kMaxPlotSlots = 8;
|
||||
std::vector<PlotAssignment> plotSlots_[kMaxPlotSlots];
|
||||
bool plotPaused_[kMaxPlotSlots] = {};
|
||||
bool liveFollow_[kMaxPlotSlots] = {}; /* true = live-scroll X axis */
|
||||
int activeSlot_[kMaxPlotSlots]; /* which slot is "active" (-1 = none) */
|
||||
double windowSec_ = 10.0; /* live scroll window width */
|
||||
double plotXMin_[kMaxPlotSlots] = {}; /* stored X min for non-live mode */
|
||||
double plotXMax_[kMaxPlotSlots] = {}; /* stored X max for non-live mode */
|
||||
int plotVMode_[kMaxPlotSlots] = {}; /* 0=normal 1=digital 2=mixed */
|
||||
|
||||
/* Cursors (global) */
|
||||
bool cursorsOn_ = false;
|
||||
double cursorA_ = 0.0;
|
||||
double cursorB_ = 0.0;
|
||||
|
||||
/* Frozen view per plot (valid while the plot is paused) */
|
||||
PlotSnapshot plotSnap_[kMaxPlotSlots];
|
||||
|
||||
/* Zoom history + hi-res zoom cache */
|
||||
std::vector<std::pair<double,double>> zoomHist_[kMaxPlotSlots];
|
||||
PlotZoomCache zoomCache_[kMaxPlotSlots];
|
||||
uint32_t nextZoomReqId_ = 1;
|
||||
|
||||
/* UI state */
|
||||
bool showStats_ = false;
|
||||
bool showAddSrc_ = false;
|
||||
bool showTrigBar_ = false;
|
||||
bool sidebarOpen_ = true;
|
||||
|
||||
/* Connection fields (populated by init(), editable in menu bar) */
|
||||
char hostBuf_[64] = "127.0.0.1";
|
||||
char portBuf_[8] = "8090";
|
||||
|
||||
/* Track connect transition to send initial queries */
|
||||
bool prevConnected_ = false;
|
||||
|
||||
/* Last trigger capture (version=2 binary frame; render thread only) */
|
||||
CaptureFrame capture_;
|
||||
bool hasCapture_ = false;
|
||||
};
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,124 @@
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
project(StreamHubClient CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# ── Find system packages ──────────────────────────────────────────────────────
|
||||
find_package(OpenGL REQUIRED)
|
||||
|
||||
# SDL2: try cmake config first, fall back to pkg-config
|
||||
find_package(SDL2 QUIET CONFIG)
|
||||
if(NOT SDL2_FOUND)
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(SDL2 REQUIRED sdl2)
|
||||
add_library(SDL2::SDL2 INTERFACE IMPORTED)
|
||||
target_include_directories(SDL2::SDL2 INTERFACE ${SDL2_INCLUDE_DIRS})
|
||||
target_link_libraries(SDL2::SDL2 INTERFACE ${SDL2_LIBRARIES})
|
||||
target_compile_options(SDL2::SDL2 INTERFACE ${SDL2_CFLAGS_OTHER})
|
||||
endif()
|
||||
|
||||
# ── Fetch Dear ImGui ──────────────────────────────────────────────────────────
|
||||
include(FetchContent)
|
||||
|
||||
FetchContent_Declare(
|
||||
imgui
|
||||
GIT_REPOSITORY https://github.com/ocornut/imgui.git
|
||||
GIT_TAG v1.91.8
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_MakeAvailable(imgui)
|
||||
|
||||
# ── Fetch ImPlot ──────────────────────────────────────────────────────────────
|
||||
FetchContent_Declare(
|
||||
implot
|
||||
GIT_REPOSITORY https://github.com/epezent/implot.git
|
||||
GIT_TAG v0.17
|
||||
GIT_SHALLOW TRUE
|
||||
)
|
||||
FetchContent_MakeAvailable(implot)
|
||||
|
||||
# ── Build ImGui + ImPlot as a static library ──────────────────────────────────
|
||||
add_library(imgui_lib STATIC
|
||||
${imgui_SOURCE_DIR}/imgui.cpp
|
||||
${imgui_SOURCE_DIR}/imgui_draw.cpp
|
||||
${imgui_SOURCE_DIR}/imgui_tables.cpp
|
||||
${imgui_SOURCE_DIR}/imgui_widgets.cpp
|
||||
${imgui_SOURCE_DIR}/backends/imgui_impl_sdl2.cpp
|
||||
${imgui_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp
|
||||
${implot_SOURCE_DIR}/implot.cpp
|
||||
${implot_SOURCE_DIR}/implot_items.cpp
|
||||
)
|
||||
target_include_directories(imgui_lib PUBLIC
|
||||
${imgui_SOURCE_DIR}
|
||||
${imgui_SOURCE_DIR}/backends
|
||||
${implot_SOURCE_DIR}
|
||||
)
|
||||
target_link_libraries(imgui_lib PUBLIC SDL2::SDL2 OpenGL::GL)
|
||||
target_compile_options(imgui_lib PRIVATE -w) # suppress warnings from vendored code
|
||||
|
||||
# ── Bundled resources (fonts, desktop entry, icon) ───────────────────────────
|
||||
# Fonts (UI font + Font Awesome 6 Free Solid + glyph-macro header) are vendored
|
||||
# in resources/fonts — no network access or system fonts required.
|
||||
set(RESOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/resources)
|
||||
set(FONT_DIR ${RESOURCE_DIR}/fonts)
|
||||
|
||||
if(EXISTS ${FONT_DIR}/fa-solid-900.ttf AND EXISTS ${FONT_DIR}/IconsFontAwesome6.h)
|
||||
set(HAVE_FONT_AWESOME TRUE)
|
||||
message(STATUS "Font Awesome icons enabled (${FONT_DIR})")
|
||||
else()
|
||||
set(HAVE_FONT_AWESOME FALSE)
|
||||
message(WARNING "Bundled Font Awesome missing — using ASCII icon fallbacks")
|
||||
endif()
|
||||
|
||||
# Mirror resources next to the built executable so dev runs find them
|
||||
file(COPY ${RESOURCE_DIR}/fonts DESTINATION ${CMAKE_BINARY_DIR}/resources)
|
||||
|
||||
# ── Application sources ───────────────────────────────────────────────────────
|
||||
set(APP_SOURCES
|
||||
main.cpp
|
||||
App.cpp
|
||||
WSClient.cpp
|
||||
Protocol.cpp
|
||||
SourcePanel.cpp
|
||||
PlotPanel.cpp
|
||||
TriggerPanel.cpp
|
||||
StatsPanel.cpp
|
||||
)
|
||||
|
||||
add_executable(StreamHubClient ${APP_SOURCES})
|
||||
|
||||
target_include_directories(StreamHubClient PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
# Reuse WSFrame.h, SHA1.h, Base64.h from StreamHub without copying
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../Source/Applications/StreamHub
|
||||
)
|
||||
|
||||
target_link_libraries(StreamHubClient PRIVATE
|
||||
imgui_lib
|
||||
SDL2::SDL2
|
||||
OpenGL::GL
|
||||
pthread
|
||||
)
|
||||
|
||||
# Source-tree resource dir baked in as last-resort runtime fallback
|
||||
target_compile_definitions(StreamHubClient PRIVATE
|
||||
APP_RESOURCE_DIR="${RESOURCE_DIR}"
|
||||
)
|
||||
if(HAVE_FONT_AWESOME)
|
||||
target_include_directories(StreamHubClient PRIVATE ${FONT_DIR})
|
||||
target_compile_definitions(StreamHubClient PRIVATE HAVE_FONT_AWESOME)
|
||||
endif()
|
||||
|
||||
target_compile_options(StreamHubClient PRIVATE
|
||||
-Wall -Wextra -Wno-unused-parameter
|
||||
)
|
||||
|
||||
# ── Install ───────────────────────────────────────────────────────────────────
|
||||
install(TARGETS StreamHubClient DESTINATION bin)
|
||||
install(DIRECTORY ${RESOURCE_DIR}/fonts DESTINATION share/streamhub-client)
|
||||
install(FILES ${RESOURCE_DIR}/streamhub-client.desktop
|
||||
DESTINATION share/applications)
|
||||
install(FILES ${RESOURCE_DIR}/icons/streamhub-client.svg
|
||||
DESTINATION share/icons/hicolor/scalable/apps)
|
||||
@@ -0,0 +1,34 @@
|
||||
/**
|
||||
* @file Icons.h
|
||||
* @brief Icon glyphs for UI labels.
|
||||
*
|
||||
* When Font Awesome 6 is available (downloaded by CMake and merged into the
|
||||
* default font in main.cpp) the ICON_FA_* macros expand to UTF-8 glyphs.
|
||||
* Otherwise they fall back to plain ASCII so no label ever renders as "?".
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifdef HAVE_FONT_AWESOME
|
||||
#include "IconsFontAwesome6.h"
|
||||
#else
|
||||
#define ICON_FA_TABLE_CELLS_LARGE ""
|
||||
#define ICON_FA_PAUSE "||"
|
||||
#define ICON_FA_PLAY ">"
|
||||
#define ICON_FA_BOLT ""
|
||||
#define ICON_FA_CHART_COLUMN ""
|
||||
#define ICON_FA_PLUS "+"
|
||||
#define ICON_FA_CIRCLE "*"
|
||||
#define ICON_FA_TRASH_CAN "x"
|
||||
#define ICON_FA_TOWER_BROADCAST ""
|
||||
#define ICON_FA_ARROW_ROTATE_LEFT "<"
|
||||
#define ICON_FA_EXPAND "[]"
|
||||
#define ICON_FA_CROSSHAIRS "+"
|
||||
#define ICON_FA_WAVE_SQUARE "~"
|
||||
#define ICON_FA_STOP "[]"
|
||||
#define ICON_FA_CHEVRON_LEFT "<"
|
||||
#define ICON_FA_CHEVRON_RIGHT ">"
|
||||
#define ICON_FA_ARROW_TREND_UP "/\\"
|
||||
#define ICON_FA_ARROW_TREND_DOWN "\\/"
|
||||
#define ICON_FA_ARROWS_UP_DOWN "/\\\\/"
|
||||
#endif
|
||||
@@ -0,0 +1,767 @@
|
||||
/**
|
||||
* @file PlotPanel.cpp
|
||||
* @brief ImPlot oscilloscope panel — oscilloscope-style fixed Y axis.
|
||||
*
|
||||
* Y axis: always [-4, +4] divisions. Normalisation per plot mode:
|
||||
* normal — each signal scaled by its VScale (auto / range / manual)
|
||||
* digital — each signal quantised hi/lo within its own horizontal band
|
||||
* mixed — per-signal band; quantised or auto-scaled (vs.digitalInMixed)
|
||||
*
|
||||
* X axis: live mode follows the wall clock (hub time base is Unix seconds);
|
||||
* scroll/drag switches to a stored range with zoom history (Back/Fit/Live).
|
||||
* When zoomed, a hi-res window is fetched from the hub over WS (zoom cmd).
|
||||
* When a trigger capture exists (and the trigger bar is open) the panel
|
||||
* renders the capture relative to the trigger instant in [-pre, +post].
|
||||
*/
|
||||
|
||||
#include "PlotPanel.h"
|
||||
#include "App.h"
|
||||
#include "Protocol.h"
|
||||
#include "SignalBuffer.h"
|
||||
|
||||
#include "imgui.h"
|
||||
#include "implot.h"
|
||||
#include "Icons.h"
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <cmath>
|
||||
#include <algorithm>
|
||||
#include <chrono>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
namespace StreamHubClient {
|
||||
|
||||
/* DnD payload */
|
||||
struct DragPayload { int srcIdx; int sigIdx; };
|
||||
|
||||
static const int kPlotSlotsMax = 8; /* mirrors App::kMaxPlotSlots */
|
||||
|
||||
/* Live windows at or below this width refresh via hub hi-res zoom fetches
|
||||
* instead of (in addition to) the decimated push stream. */
|
||||
static const double kLiveHiResMaxWin = 2.0; /* seconds */
|
||||
|
||||
/* ── Helpers ─────────────────────────────────────────────────────────────── */
|
||||
|
||||
static const char* fmtVal(char* buf, size_t sz, double v) {
|
||||
if (!std::isfinite(v)) { snprintf(buf, sz, "?"); return buf; }
|
||||
double abs = std::fabs(v);
|
||||
if (v == 0.0) snprintf(buf, sz, "0");
|
||||
else if (abs >= 1e4 || abs < 1e-3) snprintf(buf, sz, "%.2e", v);
|
||||
else snprintf(buf, sz, "%.3g", v);
|
||||
return buf;
|
||||
}
|
||||
|
||||
/** Resolve the effective divValue and offset for this assignment given raw data. */
|
||||
static void resolveVScale(PlotAssignment& a, const Signal& sig,
|
||||
const std::vector<double>& rawV) {
|
||||
if (a.vs.mode == 1) { /* range */
|
||||
double rmin = sig.meta.rangeMin, rmax = sig.meta.rangeMax;
|
||||
if (rmax > rmin) {
|
||||
a.vs.resolvedDiv = std::max((rmax - rmin) / 8.0, 1e-30);
|
||||
a.vs.resolvedOffset = (rmin + rmax) / 2.0;
|
||||
return;
|
||||
}
|
||||
/* fall through to auto if no valid range */
|
||||
}
|
||||
if (a.vs.mode == 2) { /* manual */
|
||||
a.vs.resolvedDiv = std::max(a.vs.divValue, 1e-30);
|
||||
a.vs.resolvedOffset = a.vs.offset;
|
||||
return;
|
||||
}
|
||||
/* auto: fit data in central 6 of 8 divisions */
|
||||
double mn = 1e300, mx = -1e300;
|
||||
for (double v : rawV) { if (v < mn) mn = v; if (v > mx) mx = v; }
|
||||
if (!std::isfinite(mn) || mn > mx) { mn = -1.0; mx = 1.0; }
|
||||
if (mn == mx) { mn -= 1.0; mx += 1.0; }
|
||||
a.vs.resolvedDiv = std::max((mx - mn) / 6.0, 1e-30);
|
||||
a.vs.resolvedOffset = (mx + mn) / 2.0;
|
||||
}
|
||||
|
||||
static double normalizeY(double raw, const VScale& vs) {
|
||||
return (raw - vs.resolvedOffset) / vs.resolvedDiv + vs.screenPos;
|
||||
}
|
||||
|
||||
/** Min/max of a vector (returns false if empty/non-finite). */
|
||||
static bool dataMinMax(const std::vector<double>& v, double& mn, double& mx) {
|
||||
mn = 1e300; mx = -1e300;
|
||||
for (double x : v) { if (std::isfinite(x)) { if (x < mn) mn = x; if (x > mx) mx = x; } }
|
||||
return mx >= mn;
|
||||
}
|
||||
|
||||
/** Digital/mixed band normalisation (ports web applyDigitalNorm/applyMixedNorm).
|
||||
* Band index ki of n; quantize=true → hi/lo threshold mode. */
|
||||
static void bandNormalize(const std::vector<double>& raw, std::vector<double>& out,
|
||||
int ki, int n, bool quantize) {
|
||||
double bandH = 8.0 / std::max(n, 1);
|
||||
double centerY = 4.0 - (ki + 0.5) * bandH;
|
||||
double hi = centerY + bandH * 0.35;
|
||||
double lo = centerY - bandH * 0.35;
|
||||
|
||||
double mn, mx;
|
||||
bool haveMM = dataMinMax(raw, mn, mx);
|
||||
|
||||
out.resize(raw.size());
|
||||
if (quantize) {
|
||||
double thr = haveMM ? (mn + mx) / 2.0 : 0.5;
|
||||
for (size_t i = 0; i < raw.size(); i++) {
|
||||
double v = raw[i];
|
||||
out[i] = !std::isfinite(v) ? NAN : (v >= thr ? hi : lo);
|
||||
}
|
||||
} else {
|
||||
if (!haveMM) { mn = 0.0; mx = 1.0; }
|
||||
if (mn == mx) { mn -= 1.0; mx += 1.0; }
|
||||
double range = mx - mn, bandRange = hi - lo;
|
||||
for (size_t i = 0; i < raw.size(); i++) {
|
||||
double v = raw[i];
|
||||
out[i] = !std::isfinite(v) ? NAN : lo + (v - mn) / range * bandRange;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Nearest sample value at time x (t sorted ascending). Returns NAN if empty. */
|
||||
static double sampleAt(const std::vector<double>& t, const std::vector<double>& v,
|
||||
double x) {
|
||||
if (t.empty() || v.size() != t.size()) { return NAN; }
|
||||
auto it = std::lower_bound(t.begin(), t.end(), x);
|
||||
size_t i = static_cast<size_t>(it - t.begin());
|
||||
if (i >= t.size()) { i = t.size() - 1; }
|
||||
else if (i > 0 && (x - t[i-1]) < (t[i] - x)) { i--; }
|
||||
return v[i];
|
||||
}
|
||||
|
||||
/* ── Main render ─────────────────────────────────────────────────────────── */
|
||||
|
||||
void RenderPlotPanel(App& app, int plotIdx, bool& paused) {
|
||||
auto& slots = app.plotSlot(plotIdx);
|
||||
auto& sources = app.sources();
|
||||
bool& live = app.liveFollow(plotIdx);
|
||||
int& actSlot = app.activeSlot(plotIdx);
|
||||
int& vMode = app.plotVMode(plotIdx);
|
||||
|
||||
ImGui::PushID(plotIdx);
|
||||
|
||||
/* Hub timestamps are Unix wall-clock seconds: live window follows the
|
||||
* local wall clock, not the newest data timestamp. */
|
||||
const double wallNow = std::chrono::duration<double>(
|
||||
std::chrono::system_clock::now().time_since_epoch()).count();
|
||||
|
||||
/* Trigger view: render the hub capture relative to the trigger instant */
|
||||
const CaptureFrame* cap = app.capture();
|
||||
const bool trigView = (cap != nullptr) && app.showTrigBar();
|
||||
|
||||
/* Hi-res zoom cache for this plot */
|
||||
auto& zc = app.zoomCache(plotIdx);
|
||||
|
||||
/* ── Paused view snapshot (double buffer: active ring / frozen view) ── *
|
||||
* The rings keep filling while paused; on the pause edge we freeze a
|
||||
* copy of each slot's data and render from it until resumed. */
|
||||
auto& snap = app.plotSnap(plotIdx);
|
||||
if (paused) {
|
||||
if (!snap.valid) {
|
||||
snap.keys.clear(); snap.t.clear(); snap.v.clear();
|
||||
for (const auto& a : slots) {
|
||||
std::vector<double> tt, vv;
|
||||
if (a.sourceIdx >= 0 && a.sourceIdx < (int)sources.size()) {
|
||||
(void) sources[a.sourceIdx].signals[a.signalIdx]
|
||||
.buf.readLast((size_t)app.maxPoints(), tt, vv);
|
||||
}
|
||||
snap.keys.push_back(app.slotKey(a));
|
||||
snap.t.push_back(std::move(tt));
|
||||
snap.v.push_back(std::move(vv));
|
||||
}
|
||||
snap.valid = true;
|
||||
/* Freeze the X axis where it is and switch to zoom/pan mode */
|
||||
if (live) {
|
||||
app.initPlotX(plotIdx, wallNow);
|
||||
live = false;
|
||||
}
|
||||
}
|
||||
} else if (snap.valid) {
|
||||
snap.valid = false;
|
||||
}
|
||||
|
||||
/* ── Collect raw data & resolve vscale ──────────────────────────────── */
|
||||
/* per-slot storage so normalisation pass can reference them */
|
||||
static thread_local std::vector<std::vector<double>> tStore, vStore;
|
||||
tStore.resize(slots.size());
|
||||
vStore.resize(slots.size());
|
||||
|
||||
/* Live hi-res refresh: with a narrow live window the client ring (built
|
||||
* from decimated pushes) undersamples the visible range. Periodically
|
||||
* fetch a fresh ~2400-pt slice from the hub raw ring and anchor the X
|
||||
* axis to the fetched slice (scope-style refresh at the fetch rate). */
|
||||
const bool liveHiRes = !trigView && live && !paused &&
|
||||
app.windowSec() <= kLiveHiResMaxWin &&
|
||||
zc.valid &&
|
||||
(zc.t1 - zc.t0) >= app.windowSec() * 0.9 &&
|
||||
(wallNow - zc.t1) < 3.0;
|
||||
|
||||
const bool useZoomData = !trigView && zc.valid &&
|
||||
(liveHiRes ||
|
||||
(!live &&
|
||||
zc.t0 <= app.plotXMin(plotIdx) + 1e-9 &&
|
||||
zc.t1 >= app.plotXMax(plotIdx) - 1e-9));
|
||||
|
||||
/* Fill tStore/vStore[si] from the frozen view (paused) or the live ring */
|
||||
auto readBase = [&](size_t si, const Signal& sig, const std::string& key) {
|
||||
if (paused && snap.valid) {
|
||||
for (size_t k = 0; k < snap.keys.size(); k++) {
|
||||
if (snap.keys[k] == key) {
|
||||
tStore[si] = snap.t[k];
|
||||
vStore[si] = snap.v[k];
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
(void) sig.buf.readLast((size_t)app.maxPoints(), tStore[si], vStore[si]);
|
||||
};
|
||||
|
||||
for (size_t si = 0; si < slots.size(); si++) {
|
||||
auto& a = slots[si];
|
||||
tStore[si].clear(); vStore[si].clear();
|
||||
if (a.sourceIdx < 0 || a.sourceIdx >= (int)sources.size()) continue;
|
||||
const auto& sig = sources[a.sourceIdx].signals[a.signalIdx];
|
||||
const std::string key = app.slotKey(a);
|
||||
|
||||
if (trigView) {
|
||||
/* Capture signals carry full keys "src:sig"; t relative to trigTime */
|
||||
for (const auto& cs : cap->signals) {
|
||||
if (cs.key != key) continue;
|
||||
size_t n = std::min(cs.t.size(), cs.v.size());
|
||||
tStore[si].reserve(n); vStore[si].reserve(n);
|
||||
for (size_t i = 0; i < n; i++) {
|
||||
tStore[si].push_back(cs.t[i] - cap->trigTime);
|
||||
vStore[si].push_back(cs.v[i]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else if (useZoomData) {
|
||||
bool found = false;
|
||||
for (const auto& zs : zc.signals) {
|
||||
if (zs.name != key) continue;
|
||||
tStore[si] = zs.t;
|
||||
vStore[si] = zs.v;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
if (!found) {
|
||||
readBase(si, sig, key);
|
||||
}
|
||||
} else {
|
||||
readBase(si, sig, key);
|
||||
}
|
||||
resolveVScale(a, sig, vStore[si]);
|
||||
}
|
||||
|
||||
/* clamp active slot */
|
||||
if (actSlot >= (int)slots.size()) actSlot = -1;
|
||||
|
||||
/* ── Badge row ──────────────────────────────────────────────────────── */
|
||||
/* Catppuccin accent for active badge border */
|
||||
static const ImVec4 kAccent{0.537f,0.706f,0.980f,1.f};
|
||||
|
||||
for (int i = (int)slots.size()-1; i >= 0; i--) {
|
||||
auto& a = slots[i];
|
||||
if (a.sourceIdx < 0 || a.sourceIdx >= (int)sources.size()) continue;
|
||||
auto& sig = sources[a.sourceIdx].signals[a.signalIdx];
|
||||
|
||||
bool isActive = (actSlot == i);
|
||||
|
||||
/* colored badge */
|
||||
ImGui::PushStyleColor(ImGuiCol_Button,
|
||||
isActive ? kAccent : sig.color);
|
||||
ImGui::PushStyleColor(ImGuiCol_ButtonHovered,
|
||||
isActive ? kAccent : ImVec4(sig.color.x*1.15f,sig.color.y*1.15f,
|
||||
sig.color.z*1.15f,sig.color.w));
|
||||
ImGui::PushStyleColor(ImGuiCol_Text,
|
||||
ImVec4(0.067f,0.067f,0.106f,1.f));
|
||||
|
||||
char badge[80];
|
||||
/* show vscale info: resolved div value */
|
||||
char dvbuf[16];
|
||||
fmtVal(dvbuf, sizeof(dvbuf), a.vs.resolvedDiv);
|
||||
snprintf(badge, sizeof(badge), "%s %s/div##b%d",
|
||||
sig.meta.name.c_str(), dvbuf, i);
|
||||
|
||||
if (ImGui::SmallButton(badge)) {
|
||||
actSlot = (actSlot == i) ? -1 : i; /* toggle active */
|
||||
}
|
||||
ImGui::PopStyleColor(3);
|
||||
|
||||
/* right-click: styling + remove */
|
||||
char popId[24]; snprintf(popId, sizeof(popId), "##bp%d_%d", plotIdx, i);
|
||||
if (ImGui::BeginPopupContextItem(popId)) {
|
||||
ImGui::TextUnformatted(sig.meta.name.c_str());
|
||||
ImGui::Separator();
|
||||
|
||||
float col[4] = {sig.color.x, sig.color.y, sig.color.z, sig.color.w};
|
||||
if (ImGui::ColorEdit4("Color##sc", col,
|
||||
ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoAlpha)) {
|
||||
sig.color = ImVec4(col[0], col[1], col[2], col[3]);
|
||||
}
|
||||
ImGui::SetNextItemWidth(120.f);
|
||||
ImGui::SliderFloat("Width##sw", &sig.lineWidth, 0.5f, 5.f, "%.1f");
|
||||
|
||||
static const char* kMarkerNames[] =
|
||||
{"None", "Circle", "Square", "Diamond", "Up", "Down",
|
||||
"Left", "Right", "Cross", "Plus", "Asterisk"};
|
||||
int mk = sig.marker + 1; /* -1 (none) → 0 */
|
||||
ImGui::SetNextItemWidth(120.f);
|
||||
if (ImGui::Combo("Marker##sm", &mk, kMarkerNames, 11)) {
|
||||
sig.marker = mk - 1;
|
||||
}
|
||||
|
||||
if (vMode == 2) { /* mixed mode: per-trace digital toggle */
|
||||
ImGui::Checkbox("Digital (mixed)##sd", &a.vs.digitalInMixed);
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
bool shouldBreak = false;
|
||||
if (ImGui::MenuItem("Remove from plot")) {
|
||||
if (actSlot == i) actSlot = -1;
|
||||
else if (actSlot > i) actSlot--;
|
||||
slots.erase(slots.begin() + i);
|
||||
shouldBreak = true;
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
if (shouldBreak) { ImGui::SameLine(); break; }
|
||||
}
|
||||
ImGui::SameLine();
|
||||
}
|
||||
|
||||
/* live button (pause & cursors live in the global toolbar) */
|
||||
{
|
||||
static const ImVec4 kLiveOn {0.086f,0.494f,0.267f,1.f};
|
||||
static const ImVec4 kLiveOnH{0.114f,0.627f,0.341f,1.f};
|
||||
static const ImVec4 kLiveOff{0.192f,0.196f,0.267f,1.f};
|
||||
static const ImVec4 kLiveOffH{0.271f,0.278f,0.353f,1.f};
|
||||
ImGui::PushStyleColor(ImGuiCol_Button,
|
||||
live ? kLiveOn : kLiveOff);
|
||||
ImGui::PushStyleColor(ImGuiCol_ButtonHovered,
|
||||
live ? kLiveOnH : kLiveOffH);
|
||||
if (ImGui::SmallButton(ICON_FA_TOWER_BROADCAST " Live")) {
|
||||
live = true;
|
||||
paused = false;
|
||||
app.zoomHist(plotIdx).clear();
|
||||
zc.valid = false;
|
||||
}
|
||||
ImGui::PopStyleColor(2);
|
||||
}
|
||||
|
||||
/* Back / Fit (zoom history) — only meaningful when not live */
|
||||
if (!live && !trigView) {
|
||||
ImGui::SameLine();
|
||||
auto& hist = app.zoomHist(plotIdx);
|
||||
if (hist.empty()) { ImGui::BeginDisabled(); }
|
||||
if (ImGui::SmallButton(ICON_FA_ARROW_ROTATE_LEFT " Back##zb")) {
|
||||
app.setPlotX(plotIdx, hist.back().first, hist.back().second);
|
||||
hist.pop_back();
|
||||
}
|
||||
if (hist.empty()) { ImGui::EndDisabled(); }
|
||||
ImGui::SameLine();
|
||||
if (ImGui::SmallButton(ICON_FA_EXPAND " Fit##zf")) {
|
||||
double mn = 1e300, mx = -1e300;
|
||||
for (size_t si = 0; si < slots.size(); si++) {
|
||||
if (tStore[si].empty()) continue;
|
||||
mn = std::min(mn, tStore[si].front());
|
||||
mx = std::max(mx, tStore[si].back());
|
||||
}
|
||||
if (mx > mn) {
|
||||
app.pushZoomHist(plotIdx);
|
||||
app.setPlotX(plotIdx, mn, mx);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Norm mode + cursors toggles */
|
||||
ImGui::SameLine();
|
||||
{
|
||||
static const char* kVModes[] = {"Norm", "Dig", "Mix"};
|
||||
ImGui::SetNextItemWidth(58.f);
|
||||
char vmId[16]; snprintf(vmId, sizeof(vmId), "##vm%d", plotIdx);
|
||||
ImGui::Combo(vmId, &vMode, kVModes, 3);
|
||||
}
|
||||
|
||||
/* ── VScale toolbar (shown when an active signal is selected) ───────── */
|
||||
if (vMode == 0 && actSlot >= 0 && actSlot < (int)slots.size()) {
|
||||
auto& a = slots[actSlot];
|
||||
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4.f,2.f));
|
||||
|
||||
/* mode buttons */
|
||||
static const char* kModeLabels[] = {"Auto","Range","Manual"};
|
||||
for (int m = 0; m < 3; m++) {
|
||||
bool sel = (a.vs.mode == m);
|
||||
if (sel) {
|
||||
ImGui::PushStyleColor(ImGuiCol_Button,
|
||||
ImVec4(0.537f,0.706f,0.980f,0.3f));
|
||||
ImGui::PushStyleColor(ImGuiCol_Text,
|
||||
ImVec4(0.537f,0.706f,0.980f,1.f));
|
||||
}
|
||||
if (ImGui::SmallButton(kModeLabels[m])) { a.vs.mode = m; }
|
||||
if (sel) ImGui::PopStyleColor(2);
|
||||
if (m < 2) ImGui::SameLine(0.f,2.f);
|
||||
}
|
||||
ImGui::SameLine(0.f,10.f);
|
||||
|
||||
/* resolved info */
|
||||
char rbuf[24], obuf[24];
|
||||
fmtVal(rbuf, sizeof(rbuf), a.vs.resolvedDiv);
|
||||
fmtVal(obuf, sizeof(obuf), a.vs.resolvedOffset);
|
||||
|
||||
if (a.vs.mode == 2) { /* manual: editable */
|
||||
ImGui::SetNextItemWidth(70.f);
|
||||
ImGui::InputDouble("V/div##vd", &a.vs.divValue, 0,0,"%.4g");
|
||||
ImGui::SameLine(0.f,4.f);
|
||||
ImGui::SetNextItemWidth(80.f);
|
||||
ImGui::InputDouble("Offset##vo", &a.vs.offset, 0,0,"%.4g");
|
||||
} else {
|
||||
ImGui::TextDisabled("%s/div @%s", rbuf, obuf);
|
||||
}
|
||||
ImGui::SameLine(0.f,10.f);
|
||||
ImGui::SetNextItemWidth(50.f);
|
||||
float sp = (float)a.vs.screenPos;
|
||||
if (ImGui::InputFloat("Pos(div)##vp", &sp, 0,0,"%.1f")) {
|
||||
a.vs.screenPos = sp;
|
||||
}
|
||||
|
||||
ImGui::PopStyleVar();
|
||||
}
|
||||
|
||||
/* ── Cursor readouts ─────────────────────────────────────────────────── */
|
||||
if (app.cursorsOn()) {
|
||||
double cA = app.cursorA(), cB = app.cursorB();
|
||||
double dT = cB - cA;
|
||||
char d1[24], d2[24];
|
||||
fmtVal(d1, sizeof(d1), dT);
|
||||
fmtVal(d2, sizeof(d2), (dT != 0.0) ? 1.0 / std::fabs(dT) : 0.0);
|
||||
ImGui::TextColored(ImVec4(0.980f,0.702f,0.529f,1.f),
|
||||
"dT=%ss 1/dT=%sHz", d1, d2);
|
||||
for (size_t si = 0; si < slots.size(); si++) {
|
||||
auto& a = slots[si];
|
||||
if (a.sourceIdx < 0 || a.sourceIdx >= (int)sources.size()) continue;
|
||||
if (tStore[si].empty()) continue;
|
||||
const auto& sig = sources[a.sourceIdx].signals[a.signalIdx];
|
||||
double vA = sampleAt(tStore[si], vStore[si], cA);
|
||||
double vB = sampleAt(tStore[si], vStore[si], cB);
|
||||
char a1[24], a2[24], a3[24];
|
||||
fmtVal(a1, sizeof(a1), vA);
|
||||
fmtVal(a2, sizeof(a2), vB);
|
||||
fmtVal(a3, sizeof(a3), vB - vA);
|
||||
ImGui::SameLine(0.f, 14.f);
|
||||
ImGui::TextColored(sig.color, "%s: A=%s B=%s d=%s",
|
||||
sig.meta.name.c_str(), a1, a2, a3);
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::Separator();
|
||||
|
||||
/* ── ImPlot ──────────────────────────────────────────────────────────── */
|
||||
char plotId[32]; snprintf(plotId, sizeof(plotId), "##plot%d", plotIdx);
|
||||
|
||||
/* Both axes are fully controlled by us — disable ImPlot's native zoom. */
|
||||
ImPlotFlags plotFlags = ImPlotFlags_NoTitle | ImPlotFlags_NoLegend
|
||||
| ImPlotFlags_NoInputs;
|
||||
if (ImPlot::BeginPlot(plotId, ImVec2(-1.f,-1.f), plotFlags)) {
|
||||
|
||||
/* Both axes locked so ImPlot never overrides our explicit limits. */
|
||||
ImPlot::SetupAxes(trigView ? "t - trig (s)" : "Time (s)", nullptr,
|
||||
ImPlotAxisFlags_Lock,
|
||||
ImPlotAxisFlags_Lock);
|
||||
|
||||
/* Y axis always ±4 div space */
|
||||
ImPlot::SetupAxisLimits(ImAxis_Y1, -4.05, 4.05, ImGuiCond_Always);
|
||||
|
||||
/* X axis: trig view → capture window; live → wall clock; else stored */
|
||||
double xMin, xMax;
|
||||
if (trigView) {
|
||||
xMin = -cap->preSec; xMax = cap->postSec;
|
||||
} else if (live && !paused) {
|
||||
if (liveHiRes) {
|
||||
/* Anchor to the latest fetched hi-res slice so the trace
|
||||
* fills the window (refreshes at the fetch rate). */
|
||||
xMax = zc.t1; xMin = zc.t1 - app.windowSec();
|
||||
} else {
|
||||
xMax = wallNow; xMin = wallNow - app.windowSec();
|
||||
}
|
||||
} else {
|
||||
xMin = app.plotXMin(plotIdx); xMax = app.plotXMax(plotIdx);
|
||||
}
|
||||
if (trigView || (live && !paused) || !live) {
|
||||
if (xMax > xMin) {
|
||||
ImPlot::SetupAxisLimits(ImAxis_X1, xMin, xMax, ImGuiCond_Always);
|
||||
}
|
||||
}
|
||||
|
||||
/* ── Y axis ticks labelled from active signal (normal mode only) ── */
|
||||
static double yTickVals[9] = {-4,-3,-2,-1,0,1,2,3,4};
|
||||
static char yTickBufs[9][20];
|
||||
static const char* yTickLabels[9];
|
||||
|
||||
if (vMode == 0 && actSlot >= 0 && actSlot < (int)slots.size()) {
|
||||
const auto& av = slots[actSlot].vs;
|
||||
for (int d = 0; d < 9; d++) {
|
||||
double divPos = yTickVals[d];
|
||||
double rawVal = av.resolvedOffset + (divPos - av.screenPos) * av.resolvedDiv;
|
||||
fmtVal(yTickBufs[d], sizeof(yTickBufs[d]), rawVal);
|
||||
yTickLabels[d] = yTickBufs[d];
|
||||
}
|
||||
} else {
|
||||
for (int d = 0; d < 9; d++) {
|
||||
snprintf(yTickBufs[d], sizeof(yTickBufs[d]), "%.0f", yTickVals[d]);
|
||||
yTickLabels[d] = yTickBufs[d];
|
||||
}
|
||||
}
|
||||
ImPlot::SetupAxisTicks(ImAxis_Y1, yTickVals, 9, yTickLabels, false);
|
||||
|
||||
/* ── X axis ticks ───────────────────────────────────────────────── */
|
||||
if (xMax > xMin) {
|
||||
double step = (xMax - xMin) / 10.0;
|
||||
double tickX[11];
|
||||
for (int t = 0; t <= 10; t++) tickX[t] = xMin + t * step;
|
||||
ImPlot::SetupAxisTicks(ImAxis_X1, tickX, 11, nullptr, false);
|
||||
}
|
||||
|
||||
ImPlot::SetupFinish();
|
||||
|
||||
/* ── Custom oscilloscope input handling (after SetupFinish) ─────── *
|
||||
*
|
||||
* Scroll → Y zoom : active signal V/div × factor
|
||||
* Ctrl + Scroll → X zoom : windowSec_ (live) or stored X range (non-live)
|
||||
* Shift + Scroll → Y pan : active signal screenPos shift
|
||||
* Right-drag → X pan : (non-live) translate stored X range
|
||||
*
|
||||
* Right-drag while live → transitions to non-live mode first. */
|
||||
|
||||
/* With ImPlotFlags_NoInputs ImPlot never updates plot.Hovered, so
|
||||
* IsPlotHovered()/IsAxisHovered() always return false — test the
|
||||
* plot rectangle against the mouse ourselves. */
|
||||
const ImVec2 ppos = ImPlot::GetPlotPos();
|
||||
const ImVec2 psz = ImPlot::GetPlotSize();
|
||||
bool overPlot = ImGui::IsWindowHovered(
|
||||
ImGuiHoveredFlags_AllowWhenBlockedByActiveItem) &&
|
||||
ImGui::IsMouseHoveringRect(
|
||||
ppos, ImVec2(ppos.x + psz.x, ppos.y + psz.y));
|
||||
|
||||
/* Zoom-history debounce: coalesce rapid scroll steps into one entry */
|
||||
static double lastHistPush[kPlotSlotsMax] = {};
|
||||
|
||||
if (overPlot && !trigView) {
|
||||
ImGuiIO& io2 = ImGui::GetIO();
|
||||
const float wheel = io2.MouseWheel;
|
||||
const bool ctrl = io2.KeyCtrl;
|
||||
const bool shift = io2.KeyShift;
|
||||
const double now = ImGui::GetTime();
|
||||
|
||||
if (wheel != 0.f) {
|
||||
/* Zoom factor: scroll up = zoom in (×0.8), down = zoom out (×1.25) */
|
||||
const double zoomIn = 0.8;
|
||||
const double zoomOut = 1.25;
|
||||
double factor = (wheel > 0.f) ? zoomIn : zoomOut;
|
||||
|
||||
if (ctrl) {
|
||||
/* ── X zoom ─────────────────────────────────────────── */
|
||||
if (live) {
|
||||
app.setWindowSec(app.windowSec() * factor);
|
||||
} else {
|
||||
if (now - lastHistPush[plotIdx] > 0.6) {
|
||||
app.pushZoomHist(plotIdx);
|
||||
lastHistPush[plotIdx] = now;
|
||||
}
|
||||
double cx = (app.plotXMin(plotIdx) + app.plotXMax(plotIdx)) * 0.5;
|
||||
double half = (app.plotXMax(plotIdx) - app.plotXMin(plotIdx)) * 0.5 * factor;
|
||||
app.setPlotX(plotIdx, cx - half, cx + half);
|
||||
}
|
||||
} else if (shift) {
|
||||
/* ── Y offset of active signal ───────────────────────── */
|
||||
if (actSlot >= 0 && actSlot < (int)slots.size()) {
|
||||
auto& a = slots[actSlot];
|
||||
/* Switch to manual so position is retained */
|
||||
if (a.vs.mode != 2) {
|
||||
a.vs.divValue = std::max(a.vs.resolvedDiv, 1e-30);
|
||||
a.vs.offset = a.vs.resolvedOffset;
|
||||
a.vs.mode = 2;
|
||||
}
|
||||
/* Each scroll step moves by 0.5 screen divisions */
|
||||
a.vs.screenPos += (wheel > 0.f) ? 0.5 : -0.5;
|
||||
}
|
||||
} else {
|
||||
/* ── Y zoom of active signal ─────────────────────────── */
|
||||
if (actSlot >= 0 && actSlot < (int)slots.size()) {
|
||||
auto& a = slots[actSlot];
|
||||
if (a.vs.mode != 2) {
|
||||
a.vs.divValue = std::max(a.vs.resolvedDiv, 1e-30);
|
||||
a.vs.offset = a.vs.resolvedOffset;
|
||||
a.vs.mode = 2;
|
||||
}
|
||||
a.vs.divValue = std::max(a.vs.divValue * factor, 1e-30);
|
||||
} else {
|
||||
/* No active signal: plain scroll falls back to X zoom
|
||||
* so the wheel always does something useful. */
|
||||
if (live) {
|
||||
app.setWindowSec(app.windowSec() * factor);
|
||||
} else {
|
||||
if (now - lastHistPush[plotIdx] > 0.6) {
|
||||
app.pushZoomHist(plotIdx);
|
||||
lastHistPush[plotIdx] = now;
|
||||
}
|
||||
double cx = (app.plotXMin(plotIdx) + app.plotXMax(plotIdx)) * 0.5;
|
||||
double half = (app.plotXMax(plotIdx) - app.plotXMin(plotIdx)) * 0.5 * factor;
|
||||
app.setPlotX(plotIdx, cx - half, cx + half);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Right-drag → X pan (non-live). Transition live→non-live on drag start. */
|
||||
if (ImGui::IsMouseDragging(ImGuiMouseButton_Right)) {
|
||||
if (live) {
|
||||
/* Seed stored range from current live window */
|
||||
app.initPlotX(plotIdx, wallNow);
|
||||
live = false;
|
||||
lastHistPush[plotIdx] = now;
|
||||
}
|
||||
ImVec2 delta = ImGui::GetMouseDragDelta(ImGuiMouseButton_Right, 0.f);
|
||||
ImGui::ResetMouseDragDelta(ImGuiMouseButton_Right);
|
||||
ImVec2 pxSize = ImPlot::GetPlotSize();
|
||||
if (pxSize.x > 0.f) {
|
||||
double xRange = app.plotXMax(plotIdx) - app.plotXMin(plotIdx);
|
||||
double dt = -(double)delta.x / (double)pxSize.x * xRange;
|
||||
app.setPlotX(plotIdx,
|
||||
app.plotXMin(plotIdx) + dt,
|
||||
app.plotXMax(plotIdx) + dt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ── Hi-res WS zoom requests ────────────────────────────────────── */
|
||||
if (!trigView) {
|
||||
std::string csv;
|
||||
for (const auto& a : slots) {
|
||||
std::string k = app.slotKey(a);
|
||||
if (k.empty()) continue;
|
||||
if (!csv.empty()) csv += ",";
|
||||
csv += k;
|
||||
}
|
||||
|
||||
if (live && !paused && app.windowSec() <= kLiveHiResMaxWin) {
|
||||
/* Live, zoomed in: continuously refresh the window with a
|
||||
* fresh hi-res slice from the hub raw ring (throttled). */
|
||||
static double lastLiveReq[kPlotSlotsMax] = {};
|
||||
const double now = ImGui::GetTime();
|
||||
if (!csv.empty() && !zc.pending &&
|
||||
now - lastLiveReq[plotIdx] > 0.25) {
|
||||
app.requestZoom(plotIdx, wallNow - app.windowSec(),
|
||||
wallNow, csv);
|
||||
lastLiveReq[plotIdx] = now;
|
||||
}
|
||||
} else if (!live) {
|
||||
/* Non-live: debounced — every zoom/pan settles into one
|
||||
* request, so each zoom level gets fresh resolution. */
|
||||
static double rangeChangedAt[kPlotSlotsMax] = {};
|
||||
static double lastT0[kPlotSlotsMax] = {}, lastT1[kPlotSlotsMax] = {};
|
||||
const double now = ImGui::GetTime();
|
||||
double t0 = app.plotXMin(plotIdx), t1 = app.plotXMax(plotIdx);
|
||||
if (t0 != lastT0[plotIdx] || t1 != lastT1[plotIdx]) {
|
||||
lastT0[plotIdx] = t0;
|
||||
lastT1[plotIdx] = t1;
|
||||
rangeChangedAt[plotIdx] = now;
|
||||
} else if (rangeChangedAt[plotIdx] > 0.0 &&
|
||||
now - rangeChangedAt[plotIdx] > 0.35 &&
|
||||
!zc.pending &&
|
||||
!(zc.valid && zc.t0 == t0 && zc.t1 == t1)) {
|
||||
if (!csv.empty()) { app.requestZoom(plotIdx, t0, t1, csv); }
|
||||
rangeChangedAt[plotIdx] = 0.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ── Plot each signal ──────────────────────────────────────────── */
|
||||
static const size_t kMaxPush = 2400;
|
||||
static thread_local std::vector<double> tDec, vDec, vNorm;
|
||||
|
||||
int nTraces = 0;
|
||||
for (const auto& a : slots) {
|
||||
if (a.sourceIdx >= 0 && a.sourceIdx < (int)sources.size()) nTraces++;
|
||||
}
|
||||
|
||||
int ki = 0;
|
||||
for (size_t si = 0; si < slots.size(); si++) {
|
||||
auto& a = slots[si];
|
||||
if (a.sourceIdx < 0 || a.sourceIdx >= (int)sources.size()) continue;
|
||||
const auto& sig = sources[a.sourceIdx].signals[a.signalIdx];
|
||||
int myKi = ki++;
|
||||
|
||||
if (tStore[si].empty()) continue;
|
||||
|
||||
size_t nOut = LTTBDecimate(tStore[si], vStore[si], tDec, vDec, kMaxPush);
|
||||
if (nOut == 0) continue;
|
||||
|
||||
/* normalise to ±4 div space */
|
||||
if (vMode == 1) { /* digital */
|
||||
bandNormalize(vDec, vNorm, myKi, nTraces, true);
|
||||
} else if (vMode == 2) { /* mixed */
|
||||
bandNormalize(vDec, vNorm, myKi, nTraces, a.vs.digitalInMixed);
|
||||
} else {
|
||||
vNorm.resize(nOut);
|
||||
for (size_t k = 0; k < nOut; k++) {
|
||||
vNorm[k] = normalizeY(vDec[k], a.vs);
|
||||
}
|
||||
}
|
||||
|
||||
ImPlot::SetNextLineStyle(sig.color, sig.lineWidth);
|
||||
if (sig.marker >= 0) {
|
||||
ImPlot::SetNextMarkerStyle(sig.marker, 3.f, sig.color);
|
||||
}
|
||||
ImPlot::PlotLine(sig.meta.name.c_str(),
|
||||
tDec.data(), vNorm.data(), (int)nOut);
|
||||
}
|
||||
|
||||
/* Trigger instant marker (capture view: t = 0) */
|
||||
if (trigView) {
|
||||
double t0m = 0.0;
|
||||
ImPlot::DragLineX(900, &t0m, ImVec4(1.f,1.f,0.f,0.8f),
|
||||
1.5f, ImPlotDragToolFlags_NoInputs);
|
||||
}
|
||||
|
||||
/* Cursors A/B — global: same position on every plot, drag anywhere */
|
||||
if (app.cursorsOn()) {
|
||||
static const ImVec4 kCursA{0.980f,0.702f,0.529f,0.9f};
|
||||
static const ImVec4 kCursB{0.796f,0.651f,0.969f,0.9f};
|
||||
ImPlot::DragLineX(910, &app.cursorA(), kCursA, 1.2f);
|
||||
ImPlot::DragLineX(911, &app.cursorB(), kCursB, 1.2f);
|
||||
ImPlot::TagX(app.cursorA(), kCursA, "A");
|
||||
ImPlot::TagX(app.cursorB(), kCursB, "B");
|
||||
}
|
||||
|
||||
/* Drag-and-drop target */
|
||||
if (ImPlot::BeginDragDropTargetPlot()) {
|
||||
if (const ImGuiPayload* pl =
|
||||
ImGui::AcceptDragDropPayload("SIGNAL_REF")) {
|
||||
DragPayload dp;
|
||||
memcpy(&dp, pl->Data, sizeof(dp));
|
||||
bool found = false;
|
||||
for (const auto& a : slots) {
|
||||
if (a.sourceIdx == dp.srcIdx && a.signalIdx == dp.sigIdx) {
|
||||
found = true; break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
PlotAssignment pa;
|
||||
pa.sourceIdx = dp.srcIdx;
|
||||
pa.signalIdx = dp.sigIdx;
|
||||
slots.push_back(pa);
|
||||
}
|
||||
}
|
||||
ImPlot::EndDragDropTarget();
|
||||
}
|
||||
|
||||
ImPlot::EndPlot();
|
||||
}
|
||||
|
||||
ImGui::PopID();
|
||||
}
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,19 @@
|
||||
/**
|
||||
* @file PlotPanel.h
|
||||
* @brief ImPlot-based oscilloscope plot panel.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace StreamHubClient {
|
||||
class App;
|
||||
|
||||
/**
|
||||
* @brief Render one oscilloscope plot panel.
|
||||
* @param app Application state.
|
||||
* @param plotIdx Which slot in app.plotSlots() to render.
|
||||
* @param paused Whether data updates are paused for this plot.
|
||||
*/
|
||||
void RenderPlotPanel(App& app, int plotIdx, bool& paused);
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,533 @@
|
||||
/**
|
||||
* @file Protocol.cpp
|
||||
* @brief StreamHub wire protocol implementation.
|
||||
*/
|
||||
|
||||
#include "Protocol.h"
|
||||
|
||||
#include <cstring>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <cmath>
|
||||
#include <sstream>
|
||||
|
||||
namespace StreamHubClient {
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/* Binary frame parser */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
/* Read a uint32 LE from buf+offset; advance offset by 4. */
|
||||
static uint32_t readU32(const uint8_t* buf, size_t& off, size_t len) {
|
||||
if (off + 4 > len) { return 0u; }
|
||||
uint32_t v = static_cast<uint32_t>(buf[off])
|
||||
| (static_cast<uint32_t>(buf[off+1]) << 8)
|
||||
| (static_cast<uint32_t>(buf[off+2]) << 16)
|
||||
| (static_cast<uint32_t>(buf[off+3]) << 24);
|
||||
off += 4;
|
||||
return v;
|
||||
}
|
||||
|
||||
/* Read a uint16 LE from buf+offset; advance offset by 2. */
|
||||
static uint16_t readU16(const uint8_t* buf, size_t& off, size_t len) {
|
||||
if (off + 2 > len) { return 0u; }
|
||||
uint16_t v = static_cast<uint16_t>(buf[off])
|
||||
| (static_cast<uint16_t>(buf[off+1]) << 8);
|
||||
off += 2;
|
||||
return v;
|
||||
}
|
||||
|
||||
/* Read a float64 LE from buf+offset; advance offset by 8. */
|
||||
static double readF64(const uint8_t* buf, size_t& off, size_t len) {
|
||||
if (off + 8 > len) { return 0.0; }
|
||||
double v;
|
||||
memcpy(&v, buf + off, 8);
|
||||
off += 8;
|
||||
return v;
|
||||
}
|
||||
|
||||
bool ParseBinaryFrame(const uint8_t* buf, size_t len, DataFrame& out) {
|
||||
out.sourceId.clear();
|
||||
out.signals.clear();
|
||||
|
||||
size_t off = 0;
|
||||
if (off >= len) { return false; }
|
||||
|
||||
uint8_t version = buf[off++];
|
||||
if (version != 1u) { return false; }
|
||||
|
||||
if (off >= len) { return false; }
|
||||
uint8_t idLen = buf[off++];
|
||||
|
||||
if (off + idLen + 4 > len) { return false; }
|
||||
out.sourceId.assign(reinterpret_cast<const char*>(buf + off), idLen);
|
||||
off += idLen;
|
||||
|
||||
uint32_t numSignals = readU32(buf, off, len);
|
||||
|
||||
for (uint32_t s = 0; s < numSignals; s++) {
|
||||
uint16_t keyLen = readU16(buf, off, len);
|
||||
if (off + keyLen + 4 > len) { return false; }
|
||||
|
||||
FrameSignal sig;
|
||||
sig.name.assign(reinterpret_cast<const char*>(buf + off), keyLen);
|
||||
off += keyLen;
|
||||
|
||||
uint32_t pairCount = readU32(buf, off, len);
|
||||
if (off + static_cast<size_t>(pairCount) * 16u > len) { return false; }
|
||||
|
||||
sig.t.resize(pairCount);
|
||||
sig.v.resize(pairCount);
|
||||
for (uint32_t i = 0; i < pairCount; i++) {
|
||||
sig.t[i] = readF64(buf, off, len);
|
||||
}
|
||||
for (uint32_t i = 0; i < pairCount; i++) {
|
||||
sig.v[i] = readF64(buf, off, len);
|
||||
}
|
||||
out.signals.push_back(std::move(sig));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool ParseCaptureFrame(const uint8_t* buf, size_t len, CaptureFrame& out) {
|
||||
out.signals.clear();
|
||||
|
||||
size_t off = 0;
|
||||
if (off >= len) { return false; }
|
||||
|
||||
uint8_t version = buf[off++];
|
||||
if (version != 2u) { return false; }
|
||||
|
||||
if (off + 8u * 3u + 4u > len) { return false; }
|
||||
out.trigTime = readF64(buf, off, len);
|
||||
out.preSec = readF64(buf, off, len);
|
||||
out.postSec = readF64(buf, off, len);
|
||||
|
||||
uint32_t numSignals = readU32(buf, off, len);
|
||||
|
||||
for (uint32_t s = 0; s < numSignals; s++) {
|
||||
uint16_t keyLen = readU16(buf, off, len);
|
||||
if (off + keyLen + 4 > len) { return false; }
|
||||
|
||||
CaptureSignal sig;
|
||||
sig.key.assign(reinterpret_cast<const char*>(buf + off), keyLen);
|
||||
off += keyLen;
|
||||
|
||||
uint32_t pairCount = readU32(buf, off, len);
|
||||
if (off + static_cast<size_t>(pairCount) * 16u > len) { return false; }
|
||||
|
||||
sig.t.resize(pairCount);
|
||||
sig.v.resize(pairCount);
|
||||
for (uint32_t i = 0; i < pairCount; i++) {
|
||||
sig.t[i] = readF64(buf, off, len);
|
||||
}
|
||||
for (uint32_t i = 0; i < pairCount; i++) {
|
||||
sig.v[i] = readF64(buf, off, len);
|
||||
}
|
||||
out.signals.push_back(std::move(sig));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/* JSON helpers */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
static bool jsonGetStr(const char* json, const char* key, char* out, size_t outSz) {
|
||||
char pat[128];
|
||||
snprintf(pat, sizeof(pat), "\"%s\":\"", key);
|
||||
const char* p = strstr(json, pat);
|
||||
if (!p) { return false; }
|
||||
p += strlen(pat);
|
||||
size_t i = 0;
|
||||
while (*p && *p != '"' && i < outSz - 1) { out[i++] = *p++; }
|
||||
out[i] = '\0';
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool jsonGetDouble(const char* json, const char* key, double& out) {
|
||||
char pat[128];
|
||||
snprintf(pat, sizeof(pat), "\"%s\":", key);
|
||||
const char* p = strstr(json, pat);
|
||||
if (!p) { return false; }
|
||||
p += strlen(pat);
|
||||
while (*p == ' ') { p++; }
|
||||
if (!*p) { return false; }
|
||||
out = strtod(p, nullptr);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool jsonGetUint64(const char* json, const char* key, uint64_t& out) {
|
||||
double v = 0.0;
|
||||
if (!jsonGetDouble(json, key, v)) { return false; }
|
||||
out = static_cast<uint64_t>(v);
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool jsonGetInt(const char* json, const char* key, int& out) {
|
||||
double v = 0.0;
|
||||
if (!jsonGetDouble(json, key, v)) { return false; }
|
||||
out = static_cast<int>(v);
|
||||
return true;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/* JSON command builders */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
std::string BuildPing() { return "{\"type\":\"ping\"}"; }
|
||||
std::string BuildGetSources() { return "{\"type\":\"getSources\"}"; }
|
||||
std::string BuildGetStats() { return "{\"type\":\"getStats\"}"; }
|
||||
|
||||
std::string BuildGetConfig(const std::string& sourceId) {
|
||||
char buf[256];
|
||||
snprintf(buf, sizeof(buf), "{\"type\":\"getConfig\",\"sourceId\":\"%s\"}",
|
||||
sourceId.c_str());
|
||||
return buf;
|
||||
}
|
||||
|
||||
std::string BuildAddSource(const std::string& label, const std::string& addr,
|
||||
const std::string& multicastGroup, uint16_t dataPort) {
|
||||
char buf[512];
|
||||
int n = snprintf(buf, sizeof(buf),
|
||||
"{\"type\":\"addSource\",\"label\":\"%s\",\"addr\":\"%s\"",
|
||||
label.c_str(), addr.c_str());
|
||||
if (!multicastGroup.empty() && n > 0 && n < (int)sizeof(buf)) {
|
||||
n += snprintf(buf + n, sizeof(buf) - n,
|
||||
",\"multicastGroup\":\"%s\"", multicastGroup.c_str());
|
||||
}
|
||||
if (dataPort != 0 && n > 0 && n < (int)sizeof(buf)) {
|
||||
n += snprintf(buf + n, sizeof(buf) - n,
|
||||
",\"dataPort\":%u", static_cast<unsigned>(dataPort));
|
||||
}
|
||||
if (n > 0 && n < (int)sizeof(buf)) {
|
||||
snprintf(buf + n, sizeof(buf) - n, "}");
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
std::string BuildRemoveSource(const std::string& id) {
|
||||
char buf[256];
|
||||
snprintf(buf, sizeof(buf), "{\"type\":\"removeSource\",\"id\":\"%s\"}",
|
||||
id.c_str());
|
||||
return buf;
|
||||
}
|
||||
|
||||
std::string BuildArm() { return "{\"type\":\"arm\"}"; }
|
||||
std::string BuildDisarm() { return "{\"type\":\"disarm\"}"; }
|
||||
std::string BuildRearm() { return "{\"type\":\"rearm\"}"; }
|
||||
|
||||
std::string BuildTrigStop(bool stopped) {
|
||||
char buf[64];
|
||||
snprintf(buf, sizeof(buf), "{\"type\":\"trigStop\",\"stopped\":%s}",
|
||||
stopped ? "true" : "false");
|
||||
return buf;
|
||||
}
|
||||
|
||||
std::string BuildSaveSources() { return "{\"type\":\"saveSources\"}"; }
|
||||
|
||||
std::string BuildSetTrigger(const std::string& signalKey, const std::string& edge,
|
||||
double threshold, double windowSec,
|
||||
double prePercent, const std::string& mode) {
|
||||
char buf[512];
|
||||
snprintf(buf, sizeof(buf),
|
||||
"{\"type\":\"setTrigger\","
|
||||
"\"signal\":\"%s\",\"edge\":\"%s\","
|
||||
"\"threshold\":%.9g,\"windowSec\":%.9g,"
|
||||
"\"prePercent\":%.9g,\"mode\":\"%s\"}",
|
||||
signalKey.c_str(), edge.c_str(),
|
||||
threshold, windowSec, prePercent, mode.c_str());
|
||||
return buf;
|
||||
}
|
||||
|
||||
std::string BuildZoom(uint32_t reqId, double t0, double t1, int n,
|
||||
const std::string& signalsCsv) {
|
||||
char head[256];
|
||||
snprintf(head, sizeof(head),
|
||||
"{\"type\":\"zoom\",\"reqId\":%u,"
|
||||
"\"t0\":%.17g,\"t1\":%.17g,\"n\":%d,\"signals\":\"",
|
||||
static_cast<unsigned>(reqId), t0, t1, n);
|
||||
std::string out(head);
|
||||
out += signalsCsv;
|
||||
out += "\"}";
|
||||
return out;
|
||||
}
|
||||
|
||||
std::string BuildSetMaxPoints(uint32_t n) {
|
||||
char buf[128];
|
||||
snprintf(buf, sizeof(buf), "{\"type\":\"setMaxPoints\",\"maxPoints\":%u}",
|
||||
static_cast<unsigned>(n));
|
||||
return buf;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/* JSON event parsers */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
std::string ParseType(const std::string& json) {
|
||||
char val[64] = "";
|
||||
jsonGetStr(json.c_str(), "type", val, sizeof(val));
|
||||
return val;
|
||||
}
|
||||
|
||||
/* ---- Sources ------------------------------------------------------------ */
|
||||
|
||||
bool ParseSources(const std::string& json, std::vector<SourceInfo>& out) {
|
||||
out.clear();
|
||||
/* Iterate over source objects in the array */
|
||||
const char* p = json.c_str();
|
||||
while ((p = strstr(p, "\"id\":\"")) != nullptr) {
|
||||
SourceInfo info;
|
||||
char tmp[256] = "";
|
||||
|
||||
jsonGetStr(p - 1, "id", tmp, sizeof(tmp)); info.id = tmp;
|
||||
jsonGetStr(p - 1, "label", tmp, sizeof(tmp)); info.label = tmp;
|
||||
jsonGetStr(p - 1, "addr", tmp, sizeof(tmp)); info.addr = tmp;
|
||||
jsonGetStr(p - 1, "state", tmp, sizeof(tmp)); info.state = tmp;
|
||||
double portF = 0.0;
|
||||
jsonGetDouble(p - 1, "port", portF);
|
||||
info.port = static_cast<uint32_t>(portF);
|
||||
|
||||
out.push_back(info);
|
||||
p++; /* advance past current match */
|
||||
}
|
||||
return !out.empty();
|
||||
}
|
||||
|
||||
/* ---- Config ------------------------------------------------------------ */
|
||||
|
||||
bool ParseConfig(const std::string& json, std::string& sourceId,
|
||||
int& publishMode, std::vector<SignalMeta>& signals) {
|
||||
signals.clear();
|
||||
char tmp[256] = "";
|
||||
jsonGetStr(json.c_str(), "sourceId", tmp, sizeof(tmp));
|
||||
sourceId = tmp;
|
||||
|
||||
double pm = 0.0;
|
||||
jsonGetDouble(json.c_str(), "publishMode", pm);
|
||||
publishMode = static_cast<int>(pm);
|
||||
|
||||
/* Iterate over signal objects in the "signals" array */
|
||||
const char* p = json.c_str();
|
||||
while ((p = strstr(p, "\"name\":\"")) != nullptr) {
|
||||
SignalMeta m;
|
||||
|
||||
jsonGetStr(p - 1, "name", tmp, sizeof(tmp)); m.name = tmp;
|
||||
jsonGetStr(p - 1, "unit", tmp, sizeof(tmp)); m.unit = tmp;
|
||||
|
||||
int iv = 0;
|
||||
jsonGetInt(p - 1, "typeCode", iv); m.typeCode = iv;
|
||||
jsonGetInt(p - 1, "quantType",iv); m.quantType = iv;
|
||||
jsonGetInt(p - 1, "timeMode", iv); m.timeMode = iv;
|
||||
iv = -1;
|
||||
jsonGetInt(p - 1, "timeSignalIdx", iv); m.timeSignalIdx = iv;
|
||||
|
||||
double dv = 0.0;
|
||||
jsonGetDouble(p - 1, "samplingRate", dv); m.samplingRate = static_cast<float>(dv);
|
||||
jsonGetDouble(p - 1, "rangeMin", dv); m.rangeMin = dv;
|
||||
jsonGetDouble(p - 1, "rangeMax", dv); m.rangeMax = dv;
|
||||
|
||||
double nr = 1.0, nc = 1.0;
|
||||
jsonGetDouble(p - 1, "numRows", nr);
|
||||
jsonGetDouble(p - 1, "numCols", nc);
|
||||
if (nr < 1.0) { nr = 1.0; }
|
||||
if (nc < 1.0) { nc = 1.0; }
|
||||
m.numRows = static_cast<uint32_t>(nr);
|
||||
m.numCols = static_cast<uint32_t>(nc);
|
||||
m.numElements = m.numRows * m.numCols;
|
||||
|
||||
signals.push_back(m);
|
||||
p++;
|
||||
}
|
||||
return !sourceId.empty();
|
||||
}
|
||||
|
||||
/* ---- Stats ------------------------------------------------------------- */
|
||||
|
||||
bool ParseStats(const std::string& json,
|
||||
std::vector<std::pair<std::string, SourceStats>>& out) {
|
||||
out.clear();
|
||||
/* Stats JSON: {"type":"stats","sources":{"id":{ ... },...}} */
|
||||
/* Parse by finding each nested object key */
|
||||
const char* sourcesBlock = strstr(json.c_str(), "\"sources\":{");
|
||||
if (!sourcesBlock) { return false; }
|
||||
sourcesBlock += strlen("\"sources\":{");
|
||||
|
||||
const char* p = sourcesBlock;
|
||||
while (*p && *p != '}') {
|
||||
/* Skip to next key */
|
||||
while (*p && *p != '"') { p++; }
|
||||
if (!*p || *p != '"') { break; }
|
||||
p++; /* skip opening quote */
|
||||
|
||||
/* Read source id */
|
||||
char id[128] = "";
|
||||
size_t i = 0;
|
||||
while (*p && *p != '"' && i < sizeof(id)-1) { id[i++] = *p++; }
|
||||
id[i] = '\0';
|
||||
if (*p == '"') { p++; } /* skip closing quote */
|
||||
if (*p == ':') { p++; } /* skip colon */
|
||||
if (*p != '{') { break; }
|
||||
|
||||
/* Find end of this source object */
|
||||
const char* objStart = p;
|
||||
int depth = 0;
|
||||
while (*p) {
|
||||
if (*p == '{') { depth++; }
|
||||
else if (*p == '}') {
|
||||
depth--;
|
||||
if (depth == 0) { p++; break; }
|
||||
}
|
||||
p++;
|
||||
}
|
||||
|
||||
/* Parse fields within [objStart, p) */
|
||||
std::string objStr(objStart, p - objStart);
|
||||
const char* o = objStr.c_str();
|
||||
|
||||
SourceStats st;
|
||||
char tmp[64] = "";
|
||||
jsonGetStr(o, "state", tmp, sizeof(tmp)); st.state = tmp;
|
||||
|
||||
uint64_t u64 = 0;
|
||||
jsonGetUint64(o, "totalReceived", u64); st.totalReceived = u64;
|
||||
jsonGetUint64(o, "totalLost", u64); st.totalLost = u64;
|
||||
|
||||
double dv = 0.0;
|
||||
jsonGetDouble(o, "rateHz", dv); st.rateHz = dv;
|
||||
jsonGetDouble(o, "rateStdHz", dv); st.rateStdHz = dv;
|
||||
jsonGetDouble(o, "fragsPerCycle", dv); st.fragsPerCycle = dv;
|
||||
jsonGetDouble(o, "bytesPerCycle", dv); st.bytesPerCycle = dv;
|
||||
jsonGetDouble(o, "cycleAvgMs", dv); st.cycleAvgMs = dv;
|
||||
jsonGetDouble(o, "cycleStdMs", dv); st.cycleStdMs = dv;
|
||||
jsonGetDouble(o, "cycleMinMs", dv); st.cycleMinMs = dv;
|
||||
jsonGetDouble(o, "cycleMaxMs", dv); st.cycleMaxMs = dv;
|
||||
jsonGetDouble(o, "cycleHistMin", dv); st.cycleHistMin = dv;
|
||||
jsonGetDouble(o, "cycleHistMax", dv); st.cycleHistMax = dv;
|
||||
|
||||
/* cycleHist: array of 20 numbers */
|
||||
const char* hArr = strstr(o, "\"cycleHist\":[");
|
||||
if (hArr) {
|
||||
hArr += strlen("\"cycleHist\":[");
|
||||
for (int hb = 0; hb < 20 && *hArr && *hArr != ']'; hb++) {
|
||||
while (*hArr == ',' || *hArr == ' ') { hArr++; }
|
||||
if (*hArr == ']') { break; }
|
||||
char* end = nullptr;
|
||||
st.cycleHist[hb] = strtod(hArr, &end);
|
||||
if (end == hArr) { break; }
|
||||
hArr = end;
|
||||
}
|
||||
}
|
||||
|
||||
out.emplace_back(std::string(id), st);
|
||||
|
||||
/* Skip comma between source entries */
|
||||
while (*p == ',' || *p == ' ') { p++; }
|
||||
}
|
||||
return !out.empty();
|
||||
}
|
||||
|
||||
/* ---- Trigger state ---------------------------------------------------- */
|
||||
|
||||
bool ParseTriggerState(const std::string& json, TriggerStateMsg& out) {
|
||||
char tmp[64] = "";
|
||||
if (!jsonGetStr(json.c_str(), "state", tmp, sizeof(tmp))) { return false; }
|
||||
out.state = tmp;
|
||||
|
||||
if (jsonGetStr(json.c_str(), "mode", tmp, sizeof(tmp))) { out.mode = tmp; }
|
||||
|
||||
out.stopped = (strstr(json.c_str(), "\"stopped\":true") != nullptr);
|
||||
|
||||
double tt = 0.0;
|
||||
out.hasTrigTime = jsonGetDouble(json.c_str(), "trigTime", tt);
|
||||
out.trigTime = tt;
|
||||
return true;
|
||||
}
|
||||
|
||||
/* ---- Zoom response ---------------------------------------------------- */
|
||||
|
||||
bool ParseZoom(const std::string& json, ZoomResponse& out) {
|
||||
out.signals.clear();
|
||||
out.reqId = 0;
|
||||
double reqIdF = 0.0;
|
||||
if (jsonGetDouble(json.c_str(), "reqId", reqIdF)) {
|
||||
out.reqId = static_cast<uint32_t>(reqIdF);
|
||||
}
|
||||
|
||||
/* Parse signals object: {"src:sig":{"t":[...],"v":[...]},...} */
|
||||
const char* sigsBlock = strstr(json.c_str(), "\"signals\":{");
|
||||
if (!sigsBlock) { return false; }
|
||||
sigsBlock += strlen("\"signals\":{");
|
||||
|
||||
const char* p = sigsBlock;
|
||||
while (*p && *p != '}') {
|
||||
while (*p && *p != '"') { p++; }
|
||||
if (!*p) { break; }
|
||||
p++;
|
||||
char sigName[128] = "";
|
||||
size_t i = 0;
|
||||
while (*p && *p != '"' && i < sizeof(sigName)-1) { sigName[i++] = *p++; }
|
||||
sigName[i] = '\0';
|
||||
if (*p == '"') { p++; }
|
||||
if (*p == ':') { p++; }
|
||||
|
||||
ZoomSignal sig;
|
||||
sig.name = sigName;
|
||||
|
||||
/* Parse t array */
|
||||
const char* tArr = strstr(p, "\"t\":[");
|
||||
if (tArr) {
|
||||
tArr += 5;
|
||||
while (*tArr && *tArr != ']') {
|
||||
while (*tArr == ',' || *tArr == ' ') { tArr++; }
|
||||
if (*tArr == ']') { break; }
|
||||
char* end = nullptr;
|
||||
double val = strtod(tArr, &end);
|
||||
if (end == tArr) { break; }
|
||||
sig.t.push_back(val);
|
||||
tArr = end;
|
||||
}
|
||||
}
|
||||
|
||||
/* Parse v array */
|
||||
const char* vArr = strstr(p, "\"v\":[");
|
||||
if (vArr) {
|
||||
vArr += 5;
|
||||
while (*vArr && *vArr != ']') {
|
||||
while (*vArr == ',' || *vArr == ' ') { vArr++; }
|
||||
if (*vArr == ']') { break; }
|
||||
char* end = nullptr;
|
||||
double val = strtod(vArr, &end);
|
||||
if (end == vArr) { break; }
|
||||
sig.v.push_back(val);
|
||||
vArr = end;
|
||||
}
|
||||
}
|
||||
|
||||
out.signals.push_back(std::move(sig));
|
||||
|
||||
/* Advance past this signal's object */
|
||||
int depth = 0;
|
||||
while (*p) {
|
||||
if (*p == '{') { depth++; }
|
||||
else if (*p == '}') {
|
||||
depth--;
|
||||
if (depth == 0) { p++; break; }
|
||||
}
|
||||
p++;
|
||||
}
|
||||
while (*p == ',' || *p == ' ') { p++; }
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/* ---- maxPointsUpdated ------------------------------------------------- */
|
||||
|
||||
bool ParseMaxPointsUpdated(const std::string& json, uint32_t& maxPoints) {
|
||||
double v = 0.0;
|
||||
if (!jsonGetDouble(json.c_str(), "maxPoints", v)) { return false; }
|
||||
maxPoints = static_cast<uint32_t>(v);
|
||||
return true;
|
||||
}
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,193 @@
|
||||
/**
|
||||
* @file Protocol.h
|
||||
* @brief StreamHub wire protocol: binary frame parser + JSON builder/parser.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "SignalBuffer.h"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <functional>
|
||||
#include <cstdint>
|
||||
|
||||
namespace StreamHubClient {
|
||||
|
||||
/* ── Signal metadata (mirrors UDPSSignalDescriptor fields used by UI) ─────── */
|
||||
|
||||
struct SignalMeta {
|
||||
std::string name;
|
||||
std::string unit;
|
||||
int typeCode = 0;
|
||||
int quantType = 0;
|
||||
int timeMode = 0;
|
||||
int timeSignalIdx = -1;
|
||||
float samplingRate = 0.f;
|
||||
double rangeMin = 0.0;
|
||||
double rangeMax = 0.0;
|
||||
uint32_t numRows = 1u;
|
||||
uint32_t numCols = 1u;
|
||||
uint32_t numElements = 1u; /* numRows × numCols */
|
||||
};
|
||||
|
||||
/* ── Per-source statistics (hub "stats" broadcast, Go field names) ────────── */
|
||||
|
||||
struct SourceStats {
|
||||
std::string state = "disconnected";
|
||||
uint64_t totalReceived = 0;
|
||||
uint64_t totalLost = 0;
|
||||
double rateHz = 0.0;
|
||||
double rateStdHz = 0.0;
|
||||
double fragsPerCycle = 0.0;
|
||||
double bytesPerCycle = 0.0;
|
||||
double cycleAvgMs = 0.0;
|
||||
double cycleStdMs = 0.0;
|
||||
double cycleMinMs = 0.0;
|
||||
double cycleMaxMs = 0.0;
|
||||
double cycleHistMin = 0.0;
|
||||
double cycleHistMax = 0.0;
|
||||
double cycleHist[20] = {};
|
||||
};
|
||||
|
||||
/* ── Source descriptor ────────────────────────────────────────────────────── */
|
||||
|
||||
struct SourceInfo {
|
||||
std::string id;
|
||||
std::string label;
|
||||
std::string addr;
|
||||
std::string state;
|
||||
uint32_t port = 0;
|
||||
};
|
||||
|
||||
/* ── Decoded push-frame signal data ──────────────────────────────────────── */
|
||||
|
||||
struct FrameSignal {
|
||||
std::string name;
|
||||
std::vector<double> t;
|
||||
std::vector<double> v;
|
||||
};
|
||||
|
||||
struct DataFrame {
|
||||
std::string sourceId;
|
||||
std::vector<FrameSignal> signals;
|
||||
};
|
||||
|
||||
/* ── Zoom response ────────────────────────────────────────────────────────── */
|
||||
|
||||
struct ZoomSignal {
|
||||
std::string name; /* full key "src:sig" */
|
||||
std::vector<double> t;
|
||||
std::vector<double> v;
|
||||
};
|
||||
|
||||
struct ZoomResponse {
|
||||
uint32_t reqId = 0;
|
||||
std::vector<ZoomSignal> signals;
|
||||
};
|
||||
|
||||
/* ── Trigger capture (binary frame version=2) ─────────────────────────────── */
|
||||
|
||||
struct CaptureSignal {
|
||||
std::string key; /* full key "src:sig" */
|
||||
std::vector<double> t;
|
||||
std::vector<double> v;
|
||||
};
|
||||
|
||||
struct CaptureFrame {
|
||||
double trigTime = 0.0;
|
||||
double preSec = 0.0;
|
||||
double postSec = 0.0;
|
||||
std::vector<CaptureSignal> signals;
|
||||
};
|
||||
|
||||
/* ── Trigger state event ──────────────────────────────────────────────────── */
|
||||
|
||||
struct TriggerStateMsg {
|
||||
std::string state; /* idle|armed|collecting|triggered */
|
||||
std::string mode = "normal"; /* normal|single */
|
||||
bool stopped = false;
|
||||
bool hasTrigTime = false;
|
||||
double trigTime = 0.0;
|
||||
};
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/* Binary frame parser */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @brief Parse one StreamHub binary push frame.
|
||||
*
|
||||
* Format:
|
||||
* [1] version | [1] idLen | [idLen] sourceId | [4] numSignals
|
||||
* per signal: [2] keyLen | [key] | [4] pairCount | [N×8] t | [N×8] v
|
||||
*
|
||||
* @return false if the frame is malformed.
|
||||
*/
|
||||
bool ParseBinaryFrame(const uint8_t* buf, size_t len, DataFrame& out);
|
||||
|
||||
/**
|
||||
* @brief Parse a version=2 trigger-capture binary frame.
|
||||
*
|
||||
* Format:
|
||||
* [1] version=2 | [8] trigTime | [8] preSec | [8] postSec | [4] nSig
|
||||
* per signal: [2] keyLen | [key] | [4] N | [N×8] t | [N×8] v
|
||||
*
|
||||
* @return false if the frame is malformed or version != 2.
|
||||
*/
|
||||
bool ParseCaptureFrame(const uint8_t* buf, size_t len, CaptureFrame& out);
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/* JSON command builders */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
std::string BuildPing();
|
||||
std::string BuildGetSources();
|
||||
std::string BuildGetConfig(const std::string& sourceId);
|
||||
std::string BuildGetStats();
|
||||
std::string BuildAddSource(const std::string& label, const std::string& addr,
|
||||
const std::string& multicastGroup = std::string(),
|
||||
uint16_t dataPort = 0);
|
||||
std::string BuildRemoveSource(const std::string& id);
|
||||
std::string BuildArm();
|
||||
std::string BuildDisarm();
|
||||
std::string BuildRearm();
|
||||
std::string BuildTrigStop(bool stopped);
|
||||
std::string BuildSaveSources();
|
||||
/** edge: "rising" | "falling" | "both"; mode: "normal" | "single". */
|
||||
std::string BuildSetTrigger(const std::string& signalKey, const std::string& edge,
|
||||
double threshold, double windowSec,
|
||||
double prePercent, const std::string& mode);
|
||||
/** signalsCsv: comma-separated full keys "src:sig,src:sig2"; n<=0 → raw. */
|
||||
std::string BuildZoom(uint32_t reqId, double t0, double t1, int n,
|
||||
const std::string& signalsCsv);
|
||||
std::string BuildSetMaxPoints(uint32_t n);
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/* JSON event parsers */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
/** @brief Extract the "type" field from a JSON text frame. */
|
||||
std::string ParseType(const std::string& json);
|
||||
|
||||
/** @brief Parse a "sources" event. */
|
||||
bool ParseSources(const std::string& json, std::vector<SourceInfo>& out);
|
||||
|
||||
/** @brief Parse a "config" event (one source). */
|
||||
bool ParseConfig(const std::string& json, std::string& sourceId,
|
||||
int& publishMode, std::vector<SignalMeta>& signals);
|
||||
|
||||
/** @brief Parse a "stats" event. */
|
||||
bool ParseStats(const std::string& json,
|
||||
std::vector<std::pair<std::string, SourceStats>>& out);
|
||||
|
||||
/** @brief Parse a "triggerState" event. */
|
||||
bool ParseTriggerState(const std::string& json, TriggerStateMsg& out);
|
||||
|
||||
/** @brief Parse a "zoom" response. */
|
||||
bool ParseZoom(const std::string& json, ZoomResponse& out);
|
||||
|
||||
/** @brief Parse a "maxPointsUpdated" event. */
|
||||
bool ParseMaxPointsUpdated(const std::string& json, uint32_t& maxPoints);
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,169 @@
|
||||
/**
|
||||
* @file SignalBuffer.h
|
||||
* @brief Per-signal ring buffer with LTTB decimation.
|
||||
*
|
||||
* Header-only. Uses STL (this is not a MARTe2 component).
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include <cstddef>
|
||||
#include <cmath>
|
||||
#include <algorithm>
|
||||
|
||||
namespace StreamHubClient {
|
||||
|
||||
/**
|
||||
* @brief Thread-safe circular buffer of (time, value) float64 pairs.
|
||||
*/
|
||||
struct SignalBuffer {
|
||||
explicit SignalBuffer(size_t cap = 20000)
|
||||
: capacity(cap), head(0), count(0) {
|
||||
t.resize(cap);
|
||||
v.resize(cap);
|
||||
}
|
||||
|
||||
void setCapacity(size_t cap) {
|
||||
t.assign(cap, 0.0);
|
||||
v.assign(cap, 0.0);
|
||||
capacity = cap;
|
||||
head = 0;
|
||||
count = 0;
|
||||
}
|
||||
|
||||
/** Append a (time, value) pair; overwrites oldest when full. */
|
||||
void push(double time, double val) {
|
||||
t[head] = time;
|
||||
v[head] = val;
|
||||
head = (head + 1) % capacity;
|
||||
if (count < capacity) { count++; }
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Copy the last `n` points into tOut/vOut (oldest → newest order).
|
||||
* @return Number of points written.
|
||||
*/
|
||||
size_t readLast(size_t n, std::vector<double>& tOut, std::vector<double>& vOut) const {
|
||||
size_t actual = std::min(n, count);
|
||||
if (actual == 0) { return 0; }
|
||||
tOut.resize(actual);
|
||||
vOut.resize(actual);
|
||||
|
||||
size_t startIdx = (head + capacity - actual) % capacity;
|
||||
for (size_t i = 0; i < actual; i++) {
|
||||
size_t idx = (startIdx + i) % capacity;
|
||||
tOut[i] = t[idx];
|
||||
vOut[i] = v[idx];
|
||||
}
|
||||
return actual;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Read all points in [t0, t1] into tOut/vOut.
|
||||
* @return Number of points written.
|
||||
*/
|
||||
size_t readRange(double t0, double t1,
|
||||
std::vector<double>& tOut, std::vector<double>& vOut) const {
|
||||
tOut.clear();
|
||||
vOut.clear();
|
||||
if (count == 0) { return 0; }
|
||||
|
||||
size_t startIdx = (head + capacity - count) % capacity;
|
||||
for (size_t i = 0; i < count; i++) {
|
||||
size_t idx = (startIdx + i) % capacity;
|
||||
if (t[idx] >= t0 && t[idx] <= t1) {
|
||||
tOut.push_back(t[idx]);
|
||||
vOut.push_back(v[idx]);
|
||||
}
|
||||
}
|
||||
return tOut.size();
|
||||
}
|
||||
|
||||
size_t size() const { return count; }
|
||||
|
||||
void clear() { head = 0; count = 0; }
|
||||
|
||||
size_t capacity;
|
||||
std::vector<double> t;
|
||||
std::vector<double> v;
|
||||
size_t head;
|
||||
size_t count;
|
||||
};
|
||||
|
||||
/*---------------------------------------------------------------------------*/
|
||||
/* LTTB — Largest Triangle Three Buckets */
|
||||
/*---------------------------------------------------------------------------*/
|
||||
|
||||
/**
|
||||
* @brief Decimate tIn/vIn to at most `threshold` points using LTTB.
|
||||
*
|
||||
* Always preserves first and last points.
|
||||
* @return Number of output points.
|
||||
*/
|
||||
inline size_t LTTBDecimate(
|
||||
const std::vector<double>& tIn, const std::vector<double>& vIn,
|
||||
std::vector<double>& tOut, std::vector<double>& vOut,
|
||||
size_t threshold)
|
||||
{
|
||||
const size_t nIn = tIn.size();
|
||||
if (nIn <= threshold || threshold < 2) {
|
||||
tOut = tIn;
|
||||
vOut = vIn;
|
||||
return nIn;
|
||||
}
|
||||
|
||||
tOut.resize(threshold);
|
||||
vOut.resize(threshold);
|
||||
|
||||
tOut[0] = tIn[0];
|
||||
vOut[0] = vIn[0];
|
||||
tOut[threshold - 1] = tIn[nIn - 1];
|
||||
vOut[threshold - 1] = vIn[nIn - 1];
|
||||
|
||||
/* Bucket size (middle threshold-2 buckets cover points 1..nIn-2) */
|
||||
double bucketSize = static_cast<double>(nIn - 2) / static_cast<double>(threshold - 2);
|
||||
|
||||
size_t a = 0; /* index of last selected point */
|
||||
for (size_t i = 0; i < threshold - 2; i++) {
|
||||
/* Calculate average of next bucket */
|
||||
size_t avgRangeStart = static_cast<size_t>((i + 1) * bucketSize) + 1;
|
||||
size_t avgRangeEnd = static_cast<size_t>((i + 2) * bucketSize) + 1;
|
||||
if (avgRangeEnd >= nIn) { avgRangeEnd = nIn - 1; }
|
||||
|
||||
double avgT = 0.0, avgV = 0.0;
|
||||
size_t avgLen = avgRangeEnd - avgRangeStart;
|
||||
for (size_t j = avgRangeStart; j < avgRangeEnd; j++) {
|
||||
avgT += tIn[j];
|
||||
avgV += vIn[j];
|
||||
}
|
||||
if (avgLen > 0) {
|
||||
avgT /= static_cast<double>(avgLen);
|
||||
avgV /= static_cast<double>(avgLen);
|
||||
}
|
||||
|
||||
/* Select point in current bucket with max triangle area */
|
||||
size_t rangeStart = static_cast<size_t>(i * bucketSize) + 1;
|
||||
size_t rangeEnd = static_cast<size_t>((i + 1) * bucketSize) + 1;
|
||||
if (rangeEnd >= nIn) { rangeEnd = nIn - 1; }
|
||||
|
||||
double maxArea = -1.0;
|
||||
size_t maxIdx = rangeStart;
|
||||
for (size_t j = rangeStart; j < rangeEnd; j++) {
|
||||
double area = std::fabs(
|
||||
(tIn[a] - avgT) * (vIn[j] - vIn[a]) -
|
||||
(tIn[a] - tIn[j]) * (avgV - vIn[a])
|
||||
) * 0.5;
|
||||
if (area > maxArea) {
|
||||
maxArea = area;
|
||||
maxIdx = j;
|
||||
}
|
||||
}
|
||||
tOut[i + 1] = tIn[maxIdx];
|
||||
vOut[i + 1] = vIn[maxIdx];
|
||||
a = maxIdx;
|
||||
}
|
||||
return threshold;
|
||||
}
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,105 @@
|
||||
/**
|
||||
* @file SourcePanel.cpp
|
||||
* @brief Source browser sidebar implementation.
|
||||
*/
|
||||
|
||||
#include "SourcePanel.h"
|
||||
#include "App.h"
|
||||
#include "Protocol.h"
|
||||
|
||||
#include "imgui.h"
|
||||
#include "implot.h"
|
||||
#include "Icons.h"
|
||||
|
||||
#include <cstdio>
|
||||
#include <algorithm>
|
||||
|
||||
namespace StreamHubClient {
|
||||
|
||||
void RenderSourcePanel(App& app) {
|
||||
auto& sources = app.sources();
|
||||
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4.f, 2.f));
|
||||
|
||||
if (ImGui::CollapsingHeader("Sources", ImGuiTreeNodeFlags_DefaultOpen)) {
|
||||
for (int srcIdx = 0; srcIdx < static_cast<int>(sources.size()); srcIdx++) {
|
||||
Source& src = sources[srcIdx];
|
||||
|
||||
/* State color indicator */
|
||||
ImVec4 stateColor = (src.state == "connected")
|
||||
? ImVec4(0.1f, 0.9f, 0.3f, 1.f)
|
||||
: ImVec4(0.8f, 0.3f, 0.3f, 1.f);
|
||||
|
||||
ImGui::PushID(srcIdx);
|
||||
ImGui::TextColored(stateColor, ICON_FA_CIRCLE);
|
||||
ImGui::SameLine();
|
||||
|
||||
std::string treeLabel = src.label.empty() ? src.id : src.label;
|
||||
bool nodeOpen = ImGui::TreeNodeEx(treeLabel.c_str(),
|
||||
ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_SpanAvailWidth);
|
||||
|
||||
/* Per-source context menu: remove */
|
||||
if (ImGui::BeginPopupContextItem("##srccmenu")) {
|
||||
if (ImGui::MenuItem(ICON_FA_TRASH_CAN " Remove source")) {
|
||||
app.ws().sendText(BuildRemoveSource(src.id));
|
||||
}
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
|
||||
if (nodeOpen) {
|
||||
for (int sigIdx = 0; sigIdx < static_cast<int>(src.signals.size()); sigIdx++) {
|
||||
Signal& sig = src.signals[sigIdx];
|
||||
ImGui::PushID(sigIdx);
|
||||
|
||||
/* Color swatch */
|
||||
ImVec4 col = sig.color;
|
||||
if (ImGui::ColorButton("##col", col,
|
||||
ImGuiColorEditFlags_NoTooltip |
|
||||
ImGuiColorEditFlags_NoBorder,
|
||||
ImVec2(12.f, 12.f))) {
|
||||
ImGui::OpenPopup("##sigcolor");
|
||||
}
|
||||
if (ImGui::BeginPopup("##sigcolor")) {
|
||||
ImGui::ColorPicker4("Signal Color", reinterpret_cast<float*>(&sig.color),
|
||||
ImGuiColorEditFlags_NoAlpha);
|
||||
ImGui::EndPopup();
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
/* Unit / type label */
|
||||
char label[128];
|
||||
if (sig.meta.numElements > 1) {
|
||||
snprintf(label, sizeof(label), "%s [%u]",
|
||||
sig.meta.name.c_str(), sig.meta.numElements);
|
||||
} else {
|
||||
snprintf(label, sizeof(label), "%s", sig.meta.name.c_str());
|
||||
}
|
||||
if (!sig.meta.unit.empty()) {
|
||||
strncat(label, " (", sizeof(label) - strlen(label) - 1);
|
||||
strncat(label, sig.meta.unit.c_str(), sizeof(label) - strlen(label) - 1);
|
||||
strncat(label, ")", sizeof(label) - strlen(label) - 1);
|
||||
}
|
||||
|
||||
ImGui::Selectable(label, false, 0, ImVec2(0, 0));
|
||||
|
||||
/* Drag-and-drop source: payload = (srcIdx, sigIdx) */
|
||||
if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_SourceAllowNullID)) {
|
||||
struct DragPayload { int srcIdx; int sigIdx; };
|
||||
DragPayload payload{srcIdx, sigIdx};
|
||||
ImGui::SetDragDropPayload("SIGNAL_REF", &payload, sizeof(payload));
|
||||
ImGui::TextUnformatted(sig.meta.name.c_str());
|
||||
ImGui::EndDragDropSource();
|
||||
}
|
||||
|
||||
ImGui::PopID();
|
||||
}
|
||||
ImGui::TreePop();
|
||||
}
|
||||
ImGui::PopID();
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::PopStyleVar();
|
||||
}
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,17 @@
|
||||
/**
|
||||
* @file SourcePanel.h
|
||||
* @brief Left sidebar: source tree with draggable signal leaves.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace StreamHubClient {
|
||||
class App;
|
||||
|
||||
/**
|
||||
* @brief Render the source browser sidebar.
|
||||
* Must be called inside an ImGui child window.
|
||||
*/
|
||||
void RenderSourcePanel(App& app);
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,93 @@
|
||||
/**
|
||||
* @file StatsPanel.cpp
|
||||
* @brief Statistics table implementation.
|
||||
*/
|
||||
|
||||
#include "StatsPanel.h"
|
||||
#include "App.h"
|
||||
|
||||
#include "imgui.h"
|
||||
#include "implot.h"
|
||||
|
||||
#include <cstdio>
|
||||
|
||||
namespace StreamHubClient {
|
||||
|
||||
void RenderStatsPanel(App& app) {
|
||||
const auto& sources = app.sources();
|
||||
|
||||
ImGuiTableFlags flags =
|
||||
ImGuiTableFlags_Borders |
|
||||
ImGuiTableFlags_RowBg |
|
||||
ImGuiTableFlags_ScrollX |
|
||||
ImGuiTableFlags_SizingFixedFit;
|
||||
|
||||
if (!ImGui::BeginTable("##statstbl", 9, flags)) { return; }
|
||||
|
||||
ImGui::TableSetupScrollFreeze(1, 1);
|
||||
ImGui::TableSetupColumn("Source");
|
||||
ImGui::TableSetupColumn("State");
|
||||
ImGui::TableSetupColumn("Cycles Rx");
|
||||
ImGui::TableSetupColumn("Lost");
|
||||
ImGui::TableSetupColumn("Rate Hz");
|
||||
ImGui::TableSetupColumn("Frags/cyc");
|
||||
ImGui::TableSetupColumn("Bytes/cyc");
|
||||
ImGui::TableSetupColumn("Cycle ms (avg±std)");
|
||||
ImGui::TableSetupColumn("Cycle ms (min/max)");
|
||||
ImGui::TableHeadersRow();
|
||||
|
||||
for (const auto& src : sources) {
|
||||
const SourceStats& st = src.stats;
|
||||
|
||||
ImGui::TableNextRow();
|
||||
ImGui::TableNextColumn(); ImGui::TextUnformatted(src.id.c_str());
|
||||
|
||||
/* State cell with color */
|
||||
ImGui::TableNextColumn();
|
||||
ImVec4 stColor = (st.state == "connected")
|
||||
? ImVec4(0.2f,0.9f,0.3f,1.f)
|
||||
: ImVec4(0.9f,0.3f,0.3f,1.f);
|
||||
ImGui::TextColored(stColor, "%s", st.state.c_str());
|
||||
|
||||
ImGui::TableNextColumn(); ImGui::Text("%llu", (unsigned long long)st.totalReceived);
|
||||
ImGui::TableNextColumn(); ImGui::Text("%llu", (unsigned long long)st.totalLost);
|
||||
ImGui::TableNextColumn(); ImGui::Text("%.2f ± %.2f", st.rateHz, st.rateStdHz);
|
||||
ImGui::TableNextColumn(); ImGui::Text("%.1f", st.fragsPerCycle);
|
||||
ImGui::TableNextColumn(); ImGui::Text("%.0f", st.bytesPerCycle);
|
||||
ImGui::TableNextColumn(); ImGui::Text("%.3f ± %.3f", st.cycleAvgMs, st.cycleStdMs);
|
||||
ImGui::TableNextColumn(); ImGui::Text("%.3f / %.3f", st.cycleMinMs, st.cycleMaxMs);
|
||||
}
|
||||
|
||||
ImGui::EndTable();
|
||||
|
||||
/* ── Cycle-time histograms (20 bins, mirrors web UI) ────────────── */
|
||||
for (const auto& src : sources) {
|
||||
const SourceStats& st = src.stats;
|
||||
if (st.cycleHistMax <= st.cycleHistMin) { continue; }
|
||||
|
||||
char title[160];
|
||||
snprintf(title, sizeof(title), "Cycle time %s##hist_%s",
|
||||
src.id.c_str(), src.id.c_str());
|
||||
if (ImPlot::BeginPlot(title, ImVec2(-1.f, 140.f),
|
||||
ImPlotFlags_NoMouseText | ImPlotFlags_NoMenus)) {
|
||||
const double binW =
|
||||
(st.cycleHistMax - st.cycleHistMin) / 20.0;
|
||||
double xs[20];
|
||||
for (int b = 0; b < 20; b++) {
|
||||
xs[b] = st.cycleHistMin + (b + 0.5) * binW;
|
||||
}
|
||||
ImPlot::SetupAxes("cycle ms", "count",
|
||||
ImPlotAxisFlags_AutoFit,
|
||||
ImPlotAxisFlags_AutoFit);
|
||||
ImPlot::PlotBars("##bars", xs, st.cycleHist, 20, binW * 0.9);
|
||||
ImPlot::EndPlot();
|
||||
}
|
||||
}
|
||||
|
||||
ImGui::Spacing();
|
||||
if (ImGui::Button("Refresh")) {
|
||||
app.ws().sendText(BuildGetStats());
|
||||
}
|
||||
}
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,16 @@
|
||||
/**
|
||||
* @file StatsPanel.h
|
||||
* @brief Per-source statistics table panel.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace StreamHubClient {
|
||||
class App;
|
||||
|
||||
/**
|
||||
* @brief Render the statistics table (call inside an ImGui::Begin/End window).
|
||||
*/
|
||||
void RenderStatsPanel(App& app);
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,184 @@
|
||||
/**
|
||||
* @file TriggerPanel.cpp
|
||||
* @brief Trigger configuration bar — hub-side trigger semantics.
|
||||
*
|
||||
* The trigger runs in the C++ StreamHub: this panel only edits the config
|
||||
* (signal/edge/threshold/window/pre%/mode), sends setTrigger + arm/disarm/
|
||||
* rearm/trigStop commands, and reflects the hub triggerState broadcasts.
|
||||
*/
|
||||
|
||||
#include "TriggerPanel.h"
|
||||
#include "App.h"
|
||||
#include "Protocol.h"
|
||||
|
||||
#include "imgui.h"
|
||||
#include "Icons.h"
|
||||
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <cmath>
|
||||
|
||||
namespace StreamHubClient {
|
||||
|
||||
/* Window presets (mirrors the web UI: 100 µs .. 10 s) */
|
||||
static const double kWinVals[] = {1e-4, 1e-3, 1e-2, 1e-1, 1.0, 10.0};
|
||||
static const char* kWinLabels[] = {"100 µs", "1 ms", "10 ms", "100 ms", "1 s", "10 s"};
|
||||
static const int kNumWins = 6;
|
||||
|
||||
static const char* kEdgeLabels[] = {ICON_FA_ARROW_TREND_UP " Rising",
|
||||
ICON_FA_ARROW_TREND_DOWN " Falling",
|
||||
ICON_FA_ARROWS_UP_DOWN " Both"};
|
||||
static const char* kEdgeWire[] = {"rising", "falling", "both"};
|
||||
|
||||
/* Send the current config to the hub. */
|
||||
static void sendTrigConfig(App& app) {
|
||||
auto& trig = app.trigger();
|
||||
if (trig.signalKey.empty()) { return; }
|
||||
app.ws().sendText(BuildSetTrigger(
|
||||
trig.signalKey, kEdgeWire[trig.edge], trig.threshold,
|
||||
trig.windowSec, trig.prePercent,
|
||||
trig.single ? "single" : "normal"));
|
||||
}
|
||||
|
||||
void RenderTriggerPanel(App& app) {
|
||||
auto& trig = app.trigger();
|
||||
auto& sources = app.sources();
|
||||
|
||||
ImGui::PushStyleColor(ImGuiCol_ChildBg, ImVec4(0.15f, 0.15f, 0.20f, 1.f));
|
||||
ImGui::BeginChild("##trigbar", ImVec2(0.f, 90.f), true);
|
||||
ImGui::PopStyleColor();
|
||||
|
||||
ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(6.f, 4.f));
|
||||
|
||||
bool cfgChanged = false;
|
||||
|
||||
/* ── Signal selector (full keys "src:sig") ─────────────────────────── *
|
||||
* Vector signals are flattened time-series on the hub: one key per
|
||||
* signal; the trigger engine checks every decoded sample of it. */
|
||||
ImGui::SetNextItemWidth(180.f);
|
||||
if (ImGui::BeginCombo("Signal##trig", trig.signalKey.empty()
|
||||
? "<select>" : trig.signalKey.c_str())) {
|
||||
for (const auto& src : sources) {
|
||||
for (const auto& sig : src.signals) {
|
||||
char key[192];
|
||||
snprintf(key, sizeof(key), "%s:%s",
|
||||
src.id.c_str(), sig.meta.name.c_str());
|
||||
bool sel = (trig.signalKey == key);
|
||||
if (ImGui::Selectable(key, sel)) {
|
||||
trig.signalKey = key;
|
||||
cfgChanged = true;
|
||||
}
|
||||
if (sel) { ImGui::SetItemDefaultFocus(); }
|
||||
}
|
||||
}
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
/* ── Edge ─────────────────────────────────────────────────────────── */
|
||||
ImGui::SetNextItemWidth(95.f);
|
||||
if (ImGui::Combo("Edge##trig", &trig.edge, kEdgeLabels, 3)) {
|
||||
cfgChanged = true;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
/* ── Threshold ───────────────────────────────────────────────────── */
|
||||
ImGui::SetNextItemWidth(80.f);
|
||||
if (ImGui::InputDouble("Thr##trig", &trig.threshold, 0.0, 0.0, "%.4g",
|
||||
ImGuiInputTextFlags_EnterReturnsTrue)) {
|
||||
cfgChanged = true;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
/* ── Window ──────────────────────────────────────────────────────── */
|
||||
int winIdx = 3; /* default 100 ms */
|
||||
for (int w = 0; w < kNumWins; w++) {
|
||||
if (std::fabs(trig.windowSec - kWinVals[w]) < kWinVals[w] * 1e-6) {
|
||||
winIdx = w; break;
|
||||
}
|
||||
}
|
||||
ImGui::SetNextItemWidth(85.f);
|
||||
if (ImGui::Combo("Win##trig", &winIdx, kWinLabels, kNumWins)) {
|
||||
trig.windowSec = kWinVals[winIdx];
|
||||
cfgChanged = true;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
/* ── Pre-trigger % ───────────────────────────────────────────────── */
|
||||
ImGui::SetNextItemWidth(100.f);
|
||||
float preP = static_cast<float>(trig.prePercent);
|
||||
if (ImGui::SliderFloat("Pre%##trig", &preP, 0.f, 100.f, "%.0f%%")) {
|
||||
trig.prePercent = static_cast<double>(preP);
|
||||
}
|
||||
if (ImGui::IsItemDeactivatedAfterEdit()) { cfgChanged = true; }
|
||||
ImGui::SameLine();
|
||||
|
||||
/* ── Mode ────────────────────────────────────────────────────────── */
|
||||
ImGui::TextUnformatted("Mode:");
|
||||
ImGui::SameLine();
|
||||
int singleInt = trig.single ? 1 : 0;
|
||||
if (ImGui::RadioButton("Normal", &singleInt, 0)) { cfgChanged = true; }
|
||||
ImGui::SameLine();
|
||||
if (ImGui::RadioButton("Single", &singleInt, 1)) { cfgChanged = true; }
|
||||
trig.single = (singleInt != 0);
|
||||
|
||||
ImGui::NewLine();
|
||||
|
||||
/* ── Status badge ────────────────────────────────────────────────── */
|
||||
ImVec4 badgeColor;
|
||||
const char* badgeText;
|
||||
if (trig.status == "armed") { badgeColor = ImVec4(1.f,0.8f,0.f,1.f); badgeText = "ARMED"; }
|
||||
else if (trig.status == "collecting") { badgeColor = ImVec4(0.4f,0.7f,1.f,1.f); badgeText = "COLLECTING"; }
|
||||
else if (trig.status == "triggered") { badgeColor = ImVec4(0.2f,0.9f,0.3f,1.f); badgeText = "TRIGGERED"; }
|
||||
else { badgeColor = ImVec4(0.6f,0.6f,0.6f,1.f); badgeText = "IDLE"; }
|
||||
ImGui::TextColored(badgeColor, "[%s]", badgeText);
|
||||
if (trig.hasTrigTime &&
|
||||
(trig.status == "collecting" || trig.status == "triggered")) {
|
||||
ImGui::SameLine();
|
||||
ImGui::TextDisabled("t=%.6f", trig.trigTime);
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
/* ── Arm / Disarm / Rearm / Stop ─────────────────────────────────── */
|
||||
bool canArm = !trig.signalKey.empty();
|
||||
if (!canArm) { ImGui::BeginDisabled(); }
|
||||
if (ImGui::Button(ICON_FA_BOLT " Arm")) {
|
||||
sendTrigConfig(app);
|
||||
app.ws().sendText(BuildArm());
|
||||
}
|
||||
if (!canArm) { ImGui::EndDisabled(); }
|
||||
ImGui::SameLine();
|
||||
|
||||
if (ImGui::Button("Disarm")) {
|
||||
app.ws().sendText(BuildDisarm());
|
||||
}
|
||||
ImGui::SameLine();
|
||||
|
||||
if (trig.single && trig.status == "triggered") {
|
||||
if (ImGui::Button("Rearm")) {
|
||||
app.ws().sendText(BuildRearm());
|
||||
}
|
||||
ImGui::SameLine();
|
||||
}
|
||||
|
||||
if (!trig.single) {
|
||||
if (ImGui::Button(trig.stopped ? ICON_FA_PLAY " Run" : ICON_FA_STOP " Stop")) {
|
||||
trig.stopped = !trig.stopped;
|
||||
app.ws().sendText(BuildTrigStop(trig.stopped));
|
||||
}
|
||||
ImGui::SameLine();
|
||||
}
|
||||
|
||||
ImGui::NewLine();
|
||||
|
||||
/* Config edits while armed take effect immediately on the hub */
|
||||
if (cfgChanged && !trig.signalKey.empty()) {
|
||||
sendTrigConfig(app);
|
||||
}
|
||||
|
||||
ImGui::PopStyleVar();
|
||||
ImGui::EndChild();
|
||||
ImGui::Separator();
|
||||
}
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,16 @@
|
||||
/**
|
||||
* @file TriggerPanel.h
|
||||
* @brief Trigger configuration and control bar.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace StreamHubClient {
|
||||
class App;
|
||||
|
||||
/**
|
||||
* @brief Render the trigger bar (collapsed/expanded region below toolbar).
|
||||
*/
|
||||
void RenderTriggerPanel(App& app);
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,348 @@
|
||||
/**
|
||||
* @file WSClient.cpp
|
||||
* @brief RFC 6455 WebSocket client implementation.
|
||||
*/
|
||||
|
||||
#include "WSClient.h"
|
||||
#include "WSFrame_client.h"
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netdb.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
#include <cstring>
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <ctime>
|
||||
#include <chrono>
|
||||
|
||||
namespace StreamHubClient {
|
||||
|
||||
/* ── Helpers ─────────────────────────────────────────────────────────────── */
|
||||
|
||||
static std::string base64Key() {
|
||||
/* Generate 16 random bytes and base64-encode them */
|
||||
uint8_t raw[16];
|
||||
srand(static_cast<unsigned>(time(nullptr)));
|
||||
for (int i = 0; i < 16; i++) {
|
||||
raw[i] = static_cast<uint8_t>(rand() & 0xFF);
|
||||
}
|
||||
char out[32];
|
||||
WS_Base64Encode(raw, 16, out);
|
||||
return std::string(out);
|
||||
}
|
||||
|
||||
/* ── Construction ────────────────────────────────────────────────────────── */
|
||||
|
||||
WSClient::WSClient() = default;
|
||||
|
||||
WSClient::~WSClient() {
|
||||
disconnect();
|
||||
}
|
||||
|
||||
/* ── Public API ──────────────────────────────────────────────────────────── */
|
||||
|
||||
void WSClient::connect(const std::string& host, uint16_t port) {
|
||||
/* If already running toward the same target just signal a reconnect */
|
||||
host_ = host;
|
||||
port_ = port;
|
||||
reconnect_.store(true);
|
||||
|
||||
if (!recvThread_.joinable()) {
|
||||
stopThread_.store(false);
|
||||
recvThread_ = std::thread(&WSClient::recvLoop, this);
|
||||
}
|
||||
}
|
||||
|
||||
void WSClient::disconnect() {
|
||||
stopThread_.store(true);
|
||||
connected_.store(false);
|
||||
if (sock_ >= 0) {
|
||||
::shutdown(sock_, SHUT_RDWR);
|
||||
::close(sock_);
|
||||
sock_ = -1;
|
||||
}
|
||||
if (recvThread_.joinable()) {
|
||||
recvThread_.join();
|
||||
}
|
||||
}
|
||||
|
||||
void WSClient::reconnect(const std::string& host, uint16_t port) {
|
||||
host_ = host;
|
||||
port_ = port;
|
||||
/* Closing the socket causes the recv thread to get n<=0 and loop back
|
||||
* to doConnect() with the new host/port. No thread join needed. */
|
||||
connected_.store(false);
|
||||
if (sock_ >= 0) {
|
||||
::shutdown(sock_, SHUT_RDWR);
|
||||
::close(sock_);
|
||||
sock_ = -1;
|
||||
}
|
||||
/* Ensure thread is running (first call before connect()) */
|
||||
if (!recvThread_.joinable()) {
|
||||
stopThread_.store(false);
|
||||
recvThread_ = std::thread(&WSClient::recvLoop, this);
|
||||
}
|
||||
}
|
||||
|
||||
bool WSClient::isConnected() const {
|
||||
return connected_.load();
|
||||
}
|
||||
|
||||
void WSClient::poll(const std::function<void(const WSMessage&)>& handler) {
|
||||
std::queue<WSMessage> local;
|
||||
{
|
||||
std::lock_guard<std::mutex> lk(queueMutex_);
|
||||
std::swap(local, recvQueue_);
|
||||
}
|
||||
while (!local.empty()) {
|
||||
handler(local.front());
|
||||
local.pop();
|
||||
}
|
||||
}
|
||||
|
||||
void WSClient::sendText(const std::string& json) {
|
||||
if (!connected_.load()) { return; }
|
||||
|
||||
uint8_t hdrBuf[10];
|
||||
uint32_t hdrLen = WSEncodeHeader(hdrBuf, WS_OPCODE_TEXT,
|
||||
static_cast<uint64_t>(json.size()));
|
||||
std::lock_guard<std::mutex> lk(sendMutex_);
|
||||
if (!sendRaw(hdrBuf, hdrLen)) { connected_.store(false); return; }
|
||||
if (!json.empty()) {
|
||||
if (!sendRaw(reinterpret_cast<const uint8_t*>(json.data()), json.size())) {
|
||||
connected_.store(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void WSClient::sendBinary(const uint8_t* data, size_t len) {
|
||||
if (!connected_.load()) { return; }
|
||||
|
||||
uint8_t hdrBuf[10];
|
||||
uint32_t hdrLen = WSEncodeHeader(hdrBuf, WS_OPCODE_BINARY,
|
||||
static_cast<uint64_t>(len));
|
||||
std::lock_guard<std::mutex> lk(sendMutex_);
|
||||
if (!sendRaw(hdrBuf, hdrLen)) { connected_.store(false); return; }
|
||||
if (len > 0 && data != nullptr) {
|
||||
if (!sendRaw(data, len)) {
|
||||
connected_.store(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* ── Receive loop (background thread) ────────────────────────────────────── */
|
||||
|
||||
void WSClient::recvLoop() {
|
||||
/* Per-connection receive buffer: declared here so it can be cleared on
|
||||
* each reconnect, preventing stale WS frames from a prior session from
|
||||
* being parsed as frames of the new connection. */
|
||||
std::vector<uint8_t> recvBuf;
|
||||
recvBuf.reserve(1u << 20); /* 1 MiB initial reservation */
|
||||
|
||||
while (!stopThread_.load()) {
|
||||
if (!connected_.load()) {
|
||||
recvBuf.clear(); /* discard any partial data from previous connection */
|
||||
if (!doConnect() || !doHandshake()) {
|
||||
connected_.store(false);
|
||||
if (sock_ >= 0) { ::close(sock_); sock_ = -1; }
|
||||
/* Wait 3 s before retry */
|
||||
for (int i = 0; i < 30 && !stopThread_.load(); i++) {
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||||
}
|
||||
continue;
|
||||
}
|
||||
connected_.store(true);
|
||||
reconnect_.store(false);
|
||||
fprintf(stderr, "WSClient: connected to %s:%u\n", host_.c_str(), port_);
|
||||
}
|
||||
|
||||
/* Read and accumulate bytes */
|
||||
|
||||
uint8_t chunk[4096];
|
||||
ssize_t n = ::recv(sock_, chunk, sizeof(chunk), 0);
|
||||
if (n <= 0) {
|
||||
if (n == 0 || (errno != EAGAIN && errno != EWOULDBLOCK)) {
|
||||
fprintf(stderr, "WSClient: recv error / connection closed\n");
|
||||
connected_.store(false);
|
||||
::close(sock_); sock_ = -1;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
recvBuf.insert(recvBuf.end(), chunk, chunk + n);
|
||||
|
||||
/* Parse as many complete frames as possible */
|
||||
size_t consumed = 0;
|
||||
while (consumed < recvBuf.size()) {
|
||||
const uint8_t* frameStart = recvBuf.data() + consumed;
|
||||
size_t available = recvBuf.size() - consumed;
|
||||
|
||||
WSFrameHeader hdr;
|
||||
if (!WSParseHeader(frameStart, static_cast<uint32_t>(available), hdr)) {
|
||||
break; /* Need more data */
|
||||
}
|
||||
if (hdr.payloadLen > 16u * 1024u * 1024u) {
|
||||
/* Frame too large — disconnect */
|
||||
fprintf(stderr, "WSClient: frame too large (%llu bytes)\n",
|
||||
static_cast<unsigned long long>(hdr.payloadLen));
|
||||
connected_.store(false);
|
||||
::close(sock_); sock_ = -1;
|
||||
recvBuf.clear();
|
||||
goto next_iter;
|
||||
}
|
||||
{
|
||||
size_t total = hdr.headerSize + static_cast<size_t>(hdr.payloadLen);
|
||||
if (available < total) { break; }
|
||||
|
||||
uint8_t* payload = const_cast<uint8_t*>(frameStart) + hdr.headerSize;
|
||||
uint32_t plen = static_cast<uint32_t>(hdr.payloadLen);
|
||||
if (hdr.masked) { WSUnmask(payload, plen, hdr.maskKey); }
|
||||
|
||||
if (hdr.opcode == WS_OPCODE_CLOSE) {
|
||||
connected_.store(false);
|
||||
::close(sock_); sock_ = -1;
|
||||
recvBuf.clear();
|
||||
goto next_iter;
|
||||
} else if (hdr.opcode == WS_OPCODE_PING) {
|
||||
/* Send pong */
|
||||
uint8_t pongHdr[10];
|
||||
uint32_t pongHdrLen = WSEncodeHeader(pongHdr, WS_OPCODE_PONG, plen);
|
||||
std::lock_guard<std::mutex> lk(sendMutex_);
|
||||
sendRaw(pongHdr, pongHdrLen);
|
||||
if (plen > 0) { sendRaw(payload, plen); }
|
||||
} else if (hdr.opcode == WS_OPCODE_TEXT ||
|
||||
hdr.opcode == WS_OPCODE_BINARY) {
|
||||
WSMessage msg;
|
||||
msg.isBinary = (hdr.opcode == WS_OPCODE_BINARY);
|
||||
msg.data.assign(payload, payload + plen);
|
||||
std::lock_guard<std::mutex> lk(queueMutex_);
|
||||
recvQueue_.push(std::move(msg));
|
||||
}
|
||||
consumed += total;
|
||||
}
|
||||
}
|
||||
|
||||
/* Compact buffer */
|
||||
if (consumed > 0) {
|
||||
recvBuf.erase(recvBuf.begin(), recvBuf.begin() + consumed);
|
||||
}
|
||||
next_iter:;
|
||||
}
|
||||
|
||||
if (sock_ >= 0) { ::close(sock_); sock_ = -1; }
|
||||
connected_.store(false);
|
||||
}
|
||||
|
||||
/* ── TCP connect ─────────────────────────────────────────────────────────── */
|
||||
|
||||
bool WSClient::doConnect() {
|
||||
struct addrinfo hints = {};
|
||||
hints.ai_family = AF_INET;
|
||||
hints.ai_socktype = SOCK_STREAM;
|
||||
|
||||
char portStr[16];
|
||||
snprintf(portStr, sizeof(portStr), "%u", static_cast<unsigned>(port_));
|
||||
|
||||
struct addrinfo* res = nullptr;
|
||||
if (getaddrinfo(host_.c_str(), portStr, &hints, &res) != 0 || res == nullptr) {
|
||||
fprintf(stderr, "WSClient: getaddrinfo failed for %s\n", host_.c_str());
|
||||
return false;
|
||||
}
|
||||
|
||||
sock_ = ::socket(res->ai_family, res->ai_socktype, res->ai_protocol);
|
||||
if (sock_ < 0) { freeaddrinfo(res); return false; }
|
||||
|
||||
if (::connect(sock_, res->ai_addr, res->ai_addrlen) < 0) {
|
||||
fprintf(stderr, "WSClient: connect failed: %s\n", strerror(errno));
|
||||
::close(sock_); sock_ = -1;
|
||||
freeaddrinfo(res);
|
||||
return false;
|
||||
}
|
||||
freeaddrinfo(res);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* ── HTTP/1.1 WebSocket upgrade ──────────────────────────────────────────── */
|
||||
|
||||
bool WSClient::doHandshake() {
|
||||
std::string key = base64Key();
|
||||
|
||||
/* Send HTTP upgrade request */
|
||||
char req[512];
|
||||
snprintf(req, sizeof(req),
|
||||
"GET / HTTP/1.1\r\n"
|
||||
"Host: %s:%u\r\n"
|
||||
"Upgrade: websocket\r\n"
|
||||
"Connection: Upgrade\r\n"
|
||||
"Sec-WebSocket-Key: %s\r\n"
|
||||
"Sec-WebSocket-Version: 13\r\n"
|
||||
"\r\n",
|
||||
host_.c_str(), static_cast<unsigned>(port_), key.c_str());
|
||||
|
||||
if (!sendRaw(reinterpret_cast<const uint8_t*>(req), strlen(req))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Read HTTP response until \r\n\r\n */
|
||||
char resp[2048];
|
||||
size_t totalRead = 0;
|
||||
while (totalRead < sizeof(resp) - 1) {
|
||||
ssize_t n = ::recv(sock_, resp + totalRead, 1, 0);
|
||||
if (n <= 0) { return false; }
|
||||
totalRead++;
|
||||
resp[totalRead] = '\0';
|
||||
if (totalRead >= 4 &&
|
||||
memcmp(resp + totalRead - 4, "\r\n\r\n", 4) == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check for 101 */
|
||||
if (strstr(resp, "101") == nullptr) {
|
||||
fprintf(stderr, "WSClient: handshake failed:\n%s\n", resp);
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Verify Sec-WebSocket-Accept (optional but good practice) */
|
||||
static const char* kGUID = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
|
||||
std::string concat = key + kGUID;
|
||||
uint8_t digest[20];
|
||||
WS_SHA1(reinterpret_cast<const uint8_t*>(concat.data()),
|
||||
static_cast<uint32_t>(concat.size()), digest);
|
||||
char expectedAccept[32];
|
||||
WS_Base64Encode(digest, 20, expectedAccept);
|
||||
|
||||
if (strstr(resp, expectedAccept) == nullptr) {
|
||||
fprintf(stderr, "WSClient: Sec-WebSocket-Accept mismatch\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/* ── Low-level I/O ───────────────────────────────────────────────────────── */
|
||||
|
||||
bool WSClient::recvExact(uint8_t* buf, size_t len) {
|
||||
size_t received = 0;
|
||||
while (received < len) {
|
||||
ssize_t n = ::recv(sock_, buf + received, len - received, MSG_WAITALL);
|
||||
if (n <= 0) { return false; }
|
||||
received += static_cast<size_t>(n);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool WSClient::sendRaw(const uint8_t* buf, size_t len) {
|
||||
size_t sent = 0;
|
||||
while (sent < len) {
|
||||
ssize_t n = ::send(sock_, buf + sent, len - sent, MSG_NOSIGNAL);
|
||||
if (n <= 0) { return false; }
|
||||
sent += static_cast<size_t>(n);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,100 @@
|
||||
/**
|
||||
* @file WSClient.h
|
||||
* @brief RFC 6455 WebSocket client (POSIX sockets, background receive thread).
|
||||
*
|
||||
* The receive thread continuously reads frames and places them in a queue.
|
||||
* The main (ImGui) thread drains the queue each frame and also sends frames.
|
||||
*
|
||||
* Reuses WSFrame.h / SHA1.h / Base64.h from Source/Applications/StreamHub/.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <queue>
|
||||
#include <mutex>
|
||||
#include <thread>
|
||||
#include <functional>
|
||||
#include <atomic>
|
||||
#include <cstdint>
|
||||
|
||||
namespace StreamHubClient {
|
||||
|
||||
/**
|
||||
* @brief A received WebSocket frame.
|
||||
*/
|
||||
struct WSMessage {
|
||||
bool isBinary;
|
||||
std::vector<uint8_t> data; ///< Payload bytes (text frames are also stored here)
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Minimal RFC 6455 WebSocket client.
|
||||
*
|
||||
* Usage:
|
||||
* WSClient ws;
|
||||
* ws.connect("127.0.0.1", 8090);
|
||||
* // main loop:
|
||||
* ws.poll(handler); // drain received messages
|
||||
* ws.sendText(json); // send a JSON command
|
||||
* ws.disconnect();
|
||||
*/
|
||||
class WSClient {
|
||||
public:
|
||||
WSClient();
|
||||
~WSClient();
|
||||
|
||||
/**
|
||||
* @brief (Re)connect to host:port in the background.
|
||||
* Non-blocking — sets a reconnect target; the receive thread handles the actual
|
||||
* connect/reconnect loop.
|
||||
*/
|
||||
void connect(const std::string& host, uint16_t port);
|
||||
|
||||
/** @brief Gracefully close the WebSocket connection and stop the receive thread. */
|
||||
void disconnect();
|
||||
|
||||
/**
|
||||
* @brief Non-blocking reconnect to a (possibly new) host:port.
|
||||
* Closes the current socket so the background thread detects the drop and
|
||||
* reconnects immediately. Does NOT join the thread — safe to call from the UI.
|
||||
*/
|
||||
void reconnect(const std::string& host, uint16_t port);
|
||||
|
||||
/** @return true if the WebSocket handshake completed and the connection is open. */
|
||||
bool isConnected() const;
|
||||
|
||||
/**
|
||||
* @brief Drain all pending received messages and pass each to `handler`.
|
||||
* Must be called from the main thread.
|
||||
*/
|
||||
void poll(const std::function<void(const WSMessage&)>& handler);
|
||||
|
||||
/** @brief Send a JSON text frame. Thread-safe. */
|
||||
void sendText(const std::string& json);
|
||||
|
||||
/** @brief Send a binary frame. Thread-safe. */
|
||||
void sendBinary(const uint8_t* data, size_t len);
|
||||
|
||||
private:
|
||||
void recvLoop();
|
||||
bool doConnect();
|
||||
bool doHandshake();
|
||||
bool recvExact(uint8_t* buf, size_t len);
|
||||
bool sendRaw(const uint8_t* buf, size_t len);
|
||||
|
||||
std::string host_;
|
||||
uint16_t port_ = 0;
|
||||
int sock_ = -1;
|
||||
std::atomic<bool> connected_ {false};
|
||||
std::atomic<bool> stopThread_ {false};
|
||||
std::atomic<bool> reconnect_ {false};
|
||||
|
||||
std::thread recvThread_;
|
||||
mutable std::mutex sendMutex_;
|
||||
mutable std::mutex queueMutex_;
|
||||
std::queue<WSMessage> recvQueue_;
|
||||
};
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,177 @@
|
||||
/**
|
||||
* @file WSFrame_client.h
|
||||
* @brief WebSocket frame helpers for the ImGui client (no MARTe2 dependency).
|
||||
*
|
||||
* Mirrors WSFrame.h from Source/Applications/StreamHub/ using standard C++ types.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
|
||||
namespace StreamHubClient {
|
||||
|
||||
static const uint8_t WS_OPCODE_CONTINUATION = 0x00u;
|
||||
static const uint8_t WS_OPCODE_TEXT = 0x01u;
|
||||
static const uint8_t WS_OPCODE_BINARY = 0x02u;
|
||||
static const uint8_t WS_OPCODE_CLOSE = 0x08u;
|
||||
static const uint8_t WS_OPCODE_PING = 0x09u;
|
||||
static const uint8_t WS_OPCODE_PONG = 0x0Au;
|
||||
|
||||
static const uint8_t WS_FIN_BIT = 0x80u;
|
||||
static const uint8_t WS_MASK_BIT = 0x80u;
|
||||
|
||||
/** @brief Encode a WebSocket frame header (server→client, no masking).
|
||||
* @return Number of header bytes written (2, 4, or 10). */
|
||||
inline uint32_t WSEncodeHeader(uint8_t* buf, uint8_t opcode, uint64_t payloadLen) {
|
||||
buf[0] = WS_FIN_BIT | opcode;
|
||||
if (payloadLen < 126u) {
|
||||
buf[1] = static_cast<uint8_t>(payloadLen);
|
||||
return 2u;
|
||||
} else if (payloadLen < 65536u) {
|
||||
buf[1] = 126u;
|
||||
buf[2] = static_cast<uint8_t>((payloadLen >> 8u) & 0xFFu);
|
||||
buf[3] = static_cast<uint8_t>(payloadLen & 0xFFu);
|
||||
return 4u;
|
||||
} else {
|
||||
buf[1] = 127u;
|
||||
for (int i = 7; i >= 0; i--) {
|
||||
buf[2 + i] = static_cast<uint8_t>(payloadLen & 0xFFu);
|
||||
payloadLen >>= 8u;
|
||||
}
|
||||
return 10u;
|
||||
}
|
||||
}
|
||||
|
||||
struct WSFrameHeader {
|
||||
bool fin;
|
||||
uint8_t opcode;
|
||||
bool masked;
|
||||
uint64_t payloadLen;
|
||||
uint8_t maskKey[4];
|
||||
uint32_t headerSize;
|
||||
};
|
||||
|
||||
inline bool WSParseHeader(const uint8_t* buf, uint32_t bufLen, WSFrameHeader& hdr) {
|
||||
if (bufLen < 2u) { return false; }
|
||||
|
||||
hdr.fin = (buf[0] & WS_FIN_BIT) != 0u;
|
||||
hdr.opcode = buf[0] & 0x0Fu;
|
||||
hdr.masked = (buf[1] & WS_MASK_BIT) != 0u;
|
||||
|
||||
uint32_t hdrSize = 2u;
|
||||
uint64_t plen = static_cast<uint64_t>(buf[1] & 0x7Fu);
|
||||
|
||||
if (plen == 126u) {
|
||||
if (bufLen < 4u) { return false; }
|
||||
plen = (static_cast<uint64_t>(buf[2]) << 8u) | static_cast<uint64_t>(buf[3]);
|
||||
hdrSize += 2u;
|
||||
} else if (plen == 127u) {
|
||||
if (bufLen < 10u) { return false; }
|
||||
plen = 0u;
|
||||
for (int i = 0; i < 8; i++) {
|
||||
plen = (plen << 8u) | static_cast<uint64_t>(buf[2 + i]);
|
||||
}
|
||||
hdrSize += 8u;
|
||||
}
|
||||
|
||||
if (hdr.masked) {
|
||||
if (bufLen < hdrSize + 4u) { return false; }
|
||||
hdr.maskKey[0] = buf[hdrSize];
|
||||
hdr.maskKey[1] = buf[hdrSize + 1u];
|
||||
hdr.maskKey[2] = buf[hdrSize + 2u];
|
||||
hdr.maskKey[3] = buf[hdrSize + 3u];
|
||||
hdrSize += 4u;
|
||||
} else {
|
||||
hdr.maskKey[0] = hdr.maskKey[1] = hdr.maskKey[2] = hdr.maskKey[3] = 0u;
|
||||
}
|
||||
|
||||
hdr.payloadLen = plen;
|
||||
hdr.headerSize = hdrSize;
|
||||
return true;
|
||||
}
|
||||
|
||||
inline void WSUnmask(uint8_t* payload, uint32_t len, const uint8_t mask[4]) {
|
||||
for (uint32_t i = 0u; i < len; i++) {
|
||||
payload[i] ^= mask[i % 4u];
|
||||
}
|
||||
}
|
||||
|
||||
/* ── SHA-1 (for WebSocket handshake) ──────────────────────────────────────── */
|
||||
|
||||
inline void WS_SHA1(const uint8_t* data, uint32_t len, uint8_t digest[20]) {
|
||||
/* FIPS 180-4 SHA-1 — sufficient for a 60-byte input (key+GUID) */
|
||||
uint32_t h0 = 0x67452301u, h1 = 0xEFCDAB89u, h2 = 0x98BADCFEu,
|
||||
h3 = 0x10325476u, h4 = 0xC3D2E1F0u;
|
||||
|
||||
auto rot32 = [](uint32_t v, int n) -> uint32_t {
|
||||
return (v << n) | (v >> (32 - n));
|
||||
};
|
||||
|
||||
/* Build padded message */
|
||||
uint32_t bitLen = len * 8u;
|
||||
uint32_t padLen = (len % 64u < 56u) ? (56u - len % 64u) : (120u - len % 64u);
|
||||
uint32_t msgLen = len + padLen + 8u;
|
||||
uint8_t* msg = new uint8_t[msgLen]();
|
||||
memcpy(msg, data, len);
|
||||
msg[len] = 0x80u;
|
||||
/* Big-endian bit-length at end */
|
||||
msg[msgLen - 4] = static_cast<uint8_t>((bitLen >> 24) & 0xFF);
|
||||
msg[msgLen - 3] = static_cast<uint8_t>((bitLen >> 16) & 0xFF);
|
||||
msg[msgLen - 2] = static_cast<uint8_t>((bitLen >> 8) & 0xFF);
|
||||
msg[msgLen - 1] = static_cast<uint8_t>( bitLen & 0xFF);
|
||||
|
||||
for (uint32_t blk = 0u; blk < msgLen; blk += 64u) {
|
||||
uint32_t w[80];
|
||||
for (int i = 0; i < 16; i++) {
|
||||
w[i] = (static_cast<uint32_t>(msg[blk + i*4]) << 24)
|
||||
| (static_cast<uint32_t>(msg[blk + i*4+1]) << 16)
|
||||
| (static_cast<uint32_t>(msg[blk + i*4+2]) << 8)
|
||||
| static_cast<uint32_t>(msg[blk + i*4+3]);
|
||||
}
|
||||
for (int i = 16; i < 80; i++) {
|
||||
w[i] = rot32(w[i-3] ^ w[i-8] ^ w[i-14] ^ w[i-16], 1);
|
||||
}
|
||||
uint32_t a=h0,b=h1,c=h2,d=h3,e=h4,f,k,t;
|
||||
for (int i = 0; i < 80; i++) {
|
||||
if (i < 20) { f=( b & c)|((~b)& d); k=0x5A827999u; }
|
||||
else if (i < 40) { f= b ^ c ^ d; k=0x6ED9EBA1u; }
|
||||
else if (i < 60) { f=(b&c)|(b&d)|(c&d); k=0x8F1BBCDCu; }
|
||||
else { f= b ^ c ^ d; k=0xCA62C1D6u; }
|
||||
t = rot32(a,5) + f + e + k + w[i];
|
||||
e=d; d=c; c=rot32(b,30); b=a; a=t;
|
||||
}
|
||||
h0+=a; h1+=b; h2+=c; h3+=d; h4+=e;
|
||||
}
|
||||
delete[] msg;
|
||||
|
||||
auto put32 = [&](uint8_t* p, uint32_t v) {
|
||||
p[0]=v>>24; p[1]=(v>>16)&0xFF; p[2]=(v>>8)&0xFF; p[3]=v&0xFF;
|
||||
};
|
||||
put32(digest, h0); put32(digest+4, h1);
|
||||
put32(digest+8, h2); put32(digest+12, h3);
|
||||
put32(digest+16, h4);
|
||||
}
|
||||
|
||||
/* ── Base64 encode (for WebSocket handshake) ─────────────────────────────── */
|
||||
|
||||
inline uint32_t WS_Base64Encode(const uint8_t* in, uint32_t inLen, char* out) {
|
||||
static const char tbl[] =
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
uint32_t o = 0;
|
||||
for (uint32_t i = 0; i < inLen; ) {
|
||||
uint32_t b = static_cast<uint32_t>(in[i++]) << 16;
|
||||
int have = 1;
|
||||
if (i < inLen) { b |= static_cast<uint32_t>(in[i++]) << 8; have++; }
|
||||
if (i < inLen) { b |= static_cast<uint32_t>(in[i++]); have++; }
|
||||
out[o++] = tbl[(b >> 18) & 0x3F];
|
||||
out[o++] = tbl[(b >> 12) & 0x3F];
|
||||
out[o++] = (have >= 2) ? tbl[(b >> 6) & 0x3F] : '=';
|
||||
out[o++] = (have >= 3) ? tbl[ b & 0x3F] : '=';
|
||||
}
|
||||
out[o] = '\0';
|
||||
return o;
|
||||
}
|
||||
|
||||
} /* namespace StreamHubClient */
|
||||
@@ -0,0 +1,447 @@
|
||||
# This is the CMakeCache file.
|
||||
# For build in directory: /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build
|
||||
# It was generated by CMake: /usr/bin/cmake
|
||||
# You can edit this file to change values found and used by cmake.
|
||||
# If you do not want to change any of the values, simply exit the editor.
|
||||
# If you do want to change a value, simply edit, save, and exit the editor.
|
||||
# The syntax for the file is as follows:
|
||||
# KEY:TYPE=VALUE
|
||||
# KEY is the name of a variable in the cache.
|
||||
# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.
|
||||
# VALUE is the current value for the KEY.
|
||||
|
||||
########################
|
||||
# EXTERNAL cache entries
|
||||
########################
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_AR:FILEPATH=/usr/bin/ar
|
||||
|
||||
//Choose the type of build, options are: None Debug Release RelWithDebInfo
|
||||
// MinSizeRel ...
|
||||
CMAKE_BUILD_TYPE:STRING=Release
|
||||
|
||||
//Enable/Disable color output during build.
|
||||
CMAKE_COLOR_MAKEFILE:BOOL=ON
|
||||
|
||||
//CXX compiler
|
||||
CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++
|
||||
|
||||
//A wrapper around 'ar' adding the appropriate '--plugin' option
|
||||
// for the GCC compiler
|
||||
CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar
|
||||
|
||||
//A wrapper around 'ranlib' adding the appropriate '--plugin' option
|
||||
// for the GCC compiler
|
||||
CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib
|
||||
|
||||
//Flags used by the CXX compiler during all build types.
|
||||
CMAKE_CXX_FLAGS:STRING=
|
||||
|
||||
//Flags used by the CXX compiler during DEBUG builds.
|
||||
CMAKE_CXX_FLAGS_DEBUG:STRING=-g
|
||||
|
||||
//Flags used by the CXX compiler during MINSIZEREL builds.
|
||||
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG
|
||||
|
||||
//Flags used by the CXX compiler during RELEASE builds.
|
||||
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG
|
||||
|
||||
//Flags used by the CXX compiler during RELWITHDEBINFO builds.
|
||||
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND
|
||||
|
||||
//Flags used by the linker during all build types.
|
||||
CMAKE_EXE_LINKER_FLAGS:STRING=
|
||||
|
||||
//Flags used by the linker during DEBUG builds.
|
||||
CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING=
|
||||
|
||||
//Flags used by the linker during MINSIZEREL builds.
|
||||
CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING=
|
||||
|
||||
//Flags used by the linker during RELEASE builds.
|
||||
CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING=
|
||||
|
||||
//Flags used by the linker during RELWITHDEBINFO builds.
|
||||
CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
|
||||
|
||||
//Enable/Disable output of compile commands during generation.
|
||||
CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=
|
||||
|
||||
//Value Computed by CMake.
|
||||
CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles/pkgRedirects
|
||||
|
||||
//Install path prefix, prepended onto install directories.
|
||||
CMAKE_INSTALL_PREFIX:PATH=/usr/local
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_LINKER:FILEPATH=/usr/bin/ld
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make
|
||||
|
||||
//Flags used by the linker during the creation of modules during
|
||||
// all build types.
|
||||
CMAKE_MODULE_LINKER_FLAGS:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of modules during
|
||||
// DEBUG builds.
|
||||
CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of modules during
|
||||
// MINSIZEREL builds.
|
||||
CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of modules during
|
||||
// RELEASE builds.
|
||||
CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of modules during
|
||||
// RELWITHDEBINFO builds.
|
||||
CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING=
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_NM:FILEPATH=/usr/bin/nm
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump
|
||||
|
||||
//Value Computed by CMake
|
||||
CMAKE_PROJECT_COMPAT_VERSION:STATIC=
|
||||
|
||||
//Value Computed by CMake
|
||||
CMAKE_PROJECT_DESCRIPTION:STATIC=
|
||||
|
||||
//Value Computed by CMake
|
||||
CMAKE_PROJECT_HOMEPAGE_URL:STATIC=
|
||||
|
||||
//Value Computed by CMake
|
||||
CMAKE_PROJECT_NAME:STATIC=StreamHubClient
|
||||
|
||||
//Value Computed by CMake
|
||||
CMAKE_PROJECT_SPDX_LICENSE:STATIC=
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_READELF:FILEPATH=/usr/bin/readelf
|
||||
|
||||
//Flags used by the linker during the creation of shared libraries
|
||||
// during all build types.
|
||||
CMAKE_SHARED_LINKER_FLAGS:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of shared libraries
|
||||
// during DEBUG builds.
|
||||
CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of shared libraries
|
||||
// during MINSIZEREL builds.
|
||||
CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of shared libraries
|
||||
// during RELEASE builds.
|
||||
CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING=
|
||||
|
||||
//Flags used by the linker during the creation of shared libraries
|
||||
// during RELWITHDEBINFO builds.
|
||||
CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING=
|
||||
|
||||
//If set, runtime paths are not added when installing shared libraries,
|
||||
// but are added when building.
|
||||
CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
|
||||
|
||||
//If set, runtime paths are not added when using shared libraries.
|
||||
CMAKE_SKIP_RPATH:BOOL=NO
|
||||
|
||||
//Flags used by the archiver during the creation of static libraries
|
||||
// during all build types.
|
||||
CMAKE_STATIC_LINKER_FLAGS:STRING=
|
||||
|
||||
//Flags used by the archiver during the creation of static libraries
|
||||
// during DEBUG builds.
|
||||
CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING=
|
||||
|
||||
//Flags used by the archiver during the creation of static libraries
|
||||
// during MINSIZEREL builds.
|
||||
CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING=
|
||||
|
||||
//Flags used by the archiver during the creation of static libraries
|
||||
// during RELEASE builds.
|
||||
CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING=
|
||||
|
||||
//Flags used by the archiver during the creation of static libraries
|
||||
// during RELWITHDEBINFO builds.
|
||||
CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING=
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_STRIP:FILEPATH=/usr/bin/strip
|
||||
|
||||
//Path to a program.
|
||||
CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND
|
||||
|
||||
//If this value is on, makefiles will be generated without the
|
||||
// .SILENT directive, and all commands will be echoed to the console
|
||||
// during the make. This is useful for debugging only. With Visual
|
||||
// Studio IDE projects all commands are done without /nologo.
|
||||
CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
|
||||
|
||||
//Directory under which to collect all populated content
|
||||
FETCHCONTENT_BASE_DIR:PATH=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps
|
||||
|
||||
//Disables all attempts to download or update content and assumes
|
||||
// source dirs already exist
|
||||
FETCHCONTENT_FULLY_DISCONNECTED:BOOL=OFF
|
||||
|
||||
//Enables QUIET option for all content population
|
||||
FETCHCONTENT_QUIET:BOOL=ON
|
||||
|
||||
//When not empty, overrides where to find pre-populated content
|
||||
// for imgui
|
||||
FETCHCONTENT_SOURCE_DIR_IMGUI:PATH=
|
||||
|
||||
//When not empty, overrides where to find pre-populated content
|
||||
// for implot
|
||||
FETCHCONTENT_SOURCE_DIR_IMPLOT:PATH=
|
||||
|
||||
//Enables UPDATE_DISCONNECTED behavior for all content population
|
||||
FETCHCONTENT_UPDATES_DISCONNECTED:BOOL=OFF
|
||||
|
||||
//Enables UPDATE_DISCONNECTED behavior just for population of imgui
|
||||
FETCHCONTENT_UPDATES_DISCONNECTED_IMGUI:BOOL=OFF
|
||||
|
||||
//Enables UPDATE_DISCONNECTED behavior just for population of implot
|
||||
FETCHCONTENT_UPDATES_DISCONNECTED_IMPLOT:BOOL=OFF
|
||||
|
||||
//Git command line client
|
||||
GIT_EXECUTABLE:FILEPATH=/usr/bin/git
|
||||
|
||||
//Path to a file.
|
||||
OPENGL_EGL_INCLUDE_DIR:PATH=/usr/include
|
||||
|
||||
//Path to a file.
|
||||
OPENGL_GLES2_INCLUDE_DIR:PATH=/usr/include
|
||||
|
||||
//Path to a file.
|
||||
OPENGL_GLES3_INCLUDE_DIR:PATH=/usr/include
|
||||
|
||||
//Path to a file.
|
||||
OPENGL_GLU_INCLUDE_DIR:PATH=/usr/include
|
||||
|
||||
//Path to a file.
|
||||
OPENGL_GLX_INCLUDE_DIR:PATH=/usr/include
|
||||
|
||||
//Path to a file.
|
||||
OPENGL_INCLUDE_DIR:PATH=/usr/include
|
||||
|
||||
//Path to a library.
|
||||
OPENGL_egl_LIBRARY:FILEPATH=/usr/lib/libEGL.so
|
||||
|
||||
//Path to a library.
|
||||
OPENGL_gles2_LIBRARY:FILEPATH=/usr/lib/libGLESv2.so
|
||||
|
||||
//Path to a library.
|
||||
OPENGL_gles3_LIBRARY:FILEPATH=/usr/lib/libGLESv2.so
|
||||
|
||||
//Path to a library.
|
||||
OPENGL_glu_LIBRARY:FILEPATH=/usr/lib/libGLU.so
|
||||
|
||||
//Path to a library.
|
||||
OPENGL_glx_LIBRARY:FILEPATH=/usr/lib/libGLX.so
|
||||
|
||||
//Path to a library.
|
||||
OPENGL_opengl_LIBRARY:FILEPATH=/usr/lib/libOpenGL.so
|
||||
|
||||
//Path to a file.
|
||||
OPENGL_xmesa_INCLUDE_DIR:PATH=OPENGL_xmesa_INCLUDE_DIR-NOTFOUND
|
||||
|
||||
//The directory containing a CMake configuration file for SDL2.
|
||||
SDL2_DIR:PATH=/usr/lib/cmake/SDL2
|
||||
|
||||
//Value Computed by CMake
|
||||
StreamHubClient_BINARY_DIR:STATIC=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build
|
||||
|
||||
//Value Computed by CMake
|
||||
StreamHubClient_IS_TOP_LEVEL:STATIC=ON
|
||||
|
||||
//Value Computed by CMake
|
||||
StreamHubClient_SOURCE_DIR:STATIC=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub
|
||||
|
||||
|
||||
########################
|
||||
# INTERNAL cache entries
|
||||
########################
|
||||
|
||||
//ADVANCED property for variable: CMAKE_ADDR2LINE
|
||||
CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_AR
|
||||
CMAKE_AR-ADVANCED:INTERNAL=1
|
||||
//This is the directory where this CMakeCache.txt was created
|
||||
CMAKE_CACHEFILE_DIR:INTERNAL=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build
|
||||
//Major version of cmake used to create the current loaded cache
|
||||
CMAKE_CACHE_MAJOR_VERSION:INTERNAL=4
|
||||
//Minor version of cmake used to create the current loaded cache
|
||||
CMAKE_CACHE_MINOR_VERSION:INTERNAL=3
|
||||
//Patch version of cmake used to create the current loaded cache
|
||||
CMAKE_CACHE_PATCH_VERSION:INTERNAL=3
|
||||
//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE
|
||||
CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1
|
||||
//Path to CMake executable.
|
||||
CMAKE_COMMAND:INTERNAL=/usr/bin/cmake
|
||||
//Path to cpack program executable.
|
||||
CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack
|
||||
//Path to ctest program executable.
|
||||
CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest
|
||||
//ADVANCED property for variable: CMAKE_CXX_COMPILER
|
||||
CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR
|
||||
CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB
|
||||
CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_CXX_FLAGS
|
||||
CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG
|
||||
CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL
|
||||
CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE
|
||||
CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
||||
CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_DLLTOOL
|
||||
CMAKE_DLLTOOL-ADVANCED:INTERNAL=1
|
||||
//Path to cache edit program executable.
|
||||
CMAKE_EDIT_COMMAND:INTERNAL=/usr/bin/ccmake
|
||||
//Executable file format
|
||||
CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF
|
||||
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS
|
||||
CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG
|
||||
CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL
|
||||
CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE
|
||||
CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO
|
||||
CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS
|
||||
CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1
|
||||
//Name of external makefile project generator.
|
||||
CMAKE_EXTRA_GENERATOR:INTERNAL=
|
||||
//Name of generator.
|
||||
CMAKE_GENERATOR:INTERNAL=Unix Makefiles
|
||||
//Generator instance identifier.
|
||||
CMAKE_GENERATOR_INSTANCE:INTERNAL=
|
||||
//Name of generator platform.
|
||||
CMAKE_GENERATOR_PLATFORM:INTERNAL=
|
||||
//Name of generator toolset.
|
||||
CMAKE_GENERATOR_TOOLSET:INTERNAL=
|
||||
//Source directory with the top level CMakeLists.txt file for this
|
||||
// project
|
||||
CMAKE_HOME_DIRECTORY:INTERNAL=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub
|
||||
//Install .so files without execute permission.
|
||||
CMAKE_INSTALL_SO_NO_EXE:INTERNAL=0
|
||||
//ADVANCED property for variable: CMAKE_LINKER
|
||||
CMAKE_LINKER-ADVANCED:INTERNAL=1
|
||||
//Name of CMakeLists files to read
|
||||
CMAKE_LIST_FILE_NAME:INTERNAL=CMakeLists.txt
|
||||
//ADVANCED property for variable: CMAKE_MAKE_PROGRAM
|
||||
CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS
|
||||
CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG
|
||||
CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL
|
||||
CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE
|
||||
CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO
|
||||
CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_NM
|
||||
CMAKE_NM-ADVANCED:INTERNAL=1
|
||||
//number of local generators
|
||||
CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_OBJCOPY
|
||||
CMAKE_OBJCOPY-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_OBJDUMP
|
||||
CMAKE_OBJDUMP-ADVANCED:INTERNAL=1
|
||||
//Platform information initialized
|
||||
CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_RANLIB
|
||||
CMAKE_RANLIB-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_READELF
|
||||
CMAKE_READELF-ADVANCED:INTERNAL=1
|
||||
//Path to CMake installation.
|
||||
CMAKE_ROOT:INTERNAL=/usr/share/cmake
|
||||
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS
|
||||
CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG
|
||||
CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL
|
||||
CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE
|
||||
CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO
|
||||
CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH
|
||||
CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_SKIP_RPATH
|
||||
CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS
|
||||
CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG
|
||||
CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL
|
||||
CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE
|
||||
CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO
|
||||
CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_STRIP
|
||||
CMAKE_STRIP-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_TAPI
|
||||
CMAKE_TAPI-ADVANCED:INTERNAL=1
|
||||
//uname command
|
||||
CMAKE_UNAME:INTERNAL=/usr/bin/uname
|
||||
//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE
|
||||
CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1
|
||||
//Details about finding OpenGL
|
||||
FIND_PACKAGE_MESSAGE_DETAILS_OpenGL:INTERNAL=[/usr/lib/libOpenGL.so][/usr/lib/libGLX.so][/usr/include][ ][v()]
|
||||
//ADVANCED property for variable: GIT_EXECUTABLE
|
||||
GIT_EXECUTABLE-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: OPENGL_EGL_INCLUDE_DIR
|
||||
OPENGL_EGL_INCLUDE_DIR-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: OPENGL_GLES2_INCLUDE_DIR
|
||||
OPENGL_GLES2_INCLUDE_DIR-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: OPENGL_GLES3_INCLUDE_DIR
|
||||
OPENGL_GLES3_INCLUDE_DIR-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: OPENGL_GLU_INCLUDE_DIR
|
||||
OPENGL_GLU_INCLUDE_DIR-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: OPENGL_GLX_INCLUDE_DIR
|
||||
OPENGL_GLX_INCLUDE_DIR-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: OPENGL_INCLUDE_DIR
|
||||
OPENGL_INCLUDE_DIR-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: OPENGL_egl_LIBRARY
|
||||
OPENGL_egl_LIBRARY-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: OPENGL_gles2_LIBRARY
|
||||
OPENGL_gles2_LIBRARY-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: OPENGL_gles3_LIBRARY
|
||||
OPENGL_gles3_LIBRARY-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: OPENGL_glu_LIBRARY
|
||||
OPENGL_glu_LIBRARY-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: OPENGL_glx_LIBRARY
|
||||
OPENGL_glx_LIBRARY-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: OPENGL_opengl_LIBRARY
|
||||
OPENGL_opengl_LIBRARY-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: OPENGL_xmesa_INCLUDE_DIR
|
||||
OPENGL_xmesa_INCLUDE_DIR-ADVANCED:INTERNAL=1
|
||||
|
||||
@@ -0,0 +1,102 @@
|
||||
set(CMAKE_CXX_COMPILER "/usr/bin/c++")
|
||||
set(CMAKE_CXX_COMPILER_ARG1 "")
|
||||
set(CMAKE_CXX_COMPILER_ID "GNU")
|
||||
set(CMAKE_CXX_COMPILER_VERSION "16.1.1")
|
||||
set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "")
|
||||
set(CMAKE_CXX_COMPILER_WRAPPER "")
|
||||
set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "20")
|
||||
set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON")
|
||||
set(CMAKE_CXX_STANDARD_LATEST "26")
|
||||
set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23;cxx_std_26")
|
||||
set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters")
|
||||
set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates")
|
||||
set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates")
|
||||
set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17")
|
||||
set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20")
|
||||
set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23")
|
||||
set(CMAKE_CXX26_COMPILE_FEATURES "cxx_std_26")
|
||||
|
||||
set(CMAKE_CXX_PLATFORM_ID "Linux")
|
||||
set(CMAKE_CXX_SIMULATE_ID "")
|
||||
set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU")
|
||||
set(CMAKE_CXX_COMPILER_APPLE_SYSROOT "")
|
||||
set(CMAKE_CXX_SIMULATE_VERSION "")
|
||||
set(CMAKE_CXX_COMPILER_ARCHITECTURE_ID "x86_64")
|
||||
|
||||
|
||||
|
||||
|
||||
set(CMAKE_AR "/usr/bin/ar")
|
||||
set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar")
|
||||
set(CMAKE_RANLIB "/usr/bin/ranlib")
|
||||
set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib")
|
||||
set(CMAKE_LINKER "/usr/bin/ld")
|
||||
set(CMAKE_LINKER_LINK "")
|
||||
set(CMAKE_LINKER_LLD "")
|
||||
set(CMAKE_CXX_COMPILER_LINKER "/usr/bin/ld")
|
||||
set(CMAKE_CXX_COMPILER_LINKER_ID "GNU")
|
||||
set(CMAKE_CXX_COMPILER_LINKER_VERSION 2.46.0)
|
||||
set(CMAKE_CXX_COMPILER_LINKER_FRONTEND_VARIANT GNU)
|
||||
set(CMAKE_MT "")
|
||||
set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND")
|
||||
set(CMAKE_COMPILER_IS_GNUCXX 1)
|
||||
set(CMAKE_CXX_COMPILER_LOADED 1)
|
||||
set(CMAKE_CXX_COMPILER_WORKS TRUE)
|
||||
set(CMAKE_CXX_ABI_COMPILED TRUE)
|
||||
|
||||
set(CMAKE_CXX_COMPILER_ENV_VAR "CXX")
|
||||
|
||||
set(CMAKE_CXX_COMPILER_ID_RUN 1)
|
||||
set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m)
|
||||
set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC)
|
||||
|
||||
foreach (lang IN ITEMS C OBJC OBJCXX)
|
||||
if (CMAKE_${lang}_COMPILER_ID_RUN)
|
||||
foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS)
|
||||
list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension})
|
||||
endforeach()
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
set(CMAKE_CXX_LINKER_PREFERENCE 30)
|
||||
set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1)
|
||||
set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED TRUE)
|
||||
set(CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED TRUE)
|
||||
set(CMAKE_CXX_LINKER_PUSHPOP_STATE_SUPPORTED TRUE)
|
||||
|
||||
# Save compiler ABI information.
|
||||
set(CMAKE_CXX_SIZEOF_DATA_PTR "8")
|
||||
set(CMAKE_CXX_COMPILER_ABI "ELF")
|
||||
set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN")
|
||||
set(CMAKE_CXX_LIBRARY_ARCHITECTURE "")
|
||||
|
||||
if(CMAKE_CXX_SIZEOF_DATA_PTR)
|
||||
set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}")
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_COMPILER_ABI)
|
||||
set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}")
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_LIBRARY_ARCHITECTURE)
|
||||
set(CMAKE_LIBRARY_ARCHITECTURE "")
|
||||
endif()
|
||||
|
||||
set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "")
|
||||
if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX)
|
||||
set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}")
|
||||
endif()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/16.1.1;/usr/include/c++/16.1.1/x86_64-pc-linux-gnu;/usr/include/c++/16.1.1/backward;/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1/include;/usr/local/include;/usr/include")
|
||||
set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;atomic_asneeded;c;gcc_s;gcc")
|
||||
set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-pc-linux-gnu/16.1.1;/usr/lib;/lib")
|
||||
set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "")
|
||||
set(CMAKE_CXX_COMPILER_CLANG_RESOURCE_DIR "")
|
||||
|
||||
set(CMAKE_CXX_COMPILER_IMPORT_STD "")
|
||||
set(CMAKE_CXX_COMPILER_IMPORT_STD_ERROR_MESSAGE "Unsupported generator: Unix Makefiles")
|
||||
set(CMAKE_CXX_STDLIB_MODULES_JSON "")
|
||||
Binary file not shown.
@@ -0,0 +1,15 @@
|
||||
set(CMAKE_HOST_SYSTEM "Linux-7.0.10-arch1-1")
|
||||
set(CMAKE_HOST_SYSTEM_NAME "Linux")
|
||||
set(CMAKE_HOST_SYSTEM_VERSION "7.0.10-arch1-1")
|
||||
set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64")
|
||||
|
||||
|
||||
|
||||
set(CMAKE_SYSTEM "Linux-7.0.10-arch1-1")
|
||||
set(CMAKE_SYSTEM_NAME "Linux")
|
||||
set(CMAKE_SYSTEM_VERSION "7.0.10-arch1-1")
|
||||
set(CMAKE_SYSTEM_PROCESSOR "x86_64")
|
||||
|
||||
set(CMAKE_CROSSCOMPILING "FALSE")
|
||||
|
||||
set(CMAKE_SYSTEM_LOADED 1)
|
||||
@@ -0,0 +1,949 @@
|
||||
/* This source file must have a .cpp extension so that all C++ compilers
|
||||
recognize the extension without flags. Borland does not know .cxx for
|
||||
example. */
|
||||
#ifndef __cplusplus
|
||||
# error "A C compiler has been selected for C++."
|
||||
#endif
|
||||
|
||||
#if !defined(__has_include)
|
||||
/* If the compiler does not have __has_include, pretend the answer is
|
||||
always no. */
|
||||
# define __has_include(x) 0
|
||||
#endif
|
||||
|
||||
|
||||
/* Version number components: V=Version, R=Revision, P=Patch
|
||||
Version date components: YYYY=Year, MM=Month, DD=Day */
|
||||
|
||||
#if defined(__INTEL_COMPILER) || defined(__ICC)
|
||||
# define COMPILER_ID "Intel"
|
||||
# if defined(_MSC_VER)
|
||||
# define SIMULATE_ID "MSVC"
|
||||
# endif
|
||||
# if defined(__GNUC__)
|
||||
# define SIMULATE_ID "GNU"
|
||||
# endif
|
||||
/* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later,
|
||||
except that a few beta releases use the old format with V=2021. */
|
||||
# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111
|
||||
# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100)
|
||||
# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10)
|
||||
# if defined(__INTEL_COMPILER_UPDATE)
|
||||
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE)
|
||||
# else
|
||||
# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10)
|
||||
# endif
|
||||
# else
|
||||
# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER)
|
||||
# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE)
|
||||
/* The third version component from --version is an update index,
|
||||
but no macro is provided for it. */
|
||||
# define COMPILER_VERSION_PATCH DEC(0)
|
||||
# endif
|
||||
# if defined(__INTEL_COMPILER_BUILD_DATE)
|
||||
/* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */
|
||||
# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE)
|
||||
# endif
|
||||
# if defined(_MSC_VER)
|
||||
/* _MSC_VER = VVRR */
|
||||
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
|
||||
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
|
||||
# endif
|
||||
# if defined(__GNUC__)
|
||||
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
|
||||
# elif defined(__GNUG__)
|
||||
# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
|
||||
# endif
|
||||
# if defined(__GNUC_MINOR__)
|
||||
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
|
||||
# endif
|
||||
# if defined(__GNUC_PATCHLEVEL__)
|
||||
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
|
||||
# endif
|
||||
|
||||
#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER)
|
||||
# define COMPILER_ID "IntelLLVM"
|
||||
#if defined(_MSC_VER)
|
||||
# define SIMULATE_ID "MSVC"
|
||||
#endif
|
||||
#if defined(__GNUC__)
|
||||
# define SIMULATE_ID "GNU"
|
||||
#endif
|
||||
/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and
|
||||
* later. Look for 6 digit vs. 8 digit version number to decide encoding.
|
||||
* VVVV is no smaller than the current year when a version is released.
|
||||
*/
|
||||
#if __INTEL_LLVM_COMPILER < 1000000L
|
||||
# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100)
|
||||
# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10)
|
||||
# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10)
|
||||
#else
|
||||
# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000)
|
||||
# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100)
|
||||
# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100)
|
||||
#endif
|
||||
#if defined(_MSC_VER)
|
||||
/* _MSC_VER = VVRR */
|
||||
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
|
||||
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
|
||||
#endif
|
||||
#if defined(__GNUC__)
|
||||
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
|
||||
#elif defined(__GNUG__)
|
||||
# define SIMULATE_VERSION_MAJOR DEC(__GNUG__)
|
||||
#endif
|
||||
#if defined(__GNUC_MINOR__)
|
||||
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
|
||||
#endif
|
||||
#if defined(__GNUC_PATCHLEVEL__)
|
||||
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
|
||||
#endif
|
||||
|
||||
#elif defined(__PATHCC__)
|
||||
# define COMPILER_ID "PathScale"
|
||||
# define COMPILER_VERSION_MAJOR DEC(__PATHCC__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__)
|
||||
# if defined(__PATHCC_PATCHLEVEL__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__)
|
||||
# endif
|
||||
|
||||
#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__)
|
||||
# define COMPILER_ID "Embarcadero"
|
||||
# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF)
|
||||
# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF)
|
||||
# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF)
|
||||
|
||||
#elif defined(__BORLANDC__)
|
||||
# define COMPILER_ID "Borland"
|
||||
/* __BORLANDC__ = 0xVRR */
|
||||
# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8)
|
||||
# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF)
|
||||
|
||||
#elif defined(__WATCOMC__) && __WATCOMC__ < 1200
|
||||
# define COMPILER_ID "Watcom"
|
||||
/* __WATCOMC__ = VVRR */
|
||||
# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100)
|
||||
# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
|
||||
# if (__WATCOMC__ % 10) > 0
|
||||
# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
|
||||
# endif
|
||||
|
||||
#elif defined(__WATCOMC__)
|
||||
# define COMPILER_ID "OpenWatcom"
|
||||
/* __WATCOMC__ = VVRP + 1100 */
|
||||
# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100)
|
||||
# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10)
|
||||
# if (__WATCOMC__ % 10) > 0
|
||||
# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10)
|
||||
# endif
|
||||
|
||||
#elif defined(__SUNPRO_CC)
|
||||
# define COMPILER_ID "SunPro"
|
||||
# if __SUNPRO_CC >= 0x5100
|
||||
/* __SUNPRO_CC = 0xVRRP */
|
||||
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12)
|
||||
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF)
|
||||
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
|
||||
# else
|
||||
/* __SUNPRO_CC = 0xVRP */
|
||||
# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8)
|
||||
# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF)
|
||||
# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF)
|
||||
# endif
|
||||
|
||||
#elif defined(__HP_aCC)
|
||||
# define COMPILER_ID "HP"
|
||||
/* __HP_aCC = VVRRPP */
|
||||
# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000)
|
||||
# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100)
|
||||
# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100)
|
||||
|
||||
#elif defined(__DECCXX)
|
||||
# define COMPILER_ID "Compaq"
|
||||
/* __DECCXX_VER = VVRRTPPPP */
|
||||
# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000)
|
||||
# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100)
|
||||
# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000)
|
||||
|
||||
#elif defined(__IBMCPP__) && defined(__COMPILER_VER__)
|
||||
# define COMPILER_ID "zOS"
|
||||
/* __IBMCPP__ = VRP */
|
||||
# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
|
||||
# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
|
||||
# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
|
||||
|
||||
#elif defined(__open_xl__) && defined(__clang__)
|
||||
# define COMPILER_ID "IBMClang"
|
||||
# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__open_xl_release__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__)
|
||||
# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__)
|
||||
# define COMPILER_VERSION_INTERNAL_STR __clang_version__
|
||||
|
||||
|
||||
#elif defined(__ibmxl__) && defined(__clang__)
|
||||
# define COMPILER_ID "XLClang"
|
||||
# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__)
|
||||
# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__)
|
||||
|
||||
|
||||
#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800
|
||||
# define COMPILER_ID "XL"
|
||||
/* __IBMCPP__ = VRP */
|
||||
# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
|
||||
# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
|
||||
# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
|
||||
|
||||
#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800
|
||||
# define COMPILER_ID "VisualAge"
|
||||
/* __IBMCPP__ = VRP */
|
||||
# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100)
|
||||
# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10)
|
||||
# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10)
|
||||
|
||||
#elif defined(__NVCOMPILER)
|
||||
# define COMPILER_ID "NVHPC"
|
||||
# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__)
|
||||
# if defined(__NVCOMPILER_PATCHLEVEL__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__)
|
||||
# endif
|
||||
|
||||
#elif defined(__PGI)
|
||||
# define COMPILER_ID "PGI"
|
||||
# define COMPILER_VERSION_MAJOR DEC(__PGIC__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__)
|
||||
# if defined(__PGIC_PATCHLEVEL__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__)
|
||||
# endif
|
||||
|
||||
#elif defined(__clang__) && defined(__cray__)
|
||||
# define COMPILER_ID "CrayClang"
|
||||
# define COMPILER_VERSION_MAJOR DEC(__cray_major__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__cray_minor__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__)
|
||||
# define COMPILER_VERSION_INTERNAL_STR __clang_version__
|
||||
|
||||
|
||||
#elif defined(_CRAYC)
|
||||
# define COMPILER_ID "Cray"
|
||||
# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR)
|
||||
# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR)
|
||||
|
||||
#elif defined(__TI_COMPILER_VERSION__)
|
||||
# define COMPILER_ID "TI"
|
||||
/* __TI_COMPILER_VERSION__ = VVVRRRPPP */
|
||||
# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000)
|
||||
# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000)
|
||||
# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000)
|
||||
|
||||
#elif defined(__CLANG_FUJITSU)
|
||||
# define COMPILER_ID "FujitsuClang"
|
||||
# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
|
||||
# define COMPILER_VERSION_INTERNAL_STR __clang_version__
|
||||
|
||||
|
||||
#elif defined(__FUJITSU)
|
||||
# define COMPILER_ID "Fujitsu"
|
||||
# if defined(__FCC_version__)
|
||||
# define COMPILER_VERSION __FCC_version__
|
||||
# elif defined(__FCC_major__)
|
||||
# define COMPILER_VERSION_MAJOR DEC(__FCC_major__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__FCC_minor__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__)
|
||||
# endif
|
||||
# if defined(__fcc_version)
|
||||
# define COMPILER_VERSION_INTERNAL DEC(__fcc_version)
|
||||
# elif defined(__FCC_VERSION)
|
||||
# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION)
|
||||
# endif
|
||||
|
||||
|
||||
#elif defined(__ghs__)
|
||||
# define COMPILER_ID "GHS"
|
||||
/* __GHS_VERSION_NUMBER = VVVVRP */
|
||||
# ifdef __GHS_VERSION_NUMBER
|
||||
# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100)
|
||||
# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10)
|
||||
# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10)
|
||||
# endif
|
||||
|
||||
#elif defined(__TASKING__)
|
||||
# define COMPILER_ID "Tasking"
|
||||
# define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000)
|
||||
# define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100)
|
||||
# define COMPILER_VERSION_INTERNAL DEC(__VERSION__)
|
||||
|
||||
#elif defined(__ORANGEC__)
|
||||
# define COMPILER_ID "OrangeC"
|
||||
# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__)
|
||||
|
||||
#elif defined(__RENESAS__)
|
||||
# define COMPILER_ID "Renesas"
|
||||
/* __RENESAS_VERSION__ = 0xVVRRPP00 */
|
||||
# define COMPILER_VERSION_MAJOR HEX(__RENESAS_VERSION__ >> 24 & 0xFF)
|
||||
# define COMPILER_VERSION_MINOR HEX(__RENESAS_VERSION__ >> 16 & 0xFF)
|
||||
# define COMPILER_VERSION_PATCH HEX(__RENESAS_VERSION__ >> 8 & 0xFF)
|
||||
|
||||
#elif defined(__SCO_VERSION__)
|
||||
# define COMPILER_ID "SCO"
|
||||
|
||||
#elif defined(__ARMCC_VERSION) && !defined(__clang__)
|
||||
# define COMPILER_ID "ARMCC"
|
||||
#if __ARMCC_VERSION >= 1000000
|
||||
/* __ARMCC_VERSION = VRRPPPP */
|
||||
# define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000)
|
||||
# define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100)
|
||||
# define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
|
||||
#else
|
||||
/* __ARMCC_VERSION = VRPPPP */
|
||||
# define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000)
|
||||
# define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10)
|
||||
# define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000)
|
||||
#endif
|
||||
|
||||
|
||||
#elif defined(__clang__) && defined(__apple_build_version__)
|
||||
# define COMPILER_ID "AppleClang"
|
||||
# if defined(_MSC_VER)
|
||||
# define SIMULATE_ID "MSVC"
|
||||
# endif
|
||||
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
|
||||
# if defined(_MSC_VER)
|
||||
/* _MSC_VER = VVRR */
|
||||
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
|
||||
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
|
||||
# endif
|
||||
# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__)
|
||||
|
||||
#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION)
|
||||
# define COMPILER_ID "ARMClang"
|
||||
# define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000)
|
||||
# define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100)
|
||||
# define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100)
|
||||
# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION)
|
||||
|
||||
#elif defined(__clang__) && defined(__ti__)
|
||||
# define COMPILER_ID "TIClang"
|
||||
# define COMPILER_VERSION_MAJOR DEC(__ti_major__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__ti_minor__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__ti_patchlevel__)
|
||||
# define COMPILER_VERSION_INTERNAL DEC(__ti_version__)
|
||||
|
||||
#elif defined(__clang__)
|
||||
# define COMPILER_ID "Clang"
|
||||
# if defined(_MSC_VER)
|
||||
# define SIMULATE_ID "MSVC"
|
||||
# endif
|
||||
# define COMPILER_VERSION_MAJOR DEC(__clang_major__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__clang_minor__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__)
|
||||
# if defined(_MSC_VER)
|
||||
/* _MSC_VER = VVRR */
|
||||
# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100)
|
||||
# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100)
|
||||
# endif
|
||||
|
||||
#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__))
|
||||
# define COMPILER_ID "LCC"
|
||||
# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100)
|
||||
# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100)
|
||||
# if defined(__LCC_MINOR__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__)
|
||||
# endif
|
||||
# if defined(__GNUC__) && defined(__GNUC_MINOR__)
|
||||
# define SIMULATE_ID "GNU"
|
||||
# define SIMULATE_VERSION_MAJOR DEC(__GNUC__)
|
||||
# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__)
|
||||
# if defined(__GNUC_PATCHLEVEL__)
|
||||
# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
|
||||
# endif
|
||||
# endif
|
||||
|
||||
#elif defined(__GNUC__) || defined(__GNUG__)
|
||||
# define COMPILER_ID "GNU"
|
||||
# if defined(__GNUC__)
|
||||
# define COMPILER_VERSION_MAJOR DEC(__GNUC__)
|
||||
# else
|
||||
# define COMPILER_VERSION_MAJOR DEC(__GNUG__)
|
||||
# endif
|
||||
# if defined(__GNUC_MINOR__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__)
|
||||
# endif
|
||||
# if defined(__GNUC_PATCHLEVEL__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__)
|
||||
# endif
|
||||
|
||||
#elif defined(_MSC_VER)
|
||||
# define COMPILER_ID "MSVC"
|
||||
/* _MSC_VER = VVRR */
|
||||
# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100)
|
||||
# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100)
|
||||
# if defined(_MSC_FULL_VER)
|
||||
# if _MSC_VER >= 1400
|
||||
/* _MSC_FULL_VER = VVRRPPPPP */
|
||||
# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000)
|
||||
# else
|
||||
/* _MSC_FULL_VER = VVRRPPPP */
|
||||
# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000)
|
||||
# endif
|
||||
# endif
|
||||
# if defined(_MSC_BUILD)
|
||||
# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD)
|
||||
# endif
|
||||
|
||||
#elif defined(_ADI_COMPILER)
|
||||
# define COMPILER_ID "ADSP"
|
||||
#if defined(__VERSIONNUM__)
|
||||
/* __VERSIONNUM__ = 0xVVRRPPTT */
|
||||
# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF)
|
||||
# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF)
|
||||
# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF)
|
||||
# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF)
|
||||
#endif
|
||||
|
||||
#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
|
||||
# define COMPILER_ID "IAR"
|
||||
# if defined(__VER__) && defined(__ICCARM__)
|
||||
# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000)
|
||||
# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000)
|
||||
# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000)
|
||||
# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
|
||||
# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__))
|
||||
# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100)
|
||||
# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100))
|
||||
# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__)
|
||||
# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__)
|
||||
# endif
|
||||
|
||||
#elif defined(__DCC__) && defined(_DIAB_TOOL)
|
||||
# define COMPILER_ID "Diab"
|
||||
# define COMPILER_VERSION_MAJOR DEC(__VERSION_MAJOR_NUMBER__)
|
||||
# define COMPILER_VERSION_MINOR DEC(__VERSION_MINOR_NUMBER__)
|
||||
# define COMPILER_VERSION_PATCH DEC(__VERSION_ARCH_FEATURE_NUMBER__)
|
||||
# define COMPILER_VERSION_TWEAK DEC(__VERSION_BUG_FIX_NUMBER__)
|
||||
|
||||
|
||||
|
||||
/* These compilers are either not known or too old to define an
|
||||
identification macro. Try to identify the platform and guess that
|
||||
it is the native compiler. */
|
||||
#elif defined(__hpux) || defined(__hpua)
|
||||
# define COMPILER_ID "HP"
|
||||
|
||||
#else /* unknown compiler */
|
||||
# define COMPILER_ID ""
|
||||
#endif
|
||||
|
||||
/* Construct the string literal in pieces to prevent the source from
|
||||
getting matched. Store it in a pointer rather than an array
|
||||
because some compilers will just produce instructions to fill the
|
||||
array rather than assigning a pointer to a static array. */
|
||||
char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]";
|
||||
#ifdef SIMULATE_ID
|
||||
char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]";
|
||||
#endif
|
||||
|
||||
#ifdef __QNXNTO__
|
||||
char const* qnxnto = "INFO" ":" "qnxnto[]";
|
||||
#endif
|
||||
|
||||
#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
|
||||
char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]";
|
||||
#endif
|
||||
|
||||
#define STRINGIFY_HELPER(X) #X
|
||||
#define STRINGIFY(X) STRINGIFY_HELPER(X)
|
||||
|
||||
/* Identify known platforms by name. */
|
||||
#if defined(__linux) || defined(__linux__) || defined(linux)
|
||||
# define PLATFORM_ID "Linux"
|
||||
|
||||
#elif defined(__MSYS__)
|
||||
# define PLATFORM_ID "MSYS"
|
||||
|
||||
#elif defined(__CYGWIN__)
|
||||
# define PLATFORM_ID "Cygwin"
|
||||
|
||||
#elif defined(__MINGW32__)
|
||||
# define PLATFORM_ID "MinGW"
|
||||
|
||||
#elif defined(__APPLE__)
|
||||
# define PLATFORM_ID "Darwin"
|
||||
|
||||
#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32)
|
||||
# define PLATFORM_ID "Windows"
|
||||
|
||||
#elif defined(__FreeBSD__) || defined(__FreeBSD)
|
||||
# define PLATFORM_ID "FreeBSD"
|
||||
|
||||
#elif defined(__NetBSD__) || defined(__NetBSD)
|
||||
# define PLATFORM_ID "NetBSD"
|
||||
|
||||
#elif defined(__OpenBSD__) || defined(__OPENBSD)
|
||||
# define PLATFORM_ID "OpenBSD"
|
||||
|
||||
#elif defined(__sun) || defined(sun)
|
||||
# define PLATFORM_ID "SunOS"
|
||||
|
||||
#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__)
|
||||
# define PLATFORM_ID "AIX"
|
||||
|
||||
#elif defined(__hpux) || defined(__hpux__)
|
||||
# define PLATFORM_ID "HP-UX"
|
||||
|
||||
#elif defined(__HAIKU__)
|
||||
# define PLATFORM_ID "Haiku"
|
||||
|
||||
#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS)
|
||||
# define PLATFORM_ID "BeOS"
|
||||
|
||||
#elif defined(__QNX__) || defined(__QNXNTO__)
|
||||
# define PLATFORM_ID "QNX"
|
||||
|
||||
#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__)
|
||||
# define PLATFORM_ID "Tru64"
|
||||
|
||||
#elif defined(__riscos) || defined(__riscos__)
|
||||
# define PLATFORM_ID "RISCos"
|
||||
|
||||
#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__)
|
||||
# define PLATFORM_ID "SINIX"
|
||||
|
||||
#elif defined(__UNIX_SV__)
|
||||
# define PLATFORM_ID "UNIX_SV"
|
||||
|
||||
#elif defined(__bsdos__)
|
||||
# define PLATFORM_ID "BSDOS"
|
||||
|
||||
#elif defined(_MPRAS) || defined(MPRAS)
|
||||
# define PLATFORM_ID "MP-RAS"
|
||||
|
||||
#elif defined(__osf) || defined(__osf__)
|
||||
# define PLATFORM_ID "OSF1"
|
||||
|
||||
#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv)
|
||||
# define PLATFORM_ID "SCO_SV"
|
||||
|
||||
#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX)
|
||||
# define PLATFORM_ID "ULTRIX"
|
||||
|
||||
#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX)
|
||||
# define PLATFORM_ID "Xenix"
|
||||
|
||||
#elif defined(__WATCOMC__)
|
||||
# if defined(__LINUX__)
|
||||
# define PLATFORM_ID "Linux"
|
||||
|
||||
# elif defined(__DOS__)
|
||||
# define PLATFORM_ID "DOS"
|
||||
|
||||
# elif defined(__OS2__)
|
||||
# define PLATFORM_ID "OS2"
|
||||
|
||||
# elif defined(__WINDOWS__)
|
||||
# define PLATFORM_ID "Windows3x"
|
||||
|
||||
# elif defined(__VXWORKS__)
|
||||
# define PLATFORM_ID "VxWorks"
|
||||
|
||||
# else /* unknown platform */
|
||||
# define PLATFORM_ID
|
||||
# endif
|
||||
|
||||
#elif defined(__INTEGRITY)
|
||||
# if defined(INT_178B)
|
||||
# define PLATFORM_ID "Integrity178"
|
||||
|
||||
# else /* regular Integrity */
|
||||
# define PLATFORM_ID "Integrity"
|
||||
# endif
|
||||
|
||||
# elif defined(_ADI_COMPILER)
|
||||
# define PLATFORM_ID "ADSP"
|
||||
|
||||
#else /* unknown platform */
|
||||
# define PLATFORM_ID
|
||||
|
||||
#endif
|
||||
|
||||
/* For windows compilers MSVC and Intel we can determine
|
||||
the architecture of the compiler being used. This is because
|
||||
the compilers do not have flags that can change the architecture,
|
||||
but rather depend on which compiler is being used
|
||||
*/
|
||||
#if defined(_WIN32) && defined(_MSC_VER)
|
||||
# if defined(_M_IA64)
|
||||
# define ARCHITECTURE_ID "IA64"
|
||||
|
||||
# elif defined(_M_ARM64EC)
|
||||
# define ARCHITECTURE_ID "ARM64EC"
|
||||
|
||||
# elif defined(_M_X64) || defined(_M_AMD64)
|
||||
# define ARCHITECTURE_ID "x64"
|
||||
|
||||
# elif defined(_M_IX86)
|
||||
# define ARCHITECTURE_ID "X86"
|
||||
|
||||
# elif defined(_M_ARM64)
|
||||
# define ARCHITECTURE_ID "ARM64"
|
||||
|
||||
# elif defined(_M_ARM)
|
||||
# if _M_ARM == 4
|
||||
# define ARCHITECTURE_ID "ARMV4I"
|
||||
# elif _M_ARM == 5
|
||||
# define ARCHITECTURE_ID "ARMV5I"
|
||||
# else
|
||||
# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM)
|
||||
# endif
|
||||
|
||||
# elif defined(_M_MIPS)
|
||||
# define ARCHITECTURE_ID "MIPS"
|
||||
|
||||
# elif defined(_M_SH)
|
||||
# define ARCHITECTURE_ID "SHx"
|
||||
|
||||
# else /* unknown architecture */
|
||||
# define ARCHITECTURE_ID ""
|
||||
# endif
|
||||
|
||||
#elif defined(__WATCOMC__)
|
||||
# if defined(_M_I86)
|
||||
# define ARCHITECTURE_ID "I86"
|
||||
|
||||
# elif defined(_M_IX86)
|
||||
# define ARCHITECTURE_ID "X86"
|
||||
|
||||
# else /* unknown architecture */
|
||||
# define ARCHITECTURE_ID ""
|
||||
# endif
|
||||
|
||||
#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC)
|
||||
# if defined(__ICCARM__)
|
||||
# define ARCHITECTURE_ID "ARM"
|
||||
|
||||
# elif defined(__ICCRX__)
|
||||
# define ARCHITECTURE_ID "RX"
|
||||
|
||||
# elif defined(__ICCRH850__)
|
||||
# define ARCHITECTURE_ID "RH850"
|
||||
|
||||
# elif defined(__ICCRL78__)
|
||||
# define ARCHITECTURE_ID "RL78"
|
||||
|
||||
# elif defined(__ICCRISCV__)
|
||||
# define ARCHITECTURE_ID "RISCV"
|
||||
|
||||
# elif defined(__ICCAVR__)
|
||||
# define ARCHITECTURE_ID "AVR"
|
||||
|
||||
# elif defined(__ICC430__)
|
||||
# define ARCHITECTURE_ID "MSP430"
|
||||
|
||||
# elif defined(__ICCV850__)
|
||||
# define ARCHITECTURE_ID "V850"
|
||||
|
||||
# elif defined(__ICC8051__)
|
||||
# define ARCHITECTURE_ID "8051"
|
||||
|
||||
# elif defined(__ICCSTM8__)
|
||||
# define ARCHITECTURE_ID "STM8"
|
||||
|
||||
# else /* unknown architecture */
|
||||
# define ARCHITECTURE_ID ""
|
||||
# endif
|
||||
|
||||
#elif defined(__ghs__)
|
||||
# if defined(__PPC64__)
|
||||
# define ARCHITECTURE_ID "PPC64"
|
||||
|
||||
# elif defined(__ppc__)
|
||||
# define ARCHITECTURE_ID "PPC"
|
||||
|
||||
# elif defined(__ARM__)
|
||||
# define ARCHITECTURE_ID "ARM"
|
||||
|
||||
# elif defined(__x86_64__)
|
||||
# define ARCHITECTURE_ID "x64"
|
||||
|
||||
# elif defined(__i386__)
|
||||
# define ARCHITECTURE_ID "X86"
|
||||
|
||||
# else /* unknown architecture */
|
||||
# define ARCHITECTURE_ID ""
|
||||
# endif
|
||||
|
||||
#elif defined(__clang__) && defined(__ti__)
|
||||
# if defined(__ARM_ARCH)
|
||||
# define ARCHITECTURE_ID "ARM"
|
||||
|
||||
# else /* unknown architecture */
|
||||
# define ARCHITECTURE_ID ""
|
||||
# endif
|
||||
|
||||
#elif defined(__TI_COMPILER_VERSION__)
|
||||
# if defined(__TI_ARM__)
|
||||
# define ARCHITECTURE_ID "ARM"
|
||||
|
||||
# elif defined(__MSP430__)
|
||||
# define ARCHITECTURE_ID "MSP430"
|
||||
|
||||
# elif defined(__TMS320C28XX__)
|
||||
# define ARCHITECTURE_ID "TMS320C28x"
|
||||
|
||||
# elif defined(__TMS320C6X__) || defined(_TMS320C6X)
|
||||
# define ARCHITECTURE_ID "TMS320C6x"
|
||||
|
||||
# else /* unknown architecture */
|
||||
# define ARCHITECTURE_ID ""
|
||||
# endif
|
||||
|
||||
# elif defined(__ADSPSHARC__)
|
||||
# define ARCHITECTURE_ID "SHARC"
|
||||
|
||||
# elif defined(__ADSPBLACKFIN__)
|
||||
# define ARCHITECTURE_ID "Blackfin"
|
||||
|
||||
#elif defined(__TASKING__)
|
||||
|
||||
# if defined(__CTC__) || defined(__CPTC__)
|
||||
# define ARCHITECTURE_ID "TriCore"
|
||||
|
||||
# elif defined(__CMCS__)
|
||||
# define ARCHITECTURE_ID "MCS"
|
||||
|
||||
# elif defined(__CARM__) || defined(__CPARM__)
|
||||
# define ARCHITECTURE_ID "ARM"
|
||||
|
||||
# elif defined(__CARC__)
|
||||
# define ARCHITECTURE_ID "ARC"
|
||||
|
||||
# elif defined(__C51__)
|
||||
# define ARCHITECTURE_ID "8051"
|
||||
|
||||
# elif defined(__CPCP__)
|
||||
# define ARCHITECTURE_ID "PCP"
|
||||
|
||||
# else
|
||||
# define ARCHITECTURE_ID ""
|
||||
# endif
|
||||
|
||||
#elif defined(__RENESAS__)
|
||||
# if defined(__CCRX__)
|
||||
# define ARCHITECTURE_ID "RX"
|
||||
|
||||
# elif defined(__CCRL__)
|
||||
# define ARCHITECTURE_ID "RL78"
|
||||
|
||||
# elif defined(__CCRH__)
|
||||
# define ARCHITECTURE_ID "RH850"
|
||||
|
||||
# else
|
||||
# define ARCHITECTURE_ID ""
|
||||
# endif
|
||||
|
||||
#else
|
||||
# define ARCHITECTURE_ID
|
||||
#endif
|
||||
|
||||
/* Convert integer to decimal digit literals. */
|
||||
#define DEC(n) \
|
||||
('0' + (((n) / 10000000)%10)), \
|
||||
('0' + (((n) / 1000000)%10)), \
|
||||
('0' + (((n) / 100000)%10)), \
|
||||
('0' + (((n) / 10000)%10)), \
|
||||
('0' + (((n) / 1000)%10)), \
|
||||
('0' + (((n) / 100)%10)), \
|
||||
('0' + (((n) / 10)%10)), \
|
||||
('0' + ((n) % 10))
|
||||
|
||||
/* Convert integer to hex digit literals. */
|
||||
#define HEX(n) \
|
||||
('0' + ((n)>>28 & 0xF)), \
|
||||
('0' + ((n)>>24 & 0xF)), \
|
||||
('0' + ((n)>>20 & 0xF)), \
|
||||
('0' + ((n)>>16 & 0xF)), \
|
||||
('0' + ((n)>>12 & 0xF)), \
|
||||
('0' + ((n)>>8 & 0xF)), \
|
||||
('0' + ((n)>>4 & 0xF)), \
|
||||
('0' + ((n) & 0xF))
|
||||
|
||||
/* Construct a string literal encoding the version number. */
|
||||
#ifdef COMPILER_VERSION
|
||||
char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]";
|
||||
|
||||
/* Construct a string literal encoding the version number components. */
|
||||
#elif defined(COMPILER_VERSION_MAJOR)
|
||||
char const info_version[] = {
|
||||
'I', 'N', 'F', 'O', ':',
|
||||
'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[',
|
||||
COMPILER_VERSION_MAJOR,
|
||||
# ifdef COMPILER_VERSION_MINOR
|
||||
'.', COMPILER_VERSION_MINOR,
|
||||
# ifdef COMPILER_VERSION_PATCH
|
||||
'.', COMPILER_VERSION_PATCH,
|
||||
# ifdef COMPILER_VERSION_TWEAK
|
||||
'.', COMPILER_VERSION_TWEAK,
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
']','\0'};
|
||||
#endif
|
||||
|
||||
/* Construct a string literal encoding the internal version number. */
|
||||
#ifdef COMPILER_VERSION_INTERNAL
|
||||
char const info_version_internal[] = {
|
||||
'I', 'N', 'F', 'O', ':',
|
||||
'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_',
|
||||
'i','n','t','e','r','n','a','l','[',
|
||||
COMPILER_VERSION_INTERNAL,']','\0'};
|
||||
#elif defined(COMPILER_VERSION_INTERNAL_STR)
|
||||
char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]";
|
||||
#endif
|
||||
|
||||
/* Construct a string literal encoding the version number components. */
|
||||
#ifdef SIMULATE_VERSION_MAJOR
|
||||
char const info_simulate_version[] = {
|
||||
'I', 'N', 'F', 'O', ':',
|
||||
's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[',
|
||||
SIMULATE_VERSION_MAJOR,
|
||||
# ifdef SIMULATE_VERSION_MINOR
|
||||
'.', SIMULATE_VERSION_MINOR,
|
||||
# ifdef SIMULATE_VERSION_PATCH
|
||||
'.', SIMULATE_VERSION_PATCH,
|
||||
# ifdef SIMULATE_VERSION_TWEAK
|
||||
'.', SIMULATE_VERSION_TWEAK,
|
||||
# endif
|
||||
# endif
|
||||
# endif
|
||||
']','\0'};
|
||||
#endif
|
||||
|
||||
/* Construct the string literal in pieces to prevent the source from
|
||||
getting matched. Store it in a pointer rather than an array
|
||||
because some compilers will just produce instructions to fill the
|
||||
array rather than assigning a pointer to a static array. */
|
||||
char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]";
|
||||
char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]";
|
||||
|
||||
|
||||
|
||||
#define CXX_STD_98 199711L
|
||||
#define CXX_STD_11 201103L
|
||||
#define CXX_STD_14 201402L
|
||||
#define CXX_STD_17 201703L
|
||||
#define CXX_STD_20 202002L
|
||||
#define CXX_STD_23 202302L
|
||||
|
||||
#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG)
|
||||
# if _MSVC_LANG > CXX_STD_17
|
||||
# define CXX_STD _MSVC_LANG
|
||||
# elif _MSVC_LANG == CXX_STD_17 && defined(__cpp_aggregate_paren_init)
|
||||
# define CXX_STD CXX_STD_20
|
||||
# elif _MSVC_LANG > CXX_STD_14 && __cplusplus > CXX_STD_17
|
||||
# define CXX_STD CXX_STD_20
|
||||
# elif _MSVC_LANG > CXX_STD_14
|
||||
# define CXX_STD CXX_STD_17
|
||||
# elif defined(__INTEL_CXX11_MODE__) && defined(__cpp_aggregate_nsdmi)
|
||||
# define CXX_STD CXX_STD_14
|
||||
# elif defined(__INTEL_CXX11_MODE__)
|
||||
# define CXX_STD CXX_STD_11
|
||||
# else
|
||||
# define CXX_STD CXX_STD_98
|
||||
# endif
|
||||
#elif defined(_MSC_VER) && defined(_MSVC_LANG)
|
||||
# if _MSVC_LANG > __cplusplus
|
||||
# define CXX_STD _MSVC_LANG
|
||||
# else
|
||||
# define CXX_STD __cplusplus
|
||||
# endif
|
||||
#elif defined(__NVCOMPILER)
|
||||
# if __cplusplus == CXX_STD_17 && defined(__cpp_aggregate_paren_init)
|
||||
# define CXX_STD CXX_STD_20
|
||||
# else
|
||||
# define CXX_STD __cplusplus
|
||||
# endif
|
||||
#elif defined(__INTEL_COMPILER) || defined(__PGI)
|
||||
# if __cplusplus == CXX_STD_11 && defined(__cpp_namespace_attributes)
|
||||
# define CXX_STD CXX_STD_17
|
||||
# elif __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi)
|
||||
# define CXX_STD CXX_STD_14
|
||||
# else
|
||||
# define CXX_STD __cplusplus
|
||||
# endif
|
||||
#elif (defined(__IBMCPP__) || defined(__ibmxl__)) && defined(__linux__)
|
||||
# if __cplusplus == CXX_STD_11 && defined(__cpp_aggregate_nsdmi)
|
||||
# define CXX_STD CXX_STD_14
|
||||
# else
|
||||
# define CXX_STD __cplusplus
|
||||
# endif
|
||||
#elif __cplusplus == 1 && defined(__GXX_EXPERIMENTAL_CXX0X__)
|
||||
# define CXX_STD CXX_STD_11
|
||||
#else
|
||||
# define CXX_STD __cplusplus
|
||||
#endif
|
||||
|
||||
const char* info_language_standard_default = "INFO" ":" "standard_default["
|
||||
#if CXX_STD > CXX_STD_23
|
||||
"26"
|
||||
#elif CXX_STD > CXX_STD_20
|
||||
"23"
|
||||
#elif CXX_STD > CXX_STD_17
|
||||
"20"
|
||||
#elif CXX_STD > CXX_STD_14
|
||||
"17"
|
||||
#elif CXX_STD > CXX_STD_11
|
||||
"14"
|
||||
#elif CXX_STD >= CXX_STD_11
|
||||
"11"
|
||||
#else
|
||||
"98"
|
||||
#endif
|
||||
"]";
|
||||
|
||||
const char* info_language_extensions_default = "INFO" ":" "extensions_default["
|
||||
#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \
|
||||
defined(__TI_COMPILER_VERSION__) || defined(__RENESAS__)) && \
|
||||
!defined(__STRICT_ANSI__)
|
||||
"ON"
|
||||
#else
|
||||
"OFF"
|
||||
#endif
|
||||
"]";
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
int require = 0;
|
||||
require += info_compiler[argc];
|
||||
require += info_platform[argc];
|
||||
require += info_arch[argc];
|
||||
#ifdef COMPILER_VERSION_MAJOR
|
||||
require += info_version[argc];
|
||||
#endif
|
||||
#if defined(COMPILER_VERSION_INTERNAL) || defined(COMPILER_VERSION_INTERNAL_STR)
|
||||
require += info_version_internal[argc];
|
||||
#endif
|
||||
#ifdef SIMULATE_ID
|
||||
require += info_simulate[argc];
|
||||
#endif
|
||||
#ifdef SIMULATE_VERSION_MAJOR
|
||||
require += info_simulate_version[argc];
|
||||
#endif
|
||||
#if defined(__CRAYXT_COMPUTE_LINUX_TARGET)
|
||||
require += info_cray[argc];
|
||||
#endif
|
||||
require += info_language_standard_default[argc];
|
||||
require += info_language_extensions_default[argc];
|
||||
(void)argv;
|
||||
return require;
|
||||
}
|
||||
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,16 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 4.3
|
||||
|
||||
# Relative path conversion top directories.
|
||||
set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub")
|
||||
set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build")
|
||||
|
||||
# Force unix paths in dependencies.
|
||||
set(CMAKE_FORCE_UNIX_PATHS 1)
|
||||
|
||||
|
||||
# The C and CXX include file regular expressions for this directory.
|
||||
set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
|
||||
set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
|
||||
set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
|
||||
set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"InstallScripts" :
|
||||
[
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/cmake_install.cmake"
|
||||
],
|
||||
"Parallel" : false
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 4.3
|
||||
|
||||
# The generator used is:
|
||||
set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles")
|
||||
|
||||
# The top level Makefile was generated from the following files:
|
||||
set(CMAKE_MAKEFILE_DEPENDS
|
||||
"CMakeCache.txt"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/CMakeLists.txt"
|
||||
"CMakeFiles/4.3.3/CMakeCXXCompiler.cmake"
|
||||
"CMakeFiles/4.3.3/CMakeSystem.cmake"
|
||||
"/usr/lib/cmake/SDL2/SDL2Config.cmake"
|
||||
"/usr/lib/cmake/SDL2/SDL2ConfigVersion.cmake"
|
||||
"/usr/lib/cmake/SDL2/SDL2Targets-none.cmake"
|
||||
"/usr/lib/cmake/SDL2/SDL2Targets.cmake"
|
||||
"/usr/lib/cmake/SDL2/SDL2mainTargets-none.cmake"
|
||||
"/usr/lib/cmake/SDL2/SDL2mainTargets.cmake"
|
||||
"/usr/share/cmake/Modules/CMakeCXXInformation.cmake"
|
||||
"/usr/share/cmake/Modules/CMakeCommonLanguageInclude.cmake"
|
||||
"/usr/share/cmake/Modules/CMakeGenericSystem.cmake"
|
||||
"/usr/share/cmake/Modules/CMakeInitializeConfigs.cmake"
|
||||
"/usr/share/cmake/Modules/CMakeLanguageInformation.cmake"
|
||||
"/usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake"
|
||||
"/usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake"
|
||||
"/usr/share/cmake/Modules/Compiler/CMakeCommonCompilerMacros.cmake"
|
||||
"/usr/share/cmake/Modules/Compiler/GNU-CXX.cmake"
|
||||
"/usr/share/cmake/Modules/Compiler/GNU.cmake"
|
||||
"/usr/share/cmake/Modules/ExternalProject/shared_internal_commands.cmake"
|
||||
"/usr/share/cmake/Modules/FeatureSummary.cmake"
|
||||
"/usr/share/cmake/Modules/FetchContent.cmake"
|
||||
"/usr/share/cmake/Modules/FetchContent/CMakeLists.cmake.in"
|
||||
"/usr/share/cmake/Modules/FindGit.cmake"
|
||||
"/usr/share/cmake/Modules/FindOpenGL.cmake"
|
||||
"/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake"
|
||||
"/usr/share/cmake/Modules/FindPackageMessage.cmake"
|
||||
"/usr/share/cmake/Modules/Internal/CMakeCXXLinkerInformation.cmake"
|
||||
"/usr/share/cmake/Modules/Internal/CMakeCommonLinkerInformation.cmake"
|
||||
"/usr/share/cmake/Modules/Linker/GNU-CXX.cmake"
|
||||
"/usr/share/cmake/Modules/Linker/GNU.cmake"
|
||||
"/usr/share/cmake/Modules/Platform/Linker/GNU.cmake"
|
||||
"/usr/share/cmake/Modules/Platform/Linker/Linux-GNU-CXX.cmake"
|
||||
"/usr/share/cmake/Modules/Platform/Linker/Linux-GNU.cmake"
|
||||
"/usr/share/cmake/Modules/Platform/Linux-GNU-CXX.cmake"
|
||||
"/usr/share/cmake/Modules/Platform/Linux-GNU.cmake"
|
||||
"/usr/share/cmake/Modules/Platform/Linux-Initialize.cmake"
|
||||
"/usr/share/cmake/Modules/Platform/Linux.cmake"
|
||||
"/usr/share/cmake/Modules/Platform/UnixPaths.cmake"
|
||||
)
|
||||
|
||||
# The corresponding makefile is:
|
||||
set(CMAKE_MAKEFILE_OUTPUTS
|
||||
"Makefile"
|
||||
"CMakeFiles/cmake.check_cache"
|
||||
)
|
||||
|
||||
# Byproducts of CMake generate step:
|
||||
set(CMAKE_MAKEFILE_PRODUCTS
|
||||
"_deps/imgui-subbuild/CMakeLists.txt"
|
||||
"_deps/implot-subbuild/CMakeLists.txt"
|
||||
"CMakeFiles/CMakeDirectoryInformation.cmake"
|
||||
)
|
||||
|
||||
# Dependency information for all targets:
|
||||
set(CMAKE_DEPEND_INFO_FILES
|
||||
"CMakeFiles/imgui_lib.dir/DependInfo.cmake"
|
||||
"CMakeFiles/StreamHubClient.dir/DependInfo.cmake"
|
||||
)
|
||||
@@ -0,0 +1,157 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 4.3
|
||||
|
||||
# Default target executed when no arguments are given to make.
|
||||
default_target: all
|
||||
.PHONY : default_target
|
||||
|
||||
#=============================================================================
|
||||
# Special targets provided by cmake.
|
||||
|
||||
# Disable implicit rules so canonical targets will work.
|
||||
.SUFFIXES:
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : %,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : SCCS/s.%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : s.%
|
||||
|
||||
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||
|
||||
# Command-line flag to silence nested $(MAKE).
|
||||
$(VERBOSE)MAKESILENT = -s
|
||||
|
||||
#Suppress display of executed commands.
|
||||
$(VERBOSE).SILENT:
|
||||
|
||||
# A target that is always out of date.
|
||||
cmake_force:
|
||||
.PHONY : cmake_force
|
||||
|
||||
#=============================================================================
|
||||
# Set environment variables for the build.
|
||||
|
||||
# The shell in which to execute make rules.
|
||||
SHELL = /bin/sh
|
||||
|
||||
# The CMake executable.
|
||||
CMAKE_COMMAND = /usr/bin/cmake
|
||||
|
||||
# The command to remove a file.
|
||||
RM = /usr/bin/cmake -E rm -f
|
||||
|
||||
# Escaping for special characters.
|
||||
EQUALS = =
|
||||
|
||||
# The top-level source directory on which CMake was run.
|
||||
CMAKE_SOURCE_DIR = /home/martino/Projects/MARTe_Integrated_components/Client/streamhub
|
||||
|
||||
# The top-level build directory on which CMake was run.
|
||||
CMAKE_BINARY_DIR = /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build
|
||||
|
||||
#=============================================================================
|
||||
# Directory level rules for the build root directory
|
||||
|
||||
# The main recursive "all" target.
|
||||
all: CMakeFiles/imgui_lib.dir/all
|
||||
all: CMakeFiles/StreamHubClient.dir/all
|
||||
.PHONY : all
|
||||
|
||||
# The main recursive "codegen" target.
|
||||
codegen: CMakeFiles/imgui_lib.dir/codegen
|
||||
codegen: CMakeFiles/StreamHubClient.dir/codegen
|
||||
.PHONY : codegen
|
||||
|
||||
# The main recursive "preinstall" target.
|
||||
preinstall:
|
||||
.PHONY : preinstall
|
||||
|
||||
# The main recursive "clean" target.
|
||||
clean: CMakeFiles/imgui_lib.dir/clean
|
||||
clean: CMakeFiles/StreamHubClient.dir/clean
|
||||
.PHONY : clean
|
||||
|
||||
#=============================================================================
|
||||
# Target rules for target CMakeFiles/imgui_lib.dir
|
||||
|
||||
# All Build rule for target.
|
||||
CMakeFiles/imgui_lib.dir/all:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/depend
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/build
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=10,11,12,13,14,15,16,17,18 "Built target imgui_lib"
|
||||
.PHONY : CMakeFiles/imgui_lib.dir/all
|
||||
|
||||
# Build rule for subdir invocation for target.
|
||||
CMakeFiles/imgui_lib.dir/rule: cmake_check_build_system
|
||||
$(CMAKE_COMMAND) -E cmake_progress_start /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles 9
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/imgui_lib.dir/all
|
||||
$(CMAKE_COMMAND) -E cmake_progress_start /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles 0
|
||||
.PHONY : CMakeFiles/imgui_lib.dir/rule
|
||||
|
||||
# Convenience name for target.
|
||||
imgui_lib: CMakeFiles/imgui_lib.dir/rule
|
||||
.PHONY : imgui_lib
|
||||
|
||||
# codegen rule for target.
|
||||
CMakeFiles/imgui_lib.dir/codegen:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/codegen
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=10,11,12,13,14,15,16,17,18 "Finished codegen for target imgui_lib"
|
||||
.PHONY : CMakeFiles/imgui_lib.dir/codegen
|
||||
|
||||
# clean rule for target.
|
||||
CMakeFiles/imgui_lib.dir/clean:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/clean
|
||||
.PHONY : CMakeFiles/imgui_lib.dir/clean
|
||||
|
||||
#=============================================================================
|
||||
# Target rules for target CMakeFiles/StreamHubClient.dir
|
||||
|
||||
# All Build rule for target.
|
||||
CMakeFiles/StreamHubClient.dir/all: CMakeFiles/imgui_lib.dir/all
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/depend
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/build
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=1,2,3,4,5,6,7,8,9 "Built target StreamHubClient"
|
||||
.PHONY : CMakeFiles/StreamHubClient.dir/all
|
||||
|
||||
# Build rule for subdir invocation for target.
|
||||
CMakeFiles/StreamHubClient.dir/rule: cmake_check_build_system
|
||||
$(CMAKE_COMMAND) -E cmake_progress_start /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles 18
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/StreamHubClient.dir/all
|
||||
$(CMAKE_COMMAND) -E cmake_progress_start /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles 0
|
||||
.PHONY : CMakeFiles/StreamHubClient.dir/rule
|
||||
|
||||
# Convenience name for target.
|
||||
StreamHubClient: CMakeFiles/StreamHubClient.dir/rule
|
||||
.PHONY : StreamHubClient
|
||||
|
||||
# codegen rule for target.
|
||||
CMakeFiles/StreamHubClient.dir/codegen:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/codegen
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=1,2,3,4,5,6,7,8,9 "Finished codegen for target StreamHubClient"
|
||||
.PHONY : CMakeFiles/StreamHubClient.dir/codegen
|
||||
|
||||
# clean rule for target.
|
||||
CMakeFiles/StreamHubClient.dir/clean:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/clean
|
||||
.PHONY : CMakeFiles/StreamHubClient.dir/clean
|
||||
|
||||
#=============================================================================
|
||||
# Special targets to cleanup operation of make.
|
||||
|
||||
# Special rule to run CMake to check the build system integrity.
|
||||
# No rule that depends on this can have commands that come from listfiles
|
||||
# because they might be regenerated.
|
||||
cmake_check_build_system:
|
||||
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
|
||||
.PHONY : cmake_check_build_system
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
|
||||
# Consider dependencies only in project.
|
||||
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
|
||||
|
||||
# The set of languages for which implicit dependencies are needed:
|
||||
set(CMAKE_DEPENDS_LANGUAGES
|
||||
)
|
||||
|
||||
# The set of dependency files which are needed:
|
||||
set(CMAKE_DEPENDS_DEPENDENCY_FILES
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/App.cpp" "CMakeFiles/StreamHubClient.dir/App.cpp.o" "gcc" "CMakeFiles/StreamHubClient.dir/App.cpp.o.d"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/PlotPanel.cpp" "CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.o" "gcc" "CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.o.d"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/Protocol.cpp" "CMakeFiles/StreamHubClient.dir/Protocol.cpp.o" "gcc" "CMakeFiles/StreamHubClient.dir/Protocol.cpp.o.d"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/SourcePanel.cpp" "CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.o" "gcc" "CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.o.d"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/StatsPanel.cpp" "CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.o" "gcc" "CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.o.d"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/TriggerPanel.cpp" "CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.o" "gcc" "CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.o.d"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/WSClient.cpp" "CMakeFiles/StreamHubClient.dir/WSClient.cpp.o" "gcc" "CMakeFiles/StreamHubClient.dir/WSClient.cpp.o.d"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/main.cpp" "CMakeFiles/StreamHubClient.dir/main.cpp.o" "gcc" "CMakeFiles/StreamHubClient.dir/main.cpp.o.d"
|
||||
"" "StreamHubClient" "gcc" "CMakeFiles/StreamHubClient.dir/link.d"
|
||||
)
|
||||
|
||||
# Targets to which this target links which contain Fortran sources.
|
||||
set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES
|
||||
)
|
||||
|
||||
# Targets to which this target links which contain Fortran sources.
|
||||
set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES
|
||||
)
|
||||
|
||||
# Fortran module output directory.
|
||||
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
|
||||
@@ -0,0 +1,230 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 4.3
|
||||
|
||||
# Delete rule output on recipe failure.
|
||||
.DELETE_ON_ERROR:
|
||||
|
||||
#=============================================================================
|
||||
# Special targets provided by cmake.
|
||||
|
||||
# Disable implicit rules so canonical targets will work.
|
||||
.SUFFIXES:
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : %,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : SCCS/s.%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : s.%
|
||||
|
||||
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||
|
||||
# Command-line flag to silence nested $(MAKE).
|
||||
$(VERBOSE)MAKESILENT = -s
|
||||
|
||||
#Suppress display of executed commands.
|
||||
$(VERBOSE).SILENT:
|
||||
|
||||
# A target that is always out of date.
|
||||
cmake_force:
|
||||
.PHONY : cmake_force
|
||||
|
||||
#=============================================================================
|
||||
# Set environment variables for the build.
|
||||
|
||||
# The shell in which to execute make rules.
|
||||
SHELL = /bin/sh
|
||||
|
||||
# The CMake executable.
|
||||
CMAKE_COMMAND = /usr/bin/cmake
|
||||
|
||||
# The command to remove a file.
|
||||
RM = /usr/bin/cmake -E rm -f
|
||||
|
||||
# Escaping for special characters.
|
||||
EQUALS = =
|
||||
|
||||
# The top-level source directory on which CMake was run.
|
||||
CMAKE_SOURCE_DIR = /home/martino/Projects/MARTe_Integrated_components/Client/streamhub
|
||||
|
||||
# The top-level build directory on which CMake was run.
|
||||
CMAKE_BINARY_DIR = /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build
|
||||
|
||||
# Include any dependencies generated for this target.
|
||||
include CMakeFiles/StreamHubClient.dir/depend.make
|
||||
# Include any dependencies generated by the compiler for this target.
|
||||
include CMakeFiles/StreamHubClient.dir/compiler_depend.make
|
||||
|
||||
# Include the progress variables for this target.
|
||||
include CMakeFiles/StreamHubClient.dir/progress.make
|
||||
|
||||
# Include the compile flags for this target's objects.
|
||||
include CMakeFiles/StreamHubClient.dir/flags.make
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/codegen:
|
||||
.PHONY : CMakeFiles/StreamHubClient.dir/codegen
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/main.cpp.o: CMakeFiles/StreamHubClient.dir/flags.make
|
||||
CMakeFiles/StreamHubClient.dir/main.cpp.o: /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/main.cpp
|
||||
CMakeFiles/StreamHubClient.dir/main.cpp.o: CMakeFiles/StreamHubClient.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/StreamHubClient.dir/main.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/StreamHubClient.dir/main.cpp.o -MF CMakeFiles/StreamHubClient.dir/main.cpp.o.d -o CMakeFiles/StreamHubClient.dir/main.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/main.cpp
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/main.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/StreamHubClient.dir/main.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/main.cpp > CMakeFiles/StreamHubClient.dir/main.cpp.i
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/main.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/StreamHubClient.dir/main.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/main.cpp -o CMakeFiles/StreamHubClient.dir/main.cpp.s
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/App.cpp.o: CMakeFiles/StreamHubClient.dir/flags.make
|
||||
CMakeFiles/StreamHubClient.dir/App.cpp.o: /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/App.cpp
|
||||
CMakeFiles/StreamHubClient.dir/App.cpp.o: CMakeFiles/StreamHubClient.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/StreamHubClient.dir/App.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/StreamHubClient.dir/App.cpp.o -MF CMakeFiles/StreamHubClient.dir/App.cpp.o.d -o CMakeFiles/StreamHubClient.dir/App.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/App.cpp
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/App.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/StreamHubClient.dir/App.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/App.cpp > CMakeFiles/StreamHubClient.dir/App.cpp.i
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/App.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/StreamHubClient.dir/App.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/App.cpp -o CMakeFiles/StreamHubClient.dir/App.cpp.s
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/WSClient.cpp.o: CMakeFiles/StreamHubClient.dir/flags.make
|
||||
CMakeFiles/StreamHubClient.dir/WSClient.cpp.o: /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/WSClient.cpp
|
||||
CMakeFiles/StreamHubClient.dir/WSClient.cpp.o: CMakeFiles/StreamHubClient.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/StreamHubClient.dir/WSClient.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/StreamHubClient.dir/WSClient.cpp.o -MF CMakeFiles/StreamHubClient.dir/WSClient.cpp.o.d -o CMakeFiles/StreamHubClient.dir/WSClient.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/WSClient.cpp
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/WSClient.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/StreamHubClient.dir/WSClient.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/WSClient.cpp > CMakeFiles/StreamHubClient.dir/WSClient.cpp.i
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/WSClient.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/StreamHubClient.dir/WSClient.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/WSClient.cpp -o CMakeFiles/StreamHubClient.dir/WSClient.cpp.s
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/Protocol.cpp.o: CMakeFiles/StreamHubClient.dir/flags.make
|
||||
CMakeFiles/StreamHubClient.dir/Protocol.cpp.o: /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/Protocol.cpp
|
||||
CMakeFiles/StreamHubClient.dir/Protocol.cpp.o: CMakeFiles/StreamHubClient.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/StreamHubClient.dir/Protocol.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/StreamHubClient.dir/Protocol.cpp.o -MF CMakeFiles/StreamHubClient.dir/Protocol.cpp.o.d -o CMakeFiles/StreamHubClient.dir/Protocol.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/Protocol.cpp
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/Protocol.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/StreamHubClient.dir/Protocol.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/Protocol.cpp > CMakeFiles/StreamHubClient.dir/Protocol.cpp.i
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/Protocol.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/StreamHubClient.dir/Protocol.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/Protocol.cpp -o CMakeFiles/StreamHubClient.dir/Protocol.cpp.s
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.o: CMakeFiles/StreamHubClient.dir/flags.make
|
||||
CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.o: /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/SourcePanel.cpp
|
||||
CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.o: CMakeFiles/StreamHubClient.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.o -MF CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.o.d -o CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/SourcePanel.cpp
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/SourcePanel.cpp > CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.i
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/SourcePanel.cpp -o CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.s
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.o: CMakeFiles/StreamHubClient.dir/flags.make
|
||||
CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.o: /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/PlotPanel.cpp
|
||||
CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.o: CMakeFiles/StreamHubClient.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.o -MF CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.o.d -o CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/PlotPanel.cpp
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/PlotPanel.cpp > CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.i
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/PlotPanel.cpp -o CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.s
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.o: CMakeFiles/StreamHubClient.dir/flags.make
|
||||
CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.o: /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/TriggerPanel.cpp
|
||||
CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.o: CMakeFiles/StreamHubClient.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.o -MF CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.o.d -o CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/TriggerPanel.cpp
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/TriggerPanel.cpp > CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.i
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/TriggerPanel.cpp -o CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.s
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.o: CMakeFiles/StreamHubClient.dir/flags.make
|
||||
CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.o: /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/StatsPanel.cpp
|
||||
CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.o: CMakeFiles/StreamHubClient.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.o -MF CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.o.d -o CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/StatsPanel.cpp
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/StatsPanel.cpp > CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.i
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/StatsPanel.cpp -o CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.s
|
||||
|
||||
# Object files for target StreamHubClient
|
||||
StreamHubClient_OBJECTS = \
|
||||
"CMakeFiles/StreamHubClient.dir/main.cpp.o" \
|
||||
"CMakeFiles/StreamHubClient.dir/App.cpp.o" \
|
||||
"CMakeFiles/StreamHubClient.dir/WSClient.cpp.o" \
|
||||
"CMakeFiles/StreamHubClient.dir/Protocol.cpp.o" \
|
||||
"CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.o" \
|
||||
"CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.o" \
|
||||
"CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.o" \
|
||||
"CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.o"
|
||||
|
||||
# External object files for target StreamHubClient
|
||||
StreamHubClient_EXTERNAL_OBJECTS =
|
||||
|
||||
StreamHubClient: CMakeFiles/StreamHubClient.dir/main.cpp.o
|
||||
StreamHubClient: CMakeFiles/StreamHubClient.dir/App.cpp.o
|
||||
StreamHubClient: CMakeFiles/StreamHubClient.dir/WSClient.cpp.o
|
||||
StreamHubClient: CMakeFiles/StreamHubClient.dir/Protocol.cpp.o
|
||||
StreamHubClient: CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.o
|
||||
StreamHubClient: CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.o
|
||||
StreamHubClient: CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.o
|
||||
StreamHubClient: CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.o
|
||||
StreamHubClient: CMakeFiles/StreamHubClient.dir/build.make
|
||||
StreamHubClient: CMakeFiles/StreamHubClient.dir/compiler_depend.ts
|
||||
StreamHubClient: libimgui_lib.a
|
||||
StreamHubClient: /usr/lib/libSDL2-2.0.so.0.3200.68
|
||||
StreamHubClient: /usr/lib/libGLX.so
|
||||
StreamHubClient: /usr/lib/libOpenGL.so
|
||||
StreamHubClient: CMakeFiles/StreamHubClient.dir/link.txt
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Linking CXX executable StreamHubClient"
|
||||
$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/StreamHubClient.dir/link.txt --verbose=$(VERBOSE)
|
||||
|
||||
# Rule to build all files generated by this target.
|
||||
CMakeFiles/StreamHubClient.dir/build: StreamHubClient
|
||||
.PHONY : CMakeFiles/StreamHubClient.dir/build
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/clean:
|
||||
$(CMAKE_COMMAND) -P CMakeFiles/StreamHubClient.dir/cmake_clean.cmake
|
||||
.PHONY : CMakeFiles/StreamHubClient.dir/clean
|
||||
|
||||
CMakeFiles/StreamHubClient.dir/depend:
|
||||
cd /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/martino/Projects/MARTe_Integrated_components/Client/streamhub /home/martino/Projects/MARTe_Integrated_components/Client/streamhub /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles/StreamHubClient.dir/DependInfo.cmake "--color=$(COLOR)" StreamHubClient
|
||||
.PHONY : CMakeFiles/StreamHubClient.dir/depend
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
file(REMOVE_RECURSE
|
||||
"CMakeFiles/StreamHubClient.dir/link.d"
|
||||
"CMakeFiles/StreamHubClient.dir/App.cpp.o"
|
||||
"CMakeFiles/StreamHubClient.dir/App.cpp.o.d"
|
||||
"CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.o"
|
||||
"CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.o.d"
|
||||
"CMakeFiles/StreamHubClient.dir/Protocol.cpp.o"
|
||||
"CMakeFiles/StreamHubClient.dir/Protocol.cpp.o.d"
|
||||
"CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.o"
|
||||
"CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.o.d"
|
||||
"CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.o"
|
||||
"CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.o.d"
|
||||
"CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.o"
|
||||
"CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.o.d"
|
||||
"CMakeFiles/StreamHubClient.dir/WSClient.cpp.o"
|
||||
"CMakeFiles/StreamHubClient.dir/WSClient.cpp.o.d"
|
||||
"CMakeFiles/StreamHubClient.dir/main.cpp.o"
|
||||
"CMakeFiles/StreamHubClient.dir/main.cpp.o.d"
|
||||
"StreamHubClient"
|
||||
"StreamHubClient.pdb"
|
||||
)
|
||||
|
||||
# Per-language clean rules from dependency scanning.
|
||||
foreach(lang CXX)
|
||||
include(CMakeFiles/StreamHubClient.dir/cmake_clean_${lang}.cmake OPTIONAL)
|
||||
endforeach()
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,2 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Timestamp file for compiler generated dependencies management for StreamHubClient.
|
||||
@@ -0,0 +1,2 @@
|
||||
# Empty dependencies file for StreamHubClient.
|
||||
# This may be replaced when dependencies are built.
|
||||
@@ -0,0 +1,10 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 4.3
|
||||
|
||||
# compile CXX with /usr/bin/c++
|
||||
CXX_DEFINES = -DAPP_RESOURCE_DIR=\"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/resources\" -DHAVE_FONT_AWESOME
|
||||
|
||||
CXX_INCLUDES = -I/home/martino/Projects/MARTe_Integrated_components/Client/streamhub -I/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/../../Source/Applications/StreamHub -I/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/resources/fonts -I/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src -I/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/backends -I/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/implot-src -isystem /usr/include/SDL2
|
||||
|
||||
CXX_FLAGS = -O3 -DNDEBUG -std=gnu++17 -Wall -Wextra -Wno-unused-parameter
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
/usr/bin/c++ -O3 -DNDEBUG -Wl,--dependency-file=CMakeFiles/StreamHubClient.dir/link.d CMakeFiles/StreamHubClient.dir/main.cpp.o CMakeFiles/StreamHubClient.dir/App.cpp.o CMakeFiles/StreamHubClient.dir/WSClient.cpp.o CMakeFiles/StreamHubClient.dir/Protocol.cpp.o CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.o CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.o CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.o CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.o -o StreamHubClient libimgui_lib.a /usr/lib/libSDL2-2.0.so.0.3200.68 -lpthread /usr/lib/libGLX.so /usr/lib/libOpenGL.so
|
||||
@@ -0,0 +1,10 @@
|
||||
CMAKE_PROGRESS_1 = 1
|
||||
CMAKE_PROGRESS_2 = 2
|
||||
CMAKE_PROGRESS_3 = 3
|
||||
CMAKE_PROGRESS_4 = 4
|
||||
CMAKE_PROGRESS_5 = 5
|
||||
CMAKE_PROGRESS_6 = 6
|
||||
CMAKE_PROGRESS_7 = 7
|
||||
CMAKE_PROGRESS_8 = 8
|
||||
CMAKE_PROGRESS_9 = 9
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles/imgui_lib.dir
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles/StreamHubClient.dir
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles/edit_cache.dir
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles/rebuild_cache.dir
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles/list_install_components.dir
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles/install.dir
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles/install/local.dir
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles/install/strip.dir
|
||||
@@ -0,0 +1 @@
|
||||
# This file is generated by cmake for dependency checking of the CMakeCache.txt file
|
||||
@@ -0,0 +1,30 @@
|
||||
|
||||
# Consider dependencies only in project.
|
||||
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
|
||||
|
||||
# The set of languages for which implicit dependencies are needed:
|
||||
set(CMAKE_DEPENDS_LANGUAGES
|
||||
)
|
||||
|
||||
# The set of dependency files which are needed:
|
||||
set(CMAKE_DEPENDS_DEPENDENCY_FILES
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/backends/imgui_impl_opengl3.cpp" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o" "gcc" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o.d"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/backends/imgui_impl_sdl2.cpp" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o" "gcc" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o.d"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui.cpp" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.o" "gcc" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.o.d"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui_draw.cpp" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.o" "gcc" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.o.d"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui_tables.cpp" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.o" "gcc" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.o.d"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui_widgets.cpp" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.o" "gcc" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.o.d"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/implot-src/implot.cpp" "CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.o" "gcc" "CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.o.d"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/implot-src/implot_items.cpp" "CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.o" "gcc" "CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.o.d"
|
||||
)
|
||||
|
||||
# Targets to which this target links which contain Fortran sources.
|
||||
set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES
|
||||
)
|
||||
|
||||
# Targets to which this target links which contain Fortran sources.
|
||||
set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES
|
||||
)
|
||||
|
||||
# Fortran module output directory.
|
||||
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
|
||||
@@ -0,0 +1,226 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 4.3
|
||||
|
||||
# Delete rule output on recipe failure.
|
||||
.DELETE_ON_ERROR:
|
||||
|
||||
#=============================================================================
|
||||
# Special targets provided by cmake.
|
||||
|
||||
# Disable implicit rules so canonical targets will work.
|
||||
.SUFFIXES:
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : %,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : SCCS/s.%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : s.%
|
||||
|
||||
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||
|
||||
# Command-line flag to silence nested $(MAKE).
|
||||
$(VERBOSE)MAKESILENT = -s
|
||||
|
||||
#Suppress display of executed commands.
|
||||
$(VERBOSE).SILENT:
|
||||
|
||||
# A target that is always out of date.
|
||||
cmake_force:
|
||||
.PHONY : cmake_force
|
||||
|
||||
#=============================================================================
|
||||
# Set environment variables for the build.
|
||||
|
||||
# The shell in which to execute make rules.
|
||||
SHELL = /bin/sh
|
||||
|
||||
# The CMake executable.
|
||||
CMAKE_COMMAND = /usr/bin/cmake
|
||||
|
||||
# The command to remove a file.
|
||||
RM = /usr/bin/cmake -E rm -f
|
||||
|
||||
# Escaping for special characters.
|
||||
EQUALS = =
|
||||
|
||||
# The top-level source directory on which CMake was run.
|
||||
CMAKE_SOURCE_DIR = /home/martino/Projects/MARTe_Integrated_components/Client/streamhub
|
||||
|
||||
# The top-level build directory on which CMake was run.
|
||||
CMAKE_BINARY_DIR = /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build
|
||||
|
||||
# Include any dependencies generated for this target.
|
||||
include CMakeFiles/imgui_lib.dir/depend.make
|
||||
# Include any dependencies generated by the compiler for this target.
|
||||
include CMakeFiles/imgui_lib.dir/compiler_depend.make
|
||||
|
||||
# Include the progress variables for this target.
|
||||
include CMakeFiles/imgui_lib.dir/progress.make
|
||||
|
||||
# Include the compile flags for this target's objects.
|
||||
include CMakeFiles/imgui_lib.dir/flags.make
|
||||
|
||||
CMakeFiles/imgui_lib.dir/codegen:
|
||||
.PHONY : CMakeFiles/imgui_lib.dir/codegen
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.o: CMakeFiles/imgui_lib.dir/flags.make
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.o: _deps/imgui-src/imgui.cpp
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.o: CMakeFiles/imgui_lib.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building CXX object CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.o -MF CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.o.d -o CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui.cpp
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui.cpp > CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.i
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui.cpp -o CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.s
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.o: CMakeFiles/imgui_lib.dir/flags.make
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.o: _deps/imgui-src/imgui_draw.cpp
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.o: CMakeFiles/imgui_lib.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "Building CXX object CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.o -MF CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.o.d -o CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui_draw.cpp
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui_draw.cpp > CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.i
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui_draw.cpp -o CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.s
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.o: CMakeFiles/imgui_lib.dir/flags.make
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.o: _deps/imgui-src/imgui_tables.cpp
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.o: CMakeFiles/imgui_lib.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "Building CXX object CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.o -MF CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.o.d -o CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui_tables.cpp
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui_tables.cpp > CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.i
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui_tables.cpp -o CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.s
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.o: CMakeFiles/imgui_lib.dir/flags.make
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.o: _deps/imgui-src/imgui_widgets.cpp
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.o: CMakeFiles/imgui_lib.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Building CXX object CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.o -MF CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.o.d -o CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui_widgets.cpp
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui_widgets.cpp > CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.i
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/imgui_widgets.cpp -o CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.s
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o: CMakeFiles/imgui_lib.dir/flags.make
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o: _deps/imgui-src/backends/imgui_impl_sdl2.cpp
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o: CMakeFiles/imgui_lib.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o -MF CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o.d -o CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/backends/imgui_impl_sdl2.cpp
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/backends/imgui_impl_sdl2.cpp > CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.i
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/backends/imgui_impl_sdl2.cpp -o CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.s
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o: CMakeFiles/imgui_lib.dir/flags.make
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o: _deps/imgui-src/backends/imgui_impl_opengl3.cpp
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o: CMakeFiles/imgui_lib.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Building CXX object CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o -MF CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o.d -o CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/backends/imgui_impl_opengl3.cpp
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/backends/imgui_impl_opengl3.cpp > CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.i
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/backends/imgui_impl_opengl3.cpp -o CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.s
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.o: CMakeFiles/imgui_lib.dir/flags.make
|
||||
CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.o: _deps/implot-src/implot.cpp
|
||||
CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.o: CMakeFiles/imgui_lib.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "Building CXX object CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.o -MF CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.o.d -o CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/implot-src/implot.cpp
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/implot-src/implot.cpp > CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.i
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/implot-src/implot.cpp -o CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.s
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.o: CMakeFiles/imgui_lib.dir/flags.make
|
||||
CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.o: _deps/implot-src/implot_items.cpp
|
||||
CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.o: CMakeFiles/imgui_lib.dir/compiler_depend.ts
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "Building CXX object CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.o"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -MD -MT CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.o -MF CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.o.d -o CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.o -c /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/implot-src/implot_items.cpp
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.i: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing CXX source to CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.i"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -E /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/implot-src/implot_items.cpp > CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.i
|
||||
|
||||
CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.s: cmake_force
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling CXX source to assembly CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.s"
|
||||
/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS) -S /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/implot-src/implot_items.cpp -o CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.s
|
||||
|
||||
# Object files for target imgui_lib
|
||||
imgui_lib_OBJECTS = \
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.o" \
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.o" \
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.o" \
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.o" \
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o" \
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o" \
|
||||
"CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.o" \
|
||||
"CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.o"
|
||||
|
||||
# External object files for target imgui_lib
|
||||
imgui_lib_EXTERNAL_OBJECTS =
|
||||
|
||||
libimgui_lib.a: CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.o
|
||||
libimgui_lib.a: CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.o
|
||||
libimgui_lib.a: CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.o
|
||||
libimgui_lib.a: CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.o
|
||||
libimgui_lib.a: CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o
|
||||
libimgui_lib.a: CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o
|
||||
libimgui_lib.a: CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.o
|
||||
libimgui_lib.a: CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.o
|
||||
libimgui_lib.a: CMakeFiles/imgui_lib.dir/build.make
|
||||
libimgui_lib.a: CMakeFiles/imgui_lib.dir/link.txt
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Linking CXX static library libimgui_lib.a"
|
||||
$(CMAKE_COMMAND) -P CMakeFiles/imgui_lib.dir/cmake_clean_target.cmake
|
||||
$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/imgui_lib.dir/link.txt --verbose=$(VERBOSE)
|
||||
|
||||
# Rule to build all files generated by this target.
|
||||
CMakeFiles/imgui_lib.dir/build: libimgui_lib.a
|
||||
.PHONY : CMakeFiles/imgui_lib.dir/build
|
||||
|
||||
CMakeFiles/imgui_lib.dir/clean:
|
||||
$(CMAKE_COMMAND) -P CMakeFiles/imgui_lib.dir/cmake_clean.cmake
|
||||
.PHONY : CMakeFiles/imgui_lib.dir/clean
|
||||
|
||||
CMakeFiles/imgui_lib.dir/depend:
|
||||
cd /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/martino/Projects/MARTe_Integrated_components/Client/streamhub /home/martino/Projects/MARTe_Integrated_components/Client/streamhub /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles/imgui_lib.dir/DependInfo.cmake "--color=$(COLOR)" imgui_lib
|
||||
.PHONY : CMakeFiles/imgui_lib.dir/depend
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
file(REMOVE_RECURSE
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o"
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o.d"
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o"
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o.d"
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.o"
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.o.d"
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.o"
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.o.d"
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.o"
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.o.d"
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.o"
|
||||
"CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.o.d"
|
||||
"CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.o"
|
||||
"CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.o.d"
|
||||
"CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.o"
|
||||
"CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.o.d"
|
||||
"libimgui_lib.a"
|
||||
"libimgui_lib.pdb"
|
||||
)
|
||||
|
||||
# Per-language clean rules from dependency scanning.
|
||||
foreach(lang CXX)
|
||||
include(CMakeFiles/imgui_lib.dir/cmake_clean_${lang}.cmake OPTIONAL)
|
||||
endforeach()
|
||||
@@ -0,0 +1,3 @@
|
||||
file(REMOVE_RECURSE
|
||||
"libimgui_lib.a"
|
||||
)
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,2 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Timestamp file for compiler generated dependencies management for imgui_lib.
|
||||
@@ -0,0 +1,2 @@
|
||||
# Empty dependencies file for imgui_lib.
|
||||
# This may be replaced when dependencies are built.
|
||||
@@ -0,0 +1,10 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 4.3
|
||||
|
||||
# compile CXX with /usr/bin/c++
|
||||
CXX_DEFINES =
|
||||
|
||||
CXX_INCLUDES = -I/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src -I/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src/backends -I/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/implot-src -isystem /usr/include/SDL2
|
||||
|
||||
CXX_FLAGS = -O3 -DNDEBUG -std=gnu++17 -w
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
/usr/bin/ar qc libimgui_lib.a "CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.o" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.o" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.o" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.o" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o" "CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o" "CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.o" "CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.o"
|
||||
/usr/bin/ranlib libimgui_lib.a
|
||||
@@ -0,0 +1,10 @@
|
||||
CMAKE_PROGRESS_1 = 10
|
||||
CMAKE_PROGRESS_2 = 11
|
||||
CMAKE_PROGRESS_3 = 12
|
||||
CMAKE_PROGRESS_4 = 13
|
||||
CMAKE_PROGRESS_5 = 14
|
||||
CMAKE_PROGRESS_6 = 15
|
||||
CMAKE_PROGRESS_7 = 16
|
||||
CMAKE_PROGRESS_8 = 17
|
||||
CMAKE_PROGRESS_9 = 18
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
18
|
||||
@@ -0,0 +1,649 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 4.3
|
||||
|
||||
# Default target executed when no arguments are given to make.
|
||||
default_target: all
|
||||
.PHONY : default_target
|
||||
|
||||
# Allow only one "make -f Makefile2" at a time, but pass parallelism.
|
||||
.NOTPARALLEL:
|
||||
|
||||
#=============================================================================
|
||||
# Special targets provided by cmake.
|
||||
|
||||
# Disable implicit rules so canonical targets will work.
|
||||
.SUFFIXES:
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : %,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : SCCS/s.%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : s.%
|
||||
|
||||
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||
|
||||
# Command-line flag to silence nested $(MAKE).
|
||||
$(VERBOSE)MAKESILENT = -s
|
||||
|
||||
#Suppress display of executed commands.
|
||||
$(VERBOSE).SILENT:
|
||||
|
||||
# A target that is always out of date.
|
||||
cmake_force:
|
||||
.PHONY : cmake_force
|
||||
|
||||
#=============================================================================
|
||||
# Set environment variables for the build.
|
||||
|
||||
# The shell in which to execute make rules.
|
||||
SHELL = /bin/sh
|
||||
|
||||
# The CMake executable.
|
||||
CMAKE_COMMAND = /usr/bin/cmake
|
||||
|
||||
# The command to remove a file.
|
||||
RM = /usr/bin/cmake -E rm -f
|
||||
|
||||
# Escaping for special characters.
|
||||
EQUALS = =
|
||||
|
||||
# The top-level source directory on which CMake was run.
|
||||
CMAKE_SOURCE_DIR = /home/martino/Projects/MARTe_Integrated_components/Client/streamhub
|
||||
|
||||
# The top-level build directory on which CMake was run.
|
||||
CMAKE_BINARY_DIR = /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build
|
||||
|
||||
#=============================================================================
|
||||
# Targets provided globally by CMake.
|
||||
|
||||
# Special rule for the target edit_cache
|
||||
edit_cache:
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake cache editor..."
|
||||
/usr/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
|
||||
.PHONY : edit_cache
|
||||
|
||||
# Special rule for the target edit_cache
|
||||
edit_cache/fast: edit_cache
|
||||
.PHONY : edit_cache/fast
|
||||
|
||||
# Special rule for the target rebuild_cache
|
||||
rebuild_cache:
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..."
|
||||
/usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
|
||||
.PHONY : rebuild_cache
|
||||
|
||||
# Special rule for the target rebuild_cache
|
||||
rebuild_cache/fast: rebuild_cache
|
||||
.PHONY : rebuild_cache/fast
|
||||
|
||||
# Special rule for the target list_install_components
|
||||
list_install_components:
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Available install components are: \"Unspecified\""
|
||||
.PHONY : list_install_components
|
||||
|
||||
# Special rule for the target list_install_components
|
||||
list_install_components/fast: list_install_components
|
||||
.PHONY : list_install_components/fast
|
||||
|
||||
# Special rule for the target install
|
||||
install: preinstall
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..."
|
||||
/usr/bin/cmake -P cmake_install.cmake
|
||||
.PHONY : install
|
||||
|
||||
# Special rule for the target install
|
||||
install/fast: preinstall/fast
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..."
|
||||
/usr/bin/cmake -P cmake_install.cmake
|
||||
.PHONY : install/fast
|
||||
|
||||
# Special rule for the target install/local
|
||||
install/local: preinstall
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..."
|
||||
/usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
|
||||
.PHONY : install/local
|
||||
|
||||
# Special rule for the target install/local
|
||||
install/local/fast: preinstall/fast
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..."
|
||||
/usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
|
||||
.PHONY : install/local/fast
|
||||
|
||||
# Special rule for the target install/strip
|
||||
install/strip: preinstall
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..."
|
||||
/usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
|
||||
.PHONY : install/strip
|
||||
|
||||
# Special rule for the target install/strip
|
||||
install/strip/fast: preinstall/fast
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..."
|
||||
/usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
|
||||
.PHONY : install/strip/fast
|
||||
|
||||
# The main all target
|
||||
all: cmake_check_build_system
|
||||
$(CMAKE_COMMAND) -E cmake_progress_start /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build//CMakeFiles/progress.marks
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all
|
||||
$(CMAKE_COMMAND) -E cmake_progress_start /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/CMakeFiles 0
|
||||
.PHONY : all
|
||||
|
||||
# The main clean target
|
||||
clean:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean
|
||||
.PHONY : clean
|
||||
|
||||
# The main clean target
|
||||
clean/fast: clean
|
||||
.PHONY : clean/fast
|
||||
|
||||
# Prepare targets for installation.
|
||||
preinstall: all
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall
|
||||
.PHONY : preinstall
|
||||
|
||||
# Prepare targets for installation.
|
||||
preinstall/fast:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall
|
||||
.PHONY : preinstall/fast
|
||||
|
||||
# clear depends
|
||||
depend:
|
||||
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
|
||||
.PHONY : depend
|
||||
|
||||
#=============================================================================
|
||||
# Target rules for targets named imgui_lib
|
||||
|
||||
# Build rule for target.
|
||||
imgui_lib: cmake_check_build_system
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 imgui_lib
|
||||
.PHONY : imgui_lib
|
||||
|
||||
# fast build rule for target.
|
||||
imgui_lib/fast:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/build
|
||||
.PHONY : imgui_lib/fast
|
||||
|
||||
#=============================================================================
|
||||
# Target rules for targets named StreamHubClient
|
||||
|
||||
# Build rule for target.
|
||||
StreamHubClient: cmake_check_build_system
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 StreamHubClient
|
||||
.PHONY : StreamHubClient
|
||||
|
||||
# fast build rule for target.
|
||||
StreamHubClient/fast:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/build
|
||||
.PHONY : StreamHubClient/fast
|
||||
|
||||
App.o: App.cpp.o
|
||||
.PHONY : App.o
|
||||
|
||||
# target to build an object file
|
||||
App.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/App.cpp.o
|
||||
.PHONY : App.cpp.o
|
||||
|
||||
App.i: App.cpp.i
|
||||
.PHONY : App.i
|
||||
|
||||
# target to preprocess a source file
|
||||
App.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/App.cpp.i
|
||||
.PHONY : App.cpp.i
|
||||
|
||||
App.s: App.cpp.s
|
||||
.PHONY : App.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
App.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/App.cpp.s
|
||||
.PHONY : App.cpp.s
|
||||
|
||||
PlotPanel.o: PlotPanel.cpp.o
|
||||
.PHONY : PlotPanel.o
|
||||
|
||||
# target to build an object file
|
||||
PlotPanel.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.o
|
||||
.PHONY : PlotPanel.cpp.o
|
||||
|
||||
PlotPanel.i: PlotPanel.cpp.i
|
||||
.PHONY : PlotPanel.i
|
||||
|
||||
# target to preprocess a source file
|
||||
PlotPanel.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.i
|
||||
.PHONY : PlotPanel.cpp.i
|
||||
|
||||
PlotPanel.s: PlotPanel.cpp.s
|
||||
.PHONY : PlotPanel.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
PlotPanel.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/PlotPanel.cpp.s
|
||||
.PHONY : PlotPanel.cpp.s
|
||||
|
||||
Protocol.o: Protocol.cpp.o
|
||||
.PHONY : Protocol.o
|
||||
|
||||
# target to build an object file
|
||||
Protocol.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/Protocol.cpp.o
|
||||
.PHONY : Protocol.cpp.o
|
||||
|
||||
Protocol.i: Protocol.cpp.i
|
||||
.PHONY : Protocol.i
|
||||
|
||||
# target to preprocess a source file
|
||||
Protocol.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/Protocol.cpp.i
|
||||
.PHONY : Protocol.cpp.i
|
||||
|
||||
Protocol.s: Protocol.cpp.s
|
||||
.PHONY : Protocol.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
Protocol.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/Protocol.cpp.s
|
||||
.PHONY : Protocol.cpp.s
|
||||
|
||||
SourcePanel.o: SourcePanel.cpp.o
|
||||
.PHONY : SourcePanel.o
|
||||
|
||||
# target to build an object file
|
||||
SourcePanel.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.o
|
||||
.PHONY : SourcePanel.cpp.o
|
||||
|
||||
SourcePanel.i: SourcePanel.cpp.i
|
||||
.PHONY : SourcePanel.i
|
||||
|
||||
# target to preprocess a source file
|
||||
SourcePanel.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.i
|
||||
.PHONY : SourcePanel.cpp.i
|
||||
|
||||
SourcePanel.s: SourcePanel.cpp.s
|
||||
.PHONY : SourcePanel.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
SourcePanel.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/SourcePanel.cpp.s
|
||||
.PHONY : SourcePanel.cpp.s
|
||||
|
||||
StatsPanel.o: StatsPanel.cpp.o
|
||||
.PHONY : StatsPanel.o
|
||||
|
||||
# target to build an object file
|
||||
StatsPanel.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.o
|
||||
.PHONY : StatsPanel.cpp.o
|
||||
|
||||
StatsPanel.i: StatsPanel.cpp.i
|
||||
.PHONY : StatsPanel.i
|
||||
|
||||
# target to preprocess a source file
|
||||
StatsPanel.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.i
|
||||
.PHONY : StatsPanel.cpp.i
|
||||
|
||||
StatsPanel.s: StatsPanel.cpp.s
|
||||
.PHONY : StatsPanel.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
StatsPanel.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/StatsPanel.cpp.s
|
||||
.PHONY : StatsPanel.cpp.s
|
||||
|
||||
TriggerPanel.o: TriggerPanel.cpp.o
|
||||
.PHONY : TriggerPanel.o
|
||||
|
||||
# target to build an object file
|
||||
TriggerPanel.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.o
|
||||
.PHONY : TriggerPanel.cpp.o
|
||||
|
||||
TriggerPanel.i: TriggerPanel.cpp.i
|
||||
.PHONY : TriggerPanel.i
|
||||
|
||||
# target to preprocess a source file
|
||||
TriggerPanel.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.i
|
||||
.PHONY : TriggerPanel.cpp.i
|
||||
|
||||
TriggerPanel.s: TriggerPanel.cpp.s
|
||||
.PHONY : TriggerPanel.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
TriggerPanel.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/TriggerPanel.cpp.s
|
||||
.PHONY : TriggerPanel.cpp.s
|
||||
|
||||
WSClient.o: WSClient.cpp.o
|
||||
.PHONY : WSClient.o
|
||||
|
||||
# target to build an object file
|
||||
WSClient.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/WSClient.cpp.o
|
||||
.PHONY : WSClient.cpp.o
|
||||
|
||||
WSClient.i: WSClient.cpp.i
|
||||
.PHONY : WSClient.i
|
||||
|
||||
# target to preprocess a source file
|
||||
WSClient.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/WSClient.cpp.i
|
||||
.PHONY : WSClient.cpp.i
|
||||
|
||||
WSClient.s: WSClient.cpp.s
|
||||
.PHONY : WSClient.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
WSClient.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/WSClient.cpp.s
|
||||
.PHONY : WSClient.cpp.s
|
||||
|
||||
_deps/imgui-src/backends/imgui_impl_opengl3.o: _deps/imgui-src/backends/imgui_impl_opengl3.cpp.o
|
||||
.PHONY : _deps/imgui-src/backends/imgui_impl_opengl3.o
|
||||
|
||||
# target to build an object file
|
||||
_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.o
|
||||
.PHONY : _deps/imgui-src/backends/imgui_impl_opengl3.cpp.o
|
||||
|
||||
_deps/imgui-src/backends/imgui_impl_opengl3.i: _deps/imgui-src/backends/imgui_impl_opengl3.cpp.i
|
||||
.PHONY : _deps/imgui-src/backends/imgui_impl_opengl3.i
|
||||
|
||||
# target to preprocess a source file
|
||||
_deps/imgui-src/backends/imgui_impl_opengl3.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.i
|
||||
.PHONY : _deps/imgui-src/backends/imgui_impl_opengl3.cpp.i
|
||||
|
||||
_deps/imgui-src/backends/imgui_impl_opengl3.s: _deps/imgui-src/backends/imgui_impl_opengl3.cpp.s
|
||||
.PHONY : _deps/imgui-src/backends/imgui_impl_opengl3.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
_deps/imgui-src/backends/imgui_impl_opengl3.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_opengl3.cpp.s
|
||||
.PHONY : _deps/imgui-src/backends/imgui_impl_opengl3.cpp.s
|
||||
|
||||
_deps/imgui-src/backends/imgui_impl_sdl2.o: _deps/imgui-src/backends/imgui_impl_sdl2.cpp.o
|
||||
.PHONY : _deps/imgui-src/backends/imgui_impl_sdl2.o
|
||||
|
||||
# target to build an object file
|
||||
_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.o
|
||||
.PHONY : _deps/imgui-src/backends/imgui_impl_sdl2.cpp.o
|
||||
|
||||
_deps/imgui-src/backends/imgui_impl_sdl2.i: _deps/imgui-src/backends/imgui_impl_sdl2.cpp.i
|
||||
.PHONY : _deps/imgui-src/backends/imgui_impl_sdl2.i
|
||||
|
||||
# target to preprocess a source file
|
||||
_deps/imgui-src/backends/imgui_impl_sdl2.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.i
|
||||
.PHONY : _deps/imgui-src/backends/imgui_impl_sdl2.cpp.i
|
||||
|
||||
_deps/imgui-src/backends/imgui_impl_sdl2.s: _deps/imgui-src/backends/imgui_impl_sdl2.cpp.s
|
||||
.PHONY : _deps/imgui-src/backends/imgui_impl_sdl2.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
_deps/imgui-src/backends/imgui_impl_sdl2.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/backends/imgui_impl_sdl2.cpp.s
|
||||
.PHONY : _deps/imgui-src/backends/imgui_impl_sdl2.cpp.s
|
||||
|
||||
_deps/imgui-src/imgui.o: _deps/imgui-src/imgui.cpp.o
|
||||
.PHONY : _deps/imgui-src/imgui.o
|
||||
|
||||
# target to build an object file
|
||||
_deps/imgui-src/imgui.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.o
|
||||
.PHONY : _deps/imgui-src/imgui.cpp.o
|
||||
|
||||
_deps/imgui-src/imgui.i: _deps/imgui-src/imgui.cpp.i
|
||||
.PHONY : _deps/imgui-src/imgui.i
|
||||
|
||||
# target to preprocess a source file
|
||||
_deps/imgui-src/imgui.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.i
|
||||
.PHONY : _deps/imgui-src/imgui.cpp.i
|
||||
|
||||
_deps/imgui-src/imgui.s: _deps/imgui-src/imgui.cpp.s
|
||||
.PHONY : _deps/imgui-src/imgui.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
_deps/imgui-src/imgui.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui.cpp.s
|
||||
.PHONY : _deps/imgui-src/imgui.cpp.s
|
||||
|
||||
_deps/imgui-src/imgui_draw.o: _deps/imgui-src/imgui_draw.cpp.o
|
||||
.PHONY : _deps/imgui-src/imgui_draw.o
|
||||
|
||||
# target to build an object file
|
||||
_deps/imgui-src/imgui_draw.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.o
|
||||
.PHONY : _deps/imgui-src/imgui_draw.cpp.o
|
||||
|
||||
_deps/imgui-src/imgui_draw.i: _deps/imgui-src/imgui_draw.cpp.i
|
||||
.PHONY : _deps/imgui-src/imgui_draw.i
|
||||
|
||||
# target to preprocess a source file
|
||||
_deps/imgui-src/imgui_draw.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.i
|
||||
.PHONY : _deps/imgui-src/imgui_draw.cpp.i
|
||||
|
||||
_deps/imgui-src/imgui_draw.s: _deps/imgui-src/imgui_draw.cpp.s
|
||||
.PHONY : _deps/imgui-src/imgui_draw.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
_deps/imgui-src/imgui_draw.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_draw.cpp.s
|
||||
.PHONY : _deps/imgui-src/imgui_draw.cpp.s
|
||||
|
||||
_deps/imgui-src/imgui_tables.o: _deps/imgui-src/imgui_tables.cpp.o
|
||||
.PHONY : _deps/imgui-src/imgui_tables.o
|
||||
|
||||
# target to build an object file
|
||||
_deps/imgui-src/imgui_tables.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.o
|
||||
.PHONY : _deps/imgui-src/imgui_tables.cpp.o
|
||||
|
||||
_deps/imgui-src/imgui_tables.i: _deps/imgui-src/imgui_tables.cpp.i
|
||||
.PHONY : _deps/imgui-src/imgui_tables.i
|
||||
|
||||
# target to preprocess a source file
|
||||
_deps/imgui-src/imgui_tables.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.i
|
||||
.PHONY : _deps/imgui-src/imgui_tables.cpp.i
|
||||
|
||||
_deps/imgui-src/imgui_tables.s: _deps/imgui-src/imgui_tables.cpp.s
|
||||
.PHONY : _deps/imgui-src/imgui_tables.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
_deps/imgui-src/imgui_tables.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_tables.cpp.s
|
||||
.PHONY : _deps/imgui-src/imgui_tables.cpp.s
|
||||
|
||||
_deps/imgui-src/imgui_widgets.o: _deps/imgui-src/imgui_widgets.cpp.o
|
||||
.PHONY : _deps/imgui-src/imgui_widgets.o
|
||||
|
||||
# target to build an object file
|
||||
_deps/imgui-src/imgui_widgets.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.o
|
||||
.PHONY : _deps/imgui-src/imgui_widgets.cpp.o
|
||||
|
||||
_deps/imgui-src/imgui_widgets.i: _deps/imgui-src/imgui_widgets.cpp.i
|
||||
.PHONY : _deps/imgui-src/imgui_widgets.i
|
||||
|
||||
# target to preprocess a source file
|
||||
_deps/imgui-src/imgui_widgets.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.i
|
||||
.PHONY : _deps/imgui-src/imgui_widgets.cpp.i
|
||||
|
||||
_deps/imgui-src/imgui_widgets.s: _deps/imgui-src/imgui_widgets.cpp.s
|
||||
.PHONY : _deps/imgui-src/imgui_widgets.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
_deps/imgui-src/imgui_widgets.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/imgui-src/imgui_widgets.cpp.s
|
||||
.PHONY : _deps/imgui-src/imgui_widgets.cpp.s
|
||||
|
||||
_deps/implot-src/implot.o: _deps/implot-src/implot.cpp.o
|
||||
.PHONY : _deps/implot-src/implot.o
|
||||
|
||||
# target to build an object file
|
||||
_deps/implot-src/implot.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.o
|
||||
.PHONY : _deps/implot-src/implot.cpp.o
|
||||
|
||||
_deps/implot-src/implot.i: _deps/implot-src/implot.cpp.i
|
||||
.PHONY : _deps/implot-src/implot.i
|
||||
|
||||
# target to preprocess a source file
|
||||
_deps/implot-src/implot.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.i
|
||||
.PHONY : _deps/implot-src/implot.cpp.i
|
||||
|
||||
_deps/implot-src/implot.s: _deps/implot-src/implot.cpp.s
|
||||
.PHONY : _deps/implot-src/implot.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
_deps/implot-src/implot.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/implot-src/implot.cpp.s
|
||||
.PHONY : _deps/implot-src/implot.cpp.s
|
||||
|
||||
_deps/implot-src/implot_items.o: _deps/implot-src/implot_items.cpp.o
|
||||
.PHONY : _deps/implot-src/implot_items.o
|
||||
|
||||
# target to build an object file
|
||||
_deps/implot-src/implot_items.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.o
|
||||
.PHONY : _deps/implot-src/implot_items.cpp.o
|
||||
|
||||
_deps/implot-src/implot_items.i: _deps/implot-src/implot_items.cpp.i
|
||||
.PHONY : _deps/implot-src/implot_items.i
|
||||
|
||||
# target to preprocess a source file
|
||||
_deps/implot-src/implot_items.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.i
|
||||
.PHONY : _deps/implot-src/implot_items.cpp.i
|
||||
|
||||
_deps/implot-src/implot_items.s: _deps/implot-src/implot_items.cpp.s
|
||||
.PHONY : _deps/implot-src/implot_items.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
_deps/implot-src/implot_items.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui_lib.dir/build.make CMakeFiles/imgui_lib.dir/_deps/implot-src/implot_items.cpp.s
|
||||
.PHONY : _deps/implot-src/implot_items.cpp.s
|
||||
|
||||
main.o: main.cpp.o
|
||||
.PHONY : main.o
|
||||
|
||||
# target to build an object file
|
||||
main.cpp.o:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/main.cpp.o
|
||||
.PHONY : main.cpp.o
|
||||
|
||||
main.i: main.cpp.i
|
||||
.PHONY : main.i
|
||||
|
||||
# target to preprocess a source file
|
||||
main.cpp.i:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/main.cpp.i
|
||||
.PHONY : main.cpp.i
|
||||
|
||||
main.s: main.cpp.s
|
||||
.PHONY : main.s
|
||||
|
||||
# target to generate assembly for a file
|
||||
main.cpp.s:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/StreamHubClient.dir/build.make CMakeFiles/StreamHubClient.dir/main.cpp.s
|
||||
.PHONY : main.cpp.s
|
||||
|
||||
# Help Target
|
||||
help:
|
||||
@echo "The following are some of the valid targets for this Makefile:"
|
||||
@echo "... all (the default if no target is provided)"
|
||||
@echo "... clean"
|
||||
@echo "... depend"
|
||||
@echo "... edit_cache"
|
||||
@echo "... install"
|
||||
@echo "... install/local"
|
||||
@echo "... install/strip"
|
||||
@echo "... list_install_components"
|
||||
@echo "... rebuild_cache"
|
||||
@echo "... StreamHubClient"
|
||||
@echo "... imgui_lib"
|
||||
@echo "... App.o"
|
||||
@echo "... App.i"
|
||||
@echo "... App.s"
|
||||
@echo "... PlotPanel.o"
|
||||
@echo "... PlotPanel.i"
|
||||
@echo "... PlotPanel.s"
|
||||
@echo "... Protocol.o"
|
||||
@echo "... Protocol.i"
|
||||
@echo "... Protocol.s"
|
||||
@echo "... SourcePanel.o"
|
||||
@echo "... SourcePanel.i"
|
||||
@echo "... SourcePanel.s"
|
||||
@echo "... StatsPanel.o"
|
||||
@echo "... StatsPanel.i"
|
||||
@echo "... StatsPanel.s"
|
||||
@echo "... TriggerPanel.o"
|
||||
@echo "... TriggerPanel.i"
|
||||
@echo "... TriggerPanel.s"
|
||||
@echo "... WSClient.o"
|
||||
@echo "... WSClient.i"
|
||||
@echo "... WSClient.s"
|
||||
@echo "... _deps/imgui-src/backends/imgui_impl_opengl3.o"
|
||||
@echo "... _deps/imgui-src/backends/imgui_impl_opengl3.i"
|
||||
@echo "... _deps/imgui-src/backends/imgui_impl_opengl3.s"
|
||||
@echo "... _deps/imgui-src/backends/imgui_impl_sdl2.o"
|
||||
@echo "... _deps/imgui-src/backends/imgui_impl_sdl2.i"
|
||||
@echo "... _deps/imgui-src/backends/imgui_impl_sdl2.s"
|
||||
@echo "... _deps/imgui-src/imgui.o"
|
||||
@echo "... _deps/imgui-src/imgui.i"
|
||||
@echo "... _deps/imgui-src/imgui.s"
|
||||
@echo "... _deps/imgui-src/imgui_draw.o"
|
||||
@echo "... _deps/imgui-src/imgui_draw.i"
|
||||
@echo "... _deps/imgui-src/imgui_draw.s"
|
||||
@echo "... _deps/imgui-src/imgui_tables.o"
|
||||
@echo "... _deps/imgui-src/imgui_tables.i"
|
||||
@echo "... _deps/imgui-src/imgui_tables.s"
|
||||
@echo "... _deps/imgui-src/imgui_widgets.o"
|
||||
@echo "... _deps/imgui-src/imgui_widgets.i"
|
||||
@echo "... _deps/imgui-src/imgui_widgets.s"
|
||||
@echo "... _deps/implot-src/implot.o"
|
||||
@echo "... _deps/implot-src/implot.i"
|
||||
@echo "... _deps/implot-src/implot.s"
|
||||
@echo "... _deps/implot-src/implot_items.o"
|
||||
@echo "... _deps/implot-src/implot_items.i"
|
||||
@echo "... _deps/implot-src/implot_items.s"
|
||||
@echo "... main.o"
|
||||
@echo "... main.i"
|
||||
@echo "... main.s"
|
||||
.PHONY : help
|
||||
|
||||
|
||||
|
||||
#=============================================================================
|
||||
# Special targets to cleanup operation of make.
|
||||
|
||||
# Special rule to run CMake to check the build system integrity.
|
||||
# No rule that depends on this can have commands that come from listfiles
|
||||
# because they might be regenerated.
|
||||
cmake_check_build_system:
|
||||
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
|
||||
.PHONY : cmake_check_build_system
|
||||
|
||||
Executable
BIN
Binary file not shown.
Submodule
+1
Submodule Client/streamhub/build/_deps/imgui-src added at dbb5eeaadf
@@ -0,0 +1,125 @@
|
||||
# This is the CMakeCache file.
|
||||
# For build in directory: /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild
|
||||
# It was generated by CMake: /usr/bin/cmake
|
||||
# You can edit this file to change values found and used by cmake.
|
||||
# If you do not want to change any of the values, simply exit the editor.
|
||||
# If you do want to change a value, simply edit, save, and exit the editor.
|
||||
# The syntax for the file is as follows:
|
||||
# KEY:TYPE=VALUE
|
||||
# KEY is the name of a variable in the cache.
|
||||
# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!.
|
||||
# VALUE is the current value for the KEY.
|
||||
|
||||
########################
|
||||
# EXTERNAL cache entries
|
||||
########################
|
||||
|
||||
//Enable/Disable color output during build.
|
||||
CMAKE_COLOR_MAKEFILE:BOOL=ON
|
||||
|
||||
//Enable/Disable output of compile commands during generation.
|
||||
CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=
|
||||
|
||||
//Value Computed by CMake.
|
||||
CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles/pkgRedirects
|
||||
|
||||
//Install path prefix, prepended onto install directories.
|
||||
CMAKE_INSTALL_PREFIX:PATH=/usr/local
|
||||
|
||||
//No help, variable specified on the command line.
|
||||
CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/make
|
||||
|
||||
//Value Computed by CMake
|
||||
CMAKE_PROJECT_COMPAT_VERSION:STATIC=
|
||||
|
||||
//Value Computed by CMake
|
||||
CMAKE_PROJECT_DESCRIPTION:STATIC=
|
||||
|
||||
//Value Computed by CMake
|
||||
CMAKE_PROJECT_HOMEPAGE_URL:STATIC=
|
||||
|
||||
//Value Computed by CMake
|
||||
CMAKE_PROJECT_NAME:STATIC=imgui-populate
|
||||
|
||||
//Value Computed by CMake
|
||||
CMAKE_PROJECT_SPDX_LICENSE:STATIC=
|
||||
|
||||
//If set, runtime paths are not added when installing shared libraries,
|
||||
// but are added when building.
|
||||
CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
|
||||
|
||||
//If set, runtime paths are not added when using shared libraries.
|
||||
CMAKE_SKIP_RPATH:BOOL=NO
|
||||
|
||||
//If this value is on, makefiles will be generated without the
|
||||
// .SILENT directive, and all commands will be echoed to the console
|
||||
// during the make. This is useful for debugging only. With Visual
|
||||
// Studio IDE projects all commands are done without /nologo.
|
||||
CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE
|
||||
|
||||
//Value Computed by CMake
|
||||
imgui-populate_BINARY_DIR:STATIC=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild
|
||||
|
||||
//Value Computed by CMake
|
||||
imgui-populate_IS_TOP_LEVEL:STATIC=ON
|
||||
|
||||
//Value Computed by CMake
|
||||
imgui-populate_SOURCE_DIR:STATIC=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild
|
||||
|
||||
|
||||
########################
|
||||
# INTERNAL cache entries
|
||||
########################
|
||||
|
||||
//This is the directory where this CMakeCache.txt was created
|
||||
CMAKE_CACHEFILE_DIR:INTERNAL=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild
|
||||
//Major version of cmake used to create the current loaded cache
|
||||
CMAKE_CACHE_MAJOR_VERSION:INTERNAL=4
|
||||
//Minor version of cmake used to create the current loaded cache
|
||||
CMAKE_CACHE_MINOR_VERSION:INTERNAL=3
|
||||
//Patch version of cmake used to create the current loaded cache
|
||||
CMAKE_CACHE_PATCH_VERSION:INTERNAL=3
|
||||
//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE
|
||||
CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1
|
||||
//Path to CMake executable.
|
||||
CMAKE_COMMAND:INTERNAL=/usr/bin/cmake
|
||||
//Path to cpack program executable.
|
||||
CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack
|
||||
//Path to ctest program executable.
|
||||
CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest
|
||||
//Path to cache edit program executable.
|
||||
CMAKE_EDIT_COMMAND:INTERNAL=/usr/bin/ccmake
|
||||
//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS
|
||||
CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1
|
||||
//Name of external makefile project generator.
|
||||
CMAKE_EXTRA_GENERATOR:INTERNAL=
|
||||
//Name of generator.
|
||||
CMAKE_GENERATOR:INTERNAL=Unix Makefiles
|
||||
//Generator instance identifier.
|
||||
CMAKE_GENERATOR_INSTANCE:INTERNAL=
|
||||
//Name of generator platform.
|
||||
CMAKE_GENERATOR_PLATFORM:INTERNAL=
|
||||
//Name of generator toolset.
|
||||
CMAKE_GENERATOR_TOOLSET:INTERNAL=
|
||||
//Source directory with the top level CMakeLists.txt file for this
|
||||
// project
|
||||
CMAKE_HOME_DIRECTORY:INTERNAL=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild
|
||||
//Install .so files without execute permission.
|
||||
CMAKE_INSTALL_SO_NO_EXE:INTERNAL=0
|
||||
//Name of CMakeLists files to read
|
||||
CMAKE_LIST_FILE_NAME:INTERNAL=CMakeLists.txt
|
||||
//number of local generators
|
||||
CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1
|
||||
//Platform information initialized
|
||||
CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1
|
||||
//Path to CMake installation.
|
||||
CMAKE_ROOT:INTERNAL=/usr/share/cmake
|
||||
//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH
|
||||
CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1
|
||||
//ADVANCED property for variable: CMAKE_SKIP_RPATH
|
||||
CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1
|
||||
//uname command
|
||||
CMAKE_UNAME:INTERNAL=/usr/bin/uname
|
||||
//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE
|
||||
CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
set(CMAKE_HOST_SYSTEM "Linux-7.0.10-arch1-1")
|
||||
set(CMAKE_HOST_SYSTEM_NAME "Linux")
|
||||
set(CMAKE_HOST_SYSTEM_VERSION "7.0.10-arch1-1")
|
||||
set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64")
|
||||
|
||||
|
||||
|
||||
set(CMAKE_SYSTEM "Linux-7.0.10-arch1-1")
|
||||
set(CMAKE_SYSTEM_NAME "Linux")
|
||||
set(CMAKE_SYSTEM_VERSION "7.0.10-arch1-1")
|
||||
set(CMAKE_SYSTEM_PROCESSOR "x86_64")
|
||||
|
||||
set(CMAKE_CROSSCOMPILING "FALSE")
|
||||
|
||||
set(CMAKE_SYSTEM_LOADED 1)
|
||||
@@ -0,0 +1,81 @@
|
||||
|
||||
---
|
||||
events:
|
||||
-
|
||||
kind: "find-v1"
|
||||
backtrace:
|
||||
- "/usr/share/cmake/Modules/CMakeDetermineSystem.cmake:12 (find_program)"
|
||||
- "CMakeLists.txt:16 (project)"
|
||||
mode: "program"
|
||||
variable: "CMAKE_UNAME"
|
||||
description: "Path to a program."
|
||||
settings:
|
||||
SearchFramework: "NEVER"
|
||||
SearchAppBundle: "NEVER"
|
||||
CMAKE_FIND_USE_CMAKE_PATH: true
|
||||
CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH: true
|
||||
CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH: true
|
||||
CMAKE_FIND_USE_CMAKE_SYSTEM_PATH: true
|
||||
CMAKE_FIND_USE_INSTALL_PREFIX: true
|
||||
names:
|
||||
- "uname"
|
||||
candidate_directories:
|
||||
- "/home/martino/.nix-profile/bin/"
|
||||
- "/nix/var/nix/profiles/default/bin/"
|
||||
- "/usr/local/sbin/"
|
||||
- "/usr/local/bin/"
|
||||
- "/usr/bin/"
|
||||
- "/home/martino/.local/share/flatpak/exports/bin/"
|
||||
- "/var/lib/flatpak/exports/bin/"
|
||||
- "/usr/lib/jvm/default/bin/"
|
||||
- "/usr/bin/site_perl/"
|
||||
- "/usr/bin/vendor_perl/"
|
||||
- "/usr/bin/core_perl/"
|
||||
- "/opt/rocm/bin/"
|
||||
- "/usr/lib/rustup/bin/"
|
||||
- "/home/martino/.local/bin/"
|
||||
- "/home/martino/.bun/bin/"
|
||||
- "/home/martino/go/bin/"
|
||||
- "/home/martino/.cargo/bin/"
|
||||
- "/home/martino/.claude/plugins/cache/claude-plugins-official/gopls-lsp/1.0.0/bin/"
|
||||
- "/home/martino/.claude/plugins/cache/claude-plugins-official/clangd-lsp/1.0.0/bin/"
|
||||
- "/home/martino/.claude/plugins/cache/claude-plugins-official/rust-analyzer-lsp/1.0.0/bin/"
|
||||
- "/home/martino/.claude/plugins/cache/claude-plugins-official/typescript-lsp/1.0.0/bin/"
|
||||
- "/bin/"
|
||||
searched_directories:
|
||||
- "/home/martino/.nix-profile/bin/uname"
|
||||
- "/nix/var/nix/profiles/default/bin/uname"
|
||||
- "/usr/local/sbin/uname"
|
||||
- "/usr/local/bin/uname"
|
||||
found: "/usr/bin/uname"
|
||||
search_context:
|
||||
ENV{PATH}:
|
||||
- "/home/martino/.nix-profile/bin"
|
||||
- "/nix/var/nix/profiles/default/bin"
|
||||
- "/usr/local/sbin"
|
||||
- "/usr/local/bin"
|
||||
- "/usr/bin"
|
||||
- "/home/martino/.local/share/flatpak/exports/bin"
|
||||
- "/var/lib/flatpak/exports/bin"
|
||||
- "/usr/lib/jvm/default/bin"
|
||||
- "/usr/bin/site_perl"
|
||||
- "/usr/bin/vendor_perl"
|
||||
- "/usr/bin/core_perl"
|
||||
- "/opt/rocm/bin"
|
||||
- "/usr/lib/rustup/bin"
|
||||
- "/home/martino/.local/bin"
|
||||
- "/home/martino/.bun/bin"
|
||||
- "/home/martino/go/bin"
|
||||
- "/home/martino/.cargo/bin"
|
||||
- "/home/martino/.claude/plugins/cache/claude-plugins-official/gopls-lsp/1.0.0/bin"
|
||||
- "/home/martino/.claude/plugins/cache/claude-plugins-official/clangd-lsp/1.0.0/bin"
|
||||
- "/home/martino/.claude/plugins/cache/claude-plugins-official/rust-analyzer-lsp/1.0.0/bin"
|
||||
- "/home/martino/.claude/plugins/cache/claude-plugins-official/typescript-lsp/1.0.0/bin"
|
||||
-
|
||||
kind: "message-v1"
|
||||
backtrace:
|
||||
- "/usr/share/cmake/Modules/CMakeDetermineSystem.cmake:212 (message)"
|
||||
- "CMakeLists.txt:16 (project)"
|
||||
message: |
|
||||
The system is: Linux - 7.0.10-arch1-1 - x86_64
|
||||
...
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 4.3
|
||||
|
||||
# Relative path conversion top directories.
|
||||
set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild")
|
||||
set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild")
|
||||
|
||||
# Force unix paths in dependencies.
|
||||
set(CMAKE_FORCE_UNIX_PATHS 1)
|
||||
|
||||
|
||||
# The C and CXX include file regular expressions for this directory.
|
||||
set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$")
|
||||
set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$")
|
||||
set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN})
|
||||
set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN})
|
||||
@@ -0,0 +1,11 @@
|
||||
# Hashes of file build rules.
|
||||
06ae87ddcda8cd5d84cdffc88ed3deb6 CMakeFiles/imgui-populate
|
||||
98782319bde6f58252eed793960b0505 CMakeFiles/imgui-populate-complete
|
||||
da03d7f1c00d7499c7ec12d9452d53e9 imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-build
|
||||
29b2dd6d0fd447cc2397fdd5ed19f0e3 imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-configure
|
||||
08f24cad2c255d20194f6a95bc9c38ba imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-download
|
||||
cfeb0eeda06f92ee92db00ae57f42b9f imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-install
|
||||
f0cef29557772ee78c44d77f645b31dd imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-mkdir
|
||||
2194cfbc51350adcec7f97602c65aac2 imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-patch
|
||||
5ca4ad2bc0d6e0791951de6295e4c9cf imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-test
|
||||
77adc2fda05161f6185cb8b6b7a91629 imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"InstallScripts" :
|
||||
[
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/cmake_install.cmake"
|
||||
],
|
||||
"Parallel" : false
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 4.3
|
||||
|
||||
# The generator used is:
|
||||
set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles")
|
||||
|
||||
# The top level Makefile was generated from the following files:
|
||||
set(CMAKE_MAKEFILE_DEPENDS
|
||||
"CMakeCache.txt"
|
||||
"CMakeFiles/4.3.3/CMakeSystem.cmake"
|
||||
"CMakeLists.txt"
|
||||
"imgui-populate-prefix/tmp/imgui-populate-mkdirs.cmake"
|
||||
"/usr/share/cmake/Modules/CMakeGenericSystem.cmake"
|
||||
"/usr/share/cmake/Modules/CMakeInitializeConfigs.cmake"
|
||||
"/usr/share/cmake/Modules/CMakeSystemSpecificInformation.cmake"
|
||||
"/usr/share/cmake/Modules/CMakeSystemSpecificInitialize.cmake"
|
||||
"/usr/share/cmake/Modules/ExternalProject.cmake"
|
||||
"/usr/share/cmake/Modules/ExternalProject/PatchInfo.txt.in"
|
||||
"/usr/share/cmake/Modules/ExternalProject/RepositoryInfo.txt.in"
|
||||
"/usr/share/cmake/Modules/ExternalProject/UpdateInfo.txt.in"
|
||||
"/usr/share/cmake/Modules/ExternalProject/cfgcmd.txt.in"
|
||||
"/usr/share/cmake/Modules/ExternalProject/gitclone.cmake.in"
|
||||
"/usr/share/cmake/Modules/ExternalProject/gitupdate.cmake.in"
|
||||
"/usr/share/cmake/Modules/ExternalProject/mkdirs.cmake.in"
|
||||
"/usr/share/cmake/Modules/ExternalProject/shared_internal_commands.cmake"
|
||||
"/usr/share/cmake/Modules/Platform/Linux-Initialize.cmake"
|
||||
"/usr/share/cmake/Modules/Platform/Linux.cmake"
|
||||
"/usr/share/cmake/Modules/Platform/UnixPaths.cmake"
|
||||
)
|
||||
|
||||
# The corresponding makefile is:
|
||||
set(CMAKE_MAKEFILE_OUTPUTS
|
||||
"Makefile"
|
||||
"CMakeFiles/cmake.check_cache"
|
||||
)
|
||||
|
||||
# Byproducts of CMake generate step:
|
||||
set(CMAKE_MAKEFILE_PRODUCTS
|
||||
"imgui-populate-prefix/tmp/imgui-populate-mkdirs.cmake"
|
||||
"imgui-populate-prefix/tmp/imgui-populate-gitclone.cmake"
|
||||
"imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-gitinfo.txt"
|
||||
"imgui-populate-prefix/tmp/imgui-populate-gitupdate.cmake"
|
||||
"imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update-info.txt"
|
||||
"imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-patch-info.txt"
|
||||
"imgui-populate-prefix/tmp/imgui-populate-cfgcmd.txt"
|
||||
"CMakeFiles/CMakeDirectoryInformation.cmake"
|
||||
)
|
||||
|
||||
# Dependency information for all targets:
|
||||
set(CMAKE_DEPEND_INFO_FILES
|
||||
"CMakeFiles/imgui-populate.dir/DependInfo.cmake"
|
||||
)
|
||||
@@ -0,0 +1,122 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 4.3
|
||||
|
||||
# Default target executed when no arguments are given to make.
|
||||
default_target: all
|
||||
.PHONY : default_target
|
||||
|
||||
#=============================================================================
|
||||
# Special targets provided by cmake.
|
||||
|
||||
# Disable implicit rules so canonical targets will work.
|
||||
.SUFFIXES:
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : %,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : SCCS/s.%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : s.%
|
||||
|
||||
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||
|
||||
# Command-line flag to silence nested $(MAKE).
|
||||
$(VERBOSE)MAKESILENT = -s
|
||||
|
||||
#Suppress display of executed commands.
|
||||
$(VERBOSE).SILENT:
|
||||
|
||||
# A target that is always out of date.
|
||||
cmake_force:
|
||||
.PHONY : cmake_force
|
||||
|
||||
#=============================================================================
|
||||
# Set environment variables for the build.
|
||||
|
||||
# The shell in which to execute make rules.
|
||||
SHELL = /bin/sh
|
||||
|
||||
# The CMake executable.
|
||||
CMAKE_COMMAND = /usr/bin/cmake
|
||||
|
||||
# The command to remove a file.
|
||||
RM = /usr/bin/cmake -E rm -f
|
||||
|
||||
# Escaping for special characters.
|
||||
EQUALS = =
|
||||
|
||||
# The top-level source directory on which CMake was run.
|
||||
CMAKE_SOURCE_DIR = /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild
|
||||
|
||||
# The top-level build directory on which CMake was run.
|
||||
CMAKE_BINARY_DIR = /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild
|
||||
|
||||
#=============================================================================
|
||||
# Directory level rules for the build root directory
|
||||
|
||||
# The main recursive "all" target.
|
||||
all: CMakeFiles/imgui-populate.dir/all
|
||||
.PHONY : all
|
||||
|
||||
# The main recursive "codegen" target.
|
||||
codegen: CMakeFiles/imgui-populate.dir/codegen
|
||||
.PHONY : codegen
|
||||
|
||||
# The main recursive "preinstall" target.
|
||||
preinstall:
|
||||
.PHONY : preinstall
|
||||
|
||||
# The main recursive "clean" target.
|
||||
clean: CMakeFiles/imgui-populate.dir/clean
|
||||
.PHONY : clean
|
||||
|
||||
#=============================================================================
|
||||
# Target rules for target CMakeFiles/imgui-populate.dir
|
||||
|
||||
# All Build rule for target.
|
||||
CMakeFiles/imgui-populate.dir/all:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui-populate.dir/build.make CMakeFiles/imgui-populate.dir/depend
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui-populate.dir/build.make CMakeFiles/imgui-populate.dir/build
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles --progress-num=1,2,3,4,5,6,7,8,9 "Built target imgui-populate"
|
||||
.PHONY : CMakeFiles/imgui-populate.dir/all
|
||||
|
||||
# Build rule for subdir invocation for target.
|
||||
CMakeFiles/imgui-populate.dir/rule: cmake_check_build_system
|
||||
$(CMAKE_COMMAND) -E cmake_progress_start /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles 9
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/imgui-populate.dir/all
|
||||
$(CMAKE_COMMAND) -E cmake_progress_start /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles 0
|
||||
.PHONY : CMakeFiles/imgui-populate.dir/rule
|
||||
|
||||
# Convenience name for target.
|
||||
imgui-populate: CMakeFiles/imgui-populate.dir/rule
|
||||
.PHONY : imgui-populate
|
||||
|
||||
# codegen rule for target.
|
||||
CMakeFiles/imgui-populate.dir/codegen:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui-populate.dir/build.make CMakeFiles/imgui-populate.dir/codegen
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles --progress-num=1,2,3,4,5,6,7,8,9 "Finished codegen for target imgui-populate"
|
||||
.PHONY : CMakeFiles/imgui-populate.dir/codegen
|
||||
|
||||
# clean rule for target.
|
||||
CMakeFiles/imgui-populate.dir/clean:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui-populate.dir/build.make CMakeFiles/imgui-populate.dir/clean
|
||||
.PHONY : CMakeFiles/imgui-populate.dir/clean
|
||||
|
||||
#=============================================================================
|
||||
# Special targets to cleanup operation of make.
|
||||
|
||||
# Special rule to run CMake to check the build system integrity.
|
||||
# No rule that depends on this can have commands that come from listfiles
|
||||
# because they might be regenerated.
|
||||
cmake_check_build_system:
|
||||
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
|
||||
.PHONY : cmake_check_build_system
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles/imgui-populate.dir
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles/edit_cache.dir
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles/rebuild_cache.dir
|
||||
@@ -0,0 +1 @@
|
||||
# This file is generated by cmake for dependency checking of the CMakeCache.txt file
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
|
||||
# Consider dependencies only in project.
|
||||
set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF)
|
||||
|
||||
# The set of languages for which implicit dependencies are needed:
|
||||
set(CMAKE_DEPENDS_LANGUAGES
|
||||
)
|
||||
|
||||
# The set of dependency files which are needed:
|
||||
set(CMAKE_DEPENDS_DEPENDENCY_FILES
|
||||
)
|
||||
|
||||
# Targets to which this target links which contain Fortran sources.
|
||||
set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES
|
||||
)
|
||||
|
||||
# Targets to which this target links which contain Fortran sources.
|
||||
set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES
|
||||
)
|
||||
|
||||
# Fortran module output directory.
|
||||
set(CMAKE_Fortran_TARGET_MODULE_DIR "")
|
||||
@@ -0,0 +1,46 @@
|
||||
{
|
||||
"sources" :
|
||||
[
|
||||
{
|
||||
"file" : "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles/imgui-populate"
|
||||
},
|
||||
{
|
||||
"file" : "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles/imgui-populate.rule"
|
||||
},
|
||||
{
|
||||
"file" : "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles/imgui-populate-complete.rule"
|
||||
},
|
||||
{
|
||||
"file" : "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-build.rule"
|
||||
},
|
||||
{
|
||||
"file" : "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-configure.rule"
|
||||
},
|
||||
{
|
||||
"file" : "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-download.rule"
|
||||
},
|
||||
{
|
||||
"file" : "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-install.rule"
|
||||
},
|
||||
{
|
||||
"file" : "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-mkdir.rule"
|
||||
},
|
||||
{
|
||||
"file" : "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-patch.rule"
|
||||
},
|
||||
{
|
||||
"file" : "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-test.rule"
|
||||
},
|
||||
{
|
||||
"file" : "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update.rule"
|
||||
}
|
||||
],
|
||||
"target" :
|
||||
{
|
||||
"labels" :
|
||||
[
|
||||
"imgui-populate"
|
||||
],
|
||||
"name" : "imgui-populate"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
# Target labels
|
||||
imgui-populate
|
||||
# Source files and their labels
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles/imgui-populate
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles/imgui-populate.rule
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles/imgui-populate-complete.rule
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-build.rule
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-configure.rule
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-download.rule
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-install.rule
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-mkdir.rule
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-patch.rule
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-test.rule
|
||||
/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update.rule
|
||||
@@ -0,0 +1,162 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 4.3
|
||||
|
||||
# Delete rule output on recipe failure.
|
||||
.DELETE_ON_ERROR:
|
||||
|
||||
#=============================================================================
|
||||
# Special targets provided by cmake.
|
||||
|
||||
# Disable implicit rules so canonical targets will work.
|
||||
.SUFFIXES:
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : %,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : SCCS/s.%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : s.%
|
||||
|
||||
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||
|
||||
# Command-line flag to silence nested $(MAKE).
|
||||
$(VERBOSE)MAKESILENT = -s
|
||||
|
||||
#Suppress display of executed commands.
|
||||
$(VERBOSE).SILENT:
|
||||
|
||||
# A target that is always out of date.
|
||||
cmake_force:
|
||||
.PHONY : cmake_force
|
||||
|
||||
#=============================================================================
|
||||
# Set environment variables for the build.
|
||||
|
||||
# The shell in which to execute make rules.
|
||||
SHELL = /bin/sh
|
||||
|
||||
# The CMake executable.
|
||||
CMAKE_COMMAND = /usr/bin/cmake
|
||||
|
||||
# The command to remove a file.
|
||||
RM = /usr/bin/cmake -E rm -f
|
||||
|
||||
# Escaping for special characters.
|
||||
EQUALS = =
|
||||
|
||||
# The top-level source directory on which CMake was run.
|
||||
CMAKE_SOURCE_DIR = /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild
|
||||
|
||||
# The top-level build directory on which CMake was run.
|
||||
CMAKE_BINARY_DIR = /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild
|
||||
|
||||
# Utility rule file for imgui-populate.
|
||||
|
||||
# Include any custom commands dependencies for this target.
|
||||
include CMakeFiles/imgui-populate.dir/compiler_depend.make
|
||||
|
||||
# Include the progress variables for this target.
|
||||
include CMakeFiles/imgui-populate.dir/progress.make
|
||||
|
||||
CMakeFiles/imgui-populate: CMakeFiles/imgui-populate-complete
|
||||
|
||||
CMakeFiles/imgui-populate-complete: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-install
|
||||
CMakeFiles/imgui-populate-complete: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-mkdir
|
||||
CMakeFiles/imgui-populate-complete: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-download
|
||||
CMakeFiles/imgui-populate-complete: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update
|
||||
CMakeFiles/imgui-populate-complete: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-patch
|
||||
CMakeFiles/imgui-populate-complete: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-configure
|
||||
CMakeFiles/imgui-populate-complete: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-build
|
||||
CMakeFiles/imgui-populate-complete: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-install
|
||||
CMakeFiles/imgui-populate-complete: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-test
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Completed 'imgui-populate'"
|
||||
/usr/bin/cmake -E make_directory /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles
|
||||
/usr/bin/cmake -E touch /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles/imgui-populate-complete
|
||||
/usr/bin/cmake -E touch /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-done
|
||||
|
||||
imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update:
|
||||
.PHONY : imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update
|
||||
|
||||
imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-build: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-configure
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles --progress-num=$(CMAKE_PROGRESS_2) "No build step for 'imgui-populate'"
|
||||
cd /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-build && /usr/bin/cmake -E echo_append
|
||||
cd /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-build && /usr/bin/cmake -E touch /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-build
|
||||
|
||||
imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-configure: imgui-populate-prefix/tmp/imgui-populate-cfgcmd.txt
|
||||
imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-configure: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-patch
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles --progress-num=$(CMAKE_PROGRESS_3) "No configure step for 'imgui-populate'"
|
||||
cd /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-build && /usr/bin/cmake -E echo_append
|
||||
cd /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-build && /usr/bin/cmake -E touch /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-configure
|
||||
|
||||
imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-download: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-gitinfo.txt
|
||||
imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-download: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-mkdir
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles --progress-num=$(CMAKE_PROGRESS_4) "Performing download step (git clone) for 'imgui-populate'"
|
||||
cd /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps && /usr/bin/cmake -DCMAKE_MESSAGE_LOG_LEVEL=VERBOSE -P /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/tmp/imgui-populate-gitclone.cmake
|
||||
cd /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps && /usr/bin/cmake -E touch /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-download
|
||||
|
||||
imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-install: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-build
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "No install step for 'imgui-populate'"
|
||||
cd /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-build && /usr/bin/cmake -E echo_append
|
||||
cd /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-build && /usr/bin/cmake -E touch /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-install
|
||||
|
||||
imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-mkdir:
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles --progress-num=$(CMAKE_PROGRESS_6) "Creating directories for 'imgui-populate'"
|
||||
/usr/bin/cmake -Dcfgdir= -P /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/tmp/imgui-populate-mkdirs.cmake
|
||||
/usr/bin/cmake -E touch /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-mkdir
|
||||
|
||||
imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-patch: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-patch-info.txt
|
||||
imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-patch: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles --progress-num=$(CMAKE_PROGRESS_7) "No patch step for 'imgui-populate'"
|
||||
/usr/bin/cmake -E echo_append
|
||||
/usr/bin/cmake -E touch /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-patch
|
||||
|
||||
imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update:
|
||||
.PHONY : imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update
|
||||
|
||||
imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-test: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-install
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles --progress-num=$(CMAKE_PROGRESS_8) "No test step for 'imgui-populate'"
|
||||
cd /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-build && /usr/bin/cmake -E echo_append
|
||||
cd /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-build && /usr/bin/cmake -E touch /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-test
|
||||
|
||||
imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update: imgui-populate-prefix/tmp/imgui-populate-gitupdate.cmake
|
||||
imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update-info.txt
|
||||
imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-download
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles --progress-num=$(CMAKE_PROGRESS_9) "Performing update step for 'imgui-populate'"
|
||||
cd /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src && /usr/bin/cmake -Dcan_fetch=YES -DCMAKE_MESSAGE_LOG_LEVEL=VERBOSE -P /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/tmp/imgui-populate-gitupdate.cmake
|
||||
|
||||
CMakeFiles/imgui-populate.dir/codegen:
|
||||
.PHONY : CMakeFiles/imgui-populate.dir/codegen
|
||||
|
||||
imgui-populate: CMakeFiles/imgui-populate
|
||||
imgui-populate: CMakeFiles/imgui-populate-complete
|
||||
imgui-populate: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-build
|
||||
imgui-populate: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-configure
|
||||
imgui-populate: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-download
|
||||
imgui-populate: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-install
|
||||
imgui-populate: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-mkdir
|
||||
imgui-populate: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-patch
|
||||
imgui-populate: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-test
|
||||
imgui-populate: imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update
|
||||
imgui-populate: CMakeFiles/imgui-populate.dir/build.make
|
||||
.PHONY : imgui-populate
|
||||
|
||||
# Rule to build all files generated by this target.
|
||||
CMakeFiles/imgui-populate.dir/build: imgui-populate
|
||||
.PHONY : CMakeFiles/imgui-populate.dir/build
|
||||
|
||||
CMakeFiles/imgui-populate.dir/clean:
|
||||
$(CMAKE_COMMAND) -P CMakeFiles/imgui-populate.dir/cmake_clean.cmake
|
||||
.PHONY : CMakeFiles/imgui-populate.dir/clean
|
||||
|
||||
CMakeFiles/imgui-populate.dir/depend:
|
||||
cd /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles/imgui-populate.dir/DependInfo.cmake "--color=$(COLOR)" imgui-populate
|
||||
.PHONY : CMakeFiles/imgui-populate.dir/depend
|
||||
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
file(REMOVE_RECURSE
|
||||
"CMakeFiles/imgui-populate"
|
||||
"CMakeFiles/imgui-populate-complete"
|
||||
"imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-build"
|
||||
"imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-configure"
|
||||
"imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-download"
|
||||
"imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-install"
|
||||
"imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-mkdir"
|
||||
"imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-patch"
|
||||
"imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-test"
|
||||
"imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-update"
|
||||
)
|
||||
|
||||
# Per-language clean rules from dependency scanning.
|
||||
foreach(lang )
|
||||
include(CMakeFiles/imgui-populate.dir/cmake_clean_${lang}.cmake OPTIONAL)
|
||||
endforeach()
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
# Empty custom commands generated dependencies file for imgui-populate.
|
||||
# This may be replaced when dependencies are built.
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Timestamp file for custom commands dependencies management for imgui-populate.
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
CMAKE_PROGRESS_1 = 1
|
||||
CMAKE_PROGRESS_2 = 2
|
||||
CMAKE_PROGRESS_3 = 3
|
||||
CMAKE_PROGRESS_4 = 4
|
||||
CMAKE_PROGRESS_5 = 5
|
||||
CMAKE_PROGRESS_6 = 6
|
||||
CMAKE_PROGRESS_7 = 7
|
||||
CMAKE_PROGRESS_8 = 8
|
||||
CMAKE_PROGRESS_9 = 9
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
9
|
||||
@@ -0,0 +1,42 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file LICENSE.rst or https://cmake.org/licensing for details.
|
||||
|
||||
cmake_minimum_required(VERSION 4.3.3)
|
||||
|
||||
# Reject any attempt to use a toolchain file. We must not use one because
|
||||
# we could be downloading it here. If the CMAKE_TOOLCHAIN_FILE environment
|
||||
# variable is set, the cache variable will have been initialized from it.
|
||||
unset(CMAKE_TOOLCHAIN_FILE CACHE)
|
||||
unset(ENV{CMAKE_TOOLCHAIN_FILE})
|
||||
|
||||
# We name the project and the target for the ExternalProject_Add() call
|
||||
# to something that will highlight to the user what we are working on if
|
||||
# something goes wrong and an error message is produced.
|
||||
|
||||
project(imgui-populate NONE)
|
||||
|
||||
|
||||
# Pass through things we've already detected in the main project to avoid
|
||||
# paying the cost of redetecting them again in ExternalProject_Add()
|
||||
set(GIT_EXECUTABLE [==[/usr/bin/git]==])
|
||||
set(Git_VERSION [==[2.54.0]==])
|
||||
set_property(GLOBAL PROPERTY _CMAKE_FindGit_GIT_EXECUTABLE_VERSION
|
||||
[==[/usr/bin/git;2.54.0]==]
|
||||
)
|
||||
|
||||
|
||||
include(ExternalProject)
|
||||
ExternalProject_Add(imgui-populate
|
||||
"UPDATE_DISCONNECTED" "False" "GIT_REPOSITORY" "https://github.com/ocornut/imgui.git" "EXTERNALPROJECT_INTERNAL_ARGUMENT_SEPARATOR" "GIT_TAG" "v1.91.8" "GIT_SHALLOW" "TRUE"
|
||||
SOURCE_DIR "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
BINARY_DIR "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-build"
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ""
|
||||
INSTALL_COMMAND ""
|
||||
TEST_COMMAND ""
|
||||
USES_TERMINAL_DOWNLOAD YES
|
||||
USES_TERMINAL_UPDATE YES
|
||||
USES_TERMINAL_PATCH YES
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,162 @@
|
||||
# CMAKE generated file: DO NOT EDIT!
|
||||
# Generated by "Unix Makefiles" Generator, CMake Version 4.3
|
||||
|
||||
# Default target executed when no arguments are given to make.
|
||||
default_target: all
|
||||
.PHONY : default_target
|
||||
|
||||
# Allow only one "make -f Makefile2" at a time, but pass parallelism.
|
||||
.NOTPARALLEL:
|
||||
|
||||
#=============================================================================
|
||||
# Special targets provided by cmake.
|
||||
|
||||
# Disable implicit rules so canonical targets will work.
|
||||
.SUFFIXES:
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : %,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : RCS/%,v
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : SCCS/s.%
|
||||
|
||||
# Disable VCS-based implicit rules.
|
||||
% : s.%
|
||||
|
||||
.SUFFIXES: .hpux_make_needs_suffix_list
|
||||
|
||||
# Command-line flag to silence nested $(MAKE).
|
||||
$(VERBOSE)MAKESILENT = -s
|
||||
|
||||
#Suppress display of executed commands.
|
||||
$(VERBOSE).SILENT:
|
||||
|
||||
# A target that is always out of date.
|
||||
cmake_force:
|
||||
.PHONY : cmake_force
|
||||
|
||||
#=============================================================================
|
||||
# Set environment variables for the build.
|
||||
|
||||
# The shell in which to execute make rules.
|
||||
SHELL = /bin/sh
|
||||
|
||||
# The CMake executable.
|
||||
CMAKE_COMMAND = /usr/bin/cmake
|
||||
|
||||
# The command to remove a file.
|
||||
RM = /usr/bin/cmake -E rm -f
|
||||
|
||||
# Escaping for special characters.
|
||||
EQUALS = =
|
||||
|
||||
# The top-level source directory on which CMake was run.
|
||||
CMAKE_SOURCE_DIR = /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild
|
||||
|
||||
# The top-level build directory on which CMake was run.
|
||||
CMAKE_BINARY_DIR = /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild
|
||||
|
||||
#=============================================================================
|
||||
# Targets provided globally by CMake.
|
||||
|
||||
# Special rule for the target edit_cache
|
||||
edit_cache:
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake cache editor..."
|
||||
/usr/bin/ccmake -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
|
||||
.PHONY : edit_cache
|
||||
|
||||
# Special rule for the target edit_cache
|
||||
edit_cache/fast: edit_cache
|
||||
.PHONY : edit_cache/fast
|
||||
|
||||
# Special rule for the target rebuild_cache
|
||||
rebuild_cache:
|
||||
@$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..."
|
||||
/usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
|
||||
.PHONY : rebuild_cache
|
||||
|
||||
# Special rule for the target rebuild_cache
|
||||
rebuild_cache/fast: rebuild_cache
|
||||
.PHONY : rebuild_cache/fast
|
||||
|
||||
# The main all target
|
||||
all: cmake_check_build_system
|
||||
$(CMAKE_COMMAND) -E cmake_progress_start /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild//CMakeFiles/progress.marks
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all
|
||||
$(CMAKE_COMMAND) -E cmake_progress_start /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles 0
|
||||
.PHONY : all
|
||||
|
||||
# The main codegen target
|
||||
codegen: cmake_check_build_system
|
||||
$(CMAKE_COMMAND) -E cmake_progress_start /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild//CMakeFiles/progress.marks
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 codegen
|
||||
$(CMAKE_COMMAND) -E cmake_progress_start /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/CMakeFiles 0
|
||||
.PHONY : codegen
|
||||
|
||||
# The main clean target
|
||||
clean:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean
|
||||
.PHONY : clean
|
||||
|
||||
# The main clean target
|
||||
clean/fast: clean
|
||||
.PHONY : clean/fast
|
||||
|
||||
# Prepare targets for installation.
|
||||
preinstall: all
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall
|
||||
.PHONY : preinstall
|
||||
|
||||
# Prepare targets for installation.
|
||||
preinstall/fast:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall
|
||||
.PHONY : preinstall/fast
|
||||
|
||||
# clear depends
|
||||
depend:
|
||||
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
|
||||
.PHONY : depend
|
||||
|
||||
#=============================================================================
|
||||
# Target rules for targets named imgui-populate
|
||||
|
||||
# Build rule for target.
|
||||
imgui-populate: cmake_check_build_system
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 imgui-populate
|
||||
.PHONY : imgui-populate
|
||||
|
||||
# fast build rule for target.
|
||||
imgui-populate/fast:
|
||||
$(MAKE) $(MAKESILENT) -f CMakeFiles/imgui-populate.dir/build.make CMakeFiles/imgui-populate.dir/build
|
||||
.PHONY : imgui-populate/fast
|
||||
|
||||
# Help Target
|
||||
help:
|
||||
@echo "The following are some of the valid targets for this Makefile:"
|
||||
@echo "... all (the default if no target is provided)"
|
||||
@echo "... clean"
|
||||
@echo "... depend"
|
||||
@echo "... codegen"
|
||||
@echo "... edit_cache"
|
||||
@echo "... rebuild_cache"
|
||||
@echo "... imgui-populate"
|
||||
.PHONY : help
|
||||
|
||||
|
||||
|
||||
#=============================================================================
|
||||
# Special targets to cleanup operation of make.
|
||||
|
||||
# Special rule to run CMake to check the build system integrity.
|
||||
# No rule that depends on this can have commands that come from listfiles
|
||||
# because they might be regenerated.
|
||||
cmake_check_build_system:
|
||||
$(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
|
||||
.PHONY : cmake_check_build_system
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
# Install script for directory: /home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild
|
||||
|
||||
# Set the install prefix
|
||||
if(NOT DEFINED CMAKE_INSTALL_PREFIX)
|
||||
set(CMAKE_INSTALL_PREFIX "/usr/local")
|
||||
endif()
|
||||
string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
|
||||
|
||||
# Set the install configuration name.
|
||||
if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME)
|
||||
if(BUILD_TYPE)
|
||||
string(REGEX REPLACE "^[^A-Za-z0-9_]+" ""
|
||||
CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}")
|
||||
else()
|
||||
set(CMAKE_INSTALL_CONFIG_NAME "")
|
||||
endif()
|
||||
message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"")
|
||||
endif()
|
||||
|
||||
# Set the component getting installed.
|
||||
if(NOT CMAKE_INSTALL_COMPONENT)
|
||||
if(COMPONENT)
|
||||
message(STATUS "Install component: \"${COMPONENT}\"")
|
||||
set(CMAKE_INSTALL_COMPONENT "${COMPONENT}")
|
||||
else()
|
||||
set(CMAKE_INSTALL_COMPONENT)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Install shared libraries without execute permission?
|
||||
if(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE)
|
||||
set(CMAKE_INSTALL_SO_NO_EXE "0")
|
||||
endif()
|
||||
|
||||
# Is this installation the result of a crosscompile?
|
||||
if(NOT DEFINED CMAKE_CROSSCOMPILING)
|
||||
set(CMAKE_CROSSCOMPILING "FALSE")
|
||||
endif()
|
||||
|
||||
string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT
|
||||
"${CMAKE_INSTALL_MANIFEST_FILES}")
|
||||
if(CMAKE_INSTALL_LOCAL_ONLY)
|
||||
file(WRITE "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/install_local_manifest.txt"
|
||||
"${CMAKE_INSTALL_MANIFEST_CONTENT}")
|
||||
endif()
|
||||
if(CMAKE_INSTALL_COMPONENT)
|
||||
if(CMAKE_INSTALL_COMPONENT MATCHES "^[a-zA-Z0-9_.+-]+$")
|
||||
set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt")
|
||||
else()
|
||||
string(MD5 CMAKE_INST_COMP_HASH "${CMAKE_INSTALL_COMPONENT}")
|
||||
set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INST_COMP_HASH}.txt")
|
||||
unset(CMAKE_INST_COMP_HASH)
|
||||
endif()
|
||||
else()
|
||||
set(CMAKE_INSTALL_MANIFEST "install_manifest.txt")
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_INSTALL_LOCAL_ONLY)
|
||||
file(WRITE "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/${CMAKE_INSTALL_MANIFEST}"
|
||||
"${CMAKE_INSTALL_MANIFEST_CONTENT}")
|
||||
endif()
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
# This is a generated file and its contents are an internal implementation detail.
|
||||
# The download step will be re-executed if anything in this file changes.
|
||||
# No other meaning or use of this file is supported.
|
||||
|
||||
method=git
|
||||
command=/usr/bin/cmake;-DCMAKE_MESSAGE_LOG_LEVEL=VERBOSE;-P;/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/tmp/imgui-populate-gitclone.cmake
|
||||
source_dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src
|
||||
work_dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps
|
||||
repository=https://github.com/ocornut/imgui.git
|
||||
remote=origin
|
||||
init_submodules=TRUE
|
||||
recurse_submodules=--recursive
|
||||
submodules=
|
||||
CMP0097=NEW
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
# This is a generated file and its contents are an internal implementation detail.
|
||||
# The download step will be re-executed if anything in this file changes.
|
||||
# No other meaning or use of this file is supported.
|
||||
|
||||
method=git
|
||||
command=/usr/bin/cmake;-DCMAKE_MESSAGE_LOG_LEVEL=VERBOSE;-P;/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/tmp/imgui-populate-gitclone.cmake
|
||||
source_dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src
|
||||
work_dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps
|
||||
repository=https://github.com/ocornut/imgui.git
|
||||
remote=origin
|
||||
init_submodules=TRUE
|
||||
recurse_submodules=--recursive
|
||||
submodules=
|
||||
CMP0097=NEW
|
||||
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
# This is a generated file and its contents are an internal implementation detail.
|
||||
# The update step will be re-executed if anything in this file changes.
|
||||
# No other meaning or use of this file is supported.
|
||||
|
||||
command=
|
||||
work_dir=
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
# This is a generated file and its contents are an internal implementation detail.
|
||||
# The patch step will be re-executed if anything in this file changes.
|
||||
# No other meaning or use of this file is supported.
|
||||
|
||||
command (connected)=/usr/bin/cmake;-Dcan_fetch=YES;-DCMAKE_MESSAGE_LOG_LEVEL=VERBOSE;-P;/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/tmp/imgui-populate-gitupdate.cmake
|
||||
command (disconnected)=/usr/bin/cmake;-Dcan_fetch=NO;-DCMAKE_MESSAGE_LOG_LEVEL=VERBOSE;-P;/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/tmp/imgui-populate-gitupdate.cmake
|
||||
work_dir=/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src
|
||||
+1
@@ -0,0 +1 @@
|
||||
cmd=''
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file LICENSE.rst or https://cmake.org/licensing for details.
|
||||
|
||||
cmake_minimum_required(VERSION ${CMAKE_VERSION}) # this file comes with cmake
|
||||
|
||||
if(EXISTS "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-gitclone-lastrun.txt" AND EXISTS "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-gitinfo.txt" AND
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-gitclone-lastrun.txt" IS_NEWER_THAN "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-gitinfo.txt")
|
||||
message(VERBOSE
|
||||
"Avoiding repeated git clone, stamp file is up to date: "
|
||||
"'/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-gitclone-lastrun.txt'"
|
||||
)
|
||||
return()
|
||||
endif()
|
||||
|
||||
# Even at VERBOSE level, we don't want to see the commands executed, but
|
||||
# enabling them to be shown for DEBUG may be useful to help diagnose problems.
|
||||
cmake_language(GET_MESSAGE_LOG_LEVEL active_log_level)
|
||||
if(active_log_level MATCHES "DEBUG|TRACE")
|
||||
set(maybe_show_command COMMAND_ECHO STDOUT)
|
||||
else()
|
||||
set(maybe_show_command "")
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E rm -rf "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
RESULT_VARIABLE error_code
|
||||
${maybe_show_command}
|
||||
)
|
||||
if(error_code)
|
||||
message(FATAL_ERROR "Failed to remove directory: '/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src'")
|
||||
endif()
|
||||
|
||||
# try the clone 3 times in case there is an odd git clone issue
|
||||
set(error_code 1)
|
||||
set(number_of_tries 0)
|
||||
while(error_code AND number_of_tries LESS 3)
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git"
|
||||
clone --no-checkout --depth 1 --no-single-branch --config "advice.detachedHead=false" "https://github.com/ocornut/imgui.git" "imgui-src"
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps"
|
||||
RESULT_VARIABLE error_code
|
||||
${maybe_show_command}
|
||||
)
|
||||
math(EXPR number_of_tries "${number_of_tries} + 1")
|
||||
endwhile()
|
||||
if(number_of_tries GREATER 1)
|
||||
message(NOTICE "Had to git clone more than once: ${number_of_tries} times.")
|
||||
endif()
|
||||
if(error_code)
|
||||
message(FATAL_ERROR "Failed to clone repository: 'https://github.com/ocornut/imgui.git'")
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git"
|
||||
checkout "v1.91.8" --
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
RESULT_VARIABLE error_code
|
||||
${maybe_show_command}
|
||||
)
|
||||
if(error_code)
|
||||
message(FATAL_ERROR "Failed to checkout tag: 'v1.91.8'")
|
||||
endif()
|
||||
|
||||
set(init_submodules TRUE)
|
||||
if(init_submodules)
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git"
|
||||
submodule update --recursive --init
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
RESULT_VARIABLE error_code
|
||||
${maybe_show_command}
|
||||
)
|
||||
endif()
|
||||
if(error_code)
|
||||
message(FATAL_ERROR "Failed to update submodules in: '/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src'")
|
||||
endif()
|
||||
|
||||
# Complete success, update the script-last-run stamp file:
|
||||
#
|
||||
execute_process(
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-gitinfo.txt" "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-gitclone-lastrun.txt"
|
||||
RESULT_VARIABLE error_code
|
||||
${maybe_show_command}
|
||||
)
|
||||
if(error_code)
|
||||
message(FATAL_ERROR "Failed to copy script-last-run stamp file: '/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/imgui-populate-gitclone-lastrun.txt'")
|
||||
endif()
|
||||
+317
@@ -0,0 +1,317 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file LICENSE.rst or https://cmake.org/licensing for details.
|
||||
|
||||
cmake_minimum_required(VERSION ${CMAKE_VERSION}) # this file comes with cmake
|
||||
|
||||
# Even at VERBOSE level, we don't want to see the commands executed, but
|
||||
# enabling them to be shown for DEBUG may be useful to help diagnose problems.
|
||||
cmake_language(GET_MESSAGE_LOG_LEVEL active_log_level)
|
||||
if(active_log_level MATCHES "DEBUG|TRACE")
|
||||
set(maybe_show_command COMMAND_ECHO STDOUT)
|
||||
else()
|
||||
set(maybe_show_command "")
|
||||
endif()
|
||||
|
||||
function(do_fetch)
|
||||
message(VERBOSE "Fetching latest from the remote origin")
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git fetch --tags --force "origin"
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
COMMAND_ERROR_IS_FATAL LAST
|
||||
${maybe_show_command}
|
||||
)
|
||||
endfunction()
|
||||
|
||||
function(get_hash_for_ref ref out_var err_var)
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git rev-parse "${ref}^0"
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
RESULT_VARIABLE error_code
|
||||
OUTPUT_VARIABLE ref_hash
|
||||
ERROR_VARIABLE error_msg
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
if(error_code)
|
||||
set(${out_var} "" PARENT_SCOPE)
|
||||
else()
|
||||
set(${out_var} "${ref_hash}" PARENT_SCOPE)
|
||||
endif()
|
||||
set(${err_var} "${error_msg}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
get_hash_for_ref(HEAD head_sha error_msg)
|
||||
if(head_sha STREQUAL "")
|
||||
message(FATAL_ERROR "Failed to get the hash for HEAD:\n${error_msg}")
|
||||
endif()
|
||||
|
||||
if("${can_fetch}" STREQUAL "")
|
||||
set(can_fetch "YES")
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git show-ref "v1.91.8"
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
OUTPUT_VARIABLE show_ref_output
|
||||
)
|
||||
if(show_ref_output MATCHES "^[a-z0-9]+[ \\t]+refs/remotes/")
|
||||
# Given a full remote/branch-name and we know about it already. Since
|
||||
# branches can move around, we should always fetch, if permitted.
|
||||
if(can_fetch)
|
||||
do_fetch()
|
||||
endif()
|
||||
set(checkout_name "v1.91.8")
|
||||
|
||||
elseif(show_ref_output MATCHES "^[a-z0-9]+[ \\t]+refs/tags/")
|
||||
# Given a tag name that we already know about. We don't know if the tag we
|
||||
# have matches the remote though (tags can move), so we should fetch. As a
|
||||
# special case to preserve backward compatibility, if we are already at the
|
||||
# same commit as the tag we hold locally, don't do a fetch and assume the tag
|
||||
# hasn't moved on the remote.
|
||||
# FIXME: We should provide an option to always fetch for this case
|
||||
get_hash_for_ref("v1.91.8" tag_sha error_msg)
|
||||
if(tag_sha STREQUAL head_sha)
|
||||
message(VERBOSE "Already at requested tag: v1.91.8")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if(can_fetch)
|
||||
do_fetch()
|
||||
endif()
|
||||
set(checkout_name "v1.91.8")
|
||||
|
||||
elseif(show_ref_output MATCHES "^[a-z0-9]+[ \\t]+refs/heads/")
|
||||
# Given a branch name without any remote and we already have a branch by that
|
||||
# name. We might already have that branch checked out or it might be a
|
||||
# different branch. It isn't fully safe to use a bare branch name without the
|
||||
# remote, so do a fetch (if allowed) and replace the ref with one that
|
||||
# includes the remote.
|
||||
if(can_fetch)
|
||||
do_fetch()
|
||||
endif()
|
||||
set(checkout_name "origin/v1.91.8")
|
||||
|
||||
else()
|
||||
get_hash_for_ref("v1.91.8" tag_sha error_msg)
|
||||
if(tag_sha STREQUAL head_sha)
|
||||
# Have the right commit checked out already
|
||||
message(VERBOSE "Already at requested ref: ${tag_sha}")
|
||||
return()
|
||||
|
||||
elseif(tag_sha STREQUAL "")
|
||||
# We don't know about this ref yet, so we have no choice but to fetch.
|
||||
if(NOT can_fetch)
|
||||
message(FATAL_ERROR
|
||||
"Requested git ref \"v1.91.8\" is not present locally, and not "
|
||||
"allowed to contact remote due to UPDATE_DISCONNECTED setting."
|
||||
)
|
||||
endif()
|
||||
|
||||
# We deliberately swallow any error message at the default log level
|
||||
# because it can be confusing for users to see a failed git command.
|
||||
# That failure is being handled here, so it isn't an error.
|
||||
if(NOT error_msg STREQUAL "")
|
||||
message(DEBUG "${error_msg}")
|
||||
endif()
|
||||
do_fetch()
|
||||
set(checkout_name "v1.91.8")
|
||||
|
||||
else()
|
||||
# We have the commit, so we know we were asked to find a commit hash
|
||||
# (otherwise it would have been handled further above), but we don't
|
||||
# have that commit checked out yet. We don't need to fetch from the remote.
|
||||
set(checkout_name "v1.91.8")
|
||||
if(NOT error_msg STREQUAL "")
|
||||
message(WARNING "${error_msg}")
|
||||
endif()
|
||||
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(git_update_strategy "REBASE")
|
||||
if(git_update_strategy STREQUAL "")
|
||||
# Backward compatibility requires REBASE as the default behavior
|
||||
set(git_update_strategy REBASE)
|
||||
endif()
|
||||
|
||||
if(git_update_strategy MATCHES "^REBASE(_CHECKOUT)?$")
|
||||
# Asked to potentially try to rebase first, maybe with fallback to checkout.
|
||||
# We can't if we aren't already on a branch and we shouldn't if that local
|
||||
# branch isn't tracking the one we want to checkout.
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git symbolic-ref -q HEAD
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
OUTPUT_VARIABLE current_branch
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
# Don't test for an error. If this isn't a branch, we get a non-zero error
|
||||
# code but empty output.
|
||||
)
|
||||
|
||||
if(current_branch STREQUAL "")
|
||||
# Not on a branch, checkout is the only sensible option since any rebase
|
||||
# would always fail (and backward compatibility requires us to checkout in
|
||||
# this situation)
|
||||
set(git_update_strategy CHECKOUT)
|
||||
|
||||
else()
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git for-each-ref "--format=%(upstream:short)" "${current_branch}"
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
OUTPUT_VARIABLE upstream_branch
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
COMMAND_ERROR_IS_FATAL ANY # There is no error if no upstream is set
|
||||
)
|
||||
if(NOT upstream_branch STREQUAL checkout_name)
|
||||
# Not safe to rebase when asked to checkout a different branch to the one
|
||||
# we are tracking. If we did rebase, we could end up with arbitrary
|
||||
# commits added to the ref we were asked to checkout if the current local
|
||||
# branch happens to be able to rebase onto the target branch. There would
|
||||
# be no error message and the user wouldn't know this was occurring.
|
||||
set(git_update_strategy CHECKOUT)
|
||||
endif()
|
||||
|
||||
endif()
|
||||
elseif(NOT git_update_strategy STREQUAL "CHECKOUT")
|
||||
message(FATAL_ERROR "Unsupported git update strategy: ${git_update_strategy}")
|
||||
endif()
|
||||
|
||||
|
||||
# Check if stash is needed
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git status --porcelain
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
RESULT_VARIABLE error_code
|
||||
OUTPUT_VARIABLE repo_status
|
||||
)
|
||||
if(error_code)
|
||||
message(FATAL_ERROR "Failed to get the status")
|
||||
endif()
|
||||
string(LENGTH "${repo_status}" need_stash)
|
||||
|
||||
# If not in clean state, stash changes in order to be able to perform a
|
||||
# rebase or checkout without losing those changes permanently
|
||||
if(need_stash)
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git stash save --quiet;--include-untracked
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
COMMAND_ERROR_IS_FATAL ANY
|
||||
${maybe_show_command}
|
||||
)
|
||||
endif()
|
||||
|
||||
if(git_update_strategy STREQUAL "CHECKOUT")
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git checkout "${checkout_name}"
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
COMMAND_ERROR_IS_FATAL ANY
|
||||
${maybe_show_command}
|
||||
)
|
||||
else()
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git rebase "${checkout_name}"
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
RESULT_VARIABLE error_code
|
||||
OUTPUT_VARIABLE rebase_output
|
||||
ERROR_VARIABLE rebase_output
|
||||
)
|
||||
if(error_code)
|
||||
# Rebase failed, undo the rebase attempt before continuing
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git rebase --abort
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
${maybe_show_command}
|
||||
)
|
||||
|
||||
if(NOT git_update_strategy STREQUAL "REBASE_CHECKOUT")
|
||||
# Not allowed to do a checkout as a fallback, so cannot proceed
|
||||
if(need_stash)
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git stash pop --index --quiet
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
${maybe_show_command}
|
||||
)
|
||||
endif()
|
||||
message(FATAL_ERROR "\nFailed to rebase in: '/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src'."
|
||||
"\nOutput from the attempted rebase follows:"
|
||||
"\n${rebase_output}"
|
||||
"\n\nYou will have to resolve the conflicts manually")
|
||||
endif()
|
||||
|
||||
# Fall back to checkout. We create an annotated tag so that the user
|
||||
# can manually inspect the situation and revert if required.
|
||||
# We can't log the failed rebase output because MSVC sees it and
|
||||
# intervenes, causing the build to fail even though it completes.
|
||||
# Write it to a file instead.
|
||||
string(TIMESTAMP tag_timestamp "%Y%m%dT%H%M%S" UTC)
|
||||
set(tag_name _cmake_ExternalProject_moved_from_here_${tag_timestamp}Z)
|
||||
set(error_log_file ${CMAKE_CURRENT_LIST_DIR}/rebase_error_${tag_timestamp}Z.log)
|
||||
file(WRITE ${error_log_file} "${rebase_output}")
|
||||
message(WARNING "Rebase failed, output has been saved to ${error_log_file}"
|
||||
"\nFalling back to checkout, previous commit tagged as ${tag_name}")
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git tag -a
|
||||
-m "ExternalProject attempting to move from here to ${checkout_name}"
|
||||
${tag_name}
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
COMMAND_ERROR_IS_FATAL ANY
|
||||
${maybe_show_command}
|
||||
)
|
||||
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git checkout "${checkout_name}"
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
COMMAND_ERROR_IS_FATAL ANY
|
||||
${maybe_show_command}
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(need_stash)
|
||||
# Put back the stashed changes
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git stash pop --index --quiet
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
RESULT_VARIABLE error_code
|
||||
${maybe_show_command}
|
||||
)
|
||||
if(error_code)
|
||||
# Stash pop --index failed: Try again dropping the index
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git reset --hard --quiet
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
${maybe_show_command}
|
||||
)
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git stash pop --quiet
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
RESULT_VARIABLE error_code
|
||||
${maybe_show_command}
|
||||
)
|
||||
if(error_code)
|
||||
# Stash pop failed: Restore previous state.
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git reset --hard --quiet ${head_sha}
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
${maybe_show_command}
|
||||
)
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git" --git-dir=.git stash pop --index --quiet
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
${maybe_show_command}
|
||||
)
|
||||
message(FATAL_ERROR "\nFailed to unstash changes in: '/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src'."
|
||||
"\nYou will have to resolve the conflicts manually")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(init_submodules "TRUE")
|
||||
if(init_submodules)
|
||||
execute_process(
|
||||
COMMAND "/usr/bin/git"
|
||||
--git-dir=.git
|
||||
submodule update --recursive --init
|
||||
WORKING_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src"
|
||||
COMMAND_ERROR_IS_FATAL ANY
|
||||
${maybe_show_command}
|
||||
)
|
||||
endif()
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
||||
# file LICENSE.rst or https://cmake.org/licensing for details.
|
||||
|
||||
cmake_minimum_required(VERSION ${CMAKE_VERSION}) # this file comes with cmake
|
||||
|
||||
# If CMAKE_DISABLE_SOURCE_CHANGES is set to true and the source directory is an
|
||||
# existing directory in our source tree, calling file(MAKE_DIRECTORY) on it
|
||||
# would cause a fatal error, even though it would be a no-op.
|
||||
if(NOT EXISTS "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src")
|
||||
file(MAKE_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-src")
|
||||
endif()
|
||||
file(MAKE_DIRECTORY
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-build"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/tmp"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src"
|
||||
"/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp"
|
||||
)
|
||||
|
||||
set(configSubDirs )
|
||||
foreach(subDir IN LISTS configSubDirs)
|
||||
file(MAKE_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp/${subDir}")
|
||||
endforeach()
|
||||
if(cfgdir)
|
||||
file(MAKE_DIRECTORY "/home/martino/Projects/MARTe_Integrated_components/Client/streamhub/build/_deps/imgui-subbuild/imgui-populate-prefix/src/imgui-populate-stamp${cfgdir}") # cfgdir has leading slash
|
||||
endif()
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user