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