1 2 # check CPU and supported optimization flags 3 ifeq ($(UNAME), Linux) 4 ifneq ($(shell cat /proc/cpuinfo | grep sse3 ) , ) 5 SSE_CFLAGS = -msse3 -mfpmath=sse 6 else ifneq ($(shell cat /proc/cpuinfo | grep sse2 ) , ) 7 SSE_CFLAGS = -msse2 -mfpmath=sse 8 else ifneq ($(shell cat /proc/cpuinfo | grep sse ) , ) 9 SSE_CFLAGS = -msse -mfpmath=sse 10 else ifneq ($(shell cat /proc/cpuinfo | grep ARM ) , ) 11 ifneq ($(shell cat /proc/cpuinfo | grep ARMv7 ) , ) 12 ifneq ($(shell cat /proc/cpuinfo | grep vfpd32 ) , ) 13 SSE_CFLAGS = -march=armv7-a -mfpu=vfpv3 14 else ifneq ($(shell cat /proc/cpuinfo | grep vfpv3 ) , ) 15 SSE_CFLAGS = -march=armv7-a -mfpu=vfpv3 16 endif 17 else 18 ARMCPU = "YES" 19 endif 20 else 21 SSE_CFLAGS = 22 endif 23 endif 24 25 # set bundle name 26 OLDNAME = MidiKeyBoard 27 OLDEXEC_NAME = $(shell echo $(OLDNAME) | tr A-Z a-z) 28 NAME = Mamba 29 EXEC_NAME = $(shell echo $(NAME) | tr A-Z a-z) 30 BUILD_DIR = build 31 VER = 2.2 32 33 LIB_DIR := ../libxputty/libxputty/ 34 HEADER_DIR := $(LIB_DIR)include/ 35 LOCALIZE_DIR := ../libxputty/xputty/dialogs/ 36 PREFIX ?= /usr 37 BIN_DIR ?= $(PREFIX)/bin 38 SHARE_DIR ?= $(PREFIX)/share 39 DESKAPPS_DIR ?= $(SHARE_DIR)/applications 40 PIXMAPS_DIR ?= $(SHARE_DIR)/pixmaps 41 MAN_DIR ?= $(SHARE_DIR)/man/man1 42 LOCAL_DIR ?= $(SHARE_DIR)/locale 43 44 # set compile flags 45 CXXFLAGS += -std=gnu++14 -O2 -D_FORTIFY_SOURCE=2 -Wall -fstack-protector -funroll-loops -ffast-math -fomit-frame-pointer \ 46 -fstrength-reduce -fschedule-insns $(SSE_CFLAGS) 47 DEBUG_CXXFLAGS += -g -D DEBUG 48 LDFLAGS += -Wl,-z,noexecstack -Wl,--no-undefined -I./ -I../libxputty/libxputty/include/ \ 49 `pkg-config --cflags --libs jack cairo x11 sigc++-2.0 liblo smf fluidsynth` -lm -pthread -lasound \ 50 -DVERSION=\"$(VER)\" 51 # invoke build files 52 OBJECTS = $(OLDNAME).cpp $(NAME).cpp XAlsa.cpp XJack.cpp NsmHandler.cpp xkeyboard.c xcustommap.c XSynth.cpp 53 LOCALIZE = $(LOCALIZE_DIR)xfile-dialog.c $(LOCALIZE_DIR)xmessage-dialog.c $(LOCALIZE_DIR)xsavefile-dialoge.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 all debug nls gettext updatepot po clean install uninstall 60 61all : check $(NAME) 62 @mkdir -p ./$(BUILD_DIR) 63 @mv ./$(EXEC_NAME) ./$(BUILD_DIR) 64 @if [ -f ./$(BUILD_DIR)/$(EXEC_NAME) ]; then echo $(BLUE)"build finish, now run make install"; \ 65 else echo $(RED)"sorry, build failed"; fi 66 @echo $(NONE) 67 68debug: CXXFLAGS = $(DEBUG_CXXFLAGS) 69debug: all 70 71nls: LDFLAGS += -DENABLE_NLS -DGETTEXT_PACKAGE=\"$(EXEC_NAME)\" -DLOCAL_DIR=\"$(LOCAL_DIR)\" 72nls: gettext all 73 74 #@localisation 75MSGLANGS=$(notdir $(wildcard po/*po)) 76MSGOBJS=$(addprefix locale/,$(MSGLANGS:.po=/LC_MESSAGES/$(EXEC_NAME).mo)) 77LANGS=$(addprefix locale/,$(MSGLANGS:.po=/LC_MESSAGES/)) 78LANGW=$(words $(MSGLANGS)) 79 80gettext: $(MSGOBJS) 81 82locale/%/LC_MESSAGES/$(EXEC_NAME).mo: po/%.po 83 mkdir -p $(dir $@) 84 msgfmt -c -o $@ po/$*.po 85 86updatepot: 87 @mkdir -p ./po/ 88 xgettext --keyword=_ --language=C++ --add-comments --sort-output --package-name=$(EXEC_NAME) --package-version=$(VER) -o po/$(EXEC_NAME).pot $(OBJECTS) $(LOCALIZE) 89 for POFILE in $(MSGLANGS) ; do msgmerge --update po/$$POFILE po/$(EXEC_NAME).pot ; done 90 91po: 92 msginit --input=po/$(EXEC_NAME).pot --locale=$(LANG) --output=po/$(basename $(LANG)).po 93 echo $(LANG) 94 95check : 96ifdef ARMCPU 97 @echo $(RED)ARM CPU DEDECTED, please check the optimization flags 98 @echo $(NONE) 99endif 100 101clean : 102 @rm -f ./$(BUILD_DIR)/$(EXEC_NAME) 103 @rm -rf ./$(BUILD_DIR) 104 @echo ". ." $(BLUE)", clean up"$(NONE) 105 106install : 107ifneq ("$(wildcard ./$(BUILD_DIR))","") 108 mkdir -p $(DESTDIR)$(BIN_DIR) 109 cp ./$(BUILD_DIR)/$(EXEC_NAME) $(DESTDIR)$(BIN_DIR)/$(EXEC_NAME) 110 mkdir -p $(DESTDIR)$(DESKAPPS_DIR) 111 cp $(NAME).desktop $(DESTDIR)$(DESKAPPS_DIR) 112 mkdir -p $(DESTDIR)$(PIXMAPS_DIR) 113 cp $(NAME).svg $(DESTDIR)$(PIXMAPS_DIR) 114 @if [ ${LANGW} -gt 1 ]; then \ 115 for lang in $(LANGS) ; \ 116 do \ 117 if [ -f $$lang/$(EXEC_NAME).mo ]; then \ 118 mkdir -p $(DESTDIR)$(SHARE_DIR)/$$lang; \ 119 cp $$lang/$(EXEC_NAME).mo $(DESTDIR)$(SHARE_DIR)/$$lang; \ 120 fi \ 121 done \ 122 elif [ ${LANGW} -gt 0 ]; then \ 123 if [ -f $(LANGS)/$(EXEC_NAME).mo ]; then \ 124 mkdir -p $(DESTDIR)$(SHARE_DIR)/$(LANGS); \ 125 cp $(LANGS)/$(EXEC_NAME).mo $(DESTDIR)$(SHARE_DIR)/$(LANGS); \ 126 fi \ 127 fi 128 update-desktop-database || true 129 @echo ". ." $(BLUE)", done"$(NONE) 130else 131 @echo ". ." $(BLUE)", you must build first"$(NONE) 132endif 133 134uninstall : 135 @rm -rf $(DESTDIR)$(BIN_DIR)/$(EXEC_NAME) 136 @rm -rf $(DESTDIR)$(DESKAPPS_DIR)/$(NAME).desktop 137 @rm -rf $(DESTDIR)$(PIXMAPS_DIR)/$(NAME).svg 138 @rm -rf $(DESTDIR)$(PIXMAPS_DIR)/$(NAME).png 139 @rm -rf $(addprefix $(SHARE_DIR)/, $(MSGOBJS)) 140 @echo ". ." $(BLUE)", done"$(NONE) 141 142$(NAME) : 143 $(CXX) $(CXXFLAGS) $(OBJECTS) -L. ../libxputty/libxputty/libxputty.a -o $(EXEC_NAME) $(LDFLAGS) 144 145doc: 146 #pass 147