kopia lustrzana https://github.com/Hamlib/Hamlib
1994 wiersze
58 KiB
Makefile
Executable File
1994 wiersze
58 KiB
Makefile
Executable File
#
|
|
# GNU Makefile for Hamlib (MSVC / clang-cl / MinGW).
|
|
#
|
|
# G. Vanem <gvanem@yahoo.no> 2019 - 2021.
|
|
#
|
|
THIS_FILE = Makefile.Windows
|
|
DATE = $(shell date +%d-%B-%Y)
|
|
ABI_VER = 4
|
|
|
|
#
|
|
# From 'configure.ac':
|
|
#
|
|
MAJOR_VER = 4
|
|
MINOR_VER = 2
|
|
VERSION = $(MAJOR_VER).$(MINOR_VER)
|
|
|
|
#
|
|
# Choose your weapons. Do a 'make vclean' after changing any of these.
|
|
#
|
|
USE_LIBGD ?= 1
|
|
USE_LIBINDI ?= 0
|
|
USE_LIBREADLINE ?= 0
|
|
USE_LIBUSB ?= 1
|
|
USE_LIBUSRP ?= 1
|
|
USE_LIBXML2 ?= 1
|
|
USE_LUAJIT ?= 0
|
|
USE_MP_COMPILE ?= 1
|
|
|
|
#
|
|
# Add support for a 'GnuRadio' device.
|
|
# Impossible as it is not up-to-date with current GnuRadio 3.9 API.
|
|
#
|
|
USE_GNURADIO ?= 0
|
|
|
|
#
|
|
# Use the Winsock tracing library (works badly for MinGW):
|
|
# https://github.com/gvanem/wsock-trace
|
|
#
|
|
USE_WSOCK_TRACE ?= 1
|
|
|
|
#
|
|
# Use only static external libraries to create '$(Hamlib_DLL)'.
|
|
# But '_Hamlib.pyd' and 'HamlibLua.dll' always uses '$(Hamlib_DLL)'.
|
|
#
|
|
USE_STATIC ?= 1
|
|
|
|
#
|
|
# Use '$(Hamlib_DLL)' for all C programs.
|
|
# And '$(Hamlib++_DLL)' for all C++ programs.
|
|
#
|
|
USE_DLLs_FOR_PROGRAMS ?= 1
|
|
|
|
#
|
|
# Set to 0 for no Python module.
|
|
# Set to 2 to create a Python 2.x module.
|
|
# Set to 3 to create a Python 3.x module.
|
|
#
|
|
USE_PY_BINDING ?= 3
|
|
|
|
#
|
|
# Use 'astyle' or 'clang-format' in the "%.i: %.c" preprocess rules below.
|
|
#
|
|
USE_ASTYLE ?= 0
|
|
USE_CLANG_FORMAT ?= 0
|
|
|
|
#
|
|
# Change these as needed:
|
|
# (or create env-vars like 'LIBXML2_ROOT=c:/whatever/xml2').
|
|
#
|
|
LIBXML2_ROOT ?= f:/MinGW32/src/Parsers/libxml2
|
|
LIBICONV_ROOT ?= f:/MinGW32/src/libiconv-1.15
|
|
LIBGD_ROOT ?= f:/MinGW32/src/Graphics/libgd-2.1.0
|
|
LIBREADLINE_ROOT ?= f:/MinGW32/src/misc/libreadline
|
|
LUAJIT_ROOT ?= f:/MinGW32/src/LUA/LuaJIT
|
|
LUA5_ROOT ?= f:/MinGW32/src/LUA/Lua-5.4
|
|
LIBUSB_ROOT ?= f:/MinGW32/src/USB/libusb
|
|
LIBUSRP_ROOT ?= f:/gv/dx-radio/Bor-IP/src/libusrp/usrp/host
|
|
GNURADIO_ROOT ?= f:/gv/dx-radio/GnuRadio/gv-build
|
|
LIBINDI_ROOT ?= f:/ProgramFiler/Stellarium/src/src/external/libindi
|
|
|
|
PYTHON ?= py -3
|
|
|
|
ifeq ($(USE_LUAJIT),1)
|
|
LUA_ROOT = $(realpath $(LUAJIT_ROOT))
|
|
LUA_LIB = $(call select, $(LUA_ROOT)/src/libluajit.a, $(LUA_ROOT)/src/luajit.lib)
|
|
else
|
|
LUA_ROOT = $(realpath $(LUA5_ROOT))
|
|
LUA_LIB = $(call select, $(LUA_ROOT)/src/liblua.a, $(LUA_ROOT)/src/lua.lib)
|
|
endif
|
|
|
|
MKDIR = mkdir
|
|
RMDIR = rmdir --parents
|
|
MOVE = mv --force
|
|
COPY = cp --preserve=timestamps --update
|
|
|
|
#
|
|
# 'clang-cl' may not like stuff in '%CL'.
|
|
# Just remove it.
|
|
#
|
|
export CL=
|
|
|
|
define Usage
|
|
|
|
Usage: "$(MAKE) -f $(THIS_FILE) CC=[cl | clang-cl | gcc] [CPU=x86 | x64] [all | clean | vclean | realclean | depend | doxy_docs | py_module | lua_module]"
|
|
Specify CC=cl - use MSVC
|
|
Specify CC=clang-cl - use clang-cl
|
|
Specify CC=gcc - use MinGW
|
|
endef
|
|
|
|
#
|
|
# Check the casing of '$CPU'. GNU-make is case-sensitive.
|
|
#
|
|
ifeq ($(CPU),)
|
|
CPU = x86
|
|
endif
|
|
|
|
ifeq ($(CPU),X86)
|
|
CPU = x86
|
|
else ifeq ($(CPU),X64)
|
|
CPU = x64
|
|
endif
|
|
|
|
#
|
|
# If '$(CPU)=x64', build 64-bit version. Assuming your MinGW
|
|
# is dual-target capable and supports the '-mxx' option.
|
|
# Otherwise 32-bit programs.
|
|
#
|
|
ifeq ($(CPU),x64)
|
|
BITS = 64
|
|
RCFLAGS = --target=pe-x86-64
|
|
X_SUFFIX = _x64
|
|
else
|
|
BITS = 32
|
|
RCFLAGS = --target=pe-i386
|
|
X_SUFFIX =
|
|
endif
|
|
|
|
ifeq ($(CC),gcc)
|
|
OBJ_DIR = MinGW_obj
|
|
USE_MP_COMPILE := 0
|
|
|
|
else ifeq ($(CC),clang-cl)
|
|
OBJ_DIR = clang_obj
|
|
USE_MP_COMPILE := 0
|
|
|
|
else ifeq ($(CC),cl)
|
|
OBJ_DIR = MSVC_obj
|
|
|
|
else
|
|
$(error $(Usage))
|
|
endif
|
|
|
|
ifeq ($(CC),gcc)
|
|
select = $(1)
|
|
CFLAGS = -m$(BITS) -O2 -g --include config.h
|
|
LDFLAGS = -m$(BITS) -Wl,--print-map,--sort-common
|
|
O = o
|
|
A = a
|
|
|
|
#
|
|
# We want true Winsock2. Not some POSIX emulation that messes up things big-time.
|
|
#
|
|
CFLAGS += -D__USE_W32_SOCKETS
|
|
|
|
WS2_32_LIB = -lws2_32
|
|
|
|
else
|
|
select = $(2)
|
|
CFLAGS = -nologo -MD -W3 -Zi -O2 -EHsc -DWIN32 -FI./config.h
|
|
LDFLAGS = -nologo -debug -incremental:no -verbose -machine:$(CPU) -nodefaultlib:uuid.lib
|
|
O = obj
|
|
A = lib
|
|
|
|
ifeq ($(CC),clang-cl)
|
|
CFLAGS += -fms-compatibility -ferror-limit=5
|
|
endif
|
|
|
|
ifeq ($(USE_WSOCK_TRACE),1)
|
|
WS2_32_LIB = wsock_trace.lib
|
|
else
|
|
WS2_32_LIB = ws2_32.lib
|
|
endif
|
|
endif
|
|
|
|
#
|
|
# Warning control:
|
|
#
|
|
ifeq ($(CC),gcc)
|
|
CFLAGS += -Wall \
|
|
-Wno-format \
|
|
-Wno-array-bounds \
|
|
-Wno-missing-braces \
|
|
-Wno-unused-function \
|
|
-Wno-unused-variable \
|
|
-Wno-shift-count-overflow
|
|
|
|
else ifeq ($(CC),clang-cl)
|
|
CFLAGS += -Wall \
|
|
-Wno-undef \
|
|
-Wno-unused-function \
|
|
-Wno-unused-macros \
|
|
-Wno-unused-parameter \
|
|
-Wno-unused-variable \
|
|
-Wno-visibility \
|
|
-Wno-unknown-pragmas \
|
|
-Wno-ignored-attributes \
|
|
-Wno-strict-prototypes \
|
|
-Wno-reserved-id-macro \
|
|
-Wno-shadow \
|
|
-Wno-cast-align \
|
|
-Wno-cast-qual \
|
|
-Wno-shorten-64-to-32 \
|
|
-Wno-pedantic \
|
|
-Wno-format-pedantic \
|
|
-Wno-format-nonliteral \
|
|
-Wno-switch-enum \
|
|
-Wno-covered-switch-default \
|
|
-Wno-sign-conversion \
|
|
-Wno-sign-compare \
|
|
-Wno-double-promotion \
|
|
-Wno-assign-enum \
|
|
-Wno-unreachable-code \
|
|
-Wno-unreachable-code-return \
|
|
-Wno-unreachable-code-break \
|
|
-Wno-c++98-compat-pedantic \
|
|
-Wno-old-style-cast \
|
|
-Wno-extra-semi-stmt \
|
|
-Wno-missing-field-initializers \
|
|
-Wno-missing-noreturn \
|
|
-Wno-missing-prototypes \
|
|
-Wno-missing-variable-declarations \
|
|
-Wno-bad-function-cast \
|
|
-Wno-redundant-parens \
|
|
-Wno-tautological-unsigned-zero-compare \
|
|
-Wno-nonportable-system-include-path \
|
|
-Wno-implicit-int-conversion \
|
|
-Wno-float-conversion \
|
|
-Wno-float-equal \
|
|
-Wno-implicit-float-conversion \
|
|
-Wno-implicit-fallthrough \
|
|
-Wno-shift-count-overflow \
|
|
-Wno-documentation \
|
|
-Wno-documentation-unknown-command \
|
|
-Wno-gnu-zero-variadic-macro-arguments \
|
|
-Wno-zero-as-null-pointer-constant
|
|
|
|
ifeq ($(USE_LIBUSRP),1)
|
|
CFLAGS += -Wno-suggest-override \
|
|
-Wno-suggest-destructor-override
|
|
endif
|
|
|
|
#
|
|
# When on AppVeyor, do not suppress these warnings since they have an old 'clang-cl'.
|
|
#
|
|
ifeq ($(APPVEYOR_PROJECT_NAME)x,x)
|
|
CFLAGS += -Wno-implicit-int-float-conversion \
|
|
-Wno-deprecated-copy-dtor
|
|
endif
|
|
|
|
#
|
|
# This warning is kinda important:
|
|
#
|
|
# rigs/dummy/dummy.h(46,5): warning: 'netrigctl_get_vfo_mode' redeclared without 'dllimport' attribute: previous
|
|
# 'dllimport' ignored [-Winconsistent-dllimport]
|
|
# int netrigctl_get_vfo_mode(RIG *);
|
|
# ^
|
|
# So do not add a '-Wno-inconsistent-dllimport'.
|
|
#
|
|
# And so is this '-Wconditional-uninitialized'.
|
|
#
|
|
else
|
|
CFLAGS += -wd4018 -wd4101 -wd4142 -wd4146 -wd4244 -wd4251 -wd4305 -wd4700 -wd4800
|
|
|
|
ifeq ($(BITS),64)
|
|
CFLAGS += -wd4267
|
|
endif
|
|
endif
|
|
|
|
# CFLAGS += -DHASH_BLOOM
|
|
|
|
#
|
|
# External libraries for '$(Hamlib_DLL)':
|
|
#
|
|
EX_LIBS = $(WS2_32_LIB)
|
|
|
|
#
|
|
# The DLL and library names:
|
|
#
|
|
Hamlib_DLL = Hamlib-$(ABI_VER).dll
|
|
Hamlib_IMP_LIB = $(call select, libHamlib-$(ABI_VER).dll.a, Hamlib-$(ABI_VER)_imp.lib)
|
|
Hamlib_STAT_LIB = $(call select, libHamlib-$(ABI_VER).a, Hamlib-$(ABI_VER).lib)
|
|
|
|
#
|
|
# The C++ library
|
|
#
|
|
Hamlib++_DLL = Hamlib-$(ABI_VER)++.dll
|
|
Hamlib++_IMP_LIB = $(call select, libHamlib-$(ABI_VER)++.dll.a, Hamlib-$(ABI_VER)++_imp.lib)
|
|
|
|
#
|
|
# The internal utility library; '$(hamlib_misc_SRC)'.
|
|
#
|
|
misc_LIB = $(call select, libmisc.a, misc.lib)
|
|
|
|
#
|
|
# What to build:
|
|
#
|
|
TARGETS = $(Hamlib_STAT_LIB) $(Hamlib_DLL) \
|
|
$(Hamlib_IMP_LIB) $(misc_LIB)
|
|
|
|
#
|
|
# The C++ interface is dynamic only.
|
|
#
|
|
TARGETS += $(Hamlib++_DLL) $(Hamlib++_IMP_LIB)
|
|
|
|
#
|
|
# For 'test/*.c' only. They all use '$(Hamlib_DLL)'.
|
|
#
|
|
PROG_LIBS = $(WS2_32_LIB) $(call select, -lwinpthread)
|
|
|
|
ifeq ($(USE_DLLs_FOR_PROGRAMS),1)
|
|
#
|
|
# A strangely named macro ('-DUSE_Hamlib_DLL' would be better), but
|
|
# this will let all .c and .cc programs to use 'Hamlib-$(ABI_VER).dll'
|
|
#
|
|
PROG_CFLAGS = -DDLL_EXPORT
|
|
|
|
#
|
|
# Use 'Hamlib-$(ABI_VER).dll' for C programs.
|
|
#
|
|
C_PROG_LIBS = $(misc_LIB) $(Hamlib_IMP_LIB)
|
|
|
|
#
|
|
# Use 'Hamlib-$(ABI_VER)++.dll and 'Hamlib-$(ABI_VER).dll' for C++ programs.
|
|
# The library order matter for MinGW only.
|
|
#
|
|
CPP_PROG_LIBS = $(Hamlib_IMP_LIB) $(Hamlib++_IMP_LIB)
|
|
else
|
|
PROG_CFLAGS =
|
|
PROG_LIBS = $(EX_LIBS)
|
|
C_PROG_LIBS = $(Hamlib_STAT_LIB) $(misc_LIB)
|
|
CPP_PROG_LIBS = $(Hamlib_STAT_LIB) $(misc_LIB) $(Hamlib++_IMP_LIB)
|
|
endif
|
|
|
|
#
|
|
# For 'rigs/kit/usrp.c' and 'rigs/kit/usrp_impl.cc'.
|
|
# This needs Boost too. Untested by me.
|
|
#
|
|
ifeq ($(USE_LIBUSRP),1)
|
|
CFLAGS += -DHAVE_USRP \
|
|
-I$(LIBUSRP_ROOT)/include \
|
|
-I$(LIBUSRP_ROOT)/include/usrp
|
|
|
|
EX_LIBS += $(call select, $(LIBUSRP_ROOT)/libUSRP.a, \
|
|
$(LIBUSRP_ROOT)/libUSRP_imp.lib)
|
|
|
|
hamlib_CC_SRC = kit/usrp_impl.cc
|
|
endif
|
|
|
|
ifeq ($(USE_LIBUSB),1)
|
|
CFLAGS += -DHAVE_LIBUSB \
|
|
-DHAVE_LIBUSB_H \
|
|
-I$(LIBUSB_ROOT)/libusb
|
|
|
|
ifeq ($(USE_STATIC),1)
|
|
EX_LIBS += $(call select, $(LIBUSB_ROOT)/libusb-1.0.a -ladvapi32, \
|
|
$(LIBUSB_ROOT)/libusb-1.0.lib advapi32.lib)
|
|
else
|
|
EX_LIBS += $(call select, $(LIBUSB_ROOT)/libusb-1.0.dll.a, \
|
|
$(LIBUSB_ROOT)/libusb-1.0_imp.lib)
|
|
endif
|
|
endif
|
|
|
|
#
|
|
# Untested; does it exist except for MinGW?
|
|
#
|
|
ifeq ($(USE_LIBREADLINE),1)
|
|
CFLAGS += -DHAVE_LIBREADLINE \
|
|
-I$(LIBREADLINE_ROOT)/include
|
|
|
|
EX_LIBS += $(call select, $(LIBREADLINE_ROOT)/libreadline.a, \
|
|
$(LIBREADLINE_ROOT)/libreadline.lib)
|
|
endif
|
|
|
|
CFLAGS += -I. \
|
|
-I./include \
|
|
-I./include/hamlib \
|
|
-I./lib \
|
|
-I./src \
|
|
-I./tests
|
|
|
|
ifneq ($(CC),gcc)
|
|
CFLAGS += -I$(OBJ_DIR)
|
|
EX_LIBS += user32.lib kernel32.lib
|
|
endif
|
|
|
|
c_to_obj = $(addprefix $(OBJ_DIR)/, \
|
|
$(notdir $(1:.c=.$(O))))
|
|
|
|
cc_to_obj = $(addprefix $(OBJ_DIR)/, \
|
|
$(notdir $(1:.cc=.$(O))))
|
|
|
|
cpp_to_obj = $(addprefix $(OBJ_DIR)/, \
|
|
$(notdir $(1:.cpp=.$(O))))
|
|
|
|
c_to_i = $(notdir $(1:.c=.i))
|
|
cc_to_i = $(notdir $(1:.cc=.i))
|
|
|
|
VPATH = rigs/dummy src tests c++ amplifiers/elecraft
|
|
|
|
VPATH += $(addprefix rigs/, \
|
|
adat \
|
|
alinco \
|
|
aor \
|
|
barrett \
|
|
dorji \
|
|
drake \
|
|
elad \
|
|
flexradio \
|
|
icmarine \
|
|
icom \
|
|
jrc \
|
|
kachina \
|
|
kenwood \
|
|
kit \
|
|
lowe \
|
|
pcr \
|
|
prm80 \
|
|
racal \
|
|
rft \
|
|
rs \
|
|
skanti \
|
|
tapr \
|
|
tentec \
|
|
tuner \
|
|
uniden \
|
|
winradio \
|
|
wj \
|
|
yaesu)
|
|
|
|
VPATH += $(addprefix rotators/, \
|
|
amsat \
|
|
ars \
|
|
celestron \
|
|
cnctrk \
|
|
easycomm \
|
|
ether6 \
|
|
fodtrack \
|
|
gs232a \
|
|
heathkit \
|
|
indi \
|
|
ioptron \
|
|
m2 \
|
|
meade \
|
|
prosistel \
|
|
rotorez \
|
|
sartek \
|
|
satel \
|
|
spid \
|
|
ts7400)
|
|
|
|
#
|
|
# For compiling 'HamlibPy2_wrap.c,' 'HamlibPy3_wrap.c' and 'HamlibLua_wrap.c'.
|
|
#
|
|
VPATH += $(OBJ_DIR)
|
|
|
|
#
|
|
# All of these use '$(Hamlib_DLL)':
|
|
#
|
|
TESTS_PROGS = ampctl.exe \
|
|
ampctld.exe \
|
|
dumpmem.exe \
|
|
example.exe \
|
|
listrigs.exe \
|
|
rigctl.exe \
|
|
rigctld.exe \
|
|
rigctlcom.exe \
|
|
rigsmtr.exe \
|
|
rigswr.exe \
|
|
rig_bench.exe \
|
|
rotctl.exe \
|
|
rotctld.exe \
|
|
simyaesu.exe \
|
|
testbcd.exe \
|
|
testfreq.exe \
|
|
testloc.exe \
|
|
testrig.exe \
|
|
testrigcaps.exe \
|
|
testrigopen.exe \
|
|
testtrn.exe
|
|
|
|
ifneq ($(APPVEYOR_PROJECT_NAME),)
|
|
#
|
|
# TODO: build with 'LIBUSB_ROOT = ./CI/libusb', 'LIBXML2_ROOT = ./CI/libxml2' etc.
|
|
# when running via 'appveyor.yml'
|
|
#
|
|
endif
|
|
|
|
ifeq ($(USE_LIBXML2),1)
|
|
TESTS_PROGS += rigmem.exe
|
|
PROG_CFLAGS += -I$(LIBXML2_ROOT)/include \
|
|
-I$(LIBICONV_ROOT)/include \
|
|
-DHAVE_XML2
|
|
|
|
#
|
|
# Use the dynamic version of 'libxml2'.
|
|
# I.e. do not set 'PROG_CFLAGS += -DLIBXML_STATIC'.
|
|
# Otherwise we could need to link to a static 'Iconv', 'Zlib' and
|
|
# a 'liblzma' too (depending on how 'libxml2' was built).
|
|
#
|
|
XML2_LIB = $(call select, $(LIBXML2_ROOT)/libxml2.dll.a, \
|
|
$(LIBXML2_ROOT)/xml2_imp.lib)
|
|
endif
|
|
|
|
ifeq ($(USE_LIBGD),1)
|
|
TESTS_PROGS += rigmatrix.exe
|
|
PROG_CFLAGS += -I$(LIBGD_ROOT)/src
|
|
endif
|
|
|
|
#
|
|
# This always uses '$(Hamlib++_DLL)'.
|
|
#
|
|
TESTS_PROGS += testcpp.exe
|
|
|
|
#
|
|
# All .c-files for '$(Hamlib_DLL)'.
|
|
# Except for those in '$(hamlib_misc_SRC)' which do not need to be exported.
|
|
#
|
|
hamlib_C_SRC = $(addprefix src/, \
|
|
amp_conf.c \
|
|
amp_reg.c \
|
|
amp_settings.c \
|
|
amplifier.c \
|
|
cal.c \
|
|
cm108.c \
|
|
conf.c \
|
|
debug.c \
|
|
event.c \
|
|
ext.c \
|
|
extamp.c \
|
|
gpio.c \
|
|
locator.c \
|
|
iofunc.c \
|
|
mem.c \
|
|
misc.c \
|
|
microham.c \
|
|
network.c \
|
|
parallel.c \
|
|
register.c \
|
|
rig.c \
|
|
rot_conf.c \
|
|
rot_ext.c \
|
|
rot_reg.c \
|
|
rot_settings.c \
|
|
rotator.c \
|
|
serial.c \
|
|
settings.c \
|
|
sleep.c \
|
|
tones.c \
|
|
usb_port.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/dummy/, \
|
|
amp_dummy.c \
|
|
dummy.c \
|
|
dummy_common.c \
|
|
flrig.c \
|
|
netampctl.c \
|
|
netrigctl.c \
|
|
netrotctl.c \
|
|
rot_dummy.c \
|
|
trxmanager.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/adat/, \
|
|
adat.c \
|
|
adt_200a.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/alinco/, \
|
|
alinco.c \
|
|
dx77.c \
|
|
dxsr8.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/aor/, \
|
|
aor.c \
|
|
ar2700.c \
|
|
ar3000.c \
|
|
ar3030.c \
|
|
ar5000.c \
|
|
ar7030.c \
|
|
ar7030p.c \
|
|
ar7030p_utils.c \
|
|
ar8000.c \
|
|
ar8200.c \
|
|
ar8600.c \
|
|
sr2200.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/barrett/, \
|
|
950.c \
|
|
barrett.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/dorji/, \
|
|
dorji.c \
|
|
dra818.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/drake/, \
|
|
drake.c \
|
|
r8a.c \
|
|
r8b.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/elad/, \
|
|
elad.c \
|
|
fdm_duo.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/flexradio/, \
|
|
dttsp.c \
|
|
flexradio.c \
|
|
sdr1k.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/icmarine/, \
|
|
icm700pro.c \
|
|
icm710.c \
|
|
icm802.c \
|
|
icm803.c \
|
|
icmarine.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/icom/, \
|
|
delta2.c \
|
|
frame.c \
|
|
ic78.c \
|
|
ic92d.c \
|
|
ic271.c \
|
|
ic275.c \
|
|
ic471.c \
|
|
ic475.c \
|
|
ic703.c \
|
|
ic706.c \
|
|
ic707.c \
|
|
ic718.c \
|
|
ic725.c \
|
|
ic726.c \
|
|
ic728.c \
|
|
ic735.c \
|
|
ic736.c \
|
|
ic737.c \
|
|
ic738.c \
|
|
ic746.c \
|
|
ic751.c \
|
|
ic756.c \
|
|
ic761.c \
|
|
ic765.c \
|
|
ic775.c \
|
|
ic781.c \
|
|
ic785x.c \
|
|
ic820h.c \
|
|
ic821h.c \
|
|
ic910.c \
|
|
ic970.c \
|
|
ic1275.c \
|
|
ic2730.c \
|
|
ic7000.c \
|
|
ic7100.c \
|
|
ic7200.c \
|
|
ic7300.c \
|
|
ic7410.c \
|
|
ic7600.c \
|
|
ic7610.c \
|
|
ic7700.c \
|
|
ic7800.c \
|
|
ic9100.c \
|
|
icom.c \
|
|
icr6.c \
|
|
icr10.c \
|
|
icr20.c \
|
|
icr30.c \
|
|
icr71.c \
|
|
icr72.c \
|
|
icr75.c \
|
|
icr7000.c \
|
|
icr8500.c \
|
|
icr8600.c \
|
|
icr9000.c \
|
|
icr9500.c \
|
|
icrx7.c \
|
|
id1.c \
|
|
id31.c \
|
|
id4100.c \
|
|
id51.c \
|
|
id5100.c \
|
|
omni.c \
|
|
optoscan.c \
|
|
os456.c \
|
|
os535.c \
|
|
perseus.c \
|
|
x108g.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/jrc/, \
|
|
jrc.c \
|
|
nrd525.c \
|
|
nrd535.c \
|
|
nrd545.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/kachina/, \
|
|
505dsp.c \
|
|
kachina.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/kenwood/, \
|
|
elecraft.c \
|
|
flex.c \
|
|
flex6xxx.c \
|
|
ic10.c \
|
|
k2.c \
|
|
k3.c \
|
|
kenwood.c \
|
|
pihpsdr.c \
|
|
r5000.c \
|
|
th.c \
|
|
thd7.c \
|
|
thd72.c \
|
|
thd74.c \
|
|
thf6a.c \
|
|
thf7.c \
|
|
thg71.c \
|
|
tmd700.c \
|
|
tmd710.c \
|
|
tmv7.c \
|
|
transfox.c \
|
|
trc80.c \
|
|
ts50s.c \
|
|
ts140.c \
|
|
ts440.c \
|
|
ts450s.c \
|
|
ts480.c \
|
|
ts570.c \
|
|
ts590.c \
|
|
ts680.c \
|
|
ts690.c \
|
|
ts711.c \
|
|
ts790.c \
|
|
ts811.c \
|
|
ts850.c \
|
|
ts870s.c \
|
|
ts930.c \
|
|
ts940.c \
|
|
ts950.c \
|
|
ts990s.c \
|
|
ts2000.c \
|
|
xg3.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/kit/, \
|
|
dds60.c \
|
|
drt1.c \
|
|
dwt.c \
|
|
elektor304.c \
|
|
elektor507.c \
|
|
fifisdr.c \
|
|
funcube.c \
|
|
hiqsdr.c \
|
|
kit.c \
|
|
miniVNA.c \
|
|
pcrotor.c \
|
|
rs_hfiq.c \
|
|
si570avrusb.c \
|
|
usrp.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/lowe/, \
|
|
hf235.c \
|
|
lowe.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/pcr/, \
|
|
pcr.c \
|
|
pcr100.c \
|
|
pcr1000.c \
|
|
pcr1500.c \
|
|
pcr2500.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/prm80/, \
|
|
prm80.c \
|
|
prm8060.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/racal/, \
|
|
ra37xx.c \
|
|
ra3702.c \
|
|
ra6790.c \
|
|
racal.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/rft/, \
|
|
ekd500.c \
|
|
rft.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/rs/, \
|
|
eb200.c \
|
|
esmc.c \
|
|
gp2000.c \
|
|
rs.c \
|
|
xk2100.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/skanti/, \
|
|
skanti.c \
|
|
trp8000.c \
|
|
trp8255.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/tapr/, \
|
|
dsp10.c \
|
|
tapr.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/tentec/, \
|
|
argonaut.c \
|
|
jupiter.c \
|
|
omnivii.c \
|
|
orion.c \
|
|
paragon.c \
|
|
pegasus.c \
|
|
rx320.c \
|
|
rx331.c \
|
|
rx340.c \
|
|
rx350.c \
|
|
tentec.c \
|
|
tentec2.c \
|
|
tt550.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/tuner/, \
|
|
tuner.c \
|
|
v4l.c \
|
|
v4l2.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/uniden/, \
|
|
bc245.c \
|
|
bc250.c \
|
|
bc780.c \
|
|
bc895.c \
|
|
bc898.c \
|
|
bcd396t.c \
|
|
bcd996t.c \
|
|
pro2052.c \
|
|
uniden.c \
|
|
uniden_digital.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/winradio/, \
|
|
g303.c \
|
|
g305.c \
|
|
g313-win.c \
|
|
winradio.c \
|
|
wr1000.c \
|
|
wr1500.c \
|
|
wr1550.c \
|
|
wr3100.c \
|
|
wr3150.c \
|
|
wr3500.c \
|
|
wr3700.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/wj/, \
|
|
wj.c \
|
|
wj8888.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rigs/yaesu/, \
|
|
frg100.c \
|
|
frg8800.c \
|
|
frg9600.c \
|
|
ft100.c \
|
|
ft450.c \
|
|
ft600.c \
|
|
ft736.c \
|
|
ft747.c \
|
|
ft757gx.c \
|
|
ft767gx.c \
|
|
ft817.c \
|
|
ft840.c \
|
|
ft847.c \
|
|
ft857.c \
|
|
ft890.c \
|
|
ft891.c \
|
|
ft897.c \
|
|
ft900.c \
|
|
ft920.c \
|
|
ft950.c \
|
|
ft980.c \
|
|
ft990.c \
|
|
ft991.c \
|
|
ft1000d.c \
|
|
ft1000mp.c \
|
|
ft1200.c \
|
|
ft2000.c \
|
|
ft3000.c \
|
|
ft5000.c \
|
|
ft9000.c \
|
|
ftdx10.c \
|
|
ftdx101.c \
|
|
ftdx101mp.c \
|
|
newcat.c \
|
|
vr5000.c \
|
|
vx1700.c \
|
|
yaesu.c)
|
|
|
|
#
|
|
# Code for Antenna Rotators:
|
|
#
|
|
hamlib_C_SRC += $(addprefix rotators/, \
|
|
amsat/if100.c \
|
|
ars/ars.c \
|
|
celestron/celestron.c \
|
|
cnctrk/cnctrk.c \
|
|
easycomm/easycomm.c \
|
|
ether6/ether6.c \
|
|
fodtrack/fodtrack.c \
|
|
heathkit/hd1780.c \
|
|
ioptron/rot_ioptron.c \
|
|
m2/rc2800.c \
|
|
meade/meade.c \
|
|
prosistel/prosistel.c \
|
|
rotorez/rotorez.c \
|
|
sartek/sartek.c \
|
|
satel/satel.c \
|
|
spid/spid.c \
|
|
ts7400/ts7400.c)
|
|
|
|
hamlib_C_SRC += $(addprefix rotators/gs232a/, \
|
|
gs232.c \
|
|
gs232a.c \
|
|
gs232b.c)
|
|
|
|
hamlib_C_SRC += $(addprefix amplifiers/elecraft/, \
|
|
kpa.c \
|
|
kpa1500.c)
|
|
|
|
#
|
|
# Untested.
|
|
#
|
|
ifeq ($(USE_LIBINDI),1)
|
|
VPATH += $(LIBINDI_ROOT)/libs/indibase
|
|
|
|
CFLAGS += -DHAVE_LIBINDI=1 \
|
|
-DHAVE_INDIBASE_LAYOUT=1 \
|
|
-I$(LIBINDI_ROOT) \
|
|
-I$(LIBINDI_ROOT)/libs \
|
|
-I$(LIBINDI_ROOT)/../zlib
|
|
|
|
hamlib_C_SRC += rotators/indi/indi.c
|
|
hamlib_CPP_SRC = rotators/indi/indi_wrapper.cpp \
|
|
$(addprefix $(LIBINDI_ROOT)/libs/indibase/, \
|
|
basedevice.cpp \
|
|
indiproperty.cpp)
|
|
endif
|
|
|
|
ifeq ($(USE_GNURADIO),1)
|
|
VPATH += extra/gnuradio
|
|
CFLAGS += -I./extra/gnuradio -I$(GNURADIO_ROOT)/include
|
|
|
|
hamlib_C_SRC += $(addprefix extra/gnuradio/, \
|
|
gr.c \
|
|
graudio.c \
|
|
mc4020.c)
|
|
|
|
hamlib_CC_SRC += gnuradio/gnuradio.cc
|
|
endif
|
|
|
|
#
|
|
# Various support code for Hamlib's internal use:
|
|
#
|
|
hamlib_misc_SRC = lib/termios.c \
|
|
lib/win-misc.c \
|
|
tests/sprintflst.c
|
|
|
|
ifneq ($(CC),gcc)
|
|
hamlib_misc_SRC += $(addprefix lib/, \
|
|
getopt_long.c \
|
|
gettimeofday.c \
|
|
usleep.c)
|
|
endif
|
|
|
|
#
|
|
# .cc sources for $(Hamlib++_DLL)':
|
|
#
|
|
hamlib++_SRC = $(addprefix c++/, \
|
|
ampclass.cc \
|
|
rigclass.cc \
|
|
rotclass.cc)
|
|
|
|
#
|
|
# .c sources for various programs:
|
|
#
|
|
ampctl_SRC = $(addprefix tests/, \
|
|
ampctl.c \
|
|
ampctl_parse.c \
|
|
dumpcaps_amp.c)
|
|
|
|
ampctld_SRC = $(addprefix tests/, \
|
|
ampctld.c \
|
|
ampctl_parse.c \
|
|
dumpcaps_amp.c)
|
|
|
|
rigctlcom_SRC = $(addprefix tests/, \
|
|
dumpcaps.c \
|
|
rigctlcom.c \
|
|
rigctl_parse.c)
|
|
|
|
rigctl_SRC = $(addprefix tests/, \
|
|
dumpcaps.c \
|
|
dumpcaps_rot.c \
|
|
rigctl.c \
|
|
rigctl_parse.c)
|
|
|
|
rigctld_SRC = $(addprefix tests/, \
|
|
dumpcaps.c \
|
|
dumpcaps_rot.c \
|
|
rigctld.c \
|
|
rigctl_parse.c)
|
|
|
|
rigmem_SRC = $(addprefix tests/, \
|
|
rigmem.c \
|
|
memcsv.c \
|
|
memload.c \
|
|
memsave.c)
|
|
|
|
rotctl_SRC = $(addprefix tests/, \
|
|
rotctl.c \
|
|
rotctl_parse.c \
|
|
dumpcaps.c \
|
|
dumpcaps_rot.c)
|
|
|
|
rotctld_SRC = $(addprefix tests/, \
|
|
rotctld.c \
|
|
rotctl_parse.c \
|
|
dumpcaps.c \
|
|
dumpcaps_rot.c)
|
|
|
|
hamlib_C_OBJ = $(call c_to_obj, $(hamlib_C_SRC))
|
|
hamlib_CC_OBJ = $(call cc_to_obj, $(hamlib_CC_SRC))
|
|
hamlib_CPP_OBJ = $(call cpp_to_obj,$(hamlib_CPP_SRC))
|
|
hamlib++_OBJ = $(call cc_to_obj, $(hamlib++_SRC))
|
|
|
|
hamlib_misc_OBJ = $(call c_to_obj, $(hamlib_misc_SRC))
|
|
ampctl_OBJ = $(call c_to_obj, $(ampctl_SRC))
|
|
ampctld_OBJ = $(call c_to_obj, $(ampctld_SRC))
|
|
rigctlcom_OBJ = $(call c_to_obj, $(rigctlcom_SRC))
|
|
rigctl_OBJ = $(call c_to_obj, $(rigctl_SRC))
|
|
rigctld_OBJ = $(call c_to_obj, $(rigctld_SRC))
|
|
rigmatrix_OBJ = $(call c_to_obj, tests/rigmatrix.c)
|
|
rigmem_OBJ = $(call c_to_obj, $(rigmem_SRC))
|
|
rotctl_OBJ = $(call c_to_obj, $(rotctl_SRC))
|
|
rotctld_OBJ = $(call c_to_obj, $(rotctld_SRC))
|
|
|
|
hamlib_i = $(call c_to_i, $(hamlib_C_SRC))
|
|
hamlib++_i = $(call cc_to_i, $(hamlib++_SRC))
|
|
|
|
$(hamlib_C_OBJ) \
|
|
$(hamlib++_OBJ) \
|
|
$(hamlib_i) \
|
|
$(hamlib++_i): EXTRA_CFLAGS = -DIN_HAMLIB
|
|
|
|
$(hamlib++_OBJ) \
|
|
$(hamlib++_i): EXTRA_CFLAGS += -DDLL_EXPORT
|
|
|
|
all_test_OBJ = $(addprefix $(OBJ_DIR)/, \
|
|
dumpmem.$(O) \
|
|
example.$(O) \
|
|
listrigs.$(O) \
|
|
rig_bench.$(O) \
|
|
rigsmtr.$(O) \
|
|
rigswr.$(O) \
|
|
simyaesu.$(O) \
|
|
testcpp.$(O) \
|
|
testfreq.$(O) \
|
|
testbcd.$(O) \
|
|
testfreq.$(O) \
|
|
testloc.$(O) \
|
|
testrig.$(O) \
|
|
testrigcaps.$(O) \
|
|
testrigopen.$(O) \
|
|
testtrn.$(O))
|
|
|
|
all_test_OBJ += $(ampctl_OBJ) \
|
|
$(ampctld_OBJ) \
|
|
$(rigctlcom_OBJ) \
|
|
$(rigctl_OBJ) \
|
|
$(rigctld_OBJ) \
|
|
$(rigmatrix_OBJ) \
|
|
$(rigmem_OBJ) \
|
|
$(rotctl_OBJ) \
|
|
$(rotctld_OBJ) \
|
|
|
|
all_test_I = $(notdir $(all_test_OBJ:.$(O)=.i))
|
|
|
|
$(all_test_OBJ) $(all_test_I): EXTRA_CFLAGS = $(PROG_CFLAGS)
|
|
|
|
.SECONDARY: $(all_test_OBJ)
|
|
|
|
GENERATED = config.h \
|
|
tests/hamlibdatetime.h
|
|
|
|
ifneq ($(CC),gcc)
|
|
GENERATED += $(addprefix $(OBJ_DIR)/, \
|
|
unistd.h \
|
|
termios.h \
|
|
strings.h \
|
|
sys/time.h \
|
|
sys/ioctl.h)
|
|
endif
|
|
|
|
all: $(OBJ_DIR) $(OBJ_DIR)/sys $(GENERATED) rm_elecraft $(TARGETS) programs epilogue
|
|
|
|
$(OBJ_DIR) $(OBJ_DIR)/sys:
|
|
- $(MKDIR) $@
|
|
|
|
#
|
|
# This is a 0-byte file that messes with 'rigs/kenwood/elecraft.c'
|
|
#
|
|
rm_elecraft:
|
|
rm -f amplifiers/elecraft/elecraft.c
|
|
|
|
epilogue:
|
|
$(call white_message, Welcome to $(Hamlib_DLL) and $(Hamlib++_DLL) (CPU=$(CPU)).)
|
|
$(call green_message, You could also do a 'make -f $(THIS_FILE) [doxy_docs | py_module | lua_module]'.\n)
|
|
|
|
programs: $(GENERATED) $(TESTS_PROGS)
|
|
|
|
$(hamlib_misc_OBJ): EXTRA_CFLAGS += -DIN_HAMLIB_MISC_LIB
|
|
|
|
$(misc_LIB): $(hamlib_misc_OBJ)
|
|
$(call create_lib, $@, $^)
|
|
|
|
$(Hamlib_STAT_LIB): $(hamlib_C_OBJ) $(hamlib_CC_OBJ) $(hamlib_CPP_OBJ)
|
|
$(call create_lib, $@, $^)
|
|
|
|
$(Hamlib_IMP_LIB): $(Hamlib_DLL)
|
|
$(Hamlib++_IMP_LIB): $(Hamlib++_DLL)
|
|
|
|
$(Hamlib_DLL): $(OBJ_DIR)/Hamlib.def $(Hamlib_STAT_LIB) $(misc_LIB) $(OBJ_DIR)/Hamlib.res
|
|
$(call link_DLL, $@, $(Hamlib_IMP_LIB), $(call select,,-def:)$^ $(EX_LIBS))
|
|
|
|
$(Hamlib++_DLL): $(hamlib++_OBJ) $(Hamlib_IMP_LIB) $(OBJ_DIR)/Hamlib++.res
|
|
$(call link_DLL, $@, $(Hamlib++_IMP_LIB), $^ $(call select, -lstdc++,) $(EX_LIBS))
|
|
|
|
#
|
|
# For MSVC only.
|
|
#
|
|
ifeq ($(USE_MP_COMPILE),1)
|
|
$(hamlib_C_OBJ): $(hamlib_C_SRC) | $(CC).args
|
|
$(CC) -MP @$(CC).args -DIN_HAMLIB -Fo./$(OBJ_DIR)\\ $(hamlib_C_SRC)
|
|
@echo
|
|
endif
|
|
|
|
$(CC).args: $(THIS_FILE)
|
|
$(call green_message, Creating $@)
|
|
$(call create_resp_file, $@, $(CFLAGS) -c)
|
|
|
|
#
|
|
# For 'testcpp.exe':
|
|
#
|
|
testcpp.exe: $(OBJ_DIR)/testcpp.$(O) $(CPP_PROG_LIBS)
|
|
$(call link_EXE, $@, $^ $(call select, -lstdc++,) $(EX_LIBS))
|
|
|
|
#
|
|
# For '$(TESTS_PROGS)':
|
|
#
|
|
$(OBJ_DIR)/%.$(O): tests/%.c | $(CC).args
|
|
$(call Compile, $<, $@)
|
|
|
|
ampctl.exe: $(ampctl_OBJ) $(C_PROG_LIBS)
|
|
$(call link_EXE, $@, $^ $(PROG_LIBS))
|
|
|
|
ampctld.exe: $(ampctld_OBJ) $(C_PROG_LIBS)
|
|
$(call link_EXE, $@, $^ $(PROG_LIBS))
|
|
|
|
rigctlcom.exe: $(rigctlcom_OBJ) $(C_PROG_LIBS)
|
|
$(call link_EXE, $@, $^ $(PROG_LIBS))
|
|
|
|
rigctl.exe: $(rigctl_OBJ) $(C_PROG_LIBS)
|
|
$(call link_EXE, $@, $^ $(PROG_LIBS))
|
|
|
|
rigctld.exe: $(rigctld_OBJ) $(C_PROG_LIBS)
|
|
$(call link_EXE, $@, $^ $(PROG_LIBS))
|
|
|
|
rigmem.exe: $(rigmem_OBJ) $(C_PROG_LIBS) $(XML2_LIB)
|
|
$(call link_EXE, $@, $^ $(PROG_LIBS))
|
|
|
|
rotctl.exe: $(rotctl_OBJ) $(C_PROG_LIBS)
|
|
$(call link_EXE, $@, $^ $(PROG_LIBS))
|
|
|
|
rotctld.exe: $(rotctld_OBJ) $(C_PROG_LIBS)
|
|
$(call link_EXE, $@, $^ $(PROG_LIBS))
|
|
|
|
#
|
|
# I do not have a GD.lib for MSVC/clang. Use the dynamic MinGW version instead.
|
|
# Copy it's .DLL here to avoid another DLL-hell.
|
|
#
|
|
rigmatrix.exe: $(rigmatrix_OBJ) $(C_PROG_LIBS) $(LIBGD_ROOT)/src/libgd.dll.a
|
|
$(call link_EXE, $@, $^ $(PROG_LIBS))
|
|
$(COPY) $(LIBGD_ROOT)/src/bgd.dll .
|
|
|
|
#
|
|
# For all other simple test-programs:
|
|
#
|
|
%.exe: $(OBJ_DIR)/%.$(O) $(C_PROG_LIBS)
|
|
$(call link_EXE, $@, $^ $(PROG_LIBS))
|
|
|
|
#
|
|
# For '$(hamlib_C_SRC)' and '$(hamlib_CC_SRC)':
|
|
#
|
|
$(OBJ_DIR)/%.$(O): %.c | $(CC).args
|
|
$(call Compile, $<, $@)
|
|
|
|
$(OBJ_DIR)/%.$(O): %.cc | $(CC).args
|
|
$(call Compile, $<, $@)
|
|
|
|
$(OBJ_DIR)/%.$(O): %.cpp | $(CC).args
|
|
$(call Compile, $<, $@)
|
|
|
|
#
|
|
# For '$(hamlib_misc_SRC)' since 'lib' is not in 'VPATH' due to 'lib/dummy.c'.
|
|
#
|
|
$(OBJ_DIR)/%.$(O): lib/%.c | $(CC).args
|
|
$(call Compile, $<, $@)
|
|
|
|
clean: $(CC)_clean
|
|
rm -f $(GENERATED) $(OBJ_DIR)/*.{$(O),rc,res,def} \
|
|
$(TESTS_PROGS:.exe=.map) cl.args clang-cl.args gcc.args lib.args cpp_filter.py
|
|
- $(RMDIR) $(OBJ_DIR)/sys $(OBJ_DIR)
|
|
|
|
gcc_clean: ;
|
|
|
|
cl_clean clang-cl_clean:
|
|
rm -f link.tmp vc1*.pdb $(Hamlib_DLL:.dll=.pdb) $(Hamlib++_DLL:.dll=.pdb) \
|
|
$(TESTS_PROGS:.exe=.pdb) $(TESTS_PROGS:.exe=.exp) $(TESTS_PROGS:.exe=.lib)
|
|
|
|
vclean realclean: clean doc_clean py_clean lua_clean
|
|
rm -f $(TARGETS) $(Hamlib_DLL:.dll=.map) $(Hamlib++_DLL:.dll=.map) \
|
|
$(TESTS_PROGS) bgd.dll .depend.Windows
|
|
|
|
config.h: $(THIS_FILE)
|
|
$(call Generate, $@, //)
|
|
$(file >> $@,#ifndef _CONFIG_H)
|
|
$(file >> $@,#define _CONFIG_H)
|
|
$(file >> $@,$(CONFIG_H))
|
|
$(file >> $@,#endif /* _CONFIG_H */)
|
|
|
|
tests/hamlibdatetime.h: $(THIS_FILE)
|
|
$(call Generate, $@, //)
|
|
$(file >> $@, #define HAMLIBDATETIME "__DATE__")
|
|
|
|
$(OBJ_DIR)/unistd.h: $(THIS_FILE)
|
|
$(call Generate_fake, $@, #include "lib/getopt.h")
|
|
|
|
$(OBJ_DIR)/sys/time.h: $(THIS_FILE)
|
|
$(call Generate_fake, $@)
|
|
|
|
$(OBJ_DIR)/strings.h: $(THIS_FILE)
|
|
$(call Generate_fake, $@, #include <string.h>)
|
|
|
|
$(OBJ_DIR)/termios.h: $(THIS_FILE)
|
|
$(call Generate_fake, $@)
|
|
|
|
$(OBJ_DIR)/sys/ioctl.h: $(THIS_FILE)
|
|
$(call Generate_fake, $@)
|
|
|
|
%.i: %.c FORCE $(GENERATED) cpp_filter.py $(CC).args
|
|
$(call Cxx_preprocess, $@, $<, c)
|
|
|
|
%.i: lib/%.c FORCE $(GENERATED) cpp_filter.py $(CC).args
|
|
$(call Cxx_preprocess, $@, $<, c)
|
|
|
|
%.i: $(OBJ_DIR)/%.c FORCE $(GENERATED) cpp_filter.py $(CC).args
|
|
$(call Cxx_preprocess, $@, $<, c)
|
|
|
|
%.i: %.cc FORCE $(GENERATED) cpp_filter.py $(CC).args
|
|
$(call Cxx_preprocess, $@, $<, cpp)
|
|
|
|
%.i: %.cpp FORCE $(GENERATED) cpp_filter.py $(CC).args
|
|
$(call Cxx_preprocess, $@, $<, cpp)
|
|
|
|
FORCE:
|
|
|
|
#
|
|
# Create API documentation in 'doc/html/index.html':
|
|
#
|
|
doxy_docs: doc/Hamlib.cfg
|
|
cd doc ; \
|
|
doxygen Hamlib.cfg 2> doxygen.log ; \
|
|
cd html ; \
|
|
hhc index.hhp ; \
|
|
mv -f Hamlib.chm ..
|
|
@echo 'Doxygen done. Look in "doc/doxygen.log" for messages.'
|
|
|
|
doc/Hamlib.cfg: $(THIS_FILE)
|
|
$(call Generate, $@, #)
|
|
$(file >> $@,$(hamlib_CFG))
|
|
|
|
doc_clean:
|
|
rm -f doc/doxygen.log doc/hamlib.cfg doc/Hamlib.chm
|
|
rm -fR doc/html/*
|
|
- rmdir doc/html
|
|
|
|
#
|
|
# Python 2/3 module stuff.
|
|
#
|
|
# Get the Python prefix via the 'py -x' launcher.
|
|
# The Python major version (2 or 3) is simply '$(USE_PY_BINDING)'.
|
|
#
|
|
PY_ROOT = $(subst \,/,$(shell py -$(USE_PY_BINDING) -c "import sys; print(sys.prefix)"))
|
|
|
|
ifeq ($(USE_PY_BINDING),2)
|
|
PY_WRAPPER_C = $(OBJ_DIR)/HamlibPy2_wrap.c
|
|
PY_WRAPPER_O = $(OBJ_DIR)/HamlibPy2_wrap.$(O)
|
|
|
|
else ifeq ($(USE_PY_BINDING),3)
|
|
PY_WRAPPER_C = $(OBJ_DIR)/HamlibPy3_wrap.c
|
|
PY_WRAPPER_O = $(OBJ_DIR)/HamlibPy3_wrap.$(O)
|
|
endif
|
|
|
|
ifeq ($(CC),gcc)
|
|
PYD_LIBS = $(PY_ROOT)/libs/libpython$(USE_PY_BINDING)*.a
|
|
endif
|
|
|
|
_Hamlib_PYD_deps = $(PY_WRAPPER_O) $(OBJ_DIR)/HamlibPy.res $(Hamlib_IMP_LIB)
|
|
PY_CFLAGS = -I$(PY_ROOT)/include -DNO_SSIZE_T -DDLL_EXPORT
|
|
|
|
ifeq ($(USE_PY_BINDING),0)
|
|
py_module:
|
|
$(error Use 'USE_PY_BINDING=[2|3]'.)
|
|
|
|
else
|
|
py_module: _Hamlib.pyd $(OBJ_DIR)/Hamlib.py $(Hamlib_DLL)
|
|
$(COPY) $^ $(PY_ROOT)/Lib/site-packages
|
|
ifneq ($(CC),gcc)
|
|
$(COPY) _Hamlib.pdb $(PY_ROOT)/Lib/site-packages
|
|
endif
|
|
endif
|
|
|
|
$(OBJ_DIR)/Hamlib.py: $(PY_WRAPPER_C)
|
|
|
|
SWIG_FLAGS = -I./include -I./bindings # -macroerrors
|
|
|
|
$(PY_WRAPPER_C): bindings/Hamlib.swg include/hamlib/rig.h
|
|
$(call green_message, Generating $@ and $(OBJ_DIR)/Hamlib.py)
|
|
swig -python $(SWIG_FLAGS) -o $@ $<
|
|
|
|
$(PY_WRAPPER_O) $(PY_WRAPPER_C:.c=.i): EXTRA_CFLAGS += $(PY_CFLAGS)
|
|
|
|
ifeq ($(USE_PY_BINDING),3)
|
|
_Hamlib.pyd: $(_Hamlib_PYD_deps)
|
|
$(call link_PYD, $@, $^ $(PYD_LIBS), PyInit__Hamlib)
|
|
|
|
else ifeq ($(USE_PY_BINDING),2)
|
|
_Hamlib.pyd: $(_Hamlib_PYD_deps)
|
|
$(call link_PYD, $@, $^ $(PYD_LIBS), init_Hamlib)
|
|
endif
|
|
|
|
py_JUNK = $(OBJ_DIR)/Hamlib.py \
|
|
_Hamlib.pyd \
|
|
_Hamlib.map \
|
|
_Hamlib.pdb \
|
|
_Hamlib.exp \
|
|
_Hamlib.lib \
|
|
$(PY_WRAPPER_C) \
|
|
$(OBJ_DIR)/HamlibPy.res
|
|
|
|
py_clean:
|
|
rm -f $(py_JUNK)
|
|
|
|
#
|
|
# Lua module stuff. Only LuaJIT seems to be stable.
|
|
#
|
|
# The 'HamlibLua.dll' exports only 'luaopen_Hamliblua()'
|
|
#
|
|
lua_module: HamlibLua.dll
|
|
$(call green_message, Remember to update your 'LUA_CPATH' for 'HamlibLua.dll'. And your 'PATH' for the needed '$(Hamlib_DLL)')
|
|
# $(COPY) $^ $(some_where_on_PATH_and_LUA_CPATH)
|
|
|
|
$(OBJ_DIR)/HamlibLua_wrap.c: bindings/Hamlib.swg
|
|
$(call green_message, Generating $@)
|
|
swig -lua $(SWIG_FLAGS) -o $@ $<
|
|
|
|
$(OBJ_DIR)/HamlibLua_wrap.$(O) HamlibLua_wrap.i: EXTRA_CFLAGS = -I$(LUA_ROOT)/src -DDLL_EXPORT
|
|
|
|
#
|
|
# The imp-lib 'HamlibLua.$(A)' is not needed for anything.
|
|
#
|
|
HamlibLua.dll: $(OBJ_DIR)/HamlibLua_wrap.$(O) $(Hamlib_IMP_LIB) $(OBJ_DIR)/HamlibLua.res
|
|
$(call link_DLL, $@, HamlibLua.$(A), $^ $(LUA_LIB))
|
|
|
|
lua_JUNK = HamlibLua.dll \
|
|
HamlibLua.$(A) \
|
|
HamlibLua.map \
|
|
HamlibLua.pdb \
|
|
HamlibLua.exp \
|
|
$(OBJ_DIR)/HamlibLua_wrap.c
|
|
|
|
lua_clean:
|
|
rm -f $(lua_JUNK)
|
|
|
|
$(OBJ_DIR)/Hamlib.rc: $(THIS_FILE)
|
|
$(call make_rc, $@, $(Hamlib_DLL), "Ham Radio Control Library for C", VFT_DLL)
|
|
|
|
$(OBJ_DIR)/Hamlib++.rc: $(THIS_FILE)
|
|
$(call make_rc, $@, $(Hamlib++_DLL), "Ham Radio Control Library for C++", VFT_DLL)
|
|
|
|
$(OBJ_DIR)/HamlibPy.rc: $(THIS_FILE)
|
|
$(call make_rc, $@, _Hamlib.pyd, "Hamlib module for Python v$(USE_PY_BINDING).x", VFT_DLL)
|
|
|
|
$(OBJ_DIR)/HamlibLua.rc: $(THIS_FILE)
|
|
$(call make_rc, $@, HamlibLua.dll, "Hamlib module for LuaJIT", VFT_DLL)
|
|
|
|
$(OBJ_DIR)/%.res: $(OBJ_DIR)/%.rc config.h
|
|
$(call make_res, $<, $@)
|
|
|
|
#
|
|
# Create an export definition file by using 'nm $(Hamlib_STAT_LIB)' to
|
|
# extract all the public functions;
|
|
# i.e. ' T ' symbols are "Text symbol, global". See 'man nm' for details.
|
|
#
|
|
# On 'CPU=x86', all symbols have a leading '_'. Drop these.
|
|
#
|
|
# Ignore symbols matching ' Wspiapi.*' and ' _.*'.
|
|
#
|
|
# Append the DATA symbols manually.
|
|
#
|
|
ifeq ($(CPU),x86)
|
|
uscore := _
|
|
endif
|
|
|
|
#
|
|
# Export all code symbols.
|
|
#
|
|
extract_code_syms = nm $(2) | grep ' T $(uscore)[a-zA-Z0-9_]*' | \
|
|
sed -e 's@^.* $(uscore)@ @g' \
|
|
-e 's@ Wspiapi.*@@g' \
|
|
-e 's@ _.*@@g' | sort | uniq >> $(1)
|
|
|
|
define Hamlib_DATA
|
|
hamlib_version DATA
|
|
hamlib_copyright DATA
|
|
hamlib_version2 DATA
|
|
hamlib_copyright2 DATA
|
|
debugmsgsave DATA
|
|
debugmsgsave2 DATA
|
|
endef
|
|
|
|
export Hamlib_DATA
|
|
|
|
#
|
|
# We export stuff using this generated .def-file:
|
|
#
|
|
$(OBJ_DIR)/Hamlib.def: $(Hamlib_STAT_LIB) $(THIS_FILE)
|
|
$(call Generate, $@, ;)
|
|
$(file >> $@, LIBRARY $(Hamlib_DLL))
|
|
$(file >> $@, EXPORTS)
|
|
$(call extract_code_syms, $@, $<)
|
|
@echo "$$Hamlib_DATA" >> $@
|
|
|
|
#
|
|
# GNU-make macros.
|
|
#
|
|
# This assumes you have a Cygwin/Msys 'echo' with colour support.
|
|
#
|
|
green_message = @echo -e "\e[1;32m$(strip $(1))\e[0m"
|
|
white_message = @echo -e "\e[1;37m$(strip $(1))\e[0m"
|
|
|
|
#
|
|
# .c compile macro.
|
|
# $(1): the .c file (and extra CFLAGS)
|
|
# $(2): the .$(O) file
|
|
#
|
|
# Do not use '@gcc.args' since some old gcc gets confused by it!?
|
|
#
|
|
ifeq ($(CC),gcc)
|
|
define Compile
|
|
$(CC) @$(CC).args $(EXTRA_CFLAGS) -o $(2) $(1)
|
|
@echo
|
|
endef
|
|
else
|
|
define Compile
|
|
$(CC) @$(CC).args $(EXTRA_CFLAGS) -Fo$(strip $(2)) $(1)
|
|
@echo
|
|
endef
|
|
endif
|
|
|
|
#
|
|
# Create an EXE from objects.
|
|
# arg1, $(1): The .exe file.
|
|
# arg2, $(2): The .$(O) file(s), extra args and libs.
|
|
#
|
|
define link_EXE
|
|
$(call green_message, Linking $(1))
|
|
$(call link_EXE_$(CC), $(1), $(2))
|
|
@echo
|
|
endef
|
|
|
|
define link_EXE_cl
|
|
link $(LDFLAGS) -out:$(strip $(1)) $(2) > link.tmp
|
|
@cat link.tmp >> $(1:.exe=.map)
|
|
endef
|
|
|
|
link_EXE_clang-cl = $(call link_EXE_cl, $(1), $(2))
|
|
link_EXE_gcc = $(CC) $(LDFLAGS) -o $(1) $(2) > $(1:.exe=.map)
|
|
|
|
#
|
|
# Macro to create a DLL + import-lib from objects.
|
|
# arg1, $(1): The .dll file.
|
|
# arg2, $(2): The import-lib.
|
|
# arg3, $(3): The .$(O) file(s), extra args and libs.
|
|
#
|
|
define link_DLL
|
|
$(call green_message, Linking $(1))
|
|
$(call link_DLL_$(CC), $(1), $(2), $(3))
|
|
@echo
|
|
endef
|
|
|
|
define link_DLL_cl
|
|
link -dll $(LDFLAGS) -out:$(strip $(1)) -implib:$(strip $(2)) $(3) > link.tmp
|
|
@cat link.tmp >> $(1:.dll=.map)
|
|
@rm -f $(2:.lib=.exp)
|
|
endef
|
|
|
|
link_DLL_clang-cl = $(call link_DLL_cl, $(1), $(2), $(3))
|
|
link_DLL_gcc = $(CC) -shared $(LDFLAGS) -o $(1) -Wl,--out-implib,$(strip $(2)) $(3) > $(1:.dll=.map)
|
|
|
|
#
|
|
# Macro to create a Python .PYD-module from objects.
|
|
# arg1, $(1): The .pyd file.
|
|
# arg2, $(2): The .$(O) file(s), extra args and libs.
|
|
# arg3, $(3): The name of the Python init function.
|
|
# Not used by MinGW. It exports the 'SWIGEXPORT SWIG_init()' function
|
|
# in the 'HamlibPyX_wrap.c' code.
|
|
#
|
|
define link_PYD
|
|
$(call green_message, Linking $(1))
|
|
$(call link_PYD_$(CC), $(1), $(2), $(3))
|
|
@echo
|
|
endef
|
|
|
|
define link_PYD_cl
|
|
link -dll $(LDFLAGS) -libpath:$(PY_ROOT)/libs -export:$(strip $(3)) -out:$(strip $(1)) $(2) > link.tmp
|
|
@cat link.tmp >> $(1:.pyd=.map)
|
|
@rm -f $(1:.pyd=.exp) $(1:.pyd=.lib)
|
|
endef
|
|
|
|
link_PYD_clang-cl = $(call link_PYD_cl, $(1), $(2), $(3))
|
|
link_PYD_gcc = $(CC) -shared $(LDFLAGS) -o $(1) $(2) > $(1:.pyd=.map)
|
|
|
|
define make_res
|
|
$(call green_message, Creating $(2))
|
|
$(call make_res_$(CC), $(1), $(2))
|
|
@echo
|
|
endef
|
|
|
|
make_res_cl = rc -nologo -D_MSC_VER -Fo./$(strip $(2)) $(1)
|
|
make_res_clang-cl = rc -nologo -D__clang__ -Fo./$(strip $(2)) $(1)
|
|
make_res_gcc = windres -D__MINGW32__ -O COFF -I. $(RCFLAGS) -o $(2) -i $(1)
|
|
|
|
#
|
|
# static .lib creation macro:
|
|
# arg1: $(1): the .$(A) file.
|
|
# arg2: $(2): the .$(O) files to put in it.
|
|
#
|
|
define create_lib
|
|
@rm -f $(1)
|
|
$(call green_message, Creating $(1))
|
|
$(call create_resp_file, lib.args, $(2))
|
|
$(call create_lib_$(CC), $(1))
|
|
@echo
|
|
endef
|
|
|
|
create_lib_cl = lib -nologo -out:$(strip $(1)) @lib.args
|
|
create_lib_clang-cl = $(call create_lib_cl, $(1))
|
|
create_lib_gcc = ar rs $(1) @lib.args
|
|
|
|
#
|
|
# Create a response file $(1).
|
|
# One word from $(2) per line.
|
|
#
|
|
define create_resp_file
|
|
$(file > $(1))
|
|
$(foreach f, $(2), $(file >> $(1),$(strip $(f))) )
|
|
endef
|
|
|
|
define Warning
|
|
$(1)
|
|
$(1) DO NOT EDIT! This file was automatically generated
|
|
$(1) from $(realpath $(THIS_FILE)) at $(DATE).
|
|
$(1) Edit that file instead.
|
|
$(1)
|
|
endef
|
|
|
|
define Generate
|
|
$(call green_message, Generating $(1))
|
|
$(file > $(1),$(call Warning,$(strip $(2))))
|
|
endef
|
|
|
|
define Generate_fake
|
|
$(call Generate, $(1), //)
|
|
$(file >> $(1), // fake <$(strip $(1))> for MSVC/clang-cl)
|
|
$(file >> $(1), $(2))
|
|
endef
|
|
|
|
define CONFIG_H
|
|
#define ABI_VERSION $(ABI_VER)
|
|
|
|
#if defined(IN_HAMLIB) && defined(DLL_EXPORT) && !defined(__cplusplus)
|
|
#error "Do not use '-DDLL_EXPORT' since we use a .def-file to control the exports."
|
|
#endif
|
|
|
|
#ifndef WIN32
|
|
#define WIN32 1
|
|
#endif
|
|
|
|
#if !defined(_WIN32_WINNT) || (_WIN32_WINNT < 0x0601)
|
|
#undef _WIN32_WINNT
|
|
#define _WIN32_WINNT 0x0601
|
|
#endif
|
|
|
|
#define WIN32_LEAN_AND_MEAN
|
|
|
|
/*
|
|
* MSVC/clang-cl:
|
|
* Except for .cc code (the 'LIBUSB_ROOT' code that needs Boost), and
|
|
* while doing 'make depend', pretend we are MinGW.
|
|
*/
|
|
#if defined(_MSC_VER)
|
|
#define _CRT_SECURE_NO_WARNINGS
|
|
#define _CRT_NONSTDC_NO_WARNINGS
|
|
|
|
struct timeval; /* Forward */
|
|
struct timezone; /* Forward */
|
|
|
|
extern int gettimeofday (struct timeval *, struct timezone *);
|
|
#else
|
|
/*
|
|
* MinGW section:
|
|
*/
|
|
#define HAVE_PTHREAD 1
|
|
#define HAVE_UNISTD_H 1
|
|
#define HAVE_SELECT 1
|
|
#define HAVE_SSLEEP 1
|
|
#define HAVE_SYS_TIME_H 1
|
|
#define HAVE_STRTOK_R 1
|
|
|
|
#include <sys/time.h> /* 'gettimeofday()' */
|
|
#endif
|
|
|
|
#include <windows.h>
|
|
#include <winsock2.h> /* 'struct timeval' etc. */
|
|
#include <ws2tcpip.h> /* 'gai_strerror()' etc. */
|
|
#include <time.h> /* 'struct timespec' etc. */
|
|
#include <io.h> /* 'open()', 'close()' etc. */
|
|
#include <stdint.h> /* 'int64_t' etc. */
|
|
#include <process.h> /* 'getpid()' etc. */
|
|
#include <malloc.h> /* 'alloca()' etc. */
|
|
|
|
#define HAVE_SYS_TYPES_H 1
|
|
#define HAVE_INTTYPES_H 1
|
|
#define HAVE_WINRADIO 1
|
|
#define HAVE_WINDOWS_H 1
|
|
#define HAVE_WINBASE_H 1
|
|
#define HAVE_WS2TCPIP_H 1
|
|
#define HAVE_WSPIAPI_H 1
|
|
#define HAVE_GETADDRINFO 1
|
|
#define HAVE_DECL_GAI_STRERROR 1
|
|
#define HAVE_SELECT 1
|
|
#define HAVE_SSLEEP 1
|
|
#define HAVE_SLEEP 1
|
|
|
|
#if defined(_MSC_VER)
|
|
#ifndef __clang__
|
|
#define __attribute__(x)
|
|
#endif
|
|
|
|
#define strncasecmp(s1, s2, n) _strnicmp (s1, s2, n)
|
|
#define sleep(s) Sleep (1000*(s))
|
|
|
|
extern int usleep (unsigned long usec);
|
|
#endif
|
|
|
|
/* No point in defining this
|
|
*/
|
|
//#define HAVE_SIGNAL 1
|
|
|
|
/* Since 'WIN32_LEAN_AND_MEAN' is defined, this header is
|
|
* not included in <windows.h>. So do it explicitly, but it is
|
|
* only needed in 'rigs/winradio/g313-win.c'.
|
|
*/
|
|
#include <mmsystem.h>
|
|
|
|
#define _TIMEVAL_DEFINED
|
|
#define _TIMESPEC_DEFINED
|
|
#define _USE_MATH_DEFINES /* 'M_PI' etc. */
|
|
|
|
#if !defined(_SSIZE_T_DEFINED) && !defined(NO_SSIZE_T)
|
|
#include <basetsd.h>
|
|
|
|
typedef SSIZE_T ssize_t;
|
|
#define _SSIZE_T_DEFINED
|
|
#endif
|
|
|
|
#if !defined(_UINT_DEFINED)
|
|
typedef unsigned int uint;
|
|
|
|
#define _UINT_DEFINED
|
|
#endif
|
|
|
|
#if !defined(_MODE_T_DEFINED) && !defined(__MINGW32__)
|
|
typedef unsigned short mode_t;
|
|
#define _MODE_T_DEFINED
|
|
#endif
|
|
|
|
#if !defined(timersub)
|
|
#define timersub(a, b, result) do { \
|
|
(result)->tv_sec = (a)->tv_sec - (b)->tv_sec; \
|
|
(result)->tv_usec = (a)->tv_usec - (b)->tv_usec; \
|
|
if ((result)->tv_usec < 0) { \
|
|
--(result)->tv_sec; \
|
|
(result)->tv_usec += 1000000; \
|
|
} \
|
|
} while (0)
|
|
#endif
|
|
|
|
/* Hack for using libusrp dynamically (untested)
|
|
*/
|
|
#ifdef HAVE_USRP
|
|
#define LIBUSRP_SPEC __declspec(dllimport)
|
|
#endif
|
|
|
|
#define PACKAGE_VERSION "$(VERSION)"
|
|
|
|
/* Functions in 'lib/win-misc.c':
|
|
*/
|
|
#ifndef CLOCK_REALTIME
|
|
#define CLOCK_REALTIME 0
|
|
#endif
|
|
|
|
extern int clock_gettime (int clock_id, struct timespec *ts);
|
|
|
|
#ifndef HAVE_STRTOK_R
|
|
extern char *strtok_r (char *s, const char *delim, char **ptrptr);
|
|
#endif
|
|
|
|
endef
|
|
|
|
#
|
|
# The contents of 'doc/Hamlib.cfg' used by Doxygen.
|
|
#
|
|
define hamlib_CFG
|
|
#
|
|
# All paths are relative to './doc'.
|
|
#
|
|
PROJECT_NAME = "Hamlib"
|
|
PROJECT_NUMBER = $(VERSION)
|
|
PROJECT_LOGO = hamlib.png
|
|
OUTPUT_DIRECTORY = .
|
|
PREDEFINED = __GNUC__ DOXYGEN DOC_HIDDEN
|
|
OUTPUT_LANGUAGE = English
|
|
GENERATE_HTML = YES
|
|
GENERATE_LATEX = NO
|
|
GENERATE_RTF = NO
|
|
GENERATE_MAN = NO
|
|
MAN_EXTENSION = .3
|
|
TAB_SIZE = 4
|
|
CASE_SENSE_NAMES = NO
|
|
FULL_PATH_NAMES = NO
|
|
# ALIASES = \RETURNFUNC{1}="\b RETURNFUNC(\1)" \
|
|
|
|
INPUT = index.doxygen ../src/ ../include/hamlib/
|
|
INCLUDE_PATH = ../include/
|
|
EXAMPLE_PATH = .. \
|
|
../tests/testrig.c \
|
|
../scripts/README.build-Windows \
|
|
../scripts/build-w32.sh \
|
|
../scripts/build-w64.sh
|
|
|
|
EXCLUDE = ../src/amp_conf.h \
|
|
../include/hamlib/ampclass.h \
|
|
../include/hamlib/rotclass.h
|
|
|
|
QUIET = YES
|
|
HTML_EXTRA_STYLESHEET = hamlib.css
|
|
HTML_FOOTER = footer.html
|
|
|
|
EXTRACT_ALL = NO
|
|
EXTRACT_STATIC = NO
|
|
HIDE_UNDOC_MEMBERS = NO
|
|
SHOW_INCLUDE_FILES = YES
|
|
INHERIT_DOCS = YES
|
|
ENABLED_SECTIONS = ""
|
|
JAVADOC_AUTOBRIEF = NO
|
|
OPTIMIZE_OUTPUT_FOR_C = YES
|
|
MAN_LINKS = NO
|
|
MACRO_EXPANSION = YES
|
|
SOURCE_BROWSER = YES
|
|
STRIP_CODE_COMMENTS = NO
|
|
GENERATE_HTMLHELP = YES
|
|
CHM_FILE = Hamlib.chm
|
|
SEARCHENGINE = NO
|
|
endef
|
|
|
|
define RC_COMMON
|
|
#include <winver.h>
|
|
|
|
#if defined(__clang__)
|
|
#define RC_BUILDER "clang-cl"
|
|
|
|
#elif defined(_MSC_VER)
|
|
#define RC_BUILDER "MSVC"
|
|
|
|
#elif defined(__MINGW32__)
|
|
#define RC_BUILDER "MinGW"
|
|
|
|
#else
|
|
#error "Who are you?"
|
|
#endif
|
|
|
|
#ifndef RC_DESCRIPTION
|
|
#error "Add a #define RC_DESCRIPTION .."
|
|
#endif
|
|
|
|
#ifndef RC_FILENAME
|
|
#error "Add a #define RC_FILENAME .."
|
|
#endif
|
|
|
|
#ifndef RC_FILETYPE
|
|
#define RC_FILETYPE VFT_DLL
|
|
#endif
|
|
|
|
#define RC_VERSION $(MAJOR_VER),$(MINOR_VER),0,0
|
|
#define RC_VER_STRING "$(VERSION).0.0 (" RC_BUILDER ", $(CPU))"
|
|
|
|
VS_VERSION_INFO VERSIONINFO
|
|
FILEVERSION RC_VERSION
|
|
PRODUCTVERSION RC_VERSION
|
|
FILEFLAGSMASK 0x3fL
|
|
FILEOS VOS__WINDOWS32
|
|
FILETYPE RC_FILETYPE
|
|
FILEFLAGS 0x0L
|
|
FILESUBTYPE 0x0L
|
|
|
|
BEGIN
|
|
BLOCK "StringFileInfo"
|
|
BEGIN
|
|
BLOCK "040904b0"
|
|
BEGIN
|
|
VALUE "CompanyName", "https://hamlib.github.io/"
|
|
VALUE "FileDescription", RC_DESCRIPTION
|
|
VALUE "FileVersion", RC_VER_STRING
|
|
VALUE "InternalName", "Hamlib, ABI ver. $(ABI_VER)"
|
|
VALUE "LegalCopyright", "GNU General Public License v2.0"
|
|
VALUE "OriginalFilename", RC_FILENAME
|
|
VALUE "ProductName", RC_FILENAME
|
|
VALUE "ProductVersion", RC_VER_STRING
|
|
VALUE "PrivateBuild", "The privat build of <gvanem@yahoo.no>."
|
|
VALUE "SpecialBuild", ""
|
|
VALUE "Comments", "Built on $(DATE)"
|
|
END
|
|
END
|
|
BLOCK "VarFileInfo"
|
|
BEGIN
|
|
VALUE "Translation", 0x409, 1200
|
|
END
|
|
END
|
|
endef
|
|
|
|
define make_rc
|
|
$(call Generate, $(1), //)
|
|
$(file >> $@, #define RC_FILENAME "$(strip $(2))")
|
|
$(file >> $@, #define RC_DESCRIPTION $(3))
|
|
$(file >> $@, #define RC_FILETYPE $(4))
|
|
$(file >> $@, $(RC_COMMON))
|
|
endef
|
|
|
|
ifeq ($(USE_ASTYLE),1)
|
|
define Cxx_preprocess
|
|
$(file > $(1),/* The preprocessed and AStyle formatter output of '$(strip $(2))':)
|
|
$(file >> $(1), * $(CC) -E)
|
|
@$(foreach f, $(CFLAGS) $(EXTRA_CFLAGS), $(file >> $(1), * $(f)))
|
|
$(file >> $(1), *---------------------------------------------------------)
|
|
$(file >> $(1), */)
|
|
$(CC) -E @$(CC).args $(EXTRA_CFLAGS) $(2) | $(PYTHON) cpp_filter.py | astyle >> $(1)
|
|
endef
|
|
|
|
else ifeq ($(USE_CLANG_FORMAT),1)
|
|
define Cxx_preprocess
|
|
$(file > $(1),/* The preprocessed and clang-formatted output of '$(strip $(2))':)
|
|
$(file >> $(1), * $(CC) -E)
|
|
@$(foreach f, $(CFLAGS) $(EXTRA_CFLAGS), $(file >> $(1), * $(f)))
|
|
$(file >> $(1), *---------------------------------------------------------)
|
|
$(file >> $(1), */)
|
|
$(CC) -E @$(CC).args $(EXTRA_CFLAGS) $(2) | $(PYTHON) cpp_filter.py | clang-format --assume-filename=$(strip $(3)) >> $(1)
|
|
endef
|
|
|
|
else
|
|
define Cxx_preprocess
|
|
$(file > $(1),/* The raw preprocessed output of '$(strip $(2))':)
|
|
$(file >> $(1), * $(CC) -E)
|
|
@$(foreach f, $(CFLAGS) $(EXTRA_CFLAGS), $(file >> $(1), * $(f)))
|
|
$(file >> $(1), *---------------------------------------------------------)
|
|
$(file >> $(1), */)
|
|
$(CC) -E @$(CC).args $(EXTRA_CFLAGS) $(2) | $(PYTHON) cpp_filter.py >> $(1)
|
|
endef
|
|
endif
|
|
|
|
define CPP_FILTER_PY
|
|
import sys, os
|
|
|
|
try:
|
|
import ntpath
|
|
except ImportError as e:
|
|
print ("Failed to import ntpath: %s" % e)
|
|
sys.exit(1)
|
|
|
|
def _win32_abspath (path):
|
|
path = ntpath.abspath (path)
|
|
return path.replace ('\\', '/')
|
|
|
|
def skip_cwd (s1, s2):
|
|
''' Skip the leading part that is in common with s1 and s2
|
|
'''
|
|
i = 0
|
|
while i < len(s1) and s1[i] == s2[i]:
|
|
i += 1
|
|
return s2[i:]
|
|
|
|
cwd = _win32_abspath (os.getcwd()) + '/'
|
|
|
|
last_line = '??'
|
|
last_fname = '??'
|
|
empty_lines = 0
|
|
|
|
while True:
|
|
line = sys.stdin.readline()
|
|
if not line:
|
|
break
|
|
if line.startswith('\n') or line.startswith('\r'):
|
|
empty_lines += 1
|
|
continue
|
|
|
|
line = line.replace ("\\\\", "/")
|
|
fname = None
|
|
quote = line.find ('\"')
|
|
|
|
if line.startswith ("#line ") and quote > 0:
|
|
fname = _win32_abspath (line[quote:])
|
|
last_fname = fname
|
|
|
|
if line.strip() != '' and last_line != '':
|
|
if fname is None or fname != last_fname:
|
|
print (line, end="")
|
|
|
|
if line.strip() == '}': # Print a newline after a function
|
|
print ("")
|
|
|
|
last_line = line
|
|
|
|
if empty_lines > 0:
|
|
sys.stderr.write ("Removed %d empty lines.\n" % empty_lines)
|
|
|
|
endef
|
|
|
|
cpp_filter.py: $(THIS_FILE)
|
|
$(call Generate, $@, #)
|
|
$(file >> $@,from __future__ import print_function)
|
|
$(file >> $@,if 1:)
|
|
$(file >> $@,$(CPP_FILTER_PY))
|
|
|
|
#
|
|
# Use gcc to create a '.depend.Windows'
|
|
#
|
|
DEP_CFLAGS = -MM --include config.h $(filter -I% -D%, $(CFLAGS))
|
|
DEP_REPLACE = sed -e 's@\(.*\)\.o: @\n$$(OBJ_DIR)\/\1.$$(O): @' \
|
|
-e 's@$(OBJ_DIR)/[a-z]*\.h@@g' \
|
|
-e 's@$(OBJ_DIR)/sys/[a-z]*\.h@@g' \
|
|
-e 's@$(LIBUSRP_ROOT)@$$(LIBUSRP_ROOT)@'
|
|
|
|
ALL_C_SRC = $(hamlib_C_SRC) $(hamlib_misc_SRC) $(wildcard tests/*.c)
|
|
ALL_CC_SRC = $(hamlib_CC_SRC) $(hamlib++_SRC) $(hamlib_CPP_SRC)
|
|
|
|
depend: $(OBJ_DIR) $(OBJ_DIR)/sys $(GENERATED)
|
|
$(call Generate, .depend.Windows, #)
|
|
$(call create_resp_file, depend1.args, $(DEP_CFLAGS) $(ALL_C_SRC))
|
|
$(call create_resp_file, depend2.args, $(DEP_CFLAGS) -std=c++11 $(ALL_CC_SRC))
|
|
gcc @depend1.args | $(DEP_REPLACE) >> .depend.Windows
|
|
gcc @depend2.args | $(DEP_REPLACE) >> .depend.Windows
|
|
rm -f depend1.args depend2.args
|
|
|
|
-include .depend.Windows
|
|
|
|
© 2021 GitHub, Inc.
|
|
Terms
|
|
Privacy
|
|
Security
|
|
Status
|
|
Docs
|
|
|
|
Contact GitHub
|
|
Pricing
|
|
API
|
|
Training
|
|
Blog
|
|
About
|
|
|