CFLAGS = -Wall -Wextra -pedantic -std=c99 \
LDFLAGS = -lssl -lcrypto -lcurl \
INCLUDES = -Iinclude
DEBUG_CFLAGS = -g -DDEBUG \
























clean:
help:

	# Compiler and Flags
	CC = gcc
	-I/usr/local/include/bitcoin
	-L/usr/local/lib -lbitcoin
	-I/usr/local/include/bitcoin
	# Build Directories
	BUILD_DIR = build
	INSTALL_DIR = /opt/pmll
	TEST_DIR = test_build
	# Source files
	SOURCES = \
	unified_voice.c \
	pml_logic_loop.c \
	memory_silo.c \
	io_socket.c \
	persistence.c \
	cross_talk.c \
	custodian.c \
	main.c \
	vector_Matrix.c \
	arc_agi_benchmark.c \
	pmll_np_solver.c \
	SAT_Compare.c \
	Pmll_NP_Solver.c \
	MiniSAT.c \
	generate_3sat_instance.c \
	SAT_Solver.c \
	API_Llama.c \
	API.c \
	silo_manager.c \
	logic_loop.c
	# Object and Dependency files
	OBJECTS = $(SOURCES:.c=.o)
	DEPFILES = $(SOURCES:.c=.d)
	# Targets
	TARGETS = pmll arc_agi_benchmark pmll_np_solver sat_test api_llama api vector_Matrix silo_manager logic_loop custodian
	# Default target: Build all
	.PHONY: all
	all: $(TARGETS)
	# Define each binary and its dependencies
	pmll: unified_voice.o pml_logic_loop.o memory_silo.o io_socket.o persistence.o cross_talk.o custodian.o main.o vector_Matrix.o
	$(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDES) -o $@ $^ \
	-I/usr/local/include/bitcoin \
	-L/usr/local/lib -lbitcoin
	arc_agi_benchmark: arc_agi_benchmark.o vector_Matrix.o io_socket.o
	$(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDES) -o $@ $^ \
	-I/usr/local/include/bitcoin \
	-L/usr/local/lib -lbitcoin
	pmll_np_solver: pmll_np_solver.o vector_Matrix.o io_socket.o
	$(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDES) -o $@ $^ \
	-I/usr/local/include/bitcoin \
	-L/usr/local/lib -lbitcoin
	sat_test: SAT_Compare.o Pmll_NP_Solver.o MiniSAT.o generate_3sat_instance.o SAT_Solver.o vector_Matrix.o io_socket.o
	$(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDES) -o $@ $^ \
	-I/usr/local/include/bitcoin \
	-L/usr/local/lib -lbitcoin
	api_llama: API_Llama.o vector_Matrix.o io_socket.o
	$(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDES) -o $@ $^ \
	-I/usr/local/include/bitcoin \
	-L/usr/local/lib -lbitcoin
	api: API.o vector_Matrix.o io_socket.o
	$(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDES) -o $@ $^ \
	-I/usr/local/include/bitcoin \
	-L/usr/local/lib -lbitcoin
	vector_Matrix: vector_Matrix.o io_socket.o
	$(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDES) -o $@ $^ \
	-I/usr/local/include/bitcoin \
	-L/usr/local/lib -lbitcoin
	silo_manager: silo_manager.o
	$(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDES) -o $@ $^ \
	-I/usr/local/include/bitcoin \
	-L/usr/local/lib -lbitcoin
	logic_loop: logic_loop.o
	$(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDES) -o $@ $^ \
	-I/usr/local/include/bitcoin \
	-L/usr/local/lib -lbitcoin
	custodian: custodian.o io_socket.o
	$(CC) $(CFLAGS) $(LDFLAGS) $(INCLUDES) -o $@ $^ \
	-I/usr/local/include/bitcoin \
	-L/usr/local/lib -lbitcoin
	# Compile Rules
	%.o: %.c
	@mkdir -p $(BUILD_DIR)
	$(CC) $(CFLAGS) $(INCLUDES) -c $< -o $(BUILD_DIR)/$@ \
	-I/usr/local/include/bitcoin
	# Dependency Generation
	%.d: %.c
	$(CC) -M $(CFLAGS) $(INCLUDES) $< > $@ \
	-I/usr/local/include/bitcoin
	include $(DEPFILES)
	# Test Build
	.PHONY: test
	test: clean
	@echo "Building test executables in $(TEST_DIR)..."
	@mkdir -p $(TEST_DIR)
	@$(MAKE) all CFLAGS="$(CFLAGS) -g -O0 -DTEST" LDFLAGS="$(LDFLAGS)" BUILD_DIR=$(TEST_DIR) \
	-I/usr/local/include/bitcoin \
	-L/usr/local/lib -lbitcoin
	# Deployment
	.PHONY: deploy
	deploy: $(TARGETS)
	@sudo mkdir -p $(INSTALL_DIR)
	@sudo install -m 755 $(TARGETS) $(INSTALL_DIR)/
	@echo "Deployment complete to $(INSTALL_DIR)."
	# Debug Build
	.PHONY: debug
	debug: CFLAGS += $(DEBUG_CFLAGS) \
	-I/usr/local/include/bitcoin
	debug: all
	# Clean Build Artifacts
	.PHONY: clean
	@echo "Cleaning up..."
	-rm -f $(BUILD_DIR)/*.o $(TARGETS) $(DEPFILES) *.pid
	@echo "Clean complete."
	# Help Target
	.PHONY: help
	@echo "Makefile commands:"
	@echo "  all                  Build all executables."
	@echo "  test                 Build test executables with debug flags."
	@echo "  deploy               Deploy binaries to $(INSTALL_DIR)."
	@echo "  deploy_script        Run deployment using deploy.sh."
	@echo "  start_services       Start all services."
	@echo "  stop_services        Stop all services."
	@echo "  Orchestrate          Run the orchestration script."
	@echo "  clean                Remove all build artifacts."
	@echo "  help                 Show this help message."
