aboutsummaryrefslogtreecommitdiffstats
path: root/Makefile
blob: 761ea4cf1dbaa0530ce81b3d47247f03ea6ef84f (plain)
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
99
100
101
102
103
# =====================
# ====  ===============
# =====================
# ===   ===   ====   ==
# ====  ==     ==  =  =
# ====  ==  =  ==     =
# ====  ==  =  ==  ====
# ====  ==  =  ==  =  =
# =  =  ===   ====   ==
# ==   ================
# =====================
#
# halfcab: Makefile
# Fri, 19 Sep 2025 23:48:21 +0200
# joe <rbo@gmx.us>
#
# GNU Makefile

default: run

SHELL		:= /bin/sh
OS			 = $(shell /usr/bin/uname)

ESP_DIR		 = esp/halfcab/
OBJ_DIR		 = obj/
SRC_DIR		 = src/
TRG_DIR		 = ./

ESP_FQBN	 = esp8266:esp8266:d1_mini
ESP_DEV		 = /dev/ttyUSB0

TARGET		 = hc

ESP_NAME	 = halfcab.ino

SRC_NAME	 = c_halfcab

INC_NAME	 = c_defines

SRCS		 = $(addprefix ${SRC_DIR}, $(addsuffix .c, ${SRC_NAME}))
INCS		 = $(addprefix ${SRC_DIR}, $(addsuffix .h, ${SRC_NAME}))
INCS		+= $(addprefix ${SRC_DIR}, $(addsuffix .h, ${INC_NAME}))
OBJS		 = $(patsubst  ${SRC_DIR}%.c, ${OBJ_DIR}%.c.o, ${SRCS})

ARDUINO		 = arduino-cli
CC			 = cc
CFLAGS		 = -std=c89
CFLAGS		+= -Wall
CFLAGS		+= -Wextra
CFLAGS		+= -Werror
CFLAGS		+= -pedantic
CFLAGS		+= -march=haswell
CFLAGS		+= -O2
CFLAGS		+= -pipe
ifeq (${OS}, Linux)
CFLAGS		+= -D_GNU_SOURCE
endif

ifeq (${OS}, Linux)
CINCS		 = -isystem /usr/include
endif

MKDIR		 = mkdir -p
RMDIR		 = rmdir
RM			 = rm -rf

${OBJ_DIR}%.c.o:	${SRC_DIR}%.c ${INCS} Makefile
	${CC} ${CFLAGS} -c ${CINCS} -o $@ $<

${OBJ_DIR}:
	${MKDIR} ${OBJ_DIR}

${TRG_DIR}${TARGET}:	${OBJ_DIR} ${OBJS}
	${CC} ${CFLAGS} -o $@ ${OBJS} ${LDFLAGS}

debug: CFLAGS += -O0
debug: CFLAGS += -g3
debug: ${TRG_DIR}${TARGET}

asan: CFLAGS += -O0
asan: CFLAGS += -g3
asan: CFLAGS += -fsanitize=address
asan: ${TRG_DIR}${TARGET}

clean:
	${RM} ${OBJS} vgcore.* ${TARGET}.core ${TARGET} ${OBJ_DIR}

esp:
	${ARDUINO} compile -v -j8 --warnings all --fqbn ${ESP_FQBN} --build-property build.extra_flags=-I${SRC_DIR} ${SRC_DIR}${ESP_DIR}
	${ARDUINO} upload -p ${ESP_DEV} --fqbn ${ESP_FQBN} ${SRC_DIR}${ESP_DIR}

attach:
	${ARDUINO} board attach -p ${ESP_DEV} -b ${ESP_FQBN} ${SRC_DIR}${ESP_DIR}${ESP_NAME}

mon:
	${ARDUINO} monitor -p ${ESP_DEV} -b ${ESP_FQBN} --config 115200 --config 'rts=off' --config 'dtr=off' --quiet

all: esp ${TRG_DIR}${TARGET}

run: debug
	${TRG_DIR}${TARGET}

.PHONY: esp attach mon hc clean asan debug all run