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