# ---------------------------------------------------------------------------- #
## \file Makefile
## \author Sebastien Beaugrand
## \sa http://beaugrand.chez.com/
## \copyright CeCILL 2.1 Free Software license
## \note
## Terminal example
## make C=term
## make C=term vserver
## make C=term vclient
##
## Pi example
## make C=pi
## make C=pi install
## make C=pi start
##
## Raspberry Pi example
## make C=rpi
## make C=rpi install
## make C=rpi start
##
## Cross compile for arm with sysroot
## See ../../cicd/remotehost-xc/README.md
## make C=pi XC=aarch64-linux-gnu
## make C=pi XC=aarch64-linux-gnu oled-message
## make C=pi XC=arm-linux-gnueabihf XCVER=10
## make C=pi XC=arm-linux-gnueabihf XCVER=10 oled-message
# ---------------------------------------------------------------------------- #
PROROOT = ..
include ${PROROOT}/makefiles/pro.mk
ifeq ($(C),)
$(error "Usage: make C=<term|pi|rpi>")
endif
user ?= $(USER)
SERVER = mp3server
CLIENT = mp3client
ifneq ($(XC),)
XCVER ?= 12
XCDIR ?= /data
SYSROOT = $(XCDIR)/$(XC)-$(XCVER)
CC = $(XC)-gcc
CXX = $(XC)-g++
CFLAGS = --sysroot=$(SYSROOT) -nostdinc\
-I${SYSROOT}/usr/lib/gcc/${XC}/${XCVER}/include\
-I$(SYSROOT)/usr/include/$(XC)\
CXXFLAGS = --sysroot=$(SYSROOT) -nostdinc\
-I${SYSROOT}/usr/lib/gcc/${XC}/${XCVER}/include\
-I$(SYSROOT)/usr/include/$(XC)\
CFLAGS +=\
-isystem $(SYSROOT)/usr/include\
-isystem $(SYSROOT)/usr/local/include\
CXXFLAGS +=\
-isystem $(SYSROOT)/usr/include/c++/$(XCVER)\
-isystem $(SYSROOT)/usr/include/$(XC)/c++/$(XCVER)\
-isystem $(SYSROOT)/usr/include\
-isystem $(SYSROOT)/usr/local/include\
LDFLAGS = --sysroot=$(SYSROOT)\
-L$(SYSROOT)/usr/lib/gcc/$(XC)/$(XCVER)\
-L$(SYSROOT)/usr/lib/$(XC)\
endif
#PLAYER = xmms
#CFLAGS += -I$(SYSROOT)/usr/include/xmms2
PLAYER = mpd
SERVERFLAGS = -l$(PLAYER)client
CXXFLAGS +=\
-I$(SYSROOT)/usr/local/include/upm\
CFLAGS += -g -DNDEBUG
CXXFLAGS += -g -DNDEBUG
.PHONY: all
all: server client
ifeq ($(C),term)
DEVOBJ = build/$(CLIENT)-term.o
include $(PROROOT)/makefiles/ccpp.mk
endif
ifeq ($(C),pi)
GPIO = mraa
DEVOBJ = build/oled.o build/lirc.o
CLIENTFLAGS = -lupm-lcd -lstdc++ -llirc_client
ifeq ($(SYSROOT),)
include $(PROROOT)/makefiles/arm64.mk
else
include $(PROROOT)/makefiles/ccpp.mk
endif
endif
ifeq ($(C),rpi)
DEVOBJ = build/$(CLIENT)-lcd16x2.o build/$(CLIENT)-button.o
DEVLIB = $(HOME)/data/install-build/WiringPi/devLib
CFLAGS += -I$(DEVLIB) -DRPI -I/usr/local/include
OBJECTS = $(DEVLIB)/lcd.o
CLIENTFLAGS = -lwiringPi -lwiringPiDev -lpthread
include $(PROROOT)/makefiles/arm.mk
endif
include $(PROROOT)/debug/debug.mk
.PHONY: reinstall
reinstall: server client /etc/init.d/$(SERVER)d
@sudo cp build/$(SERVER) build/$(CLIENT) /usr/bin/
/etc/init.d/$(SERVER)d: $(SERVER)d
@sed "s/user=.*/user=$(user)/" $< | sudo tee $@ >/dev/null
@sudo chmod 755 $@
.PHONY: vserver
vserver:
@valgrind --leak-check=full --show-leak-kinds=all -q build/$(SERVER)
.PHONY: vclient
vclient:
@valgrind --leak-check=full --show-leak-kinds=all -q build/$(CLIENT)
.PHONY: server
server: build build/$(SERVER)
build/$(SERVER): build/$(SERVER).o build/player.o build/httpServer.o \
build/resources.o build/log.o build/html.o build/common.o
$(CC) $^ $(LDFLAGS) $(SERVERFLAGS) -o $@
build/player.o: player-$(PLAYER).c
$(CC) $(CFLAGS) -c $< -o $@
.PHONY: client
client: build build/$(CLIENT)
build/$(CLIENT): build/$(CLIENT).o build/common.o build/setup.o $(DEVOBJ)
$(CC) $^ $(LDFLAGS) $(CLIENTFLAGS) -o $@
.PHONY: oled-message
oled-message: build build/oled-message
build/oled-message: build/oled-message.o
$(CXX) $^ $(LDFLAGS) -lupm-lcd -lmraa -o $@
.PHONY: install-oled-message
install-oled-message: /usr/bin/oled-message
/usr/bin/oled-message: build/oled-message
@sudo cp $< $@
.PHONY: test-buffer
test-buffer: build build/test-buffer
build/test-buffer: build/test-buffer.o build/common.o
$(CC) $^ -o $@
.PHONY: test-rand
test-rand: build build/test-rand
build/test-rand: build/test-rand.o
$(CC) $^ -o $@
.PHONY: mermaid
mermaid: README-0.md
README-0.md: README.md
@mmdc -i $< -o $@ -t dark -b transparent
@sed -i 's/black/#00ff00/g' README-*.svg
SERVICE = $(SERVER)
include $(PROROOT)/makefiles/service.mk
include $(PROROOT)/makefiles/tar.mk