1PREFIX ?= /usr/local 2 3TMP = temp_resources 4PSHARE=$(DESTDIR)$(PREFIX)/share/osc 5PLIB=$(DESTDIR)$(PREFIX)/lib/osc 6 7# this is where the master fru files are (assuming they are installed at all) 8FRU_FILES=$(PREFIX)/lib/fmc-tools/ 9 10CC := $(CROSS_COMPILE)gcc 11 12SYSROOT := $(shell $(CC) -print-sysroot) 13MULTIARCH := $(shell $(CC) -print-multiarch) 14 15ifneq ($(wildcard .git/*),) 16GIT_BRANCH := $(shell git name-rev --name-only HEAD | sed 's:.*/::') 17GIT_HASH := $(shell git describe --abbrev=7 --dirty --always) 18GIT_VERSION := -DGIT_VERSION=\"$(shell git rev-parse --short HEAD)\" 19GIT_COMMIT_TIMESTAMP := -DGIT_COMMIT_TIMESTAMP='"$(shell git show -s --pretty=format:"%ct" HEAD)"' 20OSC_VERSION=$(GIT_BRANCH)-g$(GIT_HASH) 21else 22OSC_VERSION=0.99 23endif 24 25WITH_MINGW := $(if $(shell echo | $(CC) -dM -E - |grep __MINGW32__),y) 26EXPORT_SYMBOLS := -Wl,--export-all-symbols 27EXPORT_SYMBOLS := $(if $(WITH_MINGW),$(EXPORT_SYMBOLS)) 28 29PKG_CONFIG_PATH := $(SYSROOT)/usr/share/pkgconfig:$(SYSROOT)/usr/lib/pkgconfig:$(SYSROOT)$(PREFIX)/lib/pkgconfig:$(SYSROOT)/usr/lib/$(MULTIARCH)/pkgconfig 30PKG_CONFIG := env PKG_CONFIG_SYSROOT_DIR="$(SYSROOT)" \ 31 PKG_CONFIG_PATH="$(PKG_CONFIG_PATH)" pkg-config 32 33WITH_SERIALPORT := $(if $(shell $(PKG_CONFIG) --libs libserialport --silence-errors |grep -lserialport),y) 34 35DEPENDENCIES := glib-2.0 gtk+-2.0 gthread-2.0 gtkdatabox fftw3 libiio libxml-2.0 libcurl jansson matio libad9361 36ifeq ($(WITH_SERIALPORT),y) 37 DEPENDENCIES += libserialport 38endif 39 40DEP_CFLAGS= 41DEP_LDFLAGS= 42define dep_flags 43DEP_CFLAGS+=$(shell $(PKG_CONFIG) --cflags $(1)) 44DEP_LDFLAGS+=$(shell $(PKG_CONFIG) --libs $(1)) 45endef 46 47$(foreach dep,$(DEPENDENCIES),$(eval $(call dep_flags,$(dep)))) 48 49LDFLAGS := $(DEP_LDFLAGS) \ 50 $(if $(WITH_MINGW),-lwinpthread) \ 51 -L$(SYSROOT)/usr/lib64 \ 52 -L$(SYSROOT)/usr/lib \ 53 -L$(SYSROOT)/usr/lib32 \ 54 -lmatio -lz -lm -lad9361 55 56ifeq ($(WITH_MINGW),y) 57 LDFLAGS += -Wl,--subsystem,windows 58else 59 LDFLAGS += -rdynamic 60endif 61 62CFLAGS := $(DEP_CFLAGS) \ 63 -I$(SYSROOT)/usr/include $(if $(WITH_MINGW),-mwindows,-fPIC) \ 64 -Wall -Wclobbered -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers \ 65 -Wmissing-parameter-type -Wold-style-declaration -Woverride-init \ 66 -Wsign-compare -Wtype-limits -Wuninitialized -Wunused-but-set-parameter \ 67 -Wextra -Wno-unused-parameter \ 68 -Werror -g -std=gnu90 -D_GNU_SOURCE -O2 -funwind-tables \ 69 -DPREFIX='"$(PREFIX)"' \ 70 -DFRU_FILES=\"$(FRU_FILES)\" $(GIT_VERSION) \ 71 $(GIT_COMMIT_TIMESTAMP) \ 72 -DOSC_VERSION=\"$(OSC_VERSION)\" \ 73 -DGTK_DISABLE_DEPRECATED \ 74 -D_POSIX_C_SOURCE=200809L \ 75 76ifeq ($(WITH_SERIALPORT),y) 77 CFLAGS += -DSERIAL_BACKEND 78endif 79 80DEBUG ?= 0 81ifeq ($(DEBUG),1) 82 CFLAGS += -DDEBUG 83else 84 CFLAGS += -DNDEBUG 85endif 86 87SO := $(if $(WITH_MINGW),dll,so) 88EXE := $(if $(WITH_MINGW),.exe) 89 90OSC := osc$(EXE) 91LIBOSC := libosc.$(SO) 92 93PLUGINS=\ 94 plugins/generic_dac.$(SO) \ 95 plugins/fmcomms1.$(SO) \ 96 plugins/fmcomms2.$(SO) \ 97 plugins/fmcomms5.$(SO) \ 98 plugins/fmcomms6.$(SO) \ 99 plugins/fmcomms11.$(SO) \ 100 plugins/ad9081.$(SO) \ 101 plugins/ad9371.$(SO) \ 102 plugins/adrv9002.$(SO) \ 103 plugins/adrv9009.$(SO) \ 104 plugins/adrv9009_adv.$(SO) \ 105 plugins/fmcomms2_adv.$(SO) \ 106 plugins/ad9371_adv.$(SO) \ 107 plugins/ad6676.$(SO) \ 108 plugins/pr_config.$(SO) \ 109 plugins/fmcadc3.$(SO) \ 110 plugins/daq2.$(SO) \ 111 plugins/ad9739a.$(SO) \ 112 plugins/AD5628_1.$(SO) \ 113 plugins/AD7303.$(SO) \ 114 plugins/cn0357.$(SO) \ 115 plugins/cn0508.$(SO) \ 116 plugins/cn0511.$(SO) \ 117 plugins/cn0540.$(SO) \ 118 plugins/motor_control.$(SO) \ 119 plugins/lidar.$(SO) \ 120 plugins/dmm.$(SO) \ 121 plugins/debug.$(SO) \ 122 plugins/cf_axi_tdd.$(SO) \ 123 $(if $(WITH_MINGW),,plugins/spectrum_analyzer.so) \ 124 $(if $(WITH_MINGW),,plugins/scpi.so) 125 126ifdef V 127 CMD:= 128 SUM:=@\# 129else 130 CMD:=@ 131 SUM:=@echo 132endif 133 134OSC_OBJS := osc.o oscplot.o datatypes.o iio_widget.o fru.o dialogs.o \ 135 trigger_dialog.o xml_utils.o libini/libini.o libini2.o phone_home.o \ 136 plugins/dac_data_manager.o plugins/fir_filter.o iio_utils.o osc_preferences.o \ 137 $(if $(WITH_MINGW),,eeprom.o) 138 139all: $(OSC) $(PLUGINS) 140 141define check_deps 142 @for dep in $(DEPENDENCIES) ; do \ 143 $(PKG_CONFIG) $$dep || { \ 144 printf "\033[1;31mYou need to install the development version of '$$dep'\033[m\n"; \ 145 exit 1 ; \ 146 } ; \ 147 done 148endef 149 150analyze: $(OSC_OBJS:%.o=%.c) $(PLUGINS:%.so=%.c) oscmain.c 151 clang --analyze $(CFLAGS) $^ 152 153$(LIBOSC): $(OSC_OBJS) 154 $(SUM) " LD $@" 155 $(CMD)$(CC) $+ $(CFLAGS) $(LDFLAGS) -ldl -shared -o $@ $(EXPORT_SYMBOLS) 156 157$(OSC): oscmain.o $(if $(WITH_MINGW),oscicon.o) $(LIBOSC) 158 $(SUM) " LD $@" 159 $(CMD)$(CC) $^ $(LDFLAGS) -L. -losc -o $@ 160 161oscicon.o: oscicon.rc 162 $(SUM) " GEN $@" 163 $(CMD)$(CROSS_COMPILE)windres $< $@ 164 165%.o: %.c 166 $(call check_deps) 167 $(SUM) " CC $@" 168 $(CMD)$(CC) $(CFLAGS) $< -c -o $@ 169 170%.$(SO): %.c $(LIBOSC) 171 $(SUM) " LD $@" 172 $(CMD)$(CC) $(CFLAGS) $< $(LDFLAGS) -L. -losc -shared -o $@ 173 174# Dependencies 175iio_utils.o: iio_utils.h 176osc_preferences.o: osc_preferences.h 177osc.o: iio_widget.h osc_plugin.h osc.h libini2.h 178oscmain.o: config.h osc.h 179oscplot.o: oscplot.h osc.h datatypes.h iio_widget.h libini2.h 180datatypes.o: datatypes.h 181iio_widget.o: iio_widget.h 182fru.o: fru.h 183dialogs.o: fru.h osc.h 184trigger_dialog.o: fru.h osc.h iio_widget.h 185xml_utils.o: xml_utils.h 186phone_home.o: phone_home.h 187plugins/dac_data_manager.o: plugins/dac_data_manager.h 188 189install-common-files: $(OSC) $(PLUGINS) 190 install -d $(DESTDIR)$(PREFIX)/bin 191 install -d $(DESTDIR)$(PREFIX)/share/osc/ 192 install -d $(DESTDIR)$(PREFIX)/lib/osc/ 193 install -d $(DESTDIR)$(PREFIX)/lib/osc/xmls 194 install -d $(DESTDIR)$(PREFIX)/lib/osc/filters 195 install -d $(DESTDIR)$(PREFIX)/lib/osc/filters/ad9371_5 196 install -d $(DESTDIR)$(PREFIX)/lib/osc/filters/adrv9009 197 install -d $(DESTDIR)$(PREFIX)/lib/osc/waveforms 198 install -d $(DESTDIR)$(PREFIX)/lib/osc/waveforms/qpsk 199 install -d $(DESTDIR)$(PREFIX)/lib/osc/profiles 200 install -d $(DESTDIR)$(PREFIX)/lib/osc/block_diagrams 201 install ./$(OSC) $(DESTDIR)$(PREFIX)/bin/ 202 install ./$(LIBOSC) $(DESTDIR)$(PREFIX)/$(if $(WITH_MINGW),bin,lib)/ 203 install -m 644 ./glade/*.glade $(PSHARE) 204 install -m 644 ./icons/ADIlogo.png $(PSHARE) 205 install -m 644 ./icons/IIOlogo.png $(PSHARE) 206 install -m 644 ./icons/osc128.png $(PSHARE) 207 install -m 644 ./icons/osc_capture.png $(PSHARE) 208 install -m 644 ./icons/osc_generator.png $(PSHARE) 209 install -m 644 ./icons/ch_color_icon.png $(PSHARE) 210 install -m 644 ./icons/laser_symbol.png $(PSHARE) 211 install $(PLUGINS) $(PLIB) 212 install -m 644 ./xmls/* $(PLIB)/xmls 213 install -m 644 ./filters/*.* $(PLIB)/filters 214 install -m 644 ./filters/ad9371_5/* $(PLIB)/filters/ad9371_5 215 install -m 644 ./filters/adrv9009/* $(PLIB)/filters/adrv9009 216 install -m 644 ./waveforms/*.* $(PLIB)/waveforms 217 install -m 644 ./waveforms/qpsk/* $(PLIB)/waveforms/qpsk 218 install -m 644 ./profiles/* $(PLIB)/profiles 219 install -m 644 ./block_diagrams/* $(PLIB)/block_diagrams 220 221install-all: install-common-files 222 xdg-icon-resource install --noupdate --size 16 ./icons/osc16.png adi-osc 223 xdg-icon-resource install --noupdate --size 32 ./icons/osc32.png adi-osc 224 xdg-icon-resource install --noupdate --size 64 ./icons/osc64.png adi-osc 225 xdg-icon-resource install --noupdate --size 128 ./icons/osc128.png adi-osc 226 xdg-icon-resource install --size 256 ./icons/osc256.png adi-osc 227 xdg-desktop-menu install adi-osc.desktop 228 ldconfig 229 230uninstall-common-files: 231 rm -rf $(PLIB) $(PSHARE) $(DESTDIR)$(PREFIX)/bin/$(OSC) $(DESTDIR)$(PREFIX)/lib/$(LIBOSC) 232 233uninstall-all: uninstall-common-files 234 xdg-icon-resource uninstall --noupdate --size 16 adi-osc 235 xdg-icon-resource uninstall --noupdate --size 32 adi-osc 236 xdg-icon-resource uninstall --noupdate --size 64 adi-osc 237 xdg-icon-resource uninstall --noupdate --size 128 adi-osc 238 xdg-icon-resource uninstall --size 256 adi-osc 239 xdg-desktop-menu uninstall adi-osc.desktop 240 ldconfig 241 242install: $(if $(DEBIAN_INSTALL),install-common-files,install-all) 243 244uninstall: $(if $(DEBIAN_INSTALL),uninstall-common-files,uninstall-all) 245 246clean: 247 $(SUM) " CLEAN ." 248 $(CMD)rm -rf $(OSC) $(LIBOSC) $(PLUGINS) *.o libini/*.o plugins/*.o *.plist 249