1+ # Auto Decoder Pro - Production Makefile
2+ VERSION := 2.0.0
3+ PREFIX ?= /usr/local
4+
5+ CC := gcc
6+ PKG_CONFIG := pkg-config
7+
8+ # Build type: release, debug, profile
9+ BUILD ?= release
10+
11+ # Flags
12+ CFLAGS_BASE := -Wall -Wextra -pthread -DVERSION=\"$(VERSION ) \" -D_GNU_SOURCE
13+ CFLAGS_OPT := -O3 -march=native -flto -fomit-frame-pointer -fstack-protector-strong
14+ CFLAGS_DEBUG := -g -O0 -DDEBUG -fsanitize=address,undefined
15+
16+ ifeq ($(BUILD ) ,debug)
17+ CFLAGS := $(CFLAGS_BASE ) $(CFLAGS_DEBUG )
18+ LDFLAGS := -fsanitize=address,undefined
19+ SUFFIX := -debug
20+ else
21+ CFLAGS := $(CFLAGS_BASE ) $(CFLAGS_OPT ) -DNDEBUG
22+ LDFLAGS := -flto -Wl,-O2
23+ SUFFIX :=
24+ endif
25+
26+ # Dependencies
27+ GTK_CFLAGS := $(shell $(PKG_CONFIG ) --cflags gtk+-3.0 glib-2.0 2>/dev/null)
28+ GTK_LIBS := $(shell $(PKG_CONFIG ) --libs gtk+-3.0 glib-2.0 gmodule-2.0 2>/dev/null)
29+
30+ CFLAGS += $(GTK_CFLAGS )
31+ LDFLAGS += $(GTK_LIBS ) -lm
32+
33+ # Directories
34+ SRCDIR := src
35+ INCDIR := include
36+ UIDIR := ui
37+ OBJDIR := build/obj
38+ BINDIR := build/bin
39+
40+ # Source files
41+ CORE_SRC := $(SRCDIR ) /core.c $(SRCDIR ) /decoder.c $(SRCDIR ) /encoder.c \
42+ $(SRCDIR ) /plugin.c $(SRCDIR ) /lru_cache.c $(SRCDIR ) /logging.c \
43+ $(SRCDIR ) /errors.c $(SRCDIR ) /crash_handler.c
44+
45+ UI_SRC := $(UIDIR ) /gui.c
46+ GUI_SRC := $(SRCDIR ) /main.c
47+ CLI_SRC := $(SRCDIR ) /cli.c
48+
49+ # Objects
50+ CORE_OBJ := $(CORE_SRC:%.c=$(OBJDIR ) /%.o )
51+ UI_OBJ := $(UI_SRC:%.c=$(OBJDIR ) /%.o )
52+ GUI_OBJ := $(GUI_SRC:%.c=$(OBJDIR ) /%.o ) $(CORE_OBJ ) $(UI_OBJ )
53+ CLI_OBJ := $(CLI_SRC:%.c=$(OBJDIR ) /%.o ) $(CORE_OBJ )
54+
55+ # Targets
56+ .PHONY : all clean install uninstall gui cli help
57+
58+ all : gui cli
59+
60+ gui : $(BINDIR ) /auto_decoder_pro$(SUFFIX )
61+
62+ cli : $(BINDIR ) /auto_decoder$(SUFFIX )
63+
64+ $(BINDIR ) /auto_decoder_pro$(SUFFIX ) : $(GUI_OBJ )
65+ @mkdir -p $(BINDIR )
66+ @echo " Building GUI ($( BUILD) mode)..."
67+ $(CC ) $(CFLAGS ) -o $@ $^ $(LDFLAGS )
68+ @echo " ✅ GUI built: $@ "
69+
70+ $(BINDIR ) /auto_decoder$(SUFFIX ) : $(CLI_OBJ )
71+ @mkdir -p $(BINDIR )
72+ @echo " Building CLI ($( BUILD) mode)..."
73+ $(CC ) $(CFLAGS ) -o $@ $^ $(LDFLAGS )
74+ @echo " ✅ CLI built: $@ "
75+
76+ $(OBJDIR ) /% .o : % .c
77+ @mkdir -p $(dir $@ )
78+ @echo " Compiling: $<"
79+ $(CC ) $(CFLAGS ) -I$(INCDIR ) -I$(UIDIR ) -c $< -o $@
80+
81+ clean :
82+ @echo " Cleaning..."
83+ rm -rf $(OBJDIR ) $(BINDIR )
84+ @echo " ✅ Clean complete"
85+
86+ install : all
87+ @echo " Installing to $( PREFIX) ..."
88+ install -Dm755 $(BINDIR ) /auto_decoder_pro$(SUFFIX ) $(PREFIX ) /bin/auto_decoder_pro
89+ install -Dm755 $(BINDIR ) /auto_decoder$(SUFFIX ) $(PREFIX ) /bin/auto_decoder
90+ @echo " ✅ Installation complete"
91+
92+ uninstall :
93+ @echo " Uninstalling..."
94+ rm -f $(PREFIX ) /bin/auto_decoder_pro
95+ rm -f $(PREFIX ) /bin/auto_decoder
96+ @echo " ✅ Uninstall complete"
97+
98+ help :
99+ @echo " Auto Decoder Pro Build System v$( VERSION) "
100+ @echo " "
101+ @echo " Targets:"
102+ @echo " all - Build GUI and CLI (default)"
103+ @echo " gui - Build GUI only"
104+ @echo " cli - Build CLI only"
105+ @echo " clean - Remove build artifacts"
106+ @echo " install - Install to system"
107+ @echo " uninstall - Remove from system"
0 commit comments