-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
98 lines (77 loc) · 2.97 KB
/
Copy pathMakefile
File metadata and controls
98 lines (77 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# Makefile for QuickDash
CC = gcc
CFLAGS = -Wall -Wextra -O2 -I./include $(shell pkg-config --cflags libcjson) -pthread
WIDGET_CFLAGS = -Wall -Wextra -O2 -I./widgets -pthread
LDFLAGS = -pthread -lncursesw -lyaml $(shell pkg-config --libs libcjson)
# Cross-compilation for ARM (uncomment for ARM builds)
# CC = aarch64-linux-gnu-gcc
# LDFLAGS = -pthread -lncursesw -static
# Directories
SRC_DIR = src
INCLUDE_DIR = include
WIDGET_DIR = widgets
WIDGET_SDK_DIR = $(WIDGET_DIR)/sdk
BUILD_DIR = build
BIN_DIR = bin
# Source files
MAIN_SOURCES = $(wildcard $(SRC_DIR)/*.c)
MAIN_OBJECTS = $(MAIN_SOURCES:$(SRC_DIR)/%.c=$(BUILD_DIR)/%.o)
# Widget SDK sources (excluding env_loader.c - widgets should not access environment)
WIDGET_SDK_SOURCES = $(filter-out $(WIDGET_SDK_DIR)/env_loader.c, $(wildcard $(WIDGET_SDK_DIR)/*.c))
WIDGET_SDK_OBJECTS = $(WIDGET_SDK_SOURCES:$(WIDGET_SDK_DIR)/%.c=$(BUILD_DIR)/sdk_%.o)
# Widget sources
WIDGET_SOURCES = $(wildcard $(WIDGET_DIR)/*.c)
WIDGET_BINARIES = $(WIDGET_SOURCES:$(WIDGET_DIR)/%.c=$(BIN_DIR)/widgets/%)
# Main target (can be overridden, e.g., make TARGET=bin/quickdash_arm)
TARGET ?= $(BIN_DIR)/quickdash
.PHONY: all clean install widgets
all: $(BUILD_DIR) $(BIN_DIR) $(TARGET) widgets
$(BUILD_DIR):
mkdir -p $(BUILD_DIR)
$(BIN_DIR):
mkdir -p $(BIN_DIR)
mkdir -p $(BIN_DIR)/widgets
# Build main executable (dashboard only, no widget SDK)
$(TARGET): $(MAIN_OBJECTS)
$(CC) -o $@ $^ $(LDFLAGS)
@echo "Built main executable: $(TARGET)"
# Build object files for main dashboard
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
$(CC) $(CFLAGS) -c -o $@ $<
# Build widget SDK object files
$(BUILD_DIR)/sdk_%.o: $(WIDGET_SDK_DIR)/%.c
$(CC) $(WIDGET_CFLAGS) -c -o $@ $<
# Build widgets (with SDK dependencies)
widgets: $(WIDGET_BINARIES)
@echo "Built all widgets"
$(BIN_DIR)/widgets/%: $(WIDGET_DIR)/%.c $(WIDGET_SDK_OBJECTS)
$(CC) $(WIDGET_CFLAGS) -o $@ $< $(WIDGET_SDK_OBJECTS) $(shell pkg-config --libs libcjson)
@echo "Built widget: $@"
# Install (copy to parent directory for compatibility)
install: all
@echo "Installing to parent directory..."
cp $(TARGET) ../quickdash-c
cp -r $(BIN_DIR)/widgets ../widgets-c
@echo "Installation complete"
# Clean build artifacts
clean:
rm -rf $(BUILD_DIR) $(BIN_DIR)
@echo "Cleaned build artifacts"
# Debug target
debug: CFLAGS += -g -DDEBUG
debug: all
# Test targets
TEST_OBJECTS = $(filter-out build/main.o, $(MAIN_OBJECTS))
test-statusbar: $(BIN_DIR) $(MAIN_OBJECTS)
$(CC) $(CFLAGS) -o $(BIN_DIR)/test-statusbar tests/statusbar.c $(TEST_OBJECTS) $(LDFLAGS)
@echo "Built test: $(BIN_DIR)/test-statusbar"
# Help
help:
@echo "QuickDash - Makefile targets:"
@echo " make - Build everything (default)"
@echo " make widgets - Build only widgets"
@echo " make test-statusbar - Build status bar test program"
@echo " make install - Install to parent directory"
@echo " make clean - Remove build artifacts"
@echo " make debug - Build with debug symbols"
@echo " make help - Show this help"