File: Makefile

package info (click to toggle)
ap51-flash 2025.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 472 kB
  • sloc: ansic: 4,485; makefile: 129; python: 33
file content (151 lines) | stat: -rw-r--r-- 3,700 bytes parent folder | download
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
# SPDX-License-Identifier: GPL-3.0-or-later
# SPDX-FileCopyrightText: Marek Lindner <marek.lindner@mailbox.org>

# enable debug output
# CPPFLAGS += -DDEBUG
# clear screen after each subsequent flash
# CPPFLAGS += -DCLEAR_SCREEN

# define $EMBED_IMG=/path/to/image to have your image included
# into the binary where $EMBED_IMG is one of the following:
# * EMBED_CI
# * EMBED_CE
# * EMBED_UBNT
# * EMBED_UBOOT
# * EMBED_ZYXEL

BINARY_NAME = ap51-flash
OBJ += commandline.o
OBJ += flash.o
OBJ += fwcfg.o
OBJ += proto.o
OBJ += router_images.o
OBJ += router_redboot.o
OBJ += router_tftp_client.o
OBJ += router_tftp_server.o
OBJ += router_netconsole.o
OBJ += router_types.o
OBJ += socket.o
AP51_RC = ap51-flash-res

BINARY_TARGET_NAMES += $(BINARY_NAME)
BINARY_TARGET_NAMES += $(BINARY_NAME).exe
BINARY_TARGET_NAMES += $(BINARY_NAME)-osx

# ap51-flash flags and options
CFLAGS += -Wall -W -std=gnu99 -fno-strict-aliasing $(EXTRA_CFLAGS) -MD -MP
CPPFLAGS += -D_GNU_SOURCE
LDLIBS +=

# disable verbose output
ifneq ($(findstring $(MAKEFLAGS),s),s)
ifndef V
  Q_CC = @echo '   ' CC $@;
  Q_LD = @echo '   ' LD $@;
  Q_SILENT = @
  export Q_CC
  export Q_LD
  export Q_SILENT
endif
endif

CC      = $(CROSS)gcc
RM     ?= rm -f
STRIP   = $(CROSS)strip
OBJCOPY = $(CROSS)objcopy
WINDRES = $(CROSS)windres
COMPILE.c = $(Q_CC)$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
LINK.o = $(Q_LD)$(CC) $(CFLAGS) $(LDFLAGS) $(TARGET_ARCH)

ifeq ($(MAKECMDGOALS),)
  PLATFORM = LINUX
else ifeq ($(MAKECMDGOALS),$(BINARY_NAME))
  PLATFORM = LINUX
else ifeq ($(MAKECMDGOALS),$(BINARY_NAME).exe)
  PLATFORM = WIN32
else ifeq ($(MAKECMDGOALS),$(BINARY_NAME)-osx)
  PLATFORM = OSX
endif

ifneq ($(PLATFORM),)
CPPFLAGS += -D$(PLATFORM)
endif

ifeq ($(PLATFORM),LINUX)
  BINARY_SUFFIX =
else ifeq ($(PLATFORM),WIN32)
  BINARY_SUFFIX = .exe
  CPPFLAGS += -D_CONSOLE -D_MBCS -D__USE_MINGW_ANSI_STDIO=1

  ifeq ($(origin PKG_CONFIG), undefined)
    PKG_CONFIG = $(CROSS)pkg-config
    ifeq ($(shell which $(PKG_CONFIG) 2>/dev/null),)
      $(error $(PKG_CONFIG) not found)
    endif
  endif

  ifeq ($(origin WINPCAP_CFLAGS) $(origin WINPCAP_LDLIBS), undefined undefined)
    WINPCAP_NAME ?= winpcap
    ifeq ($(shell $(PKG_CONFIG) --modversion $(WINPCAP_NAME) 2>/dev/null),)
      $(error No $(WINPCAP_NAME) development libraries found!)
    endif
    WINPCAP_CFLAGS += $(shell $(PKG_CONFIG) --cflags $(WINPCAP_NAME))
    WINPCAP_LDLIBS +=  $(shell $(PKG_CONFIG) --libs $(WINPCAP_NAME))
  endif
  CFLAGS += $(WINPCAP_CFLAGS)
  LDLIBS += $(WINPCAP_LDLIBS)
else ifeq ($(PLATFORM),OSX)
  BINARY_SUFFIX = -osx
  LDLIBS += -lpcap
endif

EMBEDDED_IMAGES += $(EMBED_CI)
EMBEDDED_IMAGES += $(EMBED_CE)
EMBEDDED_IMAGES += $(EMBED_UBNT)
EMBEDDED_IMAGES += $(EMBED_UBOOT)
EMBEDDED_IMAGES += $(EMBED_ZYXEL)

Makefile: embed_image.mk
include embed_image.mk

$(eval $(call embed_image,CI,ci))
$(eval $(call embed_image,CE,ce))
$(eval $(call embed_image,UBNT,ubnt))
$(eval $(call embed_image,UBOOT,uboot))
$(eval $(call embed_image,ZYXEL,zyxel))

# try to generate revision
REVISION= $(shell \
  if [ -d .git ]; then \
    echo $$(git describe --always --dirty --match "v*" |sed 's/^v//' 2> /dev/null || echo "[unknown]"); \
  fi)
ifneq ($(REVISION),)
CPPFLAGS += -DSOURCE_VERSION=\"$(REVISION)\"
endif

# standard build rules
.SUFFIXES: .o .c
.c.o:
	$(COMPILE.c) -o $@ $<

all: $(BINARY_NAME)$(BINARY_SUFFIX)

$(BINARY_TARGET_NAMES): $(OBJ)
	$(LINK.o) $^ $(LDLIBS) -o $@
	$(STRIP) $@

$(OBJ): Makefile

$(AP51_RC).o: $(AP51_RC)
	$(Q_CC)$(WINDRES) -i $(AP51_RC) -I. -o $@

clean:
	$(RM) *.o *.d *~ $(BINARY_TARGET_NAMES) $(AP51_RC)

# load dependencies
DEP = $(OBJ:.o=.d)
-include $(DEP)

.PHONY: all clean
.DELETE_ON_ERROR:
.DEFAULT_GOAL := all