SRCS += src/mplex/mplex_args.cpp src/mplex/mplex_canvas.cpp src/mplex/mplex_chooser.cpp src/mplex/mplex_client.cpp SRCS += src/mplex/mplex_clientconn.cpp src/mplex/mplex_clockmode.cpp src/mplex/mplex_command_specs.cpp src/mplex/mplex_commands.cpp SRCS += src/mplex/mplex_common.cpp src/mplex/mplex_config.cpp src/mplex/mplex_copymode.cpp src/mplex/mplex_ctx.cpp SRCS += src/mplex/mplex_default_keys.cpp src/mplex/mplex_flowscreen.cpp src/mplex/mplex_format.cpp src/mplex/mplex_input.cpp SRCS += src/mplex/mplex_json.cpp src/mplex/mplex_keys.cpp src/mplex/mplex_layout.cpp src/mplex/mplex_mode.cpp SRCS += src/mplex/mplex_options.cpp src/mplex/mplex_pane.cpp src/mplex/mplex_panenumbers.cpp src/mplex/mplex_prompt.cpp SRCS += src/mplex/mplex_py.cpp src/mplex/mplex_renderer.cpp src/mplex/mplex_server.cpp src/mplex/mplex_style.cpp SRCS += src/mplex/mplex_toml.cpp src/mplex/mplex_vtscreen.cpp SRCS += src/mplex/mplex_plexer_flow.cpp # Standalone client/server binary and its tests; every output lands in $(BUILD). MPLEX_LIB_SRCS = $(filter src/mplex/%.cpp src/mplex/mplex_plexer_flow.cpp,$(SRCS)) MPLEX_INC = -Isrc/mplex -Isrc/plexer $(BUILD)/mplex_cli: tests/mplex_cli_main.cpp $(MPLEX_LIB_SRCS) @mkdir -p $(BUILD) $(CXX) $(CXXSTD) $(WARN) -O2 $(MPLEX_INC) tests/mplex_cli_main.cpp $(MPLEX_LIB_SRCS) -o $@ $(BUILD)/mplex_flow_test: tests/mplex_flow_test.cpp $(MPLEX_LIB_SRCS) @mkdir -p $(BUILD) $(CXX) $(CXXSTD) $(WARN) -O2 $(MPLEX_INC) tests/mplex_flow_test.cpp $(MPLEX_LIB_SRCS) -o $@ mplex-flow-test: $(BUILD)/mplex_flow_test python3 -I tests/mplex_flow_gen.py .. $(BUILD)/flow_corpus.jsonl $(BUILD)/mplex_flow_test $(BUILD)/flow_corpus.jsonl mplex-e2e: $(BUILD)/mplex_cli python3 -I tests/mplex_e2e.py .. .PHONY: mplex-flow-test mplex-e2e