1
2	UNAME := $(shell uname)
3	STRIP ?= strip
4	# check if user is root
5	user = $(shell whoami)
6	ifeq ($(user),root)
7	INSTALL_DIR ?= /usr/lib/lv2
8	else
9	INSTALL_DIR ?= ~/.lv2
10	endif
11
12	# check CPU and supported optimization flags
13	ifeq ($(UNAME), Linux)
14		ifneq ($(shell cat /proc/cpuinfo | grep sse3 ) , )
15			SSE_CFLAGS = -msse3 -mfpmath=sse
16		else ifneq ($(shell cat /proc/cpuinfo | grep sse2 ) , )
17			SSE_CFLAGS = -msse2 -mfpmath=sse
18		else ifneq ($(shell cat /proc/cpuinfo | grep sse ) , )
19			SSE_CFLAGS = -msse -mfpmath=sse
20			else ifneq ($(shell cat /proc/cpuinfo | grep ARM ) , )
21			ifneq ($(shell cat /proc/cpuinfo | grep ARMv7 ) , )
22				ifneq ($(shell cat /proc/cpuinfo | grep vfpd32 ) , )
23					SSE_CFLAGS = -march=armv7-a -mfpu=vfpv3
24				else ifneq ($(shell cat /proc/cpuinfo | grep vfpv3 ) , )
25					SSE_CFLAGS = -march=armv7-a -mfpu=vfpv3
26				endif
27			else
28				ARMCPU = "YES"
29			endif
30		else
31			SSE_CFLAGS =
32		endif
33	endif
34
35	# set bundle name
36	NAME = FatFrog
37	BUNDLE = $(NAME).lv2
38	VER = 1.0
39
40	LIB_DIR := ../libxputty/libxputty/
41	HEADER_DIR := $(LIB_DIR)include/
42	INCLUDE_DIR := $(LIB_DIR)/lv2_plugin/
43
44	# set compile flags
45	CXXFLAGS += -O2 -D_FORTIFY_SOURCE=2 -I. -I./dsp -I./plugin -fPIC -DPIC -O2 -Wall -fstack-protector -funroll-loops \
46	-ffast-math -fomit-frame-pointer -fstrength-reduce -fdata-sections \
47	-Wl,--gc-sections -Wl,-z,relro,-z,now -Wl,--exclude-libs,ALL -Wl,-z,defs $(SSE_CFLAGS)
48	LDFLAGS += -I. -shared -lm -Wl,-z,noexecstack -fvisibility=hidden
49	GUI_LDFLAGS += -I./gui -I$(HEADER_DIR) -I$(INCLUDE_DIR) -Wl,-z,noexecstack -fvisibility=hidden \
50	-L. $(LIB_DIR)libxputty.a -shared `pkg-config --cflags --libs cairo x11` -lm
51	# invoke build files
52	OBJECTS = plugin/$(NAME).cpp
53	GUI_OBJECTS = gui/$(NAME)_x11ui.c
54	## output style (bash colours)
55	BLUE = "\033[1;34m"
56	RED =  "\033[1;31m"
57	NONE = "\033[0m"
58
59.PHONY : $(HEADER_DIR)*.h mod all clean install uninstall
60
61all : check $(NAME)
62	@mkdir -p ./$(BUNDLE)
63	@cp ./plugin/*.ttl ./$(BUNDLE)
64	@mv ./*.so ./$(BUNDLE)
65	@if [ -f ./$(BUNDLE)/$(NAME).so ]; then echo $(BLUE)"build finish, now run make install"; \
66	else echo $(RED)"sorry, build failed"; fi
67	@echo $(NONE)
68
69mod :
70	@echo "Not implemented for $(NAME)"
71
72check :
73ifdef ARMCPU
74	@echo $(RED)ARM CPU DEDECTED, please check the optimization flags
75	@echo $(NONE)
76endif
77
78clean :
79	@rm -f $(NAME).so
80	@rm -rf ./$(BUNDLE)
81	@echo ". ." $(BLUE)", clean up"$(NONE)
82
83dist-clean :
84	@rm -f $(NAME).so
85	@rm -rf ./$(BUNDLE)
86	@echo ". ." $(BLUE)", clean up"$(NONE)
87
88install :
89ifneq ("$(wildcard ./$(BUNDLE))","")
90	@mkdir -p $(DESTDIR)$(INSTALL_DIR)/$(BUNDLE)
91	cp -r ./$(BUNDLE)/* $(DESTDIR)$(INSTALL_DIR)/$(BUNDLE)
92	@echo ". ." $(BLUE)", done"$(NONE)
93else
94	@echo ". ." $(BLUE)", you must build first"$(NONE)
95endif
96
97uninstall :
98	@rm -rf $(INSTALL_DIR)/Xmonc.lv2
99	@rm -rf $(INSTALL_DIR)/$(BUNDLE)
100	@echo ". ." $(BLUE)", done"$(NONE)
101
102$(NAME) :
103	$(CXX) $(CXXFLAGS) $(OBJECTS) $(LDFLAGS) -o $(NAME).so
104	$(CXX) $(CXXFLAGS) -Wl,-z,nodelete $(GUI_OBJECTS) $(GUI_LDFLAGS) -o $(NAME)_ui.so
105	$(STRIP) -s -x -X -R .comment -R .note.ABI-tag $(NAME).so
106	$(STRIP) -s -x -X -R .comment -R .note.ABI-tag $(NAME)_ui.so
107
108nogui :
109	$(CXX) $(CXXFLAGS) $(OBJECTS) $(LDFLAGS) -o $(NAME).so
110	$(STRIP) -s -x -X -R .comment -R .note.ABI-tag $(NAME).so
111
112doc:
113	#pass
114