mirror of https://github.com/wb2osz/direwolf.git
cmake: new build tool
this step unify the builing system for all platforms (windows, linux, osx and *BSD) * Requirements: - gcc/clang (C/C++ compiler) (in debian build-essential) - cmake (in debian cmake) - git if you build from source (in debian git) - posix threads ** Requirements on *BSD/macOS: - portaudio ** Optional Requirements: - gpsd (in debian libgps-dev) - libhamlib (in debian libhamlib-dev) ** Optional Requirements in Linux - udev (in debian libudev-dev) - alsa (in debian libasound2-dev) * Main changes: - version is now set only on CMakeLists.txt and automatically used on the code - cpu flags are auto-discovered in the default build and it works on gcc/clang/msvc on x86/x86_64/arm; you can force cpu flags with -DFORCE_SSE=1 for example (see CMakeLists.txt on root) - use a more "complex" tag on generic.conf to facilitate parsing by cmake (not more platform dependent). Now it is %C% or %R% for example - target `tocalls-symbols` is now called `data-update` - created debian/ directory to contains files to use debuild * Example to build: mkdir build && cd build cmake .. make make install make install-conf then you have the binary files on src/ and in the system directory * CMake options (see the head of CMakeLists.txt) - FORCE_SSE force sse instruction - FORCE_SSSE3 force ssse3 instruction - FORCE_SSE41 force ssse4.1 instruction - OPTIONAL_TEST compile optional test (might be broken) - BUILD_TESTING enable tests (ctest framework) - CMAKE_INSTALL_PREFIX if you want to change your install path prefix for example: cmake .. -DOPTIONAL_TEST=ON
This commit is contained in:
parent
bc582cf24f
commit
a1c16a67ef
|
@ -107,3 +107,7 @@ $RECYCLE.BIN/
|
|||
*.lnk
|
||||
/use_this_sdk
|
||||
*.dSYM
|
||||
|
||||
# cmake
|
||||
build/
|
||||
tmp/
|
|
@ -0,0 +1,216 @@
|
|||
# TODO:
|
||||
# - check which MSVC are compatible
|
||||
# - cpack
|
||||
# - ctest
|
||||
|
||||
cmake_minimum_required(VERSION 3.1.0)
|
||||
|
||||
project(direwolf)
|
||||
|
||||
# configure version
|
||||
set(direwolf_VERSION_MAJOR "1")
|
||||
set(direwolf_VERSION_MINOR "6")
|
||||
set(direwolf_VERSION_PATCH "0")
|
||||
set(direwolf_VERSION_SUFFIX "")
|
||||
|
||||
# options
|
||||
option(FORCE_SSE "Compile with SSE instruction only" OFF)
|
||||
option(FORCE_SSSE3 "Compile with SSSE3 instruction only" OFF)
|
||||
option(FORCE_SSE41 "Compile with SSE4.1 instruction only" OFF)
|
||||
|
||||
# where cmake find custom modules
|
||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
|
||||
|
||||
# fix c standard used on the project
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
|
||||
# Set additional project information
|
||||
set(COMPANY "wb2osz")
|
||||
add_definitions("-DCOMPANY=\"${COMPANY}\"")
|
||||
set(APPLICATION_NAME "Dire Wolf")
|
||||
add_definitions("-DAPPLICATION_NAME=\"${APPLICATION_NAME}\"")
|
||||
set(APPLICATION_MAINTAINER="John Langner, WB2OSZ")
|
||||
set(COPYRIGHT "Copyright (c) 2019 John Langner, WB2OSZ. All rights reserved.")
|
||||
add_definitions("-DCOPYRIGHT=\"${COPYRIGHT}\"")
|
||||
set(IDENTIFIER "com.${COMPANY}.${APPLICATION_NAME}")
|
||||
add_definitions("-DIDENTIFIER=\"${IDENTIFIER}\"")
|
||||
set(APPLICATION_DESKTOP_EXEC "xterm -e ${CMAKE_PROJECT_NAME}")
|
||||
|
||||
find_package(Git)
|
||||
if(GIT_FOUND AND EXISTS "${CMAKE_SOURCE_DIR}/.git/")
|
||||
# we can also use `git describe --tags`
|
||||
execute_process(COMMAND "${GIT_EXECUTABLE}" rev-parse --short HEAD
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
RESULT_VARIABLE res
|
||||
OUTPUT_VARIABLE out
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(NOT res)
|
||||
string(REGEX REPLACE "^v([0-9]+)\.([0-9]+)\.([0-9]+)-" "" git_commit ${out})
|
||||
set(direwolf_VERSION_SUFFIX "-${git_commit}")
|
||||
set(direwolf_VERSION_COMMIT "${git_commit}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# set variables
|
||||
set(direwolf_VERSION "${direwolf_VERSION_MAJOR}.${direwolf_VERSION_MINOR}.${direwolf_VERSION_PATCH}${direwolf_VERSION_SUFFIX}")
|
||||
message(STATUS "${APPLICATION_NAME} Version: ${direwolf_VERSION}")
|
||||
add_definitions("-DIREWOLF_VERSION=\"${direwolf_VERSION}\"")
|
||||
add_definitions("-DMAJOR_VERSION=${direwolf_VERSION_MAJOR}")
|
||||
add_definitions("-DMINOR_VERSION=${direwolf_VERSION_MINOR}")
|
||||
if(direwolf_VERSION_COMMIT)
|
||||
add_definitions("-DEXTRA_VERSION=${direwolf_VERSION_COMMIT}")
|
||||
endif()
|
||||
|
||||
set(CUSTOM_EXTERNAL_DIR "${CMAKE_SOURCE_DIR}/external")
|
||||
set(CUSTOM_MISC_DIR "${CUSTOM_EXTERNAL_DIR}/misc")
|
||||
set(CUSTOM_REGEX_DIR "${CUSTOM_EXTERNAL_DIR}/regex")
|
||||
set(CUSTOM_GEOTRANZ_DIR "${CUSTOM_EXTERNAL_DIR}/geotranz")
|
||||
set(CUSTOM_DATA_DIR "${CMAKE_SOURCE_DIR}/data")
|
||||
set(CUSTOM_SCRIPTS_DIR "${CMAKE_SOURCE_DIR}/scripts")
|
||||
set(CUSTOM_TELEMETRY_DIR "${CUSTOM_SCRIPTS_DIR}/telemetry-toolkit")
|
||||
set(CUSTOM_CONF_DIR "${CMAKE_SOURCE_DIR}/conf")
|
||||
set(CUSTOM_DOC_DIR "${CMAKE_SOURCE_DIR}/doc")
|
||||
set(CUSTOM_MAN_DIR "${CMAKE_SOURCE_DIR}/man")
|
||||
|
||||
# if we don't set build_type
|
||||
if(NOT DEFINED CMAKE_BUILD_TYPE OR "${CMAKE_BUILD_TYPE}" STREQUAL "")
|
||||
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
|
||||
endif()
|
||||
message(STATUS "Build type set to: ${CMAKE_BUILD_TYPE}")
|
||||
|
||||
# set compiler
|
||||
include(FindCompiler)
|
||||
|
||||
# find cpu flags (and set compiler)
|
||||
include(FindCPUflags)
|
||||
|
||||
# auto include current directory
|
||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||
|
||||
# set OS dependant variables
|
||||
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||
set(LINUX TRUE)
|
||||
|
||||
configure_file("${CMAKE_SOURCE_DIR}/cmake/cpack/${CMAKE_PROJECT_NAME}.desktop.in"
|
||||
"${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.desktop" @ONLY)
|
||||
|
||||
elseif(APPLE)
|
||||
if("${CMAKE_OSX_DEPLOYMENT_TARGET}" STREQUAL "")
|
||||
message(STATUS "Build for macOS target: local version")
|
||||
else()
|
||||
message(STATUS "Build for macOS target: ${CMAKE_OSX_DEPLOYMENT_TARGET}")
|
||||
endif()
|
||||
|
||||
# prepend path to find_*()
|
||||
set(CMAKE_FIND_ROOT_PATH "/opt/local")
|
||||
|
||||
set(CMAKE_MACOSX_RPATH ON)
|
||||
message(STATUS "RPATH support: ${CMAKE_MACOSX_RPATH}")
|
||||
|
||||
elseif (WIN32)
|
||||
if(NOT VS2015 AND NOT VS2017)
|
||||
message(FATAL_ERROR "You must use Microsoft Visual Studio 2015 or 2017 as compiler")
|
||||
endif()
|
||||
|
||||
# compile with full multicore
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
|
||||
endif()
|
||||
|
||||
if (C_CLANG OR C_GCC)
|
||||
# _BSD_SOURCE is deprecated we need to use _DEFAULT_SOURCE
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra -Wvla -ffast-math -ftree-vectorize -D_XOPEN_SOURCE=600 -D_DEFAULT_SOURCE ${EXTRA_FLAGS}")
|
||||
# for math.h
|
||||
link_libraries("-lm")
|
||||
elseif (C_MSVC)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -W3 -MP ${EXTRA_FLAGS}")
|
||||
endif()
|
||||
|
||||
if (C_CLANG)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ferror-limit=1")
|
||||
elseif (C_GCC)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fmax-errors=1")
|
||||
endif()
|
||||
|
||||
# requirements
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
find_package(Threads REQUIRED)
|
||||
|
||||
find_package(GPSD)
|
||||
if(GPSD_FOUND)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DENABLE_GPSD")
|
||||
else()
|
||||
set(GPSD_INCLUDE_DIRS "")
|
||||
set(GPSD_LIBRARIES "")
|
||||
endif()
|
||||
|
||||
find_package(hamlib)
|
||||
if(HAMLIB_FOUND)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_HAMLIB")
|
||||
else()
|
||||
set(HAMLIB_INCLUDE_DIRS "")
|
||||
set(HAMLIB_LIBRARIES "")
|
||||
endif()
|
||||
|
||||
if(LINUX)
|
||||
find_package(ALSA REQUIRED)
|
||||
if(ALSA_FOUND)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_ALSA")
|
||||
endif()
|
||||
|
||||
find_package(udev)
|
||||
if(UDEV_FOUND)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_CM108")
|
||||
endif()
|
||||
|
||||
elseif (NOT WIN32)
|
||||
find_package(portaudio REQUIRED)
|
||||
if(PORTAUDIO_FOUND)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUSE_PORTAUDIO")
|
||||
endif()
|
||||
|
||||
endif()
|
||||
|
||||
# manage and fetch new data
|
||||
add_subdirectory(data)
|
||||
|
||||
# external libraries
|
||||
add_subdirectory(${CUSTOM_GEOTRANZ_DIR})
|
||||
add_subdirectory(${CUSTOM_REGEX_DIR})
|
||||
add_subdirectory(${CUSTOM_MISC_DIR})
|
||||
|
||||
# direwolf source code and utilities
|
||||
add_subdirectory(src)
|
||||
|
||||
# manage scripts
|
||||
add_subdirectory(scripts)
|
||||
|
||||
# manage config
|
||||
add_subdirectory(conf)
|
||||
|
||||
# install basic docs
|
||||
install(FILES ${CMAKE_SOURCE_DIR}/CHANGES.md DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES ${CMAKE_SOURCE_DIR}/LICENSE DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES ${CMAKE_SOURCE_DIR}/external/LICENSE DESTINATION share/doc/${CMAKE_PROJECT_NAME}/external)
|
||||
add_subdirectory(doc)
|
||||
add_subdirectory(man)
|
||||
|
||||
# install desktop link
|
||||
if (LINUX)
|
||||
install(FILES ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}.desktop DESTINATION share/applications)
|
||||
install(FILES ${CMAKE_SOURCE_DIR}/cmake/cpack/${CMAKE_PROJECT_NAME}_icon.png DESTINATION share/pixmaps)
|
||||
endif()
|
||||
|
||||
############ uninstall target ################
|
||||
configure_file(
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/cmake/include/uninstall.cmake.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake"
|
||||
IMMEDIATE @ONLY)
|
||||
|
||||
add_custom_target(uninstall
|
||||
COMMAND ${CMAKE_COMMAND} -P
|
||||
${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake)
|
||||
|
||||
############ packaging ################
|
||||
add_subdirectory(cmake/cpack)
|
20
Makefile
20
Makefile
|
@ -1,20 +0,0 @@
|
|||
# Select proper Makefile for operating system.
|
||||
# The Windows version is built with the help of Cygwin.
|
||||
|
||||
# In my case, I see CYGWIN_NT-6.1-WOW so we don't check for
|
||||
# equal to some value. Your mileage my vary.
|
||||
|
||||
win := $(shell uname | grep CYGWIN)
|
||||
ifeq ($(win),)
|
||||
win := $(shell uname | grep MINGW)
|
||||
endif
|
||||
|
||||
dar := $(shell uname | grep Darwin)
|
||||
|
||||
ifneq ($(win),)
|
||||
include Makefile.win
|
||||
else ifeq ($(dar),Darwin)
|
||||
include Makefile.macosx
|
||||
else
|
||||
include Makefile.linux
|
||||
endif
|
856
Makefile.linux
856
Makefile.linux
|
@ -1,856 +0,0 @@
|
|||
#
|
||||
# Makefile for Linux/Unix version of Dire Wolf.
|
||||
#
|
||||
|
||||
# Expecting Linux, FreeBSD, or OpenBSD here.
|
||||
# Would it be feasible to merge Mac OSX back in or has it diverged too much?
|
||||
|
||||
OS = $(shell uname)
|
||||
|
||||
# Default for Linux. BSD does things differently.
|
||||
# See https://github.com/wb2osz/direwolf/pull/92 for FreeBSD considerations.
|
||||
|
||||
PREFIX ?= /usr
|
||||
|
||||
|
||||
APPS := direwolf decode_aprs text2tt tt2text ll2utm utm2ll aclients atest log2gpx gen_packets ttcalc kissutil cm108
|
||||
|
||||
|
||||
all : $(APPS) direwolf.desktop direwolf.conf
|
||||
@echo " "
|
||||
@echo "Next step - install with:"
|
||||
@echo " "
|
||||
@echo " sudo make install"
|
||||
@echo " "
|
||||
|
||||
# Default to gcc if something else not specified, e.g. clang.
|
||||
|
||||
CC ?= gcc
|
||||
|
||||
|
||||
# _XOPEN_SOURCE=600 and _DEFAULT_SOURCE=1 are needed for glibc >= 2.24.
|
||||
# Explanation here: https://github.com/wb2osz/direwolf/issues/62
|
||||
|
||||
# There are a few source files where it had been necessary to define __USE_XOPEN2KXSI,
|
||||
# __USE_XOPEN, or _POSIX_C_SOURCE. Doesn't seem to be needed after adding this.
|
||||
|
||||
# -D_BSD_SOURCE because Raspbian wheezy was missing declaration for strsep and definition of fd_set.
|
||||
# That was not necessary (but did not hurt) for more recent Ubuntu and Raspbian Jessie.
|
||||
|
||||
# The first assignment to CFLAGS and LDFLAGS uses +=, rather than :=, so
|
||||
# we will inherit options already set in build environment.
|
||||
# Explanation - https://github.com/wb2osz/direwolf/pull/38
|
||||
|
||||
# For BSD, these are supplied externally.
|
||||
# https://github.com/wb2osz/direwolf/pull/92
|
||||
# Why don't we just set them differently here?
|
||||
|
||||
ifeq ($(OS),Linux)
|
||||
CFLAGS += -O3 -pthread -Igeotranz -D_XOPEN_SOURCE=600 -D_DEFAULT_SOURCE=1 -D_BSD_SOURCE -Wall
|
||||
LDFLAGS += -lm -lpthread -lrt
|
||||
else
|
||||
CFLAGS ?= -O3 -pthread -Igeotranz -Wall
|
||||
LDFLAGS ?= -lm -lpthread -lrt
|
||||
endif
|
||||
|
||||
|
||||
|
||||
# If the compiler is generating code for the i386 target, we can
|
||||
# get much better results by telling it we have at least a Pentium 3,
|
||||
# which has the SSE instructions.
|
||||
# For a more detailed description, see Dire-Wolf-Developer-Notes.pdf.
|
||||
|
||||
arch := $(shell echo | ${CC} -E -dM - | grep __i386__)
|
||||
ifneq ($(arch),)
|
||||
CFLAGS += -march=pentium3
|
||||
endif
|
||||
|
||||
|
||||
# Add -ffast-math option if the compiler recognizes it.
|
||||
# This makes a big difference with x86_64 but has little impact on 32 bit targets.
|
||||
|
||||
useffast := $(shell ${CC} --help -v 2>/dev/null | grep ffast-math)
|
||||
ifneq ($(useffast),)
|
||||
CFLAGS += -ffast-math
|
||||
endif
|
||||
|
||||
|
||||
|
||||
#
|
||||
# Dire Wolf is known to work with ARM processors on the BeagleBone, CubieBoard2, CHIP, etc.
|
||||
# The best compiler options will depend on the specific type of processor
|
||||
# and the compiler target defaults. Use the NEON instructions if available.
|
||||
#
|
||||
|
||||
ifeq ($(OS),Linux)
|
||||
neon := $(shell cat /proc/cpuinfo | grep neon)
|
||||
ifneq ($(neon),)
|
||||
CFLAGS += -mfpu=neon
|
||||
endif
|
||||
else
|
||||
neon := $(shell machine | grep armv7)
|
||||
ifneq ($(neon),)
|
||||
CFLAGS += -mfloat-abi=hard -mfpu=neon
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
|
||||
|
||||
# Audio system: We normally want to use ALSA for Linux.
|
||||
# I heard that OSS will also work with Linux but I never tried it.
|
||||
# ALSA is not an option for FreeBSD or OpenBSD.
|
||||
|
||||
ifeq ($(OS),Linux)
|
||||
alsa = 1
|
||||
else
|
||||
alsa =
|
||||
endif
|
||||
|
||||
|
||||
# Make sure pthread.h is available.
|
||||
# We use ${PREFIX}, rather than simply /usr, because BSD has it in some other place.
|
||||
|
||||
ifeq ($(wildcard ${PREFIX}/include/pthread.h),)
|
||||
$(error /usr/include/pthread.h does not exist. Install it with "sudo apt-get install libc6-dev" or "sudo yum install glibc-headers" )
|
||||
endif
|
||||
|
||||
|
||||
# Make sure we have required library for ALSA if that option is being used.
|
||||
|
||||
ifneq ($(alsa),)
|
||||
CFLAGS += -DUSE_ALSA
|
||||
LDFLAGS += -lasound
|
||||
ifeq ($(wildcard /usr/include/alsa/asoundlib.h),)
|
||||
$(error /usr/include/alsa/asoundlib.h does not exist. Install it with "sudo apt-get install libasound2-dev" or "sudo yum install alsa-lib-devel" )
|
||||
endif
|
||||
ifeq ($(OS),OpenBSD)
|
||||
# Use sndio via PortAudio Library (you can install it by pkg_add portaudio-svn)
|
||||
LDFLAGS += -lportaudio -L/usr/local/lib
|
||||
CFLAGS += -DUSE_PORTAUDIO -I/usr/local/include
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
|
||||
# Enable GPS if header file is present.
|
||||
# Finding libgps.so* is more difficult because it
|
||||
# is in different places on different operating systems.
|
||||
|
||||
enable_gpsd := $(wildcard ${PREFIX}/include/gps.h)
|
||||
ifneq ($(enable_gpsd),)
|
||||
CFLAGS += -DENABLE_GPSD
|
||||
LDFLAGS += -lgps
|
||||
endif
|
||||
|
||||
|
||||
# Enable hamlib support if header file is present.
|
||||
|
||||
enable_hamlib := $(wildcard /usr/include/hamlib/rig.h /usr/local/include/hamlib/rig.h)
|
||||
ifneq ($(enable_hamlib),)
|
||||
CFLAGS += -DUSE_HAMLIB
|
||||
LDFLAGS += -lhamlib
|
||||
endif
|
||||
|
||||
|
||||
# Should enabling of this feature be strongly encouraged or
|
||||
# is it quite specialized and of interest to a small audience?
|
||||
# If, for some reason, can't obtain the libudev-dev package, or
|
||||
# don't want to install it, comment out the next 5 lines.
|
||||
|
||||
ifeq ($(OS),Linux)
|
||||
ifeq ($(wildcard /usr/include/libudev.h),)
|
||||
$(error /usr/include/libudev.h does not exist. Install it with "sudo apt-get install libudev-dev" or "sudo yum install libudev-devel" )
|
||||
endif
|
||||
endif
|
||||
|
||||
|
||||
# Enable cm108 PTT support if libudev header file is present.
|
||||
|
||||
enable_cm108 := $(wildcard /usr/include/libudev.h)
|
||||
ifneq ($(enable_cm108),)
|
||||
CFLAGS += -DUSE_CM108
|
||||
LDFLAGS += -ludev
|
||||
endif
|
||||
|
||||
|
||||
# Name of current directory.
|
||||
# Used to generate zip file name for distribution.
|
||||
|
||||
z := $(notdir ${CURDIR})
|
||||
|
||||
|
||||
|
||||
# -------------------------------- Main application -----------------------------------------
|
||||
|
||||
ifeq ($(OS),OpenBSD)
|
||||
AUDIO_O := audio_portaudio.o
|
||||
else
|
||||
AUDIO_O := audio.o
|
||||
endif
|
||||
|
||||
|
||||
direwolf : direwolf.o config.o recv.o demod.o dsp.o demod_afsk.o demod_psk.o demod_9600.o hdlc_rec.o \
|
||||
hdlc_rec2.o multi_modem.o rdq.o rrbb.o dlq.o \
|
||||
fcs_calc.o ax25_pad.o ax25_pad2.o xid.o \
|
||||
decode_aprs.o symbols.o server.o kiss.o kissserial.o kissnet.o kiss_frame.o hdlc_send.o fcs_calc.o \
|
||||
gen_tone.o $(AUDIO_O) audio_stats.o digipeater.o cdigipeater.o pfilter.o dedupe.o tq.o xmit.o morse.o \
|
||||
ptt.o beacon.o encode_aprs.o latlong.o encode_aprs.o latlong.o textcolor.o \
|
||||
dtmf.o aprs_tt.o tt_user.o tt_text.o igate.o waypoint.o serial_port.o log.o telemetry.o \
|
||||
dwgps.o dwgpsnmea.o dwgpsd.o dtime_now.o mheard.o ax25_link.o cm108.o \
|
||||
misc.a geotranz.a
|
||||
$(CC) -o $@ $^ $(LDFLAGS)
|
||||
@echo " "
|
||||
ifneq ($(enable_gpsd),)
|
||||
@echo " > This includes support for gpsd."
|
||||
else
|
||||
@echo " > This does NOT include support for gpsd."
|
||||
endif
|
||||
ifneq ($(enable_hamlib),)
|
||||
@echo " > This includes support for hamlib."
|
||||
else
|
||||
@echo " > This does NOT include support for hamlib."
|
||||
endif
|
||||
ifneq ($(enable_cm108),)
|
||||
@echo " > This includes support for CM108/CM119 PTT."
|
||||
else
|
||||
@echo " > This does NOT include support for CM108/CM119 PTT."
|
||||
endif
|
||||
@echo " "
|
||||
|
||||
# Optimization for slow processors.
|
||||
|
||||
demod.o : fsk_fast_filter.h
|
||||
|
||||
demod_afsk.o : fsk_fast_filter.h
|
||||
|
||||
|
||||
fsk_fast_filter.h : gen_fff
|
||||
./gen_fff > fsk_fast_filter.h
|
||||
|
||||
gen_fff : demod_afsk.c dsp.c textcolor.c
|
||||
echo " " > tune.h
|
||||
$(CC) $(CFLAGS) -DGEN_FFF -o $@ $^ $(LDFLAGS)
|
||||
|
||||
|
||||
#
|
||||
# The APRS AX.25 destination field is often used to identify the manufacturer/model.
|
||||
# These are not hardcoded into Dire Wolf. Instead they are read from
|
||||
# a file called tocalls.txt at application start up time.
|
||||
#
|
||||
# The original permanent symbols are built in but the "new" symbols,
|
||||
# using overlays, are often updated. These are also read from files.
|
||||
#
|
||||
# You can obtain an updated copy by typing "make tocalls-symbols".
|
||||
# This is not part of the normal build process. You have to do this explicitly.
|
||||
#
|
||||
# The locations below appear to be the most recent.
|
||||
# The copy at http://www.aprs.org/tocalls.txt is out of date.
|
||||
#
|
||||
|
||||
.PHONY: tocalls-symbols
|
||||
tocalls-symbols :
|
||||
cp tocalls.txt tocalls.txt~
|
||||
wget http://www.aprs.org/aprs11/tocalls.txt -O tocalls.txt
|
||||
-diff -Z tocalls.txt~ tocalls.txt
|
||||
cp symbols-new.txt symbols-new.txt~
|
||||
wget http://www.aprs.org/symbols/symbols-new.txt -O symbols-new.txt
|
||||
-diff -Z symbols-new.txt~ symbols-new.txt
|
||||
cp symbolsX.txt symbolsX.txt~
|
||||
wget http://www.aprs.org/symbols/symbolsX.txt -O symbolsX.txt
|
||||
-diff -Z symbolsX.txt~ symbolsX.txt
|
||||
|
||||
|
||||
# ---------------------------------------- Other utilities included ------------------------------
|
||||
|
||||
|
||||
# Separate application to decode raw data.
|
||||
|
||||
# First three use .c rather than .o because they depend on DECAMAIN definition.
|
||||
|
||||
decode_aprs : decode_aprs.c kiss_frame.c ax25_pad.c dwgpsnmea.o dwgps.o dwgpsd.o serial_port.o symbols.o textcolor.o fcs_calc.o latlong.o log.o telemetry.o tt_text.o misc.a
|
||||
$(CC) $(CFLAGS) -DDECAMAIN -o $@ $^ $(LDFLAGS)
|
||||
|
||||
|
||||
|
||||
# Convert between text and touch tone representation.
|
||||
|
||||
text2tt : tt_text.c misc.a
|
||||
$(CC) $(CFLAGS) -DENC_MAIN -o $@ $^ $(LDFLAGS)
|
||||
|
||||
tt2text : tt_text.c misc.a
|
||||
$(CC) $(CFLAGS) -DDEC_MAIN -o $@ $^ $(LDFLAGS)
|
||||
|
||||
|
||||
# Convert between Latitude/Longitude and UTM coordinates.
|
||||
|
||||
ll2utm : ll2utm.c geotranz.a textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
utm2ll : utm2ll.c geotranz.a textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
|
||||
# Convert from log file to GPX.
|
||||
|
||||
log2gpx : log2gpx.c textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
|
||||
# Test application to generate sound.
|
||||
|
||||
gen_packets : gen_packets.c ax25_pad.c hdlc_send.c fcs_calc.c gen_tone.c morse.c dtmf.c textcolor.c dsp.c misc.a
|
||||
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
# Unit test for AFSK demodulator
|
||||
|
||||
atest : atest.c demod.o demod_afsk.o demod_psk.o demod_9600.o \
|
||||
dsp.o hdlc_rec.o hdlc_rec2.o multi_modem.o rrbb.o \
|
||||
fcs_calc.o ax25_pad.o decode_aprs.o dwgpsnmea.o \
|
||||
dwgps.o dwgpsd.o serial_port.o telemetry.o dtime_now.o latlong.o symbols.o tt_text.o textcolor.o \
|
||||
misc.a
|
||||
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
||||
|
||||
|
||||
# Multiple AGWPE network or serial port clients to test TNCs side by side.
|
||||
|
||||
aclients : aclients.c ax25_pad.c fcs_calc.c textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -g -o $@ $^
|
||||
|
||||
|
||||
# Talk to a KISS TNC.
|
||||
# Note: kiss_frame.c has conditional compilation on KISSUTIL.
|
||||
|
||||
kissutil : kissutil.c kiss_frame.c ax25_pad.o fcs_calc.o textcolor.o serial_port.o dtime_now.o dwsock.o misc.a
|
||||
$(CC) $(CFLAGS) -g -DKISSUTIL -o $@ $^ $(LDFLAGS)
|
||||
|
||||
|
||||
# List USB audio adapters than can use GPIO for PTT.
|
||||
# I don't think this will work on BSD.
|
||||
# Rather than omitting cm108, I think it would be simpler and less confusing to build
|
||||
# the application and have it say something like "not supported on this platform."
|
||||
# The difference in behavior can depend on the -DUSE_CM108 compile option.
|
||||
|
||||
cm108 : cm108.c textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -g -DCM108_MAIN -o $@ $^ $(LDFLAGS)
|
||||
|
||||
|
||||
# Touch Tone to Speech sample application.
|
||||
|
||||
ttcalc : ttcalc.o ax25_pad.o fcs_calc.o textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -g -o $@ $^
|
||||
|
||||
|
||||
# ----------------------------------------- Libraries --------------------------------------------
|
||||
|
||||
# UTM, USNG, MGRS conversions.
|
||||
|
||||
geotranz.a : error_string.o mgrs.o polarst.o tranmerc.o ups.o usng.o utm.o
|
||||
ar -cr $@ $^
|
||||
|
||||
error_string.o : geotranz/error_string.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
mgrs.o : geotranz/mgrs.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
polarst.o : geotranz/polarst.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
tranmerc.o : geotranz/tranmerc.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
ups.o : geotranz/ups.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
usng.o : geotranz/usng.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
utm.o : geotranz/utm.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
|
||||
# Provide our own copy of strlcpy and strlcat because they are not included with Linux.
|
||||
# We don't need the others in that same directory.
|
||||
# OpenBSD has the strl--- functions so misc.a can be empty.
|
||||
# I don't want to eliminate use of misc.a because other functions might be added in the future.
|
||||
|
||||
ifeq ($(OS),OpenBSD)
|
||||
misc.a :
|
||||
ar -cr $@ $^
|
||||
|
||||
else
|
||||
misc.a : strlcpy.o strlcat.o
|
||||
ar -cr $@ $^
|
||||
|
||||
strlcpy.o : misc/strlcpy.c
|
||||
$(CC) $(CFLAGS) -I. -c -o $@ $^
|
||||
|
||||
strlcat.o : misc/strlcat.c
|
||||
$(CC) $(CFLAGS) -I. -c -o $@ $^
|
||||
|
||||
endif
|
||||
|
||||
|
||||
# ------------------------------------- Installation ----------------------------------
|
||||
|
||||
|
||||
|
||||
# Generate apprpriate sample configuration file for this platform.
|
||||
# Originally, there was one sample for all platforms. It got too cluttered
|
||||
# and confusing saying, this is for windows, and this is for Linux, and this ...
|
||||
# Trying to maintain 3 different versions in parallel is error prone.
|
||||
# We now have a single generic version which can be used to generate
|
||||
# the various platform specific versions.
|
||||
|
||||
# generic.conf should be checked into source control.
|
||||
# direwolf.conf should NOT. It is generated when compiling on the target platform.
|
||||
|
||||
# TODO: Should have BSD variation with OSS device names. Anything else?
|
||||
|
||||
direwolf.conf : generic.conf
|
||||
egrep '^C|^L' generic.conf | cut -c2-999 > direwolf.conf
|
||||
|
||||
|
||||
# Where should we install it?
|
||||
|
||||
# Something built from source and installed locally would normally go in /usr/local/...
|
||||
# If not specified on the make command line, this is our default.
|
||||
|
||||
DESTDIR ?= /usr/local
|
||||
|
||||
# However, if you are preparing a "binary" DEB or RPM package, the installation location
|
||||
# would normally be /usr/... instead. In this case, use a command line like this:
|
||||
#
|
||||
# make DESTDIR=/usr install
|
||||
|
||||
|
||||
|
||||
# Command to "install" to system directories.
|
||||
# Do we need to use "-m 999" instead of "--mode=999" for OpenBSD?
|
||||
|
||||
INSTALL ?= install
|
||||
INSTALL_PROGRAM ?= ${INSTALL} -D --mode=755
|
||||
INSTALL_SCRIPT ?= ${INSTALL} -D --mode=755
|
||||
INSTALL_DATA ?= ${INSTALL} -D --mode=644
|
||||
INSTALL_MAN ?= ${INSTALL_DATA}
|
||||
|
||||
|
||||
# direwolf.desktop was previously handcrafted for the Raspberry Pi.
|
||||
# It was hardcoded with lxterminal, /home/pi, and so on.
|
||||
# In version 1.2, try to customize this to match other situations better.
|
||||
|
||||
# TODO: Test this better.
|
||||
|
||||
|
||||
direwolf.desktop :
|
||||
@echo "Generating customized direwolf.desktop ..."
|
||||
@echo '[Desktop Entry]' > $@
|
||||
@echo 'Type=Application' >> $@
|
||||
ifneq ($(wildcard ${PREFIX}/bin/lxterminal),)
|
||||
@echo "Exec=lxterminal -t \"Dire Wolf\" -e \"$(DESTDIR)/bin/direwolf\"" >> $@
|
||||
else ifneq ($(wildcard ${PREFIX}/bin/lxterm),)
|
||||
@echo "Exec=lxterm -hold -title \"Dire Wolf\" -bg white -e \"$(DESTDIR)/bin/direwolf\"" >> $@
|
||||
else
|
||||
@echo "Exec=xterm -hold -title \"Dire Wolf\" -bg white -e \"$(DESTDIR)/bin/direwolf\"" >> $@
|
||||
endif
|
||||
@echo 'Name=Dire Wolf' >> $@
|
||||
@echo 'Comment=APRS Soundcard TNC' >> $@
|
||||
@echo 'Icon=$(DESTDIR)/share/direwolf/pixmaps/dw-icon.png' >> $@
|
||||
@echo "Path=$(HOME)" >> $@
|
||||
@echo '#Terminal=true' >> $@
|
||||
@echo 'Categories=HamRadio' >> $@
|
||||
@echo 'Keywords=Ham Radio;APRS;Soundcard TNC;KISS;AGWPE;AX.25' >> $@
|
||||
|
||||
|
||||
# Installation into $(DESTDIR), usually /usr/local/... or /usr/...
|
||||
# Needs to be run as root or with sudo.
|
||||
|
||||
|
||||
.PHONY: install
|
||||
install : $(APPS) direwolf.conf tocalls.txt symbols-new.txt symbolsX.txt dw-icon.png direwolf.desktop
|
||||
#
|
||||
# Applications, not installed with package manager, normally go in /usr/local/bin.
|
||||
# /usr/bin is used instead when installing from .DEB or .RPM package.
|
||||
#
|
||||
$(INSTALL_PROGRAM) direwolf $(DESTDIR)/bin/direwolf
|
||||
$(INSTALL_PROGRAM) decode_aprs $(DESTDIR)/bin/decode_aprs
|
||||
$(INSTALL_PROGRAM) text2tt $(DESTDIR)/bin/text2tt
|
||||
$(INSTALL_PROGRAM) tt2text $(DESTDIR)/bin/tt2text
|
||||
$(INSTALL_PROGRAM) ll2utm $(DESTDIR)/bin/ll2utm
|
||||
$(INSTALL_PROGRAM) utm2ll $(DESTDIR)/bin/utm2ll
|
||||
$(INSTALL_PROGRAM) aclients $(DESTDIR)/bin/aclients
|
||||
$(INSTALL_PROGRAM) log2gpx $(DESTDIR)/bin/log2gpx
|
||||
$(INSTALL_PROGRAM) gen_packets $(DESTDIR)/bin/gen_packets
|
||||
$(INSTALL_PROGRAM) atest $(DESTDIR)/bin/atest
|
||||
$(INSTALL_PROGRAM) ttcalc $(DESTDIR)/bin/ttcalc
|
||||
$(INSTALL_PROGRAM) kissutil $(DESTDIR)/bin/kissutil
|
||||
$(INSTALL_PROGRAM) cm108 $(DESTDIR)/bin/cm108
|
||||
$(INSTALL_PROGRAM) dwespeak.sh $(DESTDIR)/bin/dwspeak.sh
|
||||
#
|
||||
# Telemetry Toolkit executables. Other .conf and .txt files will go into doc directory.
|
||||
#
|
||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-balloon.pl $(DESTDIR)/bin/telem-balloon.pl
|
||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-bits.pl $(DESTDIR)/bin/telem-bits.pl
|
||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-data.pl $(DESTDIR)/bin/telem-data.pl
|
||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-data91.pl $(DESTDIR)/bin/telem-data91.pl
|
||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-eqns.pl $(DESTDIR)/bin/telem-eqns.pl
|
||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-parm.pl $(DESTDIR)/bin/telem-parm.pl
|
||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-seq.sh $(DESTDIR)/bin/telem-seq.sh
|
||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-unit.pl $(DESTDIR)/bin/telem-unit.pl
|
||||
$(INSTALL_SCRIPT) telemetry-toolkit/telem-volts.py $(DESTDIR)/bin/telem-volts.py
|
||||
#
|
||||
# Misc. data such as "tocall" to system mapping.
|
||||
#
|
||||
$(INSTALL_DATA) tocalls.txt $(DESTDIR)/share/direwolf/tocalls.txt
|
||||
$(INSTALL_DATA) symbols-new.txt $(DESTDIR)/share/direwolf/symbols-new.txt
|
||||
$(INSTALL_DATA) symbolsX.txt $(DESTDIR)/share/direwolf/symbolsX.txt
|
||||
#
|
||||
# For desktop icon.
|
||||
#
|
||||
$(INSTALL_DATA) dw-icon.png $(DESTDIR)/share/direwolf/pixmaps/dw-icon.png
|
||||
$(INSTALL_DATA) direwolf.desktop $(DESTDIR)/share/applications/direwolf.desktop
|
||||
#
|
||||
# Documentation. Various plain text files and PDF.
|
||||
#
|
||||
$(INSTALL_DATA) CHANGES.md $(DESTDIR)/share/doc/direwolf/CHANGES.md
|
||||
$(INSTALL_DATA) LICENSE-dire-wolf.txt $(DESTDIR)/share/doc/direwolf/LICENSE-dire-wolf.txt
|
||||
$(INSTALL_DATA) LICENSE-other.txt $(DESTDIR)/share/doc/direwolf/LICENSE-other.txt
|
||||
#
|
||||
# ./README.md is an overview for the project main page.
|
||||
# Maybe we could stick it in some other place.
|
||||
# doc/README.md contains an overview of the PDF file contents and is more useful here.
|
||||
#
|
||||
$(INSTALL_DATA) doc/README.md $(DESTDIR)/share/doc/direwolf/README.md
|
||||
$(INSTALL_DATA) doc/2400-4800-PSK-for-APRS-Packet-Radio.pdf $(DESTDIR)/share/doc/direwolf/2400-4800-PSK-for-APRS-Packet-Radio.pdf
|
||||
$(INSTALL_DATA) doc/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf $(DESTDIR)/share/doc/direwolf/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf
|
||||
$(INSTALL_DATA) doc/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf $(DESTDIR)/share/doc/direwolf/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf
|
||||
$(INSTALL_DATA) doc/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf $(DESTDIR)/share/doc/direwolf/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf
|
||||
$(INSTALL_DATA) doc/APRS-Telemetry-Toolkit.pdf $(DESTDIR)/share/doc/direwolf/APRS-Telemetry-Toolkit.pdf
|
||||
$(INSTALL_DATA) doc/APRStt-Implementation-Notes.pdf $(DESTDIR)/share/doc/direwolf/APRStt-Implementation-Notes.pdf
|
||||
$(INSTALL_DATA) doc/APRStt-interface-for-SARTrack.pdf $(DESTDIR)/share/doc/direwolf/APRStt-interface-for-SARTrack.pdf
|
||||
$(INSTALL_DATA) doc/APRStt-Listening-Example.pdf $(DESTDIR)/share/doc/direwolf/APRStt-Listening-Example.pdf
|
||||
$(INSTALL_DATA) doc/Bluetooth-KISS-TNC.pdf $(DESTDIR)/share/doc/direwolf/Bluetooth-KISS-TNC.pdf
|
||||
$(INSTALL_DATA) doc/Going-beyond-9600-baud.pdf $(DESTDIR)/share/doc/direwolf/Going-beyond-9600-baud.pdf
|
||||
$(INSTALL_DATA) doc/Raspberry-Pi-APRS.pdf $(DESTDIR)/share/doc/direwolf/Raspberry-Pi-APRS.pdf
|
||||
$(INSTALL_DATA) doc/Raspberry-Pi-APRS-Tracker.pdf $(DESTDIR)/share/doc/direwolf/Raspberry-Pi-APRS-Tracker.pdf
|
||||
$(INSTALL_DATA) doc/Raspberry-Pi-SDR-IGate.pdf $(DESTDIR)/share/doc/direwolf/Raspberry-Pi-SDR-IGate.pdf
|
||||
$(INSTALL_DATA) doc/Successful-APRS-IGate-Operation.pdf $(DESTDIR)/share/doc/direwolf/Successful-APRS-IGate-Operation.pdf
|
||||
$(INSTALL_DATA) doc/User-Guide.pdf $(DESTDIR)/share/doc/direwolf/User-Guide.pdf
|
||||
$(INSTALL_DATA) doc/WA8LMF-TNC-Test-CD-Results.pdf $(DESTDIR)/share/doc/direwolf/WA8LMF-TNC-Test-CD-Results.pdf
|
||||
$(INSTALL_DATA) doc/Why-is-9600-only-twice-as-fast-as-1200.pdf $(DESTDIR)/share/doc/direwolf/Why-is-9600-only-twice-as-fast-as-1200.pdf
|
||||
#
|
||||
# Various sample config and other files go into examples under the doc directory.
|
||||
# When building from source, these can be put in home directory with "make install-conf".
|
||||
# When installed from .DEB or .RPM package, the user will need to copy these to
|
||||
# the home directory or other desired location.
|
||||
#
|
||||
$(INSTALL_DATA) direwolf.conf $(DESTDIR)/share/doc/direwolf/examples/direwolf.conf
|
||||
$(INSTALL_SCRIPT) dw-start.sh $(DESTDIR)/share/doc/direwolf/examples/dw-start.sh
|
||||
$(INSTALL_DATA) sdr.conf $(DESTDIR)/share/doc/direwolf/examples/sdr.conf
|
||||
$(INSTALL_DATA) telemetry-toolkit/telem-m0xer-3.txt $(DESTDIR)/share/doc/direwolf/examples/telem-m0xer-3.txt
|
||||
$(INSTALL_DATA) telemetry-toolkit/telem-balloon.conf $(DESTDIR)/share/doc/direwolf/examples/telem-balloon.conf
|
||||
$(INSTALL_DATA) telemetry-toolkit/telem-volts.conf $(DESTDIR)/share/doc/direwolf/examples/telem-volts.conf
|
||||
#
|
||||
# "man" pages
|
||||
#
|
||||
$(INSTALL_MAN) man1/aclients.1 $(DESTDIR)/share/man/man1/aclients.1
|
||||
$(INSTALL_MAN) man1/atest.1 $(DESTDIR)/share/man/man1/atest.1
|
||||
$(INSTALL_MAN) man1/decode_aprs.1 $(DESTDIR)/share/man/man1/decode_aprs.1
|
||||
$(INSTALL_MAN) man1/direwolf.1 $(DESTDIR)/share/man/man1/direwolf.1
|
||||
$(INSTALL_MAN) man1/gen_packets.1 $(DESTDIR)/share/man/man1/gen_packets.1
|
||||
$(INSTALL_MAN) man1/kissutil.1 $(DESTDIR)/share/man/man1/kissutil.1
|
||||
$(INSTALL_MAN) man1/ll2utm.1 $(DESTDIR)/share/man/man1/ll2utm.1
|
||||
$(INSTALL_MAN) man1/log2gpx.1 $(DESTDIR)/share/man/man1/log2gpx.1
|
||||
$(INSTALL_MAN) man1/text2tt.1 $(DESTDIR)/share/man/man1/text2tt.1
|
||||
$(INSTALL_MAN) man1/tt2text.1 $(DESTDIR)/share/man/man1/tt2text.1
|
||||
$(INSTALL_MAN) man1/utm2ll.1 $(DESTDIR)/share/man/man1/utm2ll.1
|
||||
#
|
||||
# Set group and mode of HID devices corresponding to C-Media USB Audio adapters.
|
||||
# This will allow us to use the CM108/CM119 GPIO pins for PTT.
|
||||
# I don't think this is applicable to BSD.
|
||||
#
|
||||
ifeq ($(OS),Linux)
|
||||
$(INSTALL_DATA) 99-direwolf-cmedia.rules /etc/udev/rules.d/99-direwolf-cmedia.rules
|
||||
endif
|
||||
#
|
||||
@echo " "
|
||||
@echo "If this is your first install, not an upgrade, type this to put a copy"
|
||||
@echo "of the sample configuration file (direwolf.conf) in your home directory:"
|
||||
@echo " "
|
||||
@echo " make install-conf"
|
||||
@echo " "
|
||||
|
||||
|
||||
# Put sample configuration & startup files in home directory.
|
||||
# This step would be done as ordinary user.
|
||||
# Some people like to put the direwolf config file in /etc/ax25.
|
||||
# Note that all of these are also in $(DESTDIR)/share/doc/direwolf/examples/.
|
||||
|
||||
# The Raspberry Pi has ~/Desktop but Ubuntu does not.
|
||||
|
||||
# TODO: Handle Linux variations correctly.
|
||||
|
||||
# Version 1.4 - Add "-n" option to avoid clobbering existing, probably customized, config files.
|
||||
|
||||
# dw-start.sh is greatly improved in version 1.4.
|
||||
# It was moved from isntall-rpi to install-conf because it is not just for the RPi.
|
||||
|
||||
.PHONY: install-conf
|
||||
install-conf : direwolf.conf
|
||||
cp -n direwolf.conf ~
|
||||
cp -n sdr.conf ~
|
||||
cp -n telemetry-toolkit/telem-m0xer-3.txt ~
|
||||
cp -n telemetry-toolkit/telem-*.conf ~
|
||||
chmod +x dw-start.sh
|
||||
cp -n dw-start.sh ~
|
||||
ifneq ($(wildcard $(HOME)/Desktop),)
|
||||
@echo " "
|
||||
@echo "This will add a desktop icon on some systems."
|
||||
@echo "This is known to work on Raspberry Pi but might not be compatible with other desktops."
|
||||
@echo " "
|
||||
@echo " make install-rpi"
|
||||
@echo " "
|
||||
endif
|
||||
|
||||
|
||||
.PHONY: install-rpi
|
||||
install-rpi :
|
||||
ifeq ($(OS),Linux)
|
||||
ln -f -s $(DESTDIR)/share/applications/direwolf.desktop ~/Desktop/direwolf.desktop
|
||||
else
|
||||
ln -f -s ${PREFIX}/share/applications/direwolf.desktop ~/Desktop/direwolf.desktop
|
||||
endif
|
||||
|
||||
|
||||
# ---------------------------------- Automated Smoke Test --------------------------------
|
||||
|
||||
|
||||
|
||||
# Combine some unit tests into a single regression sanity check.
|
||||
|
||||
|
||||
check : dtest ttest tttexttest pftest tlmtest lltest enctest kisstest pad2test xidtest dtmftest check-modem1200 check-modem300 check-modem9600 check-modem19200 check-modem2400-a check-modem2400-b check-modem2400-g check-modem4800
|
||||
|
||||
# Can we encode and decode at popular data rates?
|
||||
|
||||
check-modem1200 : gen_packets atest
|
||||
./gen_packets -n 100 -o /tmp/test12.wav
|
||||
./atest -F0 -PE -L63 -G71 /tmp/test12.wav
|
||||
./atest -F1 -PE -L70 -G75 /tmp/test12.wav
|
||||
rm /tmp/test12.wav
|
||||
|
||||
check-modem300 : gen_packets atest
|
||||
./gen_packets -B300 -n 100 -o /tmp/test3.wav
|
||||
./atest -B300 -F0 -L68 -G69 /tmp/test3.wav
|
||||
./atest -B300 -F1 -L73 -G75 /tmp/test3.wav
|
||||
rm /tmp/test3.wav
|
||||
|
||||
check-modem9600 : gen_packets atest
|
||||
./gen_packets -B9600 -n 100 -o /tmp/test96.wav
|
||||
./atest -B9600 -F0 -L61 -G65 /tmp/test96.wav
|
||||
./atest -B9600 -F1 -L62 -G66 /tmp/test96.wav
|
||||
rm /tmp/test96.wav
|
||||
|
||||
check-modem19200 : gen_packets atest
|
||||
./gen_packets -r 96000 -B19200 -n 100 -o /tmp/test19.wav
|
||||
./atest -B19200 -F0 -L60 -G64 /tmp/test19.wav
|
||||
./atest -B19200 -F1 -L64 -G68 /tmp/test19.wav
|
||||
rm /tmp/test19.wav
|
||||
|
||||
check-modem2400-a : gen_packets atest
|
||||
./gen_packets -B2400 -j -n 100 -o /tmp/test24-a.wav
|
||||
./atest -B2400 -j -F0 -L76 -G80 /tmp/test24-a.wav
|
||||
./atest -B2400 -j -F1 -L84 -G88 /tmp/test24-a.wav
|
||||
rm /tmp/test24-a.wav
|
||||
|
||||
check-modem2400-b : gen_packets atest
|
||||
./gen_packets -B2400 -J -n 100 -o /tmp/test24-b.wav
|
||||
./atest -B2400 -J -F0 -L79 -G83 /tmp/test24-b.wav
|
||||
./atest -B2400 -J -F1 -L87 -G91 /tmp/test24-b.wav
|
||||
rm /tmp/test24-b.wav
|
||||
|
||||
check-modem2400-g : gen_packets atest
|
||||
./gen_packets -B2400 -g -n 100 -o /tmp/test24-g.wav
|
||||
./atest -B2400 -g -F0 -L99 -G100 /tmp/test24-g.wav
|
||||
rm /tmp/test24-g.wav
|
||||
|
||||
check-modem4800 : gen_packets atest
|
||||
./gen_packets -B4800 -n 100 -o /tmp/test48.wav
|
||||
./atest -B4800 -F0 -L70 -G74 /tmp/test48.wav
|
||||
./atest -B4800 -F1 -L79 -G84 /tmp/test48.wav
|
||||
rm /tmp/test48.wav
|
||||
|
||||
|
||||
# Unit test for inner digipeater algorithm
|
||||
|
||||
.PHONY : dtest
|
||||
dtest : digipeater.c dedupe.c pfilter.c \
|
||||
ax25_pad.o fcs_calc.o tq.o textcolor.o \
|
||||
decode_aprs.o dwgpsnmea.o dwgps.o dwgpsd.o serial_port.o latlong.o telemetry.o symbols.o tt_text.o misc.a
|
||||
$(CC) $(CFLAGS) -DDIGITEST -o $@ $^ $(LDFLAGS)
|
||||
./dtest
|
||||
rm dtest
|
||||
|
||||
|
||||
# Unit test for APRStt tone sequence parsing.
|
||||
|
||||
.PHONY : ttest
|
||||
ttest : aprs_tt.c tt_text.c latlong.o textcolor.o misc.a geotranz.a misc.a
|
||||
$(CC) $(CFLAGS) -DTT_MAIN -o $@ $^ $(LDFLAGS)
|
||||
./ttest
|
||||
rm ttest
|
||||
|
||||
|
||||
# Unit test for APRStt tone sequence / text conversions.
|
||||
|
||||
.PHONY: tttexttest
|
||||
tttexttest : tt_text.c textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -DTTT_TEST -o $@ $^ $(LDFLAGS)
|
||||
./tttexttest
|
||||
rm tttexttest
|
||||
|
||||
|
||||
# Unit test for Packet Filtering.
|
||||
|
||||
.PHONY: pftest
|
||||
pftest : pfilter.c ax25_pad.o textcolor.o fcs_calc.o decode_aprs.o dwgpsnmea.o dwgps.o dwgpsd.o serial_port.o latlong.o symbols.o telemetry.o tt_text.o misc.a
|
||||
$(CC) $(CFLAGS) -DPFTEST -o $@ $^ $(LDFLAGS)
|
||||
./pftest
|
||||
rm pftest
|
||||
|
||||
# Unit test for telemetry decoding.
|
||||
|
||||
.PHONY: tlmtest
|
||||
tlmtest : telemetry.c ax25_pad.o fcs_calc.o textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -DTEST -o $@ $^ $(LDFLAGS)
|
||||
./tlmtest
|
||||
rm tlmtest
|
||||
|
||||
# Unit test for location coordinate conversion.
|
||||
|
||||
.PHONY: lltest
|
||||
lltest : latlong.c textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -DLLTEST -o $@ $^ $(LDFLAGS)
|
||||
./lltest
|
||||
rm lltest
|
||||
|
||||
# Unit test for encoding position & object report.
|
||||
|
||||
.PHONY: enctest
|
||||
enctest : encode_aprs.c latlong.c textcolor.c misc.a
|
||||
$(CC) $(CFLAGS) -DEN_MAIN -o $@ $^ $(LDFLAGS)
|
||||
./enctest
|
||||
rm enctest
|
||||
|
||||
|
||||
# Unit test for KISS encapsulation.
|
||||
|
||||
.PHONY: kisstest
|
||||
kisstest : kiss_frame.c
|
||||
$(CC) $(CFLAGS) -DKISSTEST -o $@ $^ $(LDFLAGS)
|
||||
./kisstest
|
||||
rm kisstest
|
||||
|
||||
# Unit test for constructing frames besides UI.
|
||||
|
||||
.PHONY: pad2test
|
||||
pad2test : ax25_pad2.c ax25_pad.c fcs_calc.o textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -DPAD2TEST -o $@ $^ $(LDFLAGS)
|
||||
./pad2test
|
||||
rm pad2test
|
||||
|
||||
|
||||
# Unit Test for XID frame encode/decode.
|
||||
|
||||
.PHONY: xidtest
|
||||
xidtest : xid.c textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -DXIDTEST -o $@ $^ $(LDFLAGS)
|
||||
./xidtest
|
||||
rm xidtest
|
||||
|
||||
|
||||
# Unit Test for DTMF encode/decode.
|
||||
|
||||
.PHONY: dtmftest
|
||||
dtmftest : dtmf.c textcolor.o
|
||||
$(CC) $(CFLAGS) -DDTMF_TEST -o $@ $^ $(LDFLAGS)
|
||||
./dtmftest
|
||||
rm dtmftest
|
||||
|
||||
|
||||
|
||||
# ----------------------------- Manual tests and experiments ---------------------------
|
||||
|
||||
# These are not included in a normal build. Might be broken.
|
||||
|
||||
# Unit test for IGate
|
||||
|
||||
itest : igate.c textcolor.c ax25_pad.c fcs_calc.c textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -DITEST -o $@ $^
|
||||
./itest
|
||||
|
||||
# Unit test for UDP reception with AFSK demodulator.
|
||||
# Temporary during development. Might not be useful anymore.
|
||||
|
||||
udptest : udp_test.c demod.o dsp.o demod_afsk.o demod_psk.o demod_9600.o hdlc_rec.o hdlc_rec2.o multi_modem.o rrbb.o \
|
||||
fcs_calc.o ax25_pad.o decode_aprs.o symbols.o textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)
|
||||
./udptest
|
||||
|
||||
# For demodulator tweaking experiments.
|
||||
# Dependencies of demod*.c, rather than .o, are intentional.
|
||||
|
||||
demod.o : tune.h
|
||||
|
||||
demod_afsk.o : tune.h
|
||||
|
||||
demod_9600.o : tune.h
|
||||
|
||||
demod_psk.o : tune.h
|
||||
|
||||
tune.h :
|
||||
echo " " > tune.h
|
||||
|
||||
|
||||
testagc : atest.c demod.c dsp.c demod_afsk.c demod_psk.c demod_9600.c hdlc_rec.o hdlc_rec2.o multi_modem.o rrbb.o \
|
||||
fcs_calc.o ax25_pad.o decode_aprs.o telemetry.o dtime_now.o latlong.o symbols.o tune.h textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -o atest $^ $(LDFLAGS)
|
||||
./atest 02_Track_2.wav | grep "packets decoded in" > atest.out
|
||||
|
||||
|
||||
testagc96 : atest.c fsk_fast_filter.h tune.h demod.c demod_afsk.c demod_psk.c demod_9600.c \
|
||||
dsp.o hdlc_rec.o hdlc_rec2.o multi_modem.o \
|
||||
rrbb.o fcs_calc.o ax25_pad.o decode_aprs.o \
|
||||
dwgpsnmea.o dwgps.o dwgpsd.o serial_port.o latlong.o \
|
||||
symbols.o tt_text.o textcolor.o telemetry.o dtime_now.o \
|
||||
misc.a
|
||||
rm -f atest96
|
||||
$(CC) $(CFLAGS) -o atest96 $^ $(LDFLAGS)
|
||||
./atest96 -B 9600 ../walkabout9600c.wav | grep "packets decoded in" >atest.out
|
||||
#./atest96 -B 9600 noisy96.wav | grep "packets decoded in" >atest.out
|
||||
#./atest96 -B 9600 19990303_0225_9600_8bis_22kHz.wav | grep "packets decoded in" >atest.out
|
||||
#./atest96 -B 9600 19990303_0225_9600_16bit_22kHz.wav | grep "packets decoded in" >atest.out
|
||||
#./atest96 -B 9600 -P + z8-22k.wav| grep "packets decoded in" >atest.out
|
||||
#./atest96 -B 9600 test9600.wav | grep "packets decoded in" >atest.out
|
||||
echo " " > tune.h
|
||||
|
||||
|
||||
# -----------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
.PHONY: clean
|
||||
clean :
|
||||
rm -f $(APPS) gen_fff tune.h fsk_fast_filter.h *.o *.a direwolf.desktop
|
||||
|
||||
|
||||
depend : $(wildcard *.c)
|
||||
makedepend -f $(lastword $(MAKEFILE_LIST)) -- $(CFLAGS) -- $^
|
||||
|
||||
|
||||
#
|
||||
# The following is updated by "make depend"
|
||||
#
|
||||
# DO NOT DELETE
|
||||
|
||||
|
563
Makefile.macosx
563
Makefile.macosx
|
@ -1,563 +0,0 @@
|
|||
#
|
||||
# Makefile for Macintosh 10.6+ version of Dire Wolf.
|
||||
#
|
||||
|
||||
# TODO: This is a modified version of Makefile.linux and it
|
||||
# has fallen a little behind. For example, it is missing the check target.
|
||||
# It would be more maintainable if we could use a single file for both.
|
||||
# The differences are not that great.
|
||||
# Maybe the most of the differences could go in to platform specific include
|
||||
# files rather than cluttering it up with too many if blocks.
|
||||
|
||||
# Changes:
|
||||
#
|
||||
# 16 Dec 2015
|
||||
# 1. Added condition check for gps/gpsd code. Commented out due to 32/64 bit
|
||||
# library issues. Macports gpsd build problem.
|
||||
# 2. SDK version checks are now performed by a bash script 'search_sdks.sh'.
|
||||
# This should resolve the varied locations Apple stored the SDKs on the different
|
||||
# Xcode/OS versions. Executing 'make' on the first pass asks the operator
|
||||
# which SDK he/she wishes to use. Executing 'make clean' resets the SDK
|
||||
# selection and operator intervention is once again required. Selected SDK
|
||||
# information resides in a file named './use_this_sdk' in the current working
|
||||
# directory.
|
||||
# 3. Removed fsk_fast_filter.h from atest receipe, clang compiler was having
|
||||
# a hissy fit. Not check with GCC.
|
||||
|
||||
# Where should we install it?
|
||||
# Looks for libraries and includes, default is Homebrew
|
||||
INSTALLDIR := /usr/local
|
||||
|
||||
# To use Macports, uncomment this line
|
||||
#INSTALLDIR := /opt/local
|
||||
|
||||
APPS := direwolf decode_aprs text2tt tt2text ll2utm utm2ll aclients atest log2gpx gen_packets ttcalc kissutil
|
||||
|
||||
all : $(APPS) direwolf.conf
|
||||
@echo " "
|
||||
@echo "Next step install with: "
|
||||
@echo " "
|
||||
@echo " sudo make install"
|
||||
@echo " "
|
||||
@echo " "
|
||||
|
||||
SYS_LIBS :=
|
||||
SYS_MIN :=
|
||||
|
||||
SYS_LIBS := $(shell ./search_sdks.sh)
|
||||
EXTRA_CFLAGS :=
|
||||
DARWIN_CC := $(shell which clang)
|
||||
ifeq (${DARWIN_CC},)
|
||||
DARWIN_CC := $(shell which gcc)
|
||||
EXTRA_CFLAGS :=
|
||||
else
|
||||
EXTRA_CFLAGS := -fvectorize -fslp-vectorize -pthread
|
||||
endif
|
||||
|
||||
# Change as required in support of the available libraries
|
||||
|
||||
UNAME_M := $(shell uname -m)
|
||||
ifeq (${UNAME_M},x86_64)
|
||||
CC := $(DARWIN_CC) -m64 $(SYS_LIBS) $(SYS_MIN)
|
||||
else
|
||||
CC := $(DARWIN_CC) -m32 $(SYS_LIBS) $(SYS_MIN)
|
||||
endif
|
||||
|
||||
# _XOPEN_SOURCE=600 and _DEFAULT_SOURCE=1 are needed for glibc >= 2.24.
|
||||
# Explanation here: https://github.com/wb2osz/direwolf/issues/62
|
||||
|
||||
CFLAGS := -Os -pthread -Igeotranz -D_XOPEN_SOURCE=600 -D_DEFAULT_SOURCE=1 $(EXTRA_CFLAGS)
|
||||
|
||||
# That was fine for a recent Ubuntu and Raspbian Jessie.
|
||||
# However, Raspbian wheezy was then missing declaration for strsep and definition of fd_set.
|
||||
|
||||
CFLAGS += -D_BSD_SOURCE
|
||||
|
||||
|
||||
# $(info $$CC is [${CC}])
|
||||
|
||||
|
||||
# If the compiler is generating code for a 32 bit target (-m32), we can
|
||||
# get much better results by telling it we have at least a Pentium 3
|
||||
# which hass the SSE instructions.
|
||||
|
||||
#CFLAGS += -march=core2 -msse4.1 -std=gnu99
|
||||
#CFLAGS += -march=pentium3 -sse
|
||||
CFLAGS += -march=native
|
||||
|
||||
|
||||
# Add -ffastmath in only if compiler version recognizes it.
|
||||
|
||||
useffast := $(shell gcc --help -v 2>/dev/null | grep ffast-math)
|
||||
ifneq ($(useffast),)
|
||||
CFLAGS += -ffast-math
|
||||
endif
|
||||
|
||||
#CFLAGS += -D_FORTIFY_SOURCE
|
||||
|
||||
# Use PortAudio Library
|
||||
|
||||
# Force static linking of portaudio if the static library is available.
|
||||
PA_LIB_STATIC := $(shell find $(INSTALLDIR)/lib -maxdepth 1 -type f -name "libportaudio.a")
|
||||
#$(info $$PA_LIB_STATIC is [${PA_LIB_STATIC}])
|
||||
ifeq (${PA_LIB_STATIC},)
|
||||
LDLIBS += -L$(INSTALLDIR)/lib -lportaudio
|
||||
else
|
||||
LDLIBS += $(INSTALLDIR)/lib/libportaudio.a
|
||||
endif
|
||||
|
||||
# Include libraries portaudio requires.
|
||||
LDLIBS += -framework CoreAudio -framework AudioUnit -framework AudioToolbox
|
||||
LDLIBS += -framework Foundation -framework CoreServices
|
||||
|
||||
CFLAGS += -DUSE_PORTAUDIO -I$(INSTALLDIR)/include
|
||||
|
||||
# Uncomment following lines to enable GPS interface & tracker function.
|
||||
# Not available for MacOSX (as far as I know).
|
||||
# Although MacPorts has gpsd, wonder if it's the same thing. Add the check
|
||||
# just in case it works.
|
||||
# Well never mind, issue with Macports with 64bit libs ;-( leave the check in
|
||||
# until (if ever) Macports fixes the issue.
|
||||
|
||||
#GPS_HEADER := $(shell find $(INSTALLDIR)/include -maxdepth 1 -type f -name "gps.h")
|
||||
#ifeq (${GPS_HEADER},)
|
||||
#GPS_OBJS :=
|
||||
#else
|
||||
#CFLAGS += -DENABLE_GPSD
|
||||
#LDLIBS += -L$(INSTALLDIR)/lib -lgps -lgpsd
|
||||
#GPS_OBJS := dwgps.o dwgpsnmea.o dwgpsd.o
|
||||
#endif
|
||||
|
||||
# Name of current directory.
|
||||
# Used to generate zip file name for distribution.
|
||||
|
||||
z := $(notdir ${CURDIR})
|
||||
|
||||
|
||||
# Main application.
|
||||
|
||||
direwolf : direwolf.o aprs_tt.o audio_portaudio.o audio_stats.o ax25_link.o ax25_pad.o ax25_pad2.o beacon.o \
|
||||
config.o decode_aprs.o dedupe.o demod_9600.o demod_afsk.o demod_psk.o \
|
||||
demod.o digipeater.o cdigipeater.o dlq.o dsp.o dtime_now.o dtmf.o dwgps.o \
|
||||
encode_aprs.o encode_aprs.o fcs_calc.o fcs_calc.o gen_tone.o \
|
||||
geotranz.a hdlc_rec.o hdlc_rec2.o hdlc_send.o igate.o kiss_frame.o \
|
||||
kiss.o kissserial.o kissnet.o latlong.o latlong.o log.o morse.o multi_modem.o \
|
||||
waypoint.o serial_port.o pfilter.o ptt.o rdq.o recv.o rrbb.o server.o \
|
||||
symbols.o telemetry.o textcolor.o tq.o tt_text.o tt_user.o xid.o xmit.o \
|
||||
dwgps.o dwgpsnmea.o mheard.o
|
||||
$(CC) $(CFLAGS) -o $@ $^ -lpthread $(LDLIBS) -lm
|
||||
|
||||
|
||||
# Optimization for slow processors.
|
||||
|
||||
demod.o : fsk_fast_filter.h
|
||||
|
||||
demod_afsk.o : fsk_fast_filter.h
|
||||
|
||||
|
||||
fsk_fast_filter.h : gen_fff
|
||||
./gen_fff > fsk_fast_filter.h
|
||||
|
||||
gen_fff : demod_afsk.c dsp.c textcolor.c
|
||||
echo " " > tune.h
|
||||
$(CC) $(CFLAGS) -DGEN_FFF -o $@ $^ $(LDFLAGS)
|
||||
|
||||
|
||||
|
||||
# UTM, USNG, MGRS conversions.
|
||||
|
||||
geotranz.a : error_string.o mgrs.o polarst.o tranmerc.o ups.o usng.o utm.o
|
||||
ar -cr $@ $^
|
||||
|
||||
error_string.o : geotranz/error_string.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
mgrs.o : geotranz/mgrs.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
polarst.o : geotranz/polarst.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
tranmerc.o : geotranz/tranmerc.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
ups.o : geotranz/ups.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
usng.o : geotranz/usng.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
utm.o : geotranz/utm.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
|
||||
|
||||
# Generate apprpriate sample configuration file for this platform.
|
||||
|
||||
direwolf.conf : generic.conf
|
||||
egrep '^C|^M' generic.conf | cut -c2-999 > direwolf.conf
|
||||
|
||||
|
||||
# Where should we install it?
|
||||
# Macports typically installs in /opt/local so maybe you want to use that instead.
|
||||
|
||||
INSTALLDIR := /usr/local
|
||||
#INSTALLDIR := /opt/local
|
||||
|
||||
# TODO: Test this better.
|
||||
|
||||
# Optional installation into INSTALLDIR.
|
||||
# Needs to be run as root or with sudo.
|
||||
|
||||
# Command to "install" to system directories. "install" for Linux. "ginstall" for Mac.
|
||||
|
||||
INSTALL=ginstall
|
||||
|
||||
.PHONY: install
|
||||
install : $(APPS) direwolf.conf tocalls.txt symbols-new.txt symbolsX.txt dw-icon.png
|
||||
#
|
||||
# Applications.
|
||||
#
|
||||
$(INSTALL) direwolf $(INSTALLDIR)/bin
|
||||
$(INSTALL) decode_aprs $(INSTALLDIR)/bin
|
||||
$(INSTALL) text2tt $(INSTALLDIR)/bin
|
||||
$(INSTALL) tt2text $(INSTALLDIR)/bin
|
||||
$(INSTALL) ll2utm $(INSTALLDIR)/bin
|
||||
$(INSTALL) utm2ll $(INSTALLDIR)/bin
|
||||
$(INSTALL) aclients $(INSTALLDIR)/bin
|
||||
$(INSTALL) log2gpx $(INSTALLDIR)/bin
|
||||
$(INSTALL) gen_packets $(INSTALLDIR)/bin
|
||||
$(INSTALL) atest $(INSTALLDIR)/bin
|
||||
$(INSTALL) ttcalc $(INSTALLDIR)/bin
|
||||
$(INSTALL) kissutil $(INSTALLDIR)/bin
|
||||
$(INSTALL) dwespeak.sh $(INSTALLDIR)/bin
|
||||
#
|
||||
# Telemetry Toolkit executables. Other .conf and .txt files will go into doc directory.
|
||||
#
|
||||
$(INSTALL) telemetry-toolkit/telem-balloon.pl $(INSTALLDIR)/bin
|
||||
$(INSTALL) telemetry-toolkit/telem-bits.pl $(INSTALLDIR)/bin
|
||||
$(INSTALL) telemetry-toolkit/telem-data.pl $(INSTALLDIR)/bin
|
||||
$(INSTALL) telemetry-toolkit/telem-data91.pl $(INSTALLDIR)/bin
|
||||
$(INSTALL) telemetry-toolkit/telem-eqns.pl $(INSTALLDIR)/bin
|
||||
$(INSTALL) telemetry-toolkit/telem-parm.pl $(INSTALLDIR)/bin
|
||||
$(INSTALL) telemetry-toolkit/telem-unit.pl $(INSTALLDIR)/bin
|
||||
$(INSTALL) telemetry-toolkit/telem-volts.py $(INSTALLDIR)/bin
|
||||
#
|
||||
# Misc. data such as "tocall" to system mapping.
|
||||
#
|
||||
$(INSTALL) -D --mode=644 tocalls.txt $(INSTALLDIR)/share/direwolf/tocalls.txt
|
||||
$(INSTALL) -D --mode=644 symbols-new.txt $(INSTALLDIR)/share/direwolf/symbols-new.txt
|
||||
$(INSTALL) -D --mode=644 symbolsX.txt $(INSTALLDIR)/share/direwolf/symbolsX.txt
|
||||
$(INSTALL) -D --mode=644 dw-icon.png $(INSTALLDIR)/share/direwolf/dw-icon.png
|
||||
|
||||
#
|
||||
# Documentation. Various plain text files and PDF.
|
||||
#
|
||||
$(INSTALL) -D --mode=644 README.md $(INSTALLDIR)/share/doc/direwolf/README.md
|
||||
$(INSTALL) -D --mode=644 CHANGES.md $(INSTALLDIR)/share/doc/direwolf/CHANGES.md
|
||||
$(INSTALL) -D --mode=644 LICENSE-dire-wolf.txt $(INSTALLDIR)/share/doc/direwolf/LICENSE-dire-wolf.txt
|
||||
$(INSTALL) -D --mode=644 LICENSE-other.txt $(INSTALLDIR)/share/doc/direwolf/LICENSE-other.txt
|
||||
#
|
||||
# ./README.md is an overview for the project main page.
|
||||
# doc/README.md contains an overview of the PDF file contents and is more useful here.
|
||||
#
|
||||
$(INSTALL) -D --mode=644 doc/README.md $(INSTALLDIR)/share/doc/direwolf/README.md
|
||||
$(INSTALL) -D --mode=644 doc/2400-4800-PSK-for-APRS-Packet-Radio.pdf $(INSTALLDIR)/share/doc/direwolf/2400-4800-PSK-for-APRS-Packet-Radio.pdf
|
||||
$(INSTALL) -D --mode=644 doc/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf $(INSTALLDIR)/share/doc/direwolf/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf
|
||||
$(INSTALL) -D --mode=644 doc/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf $(INSTALLDIR)/share/doc/direwolf/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf
|
||||
$(INSTALL) -D --mode=644 doc/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf $(INSTALLDIR)/share/doc/direwolf/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf
|
||||
$(INSTALL) -D --mode=644 doc/APRS-Telemetry-Toolkit.pdf $(INSTALLDIR)/share/doc/direwolf/APRS-Telemetry-Toolkit.pdf
|
||||
$(INSTALL) -D --mode=644 doc/APRStt-Implementation-Notes.pdf $(INSTALLDIR)/share/doc/direwolf/APRStt-Implementation-Notes.pdf
|
||||
$(INSTALL) -D --mode=644 doc/APRStt-interface-for-SARTrack.pdf $(INSTALLDIR)/share/doc/direwolf/APRStt-interface-for-SARTrack.pdf
|
||||
$(INSTALL) -D --mode=644 doc/APRStt-Listening-Example.pdf $(INSTALLDIR)/share/doc/direwolf/APRStt-Listening-Example.pdf
|
||||
$(INSTALL) -D --mode=644 doc/Bluetooth-KISS-TNC.pdf $(INSTALLDIR)/share/doc/direwolf/Bluetooth-KISS-TNC.pdf
|
||||
$(INSTALL) -D --mode=644 doc/Going-beyond-9600-baud.pdf $(INSTALLDIR)/share/doc/direwolf/Going-beyond-9600-baud.pdf
|
||||
$(INSTALL) -D --mode=644 doc/Raspberry-Pi-APRS.pdf $(INSTALLDIR)/share/doc/direwolf/Raspberry-Pi-APRS.pdf
|
||||
$(INSTALL) -D --mode=644 doc/Raspberry-Pi-APRS-Tracker.pdf $(INSTALLDIR)/share/doc/direwolf/Raspberry-Pi-APRS-Tracker.pdf
|
||||
$(INSTALL) -D --mode=644 doc/Raspberry-Pi-SDR-IGate.pdf $(INSTALLDIR)/share/doc/direwolf/Raspberry-Pi-SDR-IGate.pdf
|
||||
$(INSTALL) -D --mode=644 doc/Successful-APRS-IGate-Operation.pdf $(INSTALLDIR)/share/doc/direwolf/Successful-APRS-IGate-Operation.pdf
|
||||
$(INSTALL) -D --mode=644 doc/User-Guide.pdf $(INSTALLDIR)/share/doc/direwolf/User-Guide.pdf
|
||||
$(INSTALL) -D --mode=644 doc/WA8LMF-TNC-Test-CD-Results.pdf $(INSTALLDIR)/share/doc/direwolf/WA8LMF-TNC-Test-CD-Results.pdf
|
||||
#
|
||||
# Sample config files also go into the doc directory.
|
||||
# When building from source, these can be put in home directory with "make install-conf".
|
||||
# When installed from .DEB or .RPM package, the user will need to copy these to
|
||||
# the home directory or other desired location.
|
||||
# Someone suggested that these could go into an "examples" subdirectory under doc.
|
||||
#
|
||||
$(INSTALL) -D --mode=644 direwolf.conf $(INSTALLDIR)/share/doc/direwolf/direwolf.conf
|
||||
$(INSTALL) -D --mode=644 telemetry-toolkit/telem-m0xer-3.txt $(INSTALLDIR)/share/doc/direwolf/telem-m0xer-3.txt
|
||||
$(INSTALL) -D --mode=644 telemetry-toolkit/telem-balloon.conf $(INSTALLDIR)/share/doc/direwolf/telem-balloon.conf
|
||||
$(INSTALL) -D --mode=644 telemetry-toolkit/telem-volts.conf $(INSTALLDIR)/share/doc/direwolf/telem-volts.conf
|
||||
#
|
||||
# "man" pages
|
||||
#
|
||||
$(INSTALL) -D --mode=644 man1/aclients.1 $(INSTALLDIR)/man/man1/aclients.1
|
||||
$(INSTALL) -D --mode=644 man1/atest.1 $(INSTALLDIR)/man/man1/atest.1
|
||||
$(INSTALL) -D --mode=644 man1/decode_aprs.1 $(INSTALLDIR)/man/man1/decode_aprs.1
|
||||
$(INSTALL) -D --mode=644 man1/direwolf.1 $(INSTALLDIR)/man/man1/direwolf.1
|
||||
$(INSTALL) -D --mode=644 man1/gen_packets.1 $(INSTALLDIR)/man/man1/gen_packets.1
|
||||
$(INSTALL) -D --mode=644 man1/ll2utm.1 $(INSTALLDIR)/man/man1/ll2utm.1
|
||||
$(INSTALL) -D --mode=644 man1/log2gpx.1 $(INSTALLDIR)/man/man1/log2gpx.1
|
||||
$(INSTALL) -D --mode=644 man1/text2tt.1 $(INSTALLDIR)/man/man1/text2tt.1
|
||||
$(INSTALL) -D --mode=644 man1/tt2text.1 $(INSTALLDIR)/man/man1/tt2text.1
|
||||
$(INSTALL) -D --mode=644 man1/utm2ll.1 $(INSTALLDIR)/man/man1/utm2ll.1
|
||||
#
|
||||
@echo " "
|
||||
@echo "If this is your first install, not an upgrade, type this to put a copy"
|
||||
@echo "of the sample configuration file (direwolf.conf) in your home directory:"
|
||||
@echo " "
|
||||
@echo " make install-conf"
|
||||
@echo " "
|
||||
|
||||
|
||||
# TODO: Should we put the sample direwolf.conf file somewhere like
|
||||
# /usr/share/doc/direwolf/examples and add that to the
|
||||
# end of the search path list?
|
||||
# That would make it easy to see user customizations compared to the
|
||||
# latest sample.
|
||||
|
||||
# These would be done as ordinary user.
|
||||
|
||||
|
||||
.PHONY: install-conf
|
||||
install-conf : direwolf.conf
|
||||
cp direwolf.conf ~
|
||||
cp telemetry-toolkit/telem-m0xer-3.txt ~
|
||||
cp telemetry-toolkit/telem-*.conf ~
|
||||
|
||||
|
||||
# Separate application to decode raw data.
|
||||
|
||||
# First three use .c rather than .o because they depend on DECAMAIN definition.
|
||||
|
||||
decode_aprs : decode_aprs.c kiss_frame.c ax25_pad.c dwgpsnmea.o dwgps.o dwgpsd.o serial_port.o symbols.o textcolor.o fcs_calc.o latlong.o log.o telemetry.o tt_text.o
|
||||
$(CC) $(CFLAGS) -DDECAMAIN -o $@ $^ -lm
|
||||
|
||||
# Convert between text and touch tone representation.
|
||||
|
||||
text2tt : tt_text.c
|
||||
$(CC) $(CFLAGS) -DENC_MAIN -o $@ $^
|
||||
|
||||
tt2text : tt_text.c
|
||||
$(CC) $(CFLAGS) -DDEC_MAIN -o $@ $^
|
||||
|
||||
|
||||
# Convert between Latitude/Longitude and UTM coordinates.
|
||||
|
||||
ll2utm : ll2utm.c geotranz.a
|
||||
$(CC) $(CFLAGS) -o $@ $^ -lm
|
||||
|
||||
utm2ll : utm2ll.c geotranz.a
|
||||
$(CC) $(CFLAGS) -o $@ $^ -lm
|
||||
|
||||
|
||||
# Convert from log file to GPX.
|
||||
|
||||
log2gpx : log2gpx.c
|
||||
$(CC) $(CFLAGS) -o $@ $^ -lm
|
||||
|
||||
|
||||
# Test application to generate sound.
|
||||
|
||||
gen_packets : gen_packets.c ax25_pad.c hdlc_send.c fcs_calc.c gen_tone.c morse.c dtmf.c textcolor.c dsp.c
|
||||
$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS) -lm
|
||||
|
||||
demod.o : tune.h
|
||||
|
||||
demod_afsk.o : tune.h
|
||||
|
||||
demod_9600.o : tune.h
|
||||
|
||||
demod_psk.o : tune.h
|
||||
|
||||
tune.h :
|
||||
echo " " > tune.h
|
||||
|
||||
|
||||
testagc : atest.c demod.c dsp.c demod_afsk.c demod_9600.c hdlc_rec.c hdlc_rec2.o multi_modem.o rrbb.o \
|
||||
fcs_calc.c ax25_pad.c decode_aprs.c telemetry.c dtime_now.o latlong.c symbols.c tune.h textcolor.c
|
||||
$(CC) $(CFLAGS) -o atest $^ -lm
|
||||
./atest 02_Track_2.wav | grep "packets decoded in" > atest.out
|
||||
|
||||
|
||||
# Unit test for demodulators
|
||||
|
||||
atest : atest.c demod.c dsp.c demod_afsk.c demod_psk.c demod_9600.c hdlc_rec.c hdlc_rec2.o multi_modem.o rrbb.o \
|
||||
fcs_calc.c ax25_pad.c decode_aprs.c dwgpsnmea.o dwgps.o serial_port.o telemetry.c dtime_now.o latlong.c symbols.c textcolor.c tt_text.c
|
||||
$(CC) $(CFLAGS) -o $@ $^ -lm
|
||||
#atest : atest.c fsk_fast_filter.h demod.c dsp.c demod_afsk.c demod_psk.c demod_9600.c hdlc_rec.c hdlc_rec2.o multi_modem.o rrbb.o \
|
||||
# fcs_calc.c ax25_pad.c decode_aprs.c dwgpsnmea.o dwgps.o serial_port.o telemetry.c latlong.c symbols.c textcolor.c tt_text.c
|
||||
# $(CC) $(CFLAGS) -o $@ $^ -lm
|
||||
|
||||
# Unit test for inner digipeater algorithm
|
||||
|
||||
|
||||
dtest : digipeater.c pfilter.o ax25_pad.o dedupe.o fcs_calc.o tq.o textcolor.o \
|
||||
decode_aprs.o dwgpsnmea.o dwgps.o serial_port.o latlong.o telemetry.o symbols.o tt_text.o
|
||||
$(CC) $(CFLAGS) -DTEST -o $@ $^
|
||||
./dtest
|
||||
|
||||
|
||||
# Unit test for APRStt.
|
||||
|
||||
ttest : aprs_tt.c tt_text.c latlong.c geotranz.a
|
||||
$(CC) $(CFLAGS) -DTT_MAIN -o $@ $^
|
||||
|
||||
|
||||
# Unit test for IGate
|
||||
|
||||
|
||||
itest : igate.c textcolor.c ax25_pad.c fcs_calc.c
|
||||
$(CC) $(CFLAGS) -DITEST -o $@ $^
|
||||
./itest
|
||||
|
||||
|
||||
# Unit test for UDP reception with AFSK demodulator
|
||||
|
||||
udptest : udp_test.c demod.c dsp.c demod_afsk.c demod_9600.c hdlc_rec.c hdlc_rec2.c multi_modem.c rrbb.c fcs_calc.c ax25_pad.c decode_aprs.c symbols.c textcolor.c
|
||||
$(CC) $(CFLAGS) -o $@ $^ -lm
|
||||
./udptest
|
||||
|
||||
|
||||
# Unit test for telemetry decoding.
|
||||
|
||||
|
||||
tlmtest : telemetry.c ax25_pad.c fcs_calc.c textcolor.c
|
||||
$(CC) $(CFLAGS) -o $@ $^ -lm
|
||||
./tlmtest
|
||||
|
||||
|
||||
# Multiple AGWPE network or serial port clients to test TNCs side by side.
|
||||
|
||||
aclients : aclients.c ax25_pad.c fcs_calc.c textcolor.c
|
||||
$(CC) $(CFLAGS) -g -o $@ $^
|
||||
|
||||
|
||||
# Talk to a KISS TNC.
|
||||
# Note: kiss_frame.c has conditional compilation on KISSUTIL.
|
||||
|
||||
kissutil : kissutil.c kiss_frame.c ax25_pad.o fcs_calc.o textcolor.o serial_port.o dtime_now.o dwsock.o
|
||||
$(CC) $(CFLAGS) -g -DKISSUTIL -o $@ $^
|
||||
|
||||
|
||||
|
||||
# Touch Tone to Speech sample application.
|
||||
|
||||
ttcalc : ttcalc.o ax25_pad.o fcs_calc.o textcolor.o
|
||||
$(CC) $(CFLAGS) -g -o $@ $^
|
||||
|
||||
|
||||
depend : $(wildcard *.c)
|
||||
makedepend -f $(lastword $(MAKEFILE_LIST)) -- $(CFLAGS) -- $^
|
||||
|
||||
|
||||
.PHONY: clean
|
||||
clean :
|
||||
rm -f $(APPS) gen_fff \
|
||||
fsk_fast_filter.h *.o *.a use_this_sdk
|
||||
echo " " > tune.h
|
||||
|
||||
|
||||
.PHONY: dist-mac
|
||||
dist-mac: direwolf decode_aprs text2tt tt2text ll2utm utm2ll aclients log2gpx gen_packets \
|
||||
tocalls.txt symbols-new.txt symbolsX.txt dw-icon.png
|
||||
rm -f ../direwolf_dist_bin.zip
|
||||
(cd .. ; zip direwolf_dist_bin.zip \
|
||||
$(INSTALLDIR)/bin/direwolf \
|
||||
$(INSTALLDIR)/bin/decode_aprs \
|
||||
$(INSTALLDIR)/bin/text2tt \
|
||||
$(INSTALLDIR)/bin/tt2text \
|
||||
$(INSTALLDIR)/bin/ll2utm \
|
||||
$(INSTALLDIR)/bin/utm2ll \
|
||||
$(INSTALLDIR)/bin/aclients \
|
||||
$(INSTALLDIR)/bin/log2gpx \
|
||||
$(INSTALLDIR)/bin/gen_packets \
|
||||
$(INSTALLDIR)/bin/atest \
|
||||
$(INSTALLDIR)/bin/ttcalc \
|
||||
$(INSTALLDIR)/bin/kissutil \
|
||||
$(INSTALLDIR)/bin/dwespeak.sh \
|
||||
$(INSTALLDIR)/share/direwolf/tocalls.txt \
|
||||
$(INSTALLDIR)/share/direwolf/config/direwolf.conf \
|
||||
$(INSTALLDIR)/share/direwolf/symbols-new.txt \
|
||||
$(INSTALLDIR)/share/direwolf/symbolsX.txt \
|
||||
$(INSTALLDIR)/share/direwolf/dw-icon.png \
|
||||
$(INSTALLDIR)/share/doc/direwolf/README.md \
|
||||
$(INSTALLDIR)/share/doc/direwolf/CHANGES.md \
|
||||
$(INSTALLDIR)/share/doc/direwolf/LICENSE-dire-wolf.txt \
|
||||
$(INSTALLDIR)/share/doc/direwolf/LICENSE-other.txt \
|
||||
$(INSTALLDIR)/share/doc/direwolf/User-Guide.pdf \
|
||||
$(INSTALLDIR)/share/doc/direwolf/Raspberry-Pi-APRS.pdf \
|
||||
$(INSTALLDIR)/share/doc/direwolf/Raspberry-Pi-APRS-Tracker.pdf \
|
||||
$(INSTALLDIR)/share/doc/direwolf/APRStt-Implementation-Notes.pdf \
|
||||
$(INSTALLDIR)/share/doc/direwolf/APRS-Telemetry-Toolkit.pdf \
|
||||
$(INSTALLDIR)/man/man1/aclients.1 \
|
||||
$(INSTALLDIR)/man/man1/atest.1 \
|
||||
$(INSTALLDIR)/man/man1/decode_aprs.1 \
|
||||
$(INSTALLDIR)/man/man1/direwolf.1 \
|
||||
$(INSTALLDIR)/man/man1/gen_packets.1 \
|
||||
$(INSTALLDIR)/man/man1/kissutil.1 \
|
||||
$(INSTALLDIR)/man/man1/ll2utm.1 \
|
||||
$(INSTALLDIR)/man/man1/log2gpx.1 \
|
||||
$(INSTALLDIR)/man/man1/text2tt.1 \
|
||||
$(INSTALLDIR)/man/man1/tt2text.1 \
|
||||
$(INSTALLDIR)/man/man1/utm2ll.1 \
|
||||
)
|
||||
|
||||
# Package it up for distribution.
|
||||
|
||||
.PHONY: dist-src
|
||||
dist-src : README.md CHANGES.md \
|
||||
doc/User-Guide.pdf doc/Raspberry-Pi-APRS.pdf \
|
||||
doc/Raspberry-Pi-APRS-Tracker.pdf doc/APRStt-Implementation-Notes.pdf \
|
||||
dw-start.sh dwespeak.bat dwespeak.sh \
|
||||
tocalls.txt symbols-new.txt symbolsX.txt direwolf.spec
|
||||
rm -f fsk_fast_filter.h
|
||||
echo " " > tune.h
|
||||
rm -f ../$z-src.zip
|
||||
(cd .. ; zip $z-src.zip \
|
||||
$z/README.md \
|
||||
$z/CHANGES.md \
|
||||
$z/LICENSE* \
|
||||
$z/doc/User-Guide.pdf \
|
||||
$z/doc/Raspberry-Pi-APRS.pdf \
|
||||
$z/doc/Raspberry-Pi-APRS-Tracker.pdf \
|
||||
$z/doc/APRStt-Implementation-Notes.pdf \
|
||||
$z/Makefile* \
|
||||
$z/*.c $z/*.h \
|
||||
$z/regex/* $z/misc/* $z/geotranz/* \
|
||||
$z/man1/* \
|
||||
$z/generic.conf \
|
||||
$z/tocalls.txt $z/symbols-new.txt $z/symbolsX.txt \
|
||||
$z/dw-icon.png $z/dw-icon.rc $z/dw-icon.ico \
|
||||
$z/dw-start.sh $z/direwolf.spec \
|
||||
$z/dwespeak.bat $z/dwespeak.sh \
|
||||
$z/telemetry-toolkit/* )
|
||||
|
||||
|
||||
#
|
||||
# The destination field is often used to identify the manufacturer/model.
|
||||
# These are not hardcoded into Dire Wolf. Instead they are read from
|
||||
# a file called tocalls.txt at application start up time.
|
||||
#
|
||||
# The original permanent symbols are built in but the "new" symbols,
|
||||
# using overlays, are often updated. These are also read from files.
|
||||
#
|
||||
# You can obtain an updated copy by typing "make tocalls-symbols".
|
||||
# This is not part of the normal build process. You have to do this explicitly.
|
||||
#
|
||||
# The locations below appear to be the most recent.
|
||||
# The copy at http://www.aprs.org/tocalls.txt is out of date.
|
||||
#
|
||||
|
||||
.PHONY: tocalls-symbols
|
||||
tocalls-symbols :
|
||||
cp tocalls.txt tocalls.txt~
|
||||
wget http://www.aprs.org/aprs11/tocalls.txt -O tocalls.txt
|
||||
-diff -Z tocalls.txt~ tocalls.txt
|
||||
cp symbols-new.txt symbols-new.txt~
|
||||
wget http://www.aprs.org/symbols/symbols-new.txt -O symbols-new.txt
|
||||
-diff -Z symbols-new.txt~ symbols-new.txt
|
||||
cp symbolsX.txt symbolsX.txt~
|
||||
wget http://www.aprs.org/symbols/symbolsX.txt -O symbolsX.txt
|
||||
-diff -Z symbolsX.txt~ symbolsX.txt
|
727
Makefile.win
727
Makefile.win
|
@ -1,727 +0,0 @@
|
|||
#
|
||||
# Makefile for native Windows version of Dire Wolf.
|
||||
#
|
||||
#
|
||||
# This is built in the Cygwin environment with the MinGW compiler.
|
||||
# MinGW is a special version of gcc that generates native Windows executables.
|
||||
#
|
||||
# A minimum of Windows XP is required due to some of the system
|
||||
# features being used. XP requires a Pentium processor or later.
|
||||
# The DSP filters can be sped up considerably with the SSE instructions.
|
||||
# The SSE instructions were introduced in 1999 with the Pentium III series.
|
||||
# SSE2 instructions, added in 2000, with the Pentium 4, don't seem to offer any advantage.
|
||||
|
||||
|
||||
|
||||
all : direwolf decode_aprs text2tt tt2text ll2utm utm2ll aclients log2gpx gen_packets atest ttcalc kissutil
|
||||
# tnctest tnctest-issue-132
|
||||
|
||||
|
||||
|
||||
# October 2019, version 1.6: 64 bit target for Windows. It runs twice as fast!
|
||||
# Originally I installed MinGW outside of Cygwin and added location to PATH in .bash_profile.
|
||||
# Install these two Cygwin packages so the compiler is in /usr/bin
|
||||
# and no special PATH is required.
|
||||
# mingw64-x86_64-gcc-core (7.4.0-1)
|
||||
# mingw64-x86_64-gcc-g++ (7.4.0-1)
|
||||
|
||||
CC ?= x86_64-w64-mingw32-gcc
|
||||
CXX ?= x86_64-w64-mingw32-g++
|
||||
AR ?= x86_64-w64-mingw32-ar
|
||||
WINDRES ?= x86_64-w64-mingw32-windres
|
||||
|
||||
# MinGW requires "-mthreads" option for threadsafe operation.
|
||||
|
||||
CFLAGS := -Ofast -Iregex -Iutm -Igeotranz -mthreads -DUSE_REGEX_STATIC -Wall -Wlogical-op
|
||||
|
||||
# For a 32 bit target, install these Cygwin packages.
|
||||
# mingw64-i686gcc-core (7.4.0-1)
|
||||
# mingw64-i686gcc-g++ (7.4.0-1)
|
||||
# i686 corresponds to Pentium II.
|
||||
# We need to add Pentium III and SSE instructions to speed things up.
|
||||
# Pentium 4 and SSE2 offers no advantage so no reason to bump up minimum CPU requirement.
|
||||
# Code for the 64 bit target runs about twice as fast, so use that if possible.
|
||||
|
||||
#CC = i686-w64-mingw32-gcc
|
||||
#CXX = i686-w64-mingw32-g++
|
||||
#AR = i686-w64-mingw32-ar
|
||||
#WINDRES = i686-w64-mingw32-windres
|
||||
#CFLAGS += -march=pentium3 -msse
|
||||
|
||||
|
||||
CFLAGS += -g
|
||||
# TEMP EXPERIMENT - DO NOT RELEASE
|
||||
#CFLAGS += -fsanitize=undefined
|
||||
|
||||
# For version 1.4, we upgrade from gcc 4.6.2 to 4.9.3.
|
||||
|
||||
# gcc 4.8 adds these. Try them just for fun.
|
||||
# No, it needs libasan which is not on Windows.
|
||||
#CFLAGS += -fsanitize=address -fno-omit-frame-pointer
|
||||
|
||||
# Helpful for the demodulators. Overkill for non-hot spots.
|
||||
#CFLAGS += -Wdouble-promotion
|
||||
|
||||
# Don't have the patience for this right now.
|
||||
#CFLAGS += -Wextra
|
||||
|
||||
# Continue working on these.
|
||||
CFLAGS += -Wsign-compare
|
||||
CFLAGS += -Wuninitialized
|
||||
CFLAGS += -Wold-style-declaration
|
||||
CFLAGS += -Wnull-dereference
|
||||
CFLAGS += -fdelete-null-pointer-checks
|
||||
#CFLAGS += -Wmissing-prototypes
|
||||
#CFLAGS += -Wold-style-definition
|
||||
|
||||
|
||||
|
||||
|
||||
# -------------------------------------- Main application --------------------------------
|
||||
|
||||
# Not sure why this is here.
|
||||
|
||||
demod.o : fsk_demod_state.h
|
||||
|
||||
demod_9600.o : fsk_demod_state.h
|
||||
|
||||
demod_afsk.o : fsk_demod_state.h
|
||||
|
||||
demod_psk.o : fsk_demod_state.h
|
||||
|
||||
|
||||
direwolf : direwolf.o config.o recv.o demod.o dsp.o demod_afsk.o demod_psk.o demod_9600.o hdlc_rec.o \
|
||||
hdlc_rec2.o multi_modem.o rdq.o rrbb.o dlq.o \
|
||||
fcs_calc.o ax25_pad.o ax25_pad2.o xid.o \
|
||||
decode_aprs.o symbols.o server.o kiss.o kissserial.o kissnet.o kiss_frame.o hdlc_send.o fcs_calc.o \
|
||||
gen_tone.o morse.o audio_win.o audio_stats.o digipeater.o cdigipeater.o pfilter.o dedupe.o tq.o xmit.o \
|
||||
ptt.o beacon.o dwgps.o encode_aprs.o latlong.o textcolor.o \
|
||||
dtmf.o aprs_tt.o tt_user.o tt_text.o igate.o waypoint.o serial_port.o log.o telemetry.o \
|
||||
dwgps.o dwgpsnmea.o dtime_now.o mheard.o ax25_link.o cm108.c \
|
||||
dw-icon.o regex.a misc.a geotranz.a
|
||||
$(CC) $(CFLAGS) -o $@ $^ -lwinmm -lws2_32
|
||||
|
||||
dw-icon.o : dw-icon.rc dw-icon.ico
|
||||
$(WINDRES) dw-icon.rc -o $@
|
||||
|
||||
|
||||
# Optimization for slow processors.
|
||||
|
||||
demod.o : fsk_fast_filter.h
|
||||
|
||||
demod_afsk.o : fsk_fast_filter.h
|
||||
|
||||
|
||||
fsk_fast_filter.h : gen_fff
|
||||
./gen_fff > fsk_fast_filter.h
|
||||
|
||||
gen_fff : demod_afsk.c dsp.c textcolor.c
|
||||
echo " " > tune.h
|
||||
$(CC) $(CFLAGS) -DGEN_FFF -o $@ $^
|
||||
|
||||
|
||||
#
|
||||
# The destination field is often used to identify the manufacturer/model.
|
||||
# These are not hardcoded into Dire Wolf. Instead they are read from
|
||||
# a file called tocalls.txt at application start up time.
|
||||
#
|
||||
# The original permanent symbols are built in but the "new" symbols,
|
||||
# using overlays, are often updated. These are also read from files.
|
||||
#
|
||||
# You can obtain an updated copy by typing "make tocalls-symbols".
|
||||
# This is not part of the normal build process. You have to do this explicitly.
|
||||
#
|
||||
# The locations below appear to be the most recent.
|
||||
# The copy at http://www.aprs.org/tocalls.txt is out of date.
|
||||
#
|
||||
|
||||
.PHONY: tocalls-symbols
|
||||
tocalls-symbols :
|
||||
cp tocalls.txt tocalls.txt~
|
||||
wget http://www.aprs.org/aprs11/tocalls.txt -O tocalls.txt
|
||||
-diff tocalls.txt~ tocalls.txt
|
||||
cp symbols-new.txt symbols-new.txt~
|
||||
wget http://www.aprs.org/symbols/symbols-new.txt -O symbols-new.txt
|
||||
-diff symbols-new.txt~ symbols-new.txt
|
||||
cp symbolsX.txt symbolsX.txt~
|
||||
wget http://www.aprs.org/symbols/symbolsX.txt -O symbolsX.txt
|
||||
-diff symbolsX.txt~ symbolsX.txt
|
||||
|
||||
|
||||
|
||||
# ---------------------------- Other utilities included with distribution -------------------------
|
||||
|
||||
|
||||
# Separate application to decode raw data.
|
||||
|
||||
# First three use .c rather than .o because they depend on DECAMAIN definition.
|
||||
|
||||
decode_aprs : decode_aprs.c kiss_frame.c ax25_pad.c dwgpsnmea.o dwgps.o serial_port.o symbols.o textcolor.o fcs_calc.o latlong.o log.o telemetry.o tt_text.o regex.a misc.a geotranz.a
|
||||
$(CC) $(CFLAGS) -DDECAMAIN -o decode_aprs $^
|
||||
|
||||
|
||||
# Convert between text and touch tone representation.
|
||||
|
||||
text2tt : tt_text.c misc.a
|
||||
$(CC) $(CFLAGS) -DENC_MAIN -o $@ $^
|
||||
|
||||
tt2text : tt_text.c misc.a
|
||||
$(CC) $(CFLAGS) -DDEC_MAIN -o $@ $^
|
||||
|
||||
|
||||
# Convert between Latitude/Longitude and UTM coordinates.
|
||||
|
||||
ll2utm : ll2utm.c textcolor.c geotranz.a misc.a
|
||||
$(CC) $(CFLAGS) -o $@ $^
|
||||
|
||||
utm2ll : utm2ll.c textcolor.c geotranz.a misc.a
|
||||
$(CC) $(CFLAGS) -o $@ $^
|
||||
|
||||
|
||||
# Convert from log file to GPX.
|
||||
|
||||
log2gpx : log2gpx.c textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -o $@ $^
|
||||
|
||||
|
||||
# Test application to generate sound.
|
||||
|
||||
gen_packets : gen_packets.o ax25_pad.o hdlc_send.o fcs_calc.o gen_tone.o morse.o dtmf.o textcolor.o dsp.o misc.a regex.a
|
||||
$(CC) $(CFLAGS) -o $@ $^
|
||||
|
||||
|
||||
|
||||
# Connected mode sample applications for talking to network TNC with AGW protocol.
|
||||
|
||||
appserver : appserver.o agwlib.o dwsock.o textcolor.o dtime_now.o misc.a
|
||||
$(CC) $(CFLAGS) -o $@ $^ -lwinmm -lws2_32
|
||||
|
||||
|
||||
# ------------------------------------------- Libraries --------------------------------------------
|
||||
|
||||
|
||||
|
||||
# UTM, USNG, MGRS conversions.
|
||||
|
||||
geotranz.a : error_string.o mgrs.o polarst.o tranmerc.o ups.o usng.o utm.o
|
||||
$(AR) -cr $@ $^
|
||||
|
||||
error_string.o : geotranz/error_string.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
mgrs.o : geotranz/mgrs.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
polarst.o : geotranz/polarst.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
tranmerc.o : geotranz/tranmerc.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
ups.o : geotranz/ups.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
usng.o : geotranz/usng.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
utm.o : geotranz/utm.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
|
||||
#
|
||||
# When building for Linux, we use regular expression
|
||||
# functions supplied by the gnu C library.
|
||||
# For the native WIN32 version, we need to use our own copy.
|
||||
# These were copied from http://gnuwin32.sourceforge.net/packages/regex.htm
|
||||
# Consider upgrading from https://www.gnu.org/software/libc/sources.html
|
||||
|
||||
regex.a : regex.o
|
||||
$(AR) -cr $@ $^
|
||||
|
||||
regex.o : regex/regex.c
|
||||
$(CC) $(CFLAGS) -Dbool=int -Dtrue=1 -Dfalse=0 -c -o $@ $^
|
||||
|
||||
|
||||
|
||||
# There are several string functions found in Linux
|
||||
# but not on Windows. Need to provide our own copy.
|
||||
|
||||
misc.a : strsep.o strtok_r.o strcasestr.o strlcpy.o strlcat.o
|
||||
$(AR) -cr $@ $^
|
||||
|
||||
strsep.o : misc/strsep.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
strtok_r.o : misc/strtok_r.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
strcasestr.o : misc/strcasestr.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
strlcpy.o : misc/strlcpy.c
|
||||
$(CC) $(CFLAGS) -I. -c -o $@ $^
|
||||
|
||||
strlcat.o : misc/strlcat.c
|
||||
$(CC) $(CFLAGS) -I. -c -o $@ $^
|
||||
|
||||
|
||||
# --------------------------------- Automated Smoke Test --------------------------------
|
||||
|
||||
|
||||
# Combine some unit tests into a single regression sanity check.
|
||||
|
||||
check : dtest ttest tttexttest pftest tlmtest lltest enctest kisstest pad2test xidtest dtmftest check-modem1200 check-modem300 check-modem9600 check-modem19200 check-modem2400-a check-modem2400-b check-modem2400-g check-modem4800
|
||||
|
||||
# Can we encode and decode at popular data rates?
|
||||
# Verify that single bit fixup increases the count.
|
||||
|
||||
check-modem1200 : gen_packets atest
|
||||
gen_packets -n 100 -o test12.wav
|
||||
atest -F0 -PE -L64 -G72 test12.wav
|
||||
atest -F1 -PE -L70 -G75 test12.wav
|
||||
rm test12.wav
|
||||
|
||||
check-modem300 : gen_packets atest
|
||||
gen_packets -B300 -n 100 -o test3.wav
|
||||
atest -B300 -F0 -L68 -G69 test3.wav
|
||||
atest -B300 -F1 -L71 -G75 test3.wav
|
||||
rm test3.wav
|
||||
|
||||
#FIXME: test full amplitude.
|
||||
|
||||
check-modem9600 : gen_packets atest
|
||||
gen_packets -B9600 -a 170 -o test96.wav
|
||||
sleep 1
|
||||
atest -B9600 -F0 -L4 -G4 test96.wav
|
||||
sleep 1
|
||||
rm test96.wav
|
||||
sleep 1
|
||||
gen_packets -B9600 -n 100 -o test96.wav
|
||||
sleep 1
|
||||
atest -B9600 -F0 -L61 -G65 test96.wav
|
||||
atest -B9600 -F1 -L62 -G66 test96.wav
|
||||
sleep 1
|
||||
rm test96.wav
|
||||
|
||||
check-modem19200 : gen_packets atest
|
||||
gen_packets -r 96000 -B19200 -a 170 -o test19.wav
|
||||
sleep 1
|
||||
atest -B19200 -F0 -L4 test19.wav
|
||||
sleep 1
|
||||
rm test19.wav
|
||||
sleep 1
|
||||
gen_packets -r 96000 -B19200 -n 100 -o test19.wav
|
||||
sleep 1
|
||||
atest -B19200 -F0 -L60 -G64 test19.wav
|
||||
atest -B19200 -F1 -L64 -G68 test19.wav
|
||||
sleep 1
|
||||
rm test19.wav
|
||||
|
||||
check-modem2400-a : gen_packets atest
|
||||
gen_packets -B2400 -j -n 100 -o test24-a.wav
|
||||
sleep 1
|
||||
atest -B2400 -j -F0 -L76 -G80 test24-a.wav
|
||||
atest -B2400 -j -F1 -L84 -G88 test24-a.wav
|
||||
sleep 1
|
||||
rm test24-a.wav
|
||||
|
||||
check-modem2400-b : gen_packets atest
|
||||
gen_packets -B2400 -J -n 100 -o test24-b.wav
|
||||
sleep 1
|
||||
atest -B2400 -J -F0 -L79 -G83 test24-b.wav
|
||||
atest -B2400 -J -F1 -L87 -G91 test24-b.wav
|
||||
sleep 1
|
||||
rm test24-b.wav
|
||||
|
||||
check-modem2400-g : gen_packets atest
|
||||
gen_packets -B2400 -g -n 100 -o test24-g.wav
|
||||
sleep 1
|
||||
atest -B2400 -g -F0 -L99 -G100 test24-g.wav
|
||||
sleep 1
|
||||
rm test24-g.wav
|
||||
|
||||
check-modem4800 : gen_packets atest
|
||||
gen_packets -B4800 -n 100 -o test48.wav
|
||||
sleep 1
|
||||
atest -B4800 -F0 -L70 -G74 test48.wav
|
||||
atest -B4800 -F1 -L79 -G84 test48.wav
|
||||
sleep 1
|
||||
rm test48.wav
|
||||
|
||||
|
||||
# Unit test for demodulators
|
||||
|
||||
atest : atest.c fsk_fast_filter.h demod.c demod_afsk.c demod_psk.c demod_9600.c \
|
||||
dsp.o hdlc_rec.o hdlc_rec2.o multi_modem.o \
|
||||
rrbb.o fcs_calc.o ax25_pad.o decode_aprs.o \
|
||||
dwgpsnmea.o dwgps.o serial_port.o latlong.c \
|
||||
symbols.c tt_text.c textcolor.c telemetry.c dtime_now.o \
|
||||
decode_aprs.o log.o \
|
||||
misc.a regex.a
|
||||
echo " " > tune.h
|
||||
$(CC) $(CFLAGS) -o $@ $^
|
||||
#./atest ..\\direwolf-0.2\\02_Track_2.wav
|
||||
#atest -B 9600 z9.wav
|
||||
#atest za100.wav
|
||||
|
||||
atest9 : atest.c demod.c dsp.c demod_afsk.c demod_psk.c demod_9600.c hdlc_rec.c hdlc_rec2.c multi_modem.c \
|
||||
rrbb.c fcs_calc.c ax25_pad.c decode_aprs.c latlong.c symbols.c textcolor.c telemetry.c dtime_now.o misc.a regex.a \
|
||||
fsk_fast_filter.h
|
||||
echo " " > tune.h
|
||||
$(CC) $(CFLAGS) -o $@ $^
|
||||
./atest9 -B 9600 ../walkabout9600.wav | grep "packets decoded in" >atest.out
|
||||
#./atest9 -B 9600 noise96.wav
|
||||
|
||||
|
||||
# Unit test for inner digipeater algorithm
|
||||
|
||||
.PHONY: dtest
|
||||
dtest : digipeater.c dedupe.c pfilter.c \
|
||||
ax25_pad.o fcs_calc.o tq.o textcolor.o \
|
||||
decode_aprs.o dwgpsnmea.o dwgps.o serial_port.o latlong.o telemetry.o symbols.o tt_text.o misc.a regex.a
|
||||
$(CC) $(CFLAGS) -DDIGITEST -o $@ $^
|
||||
./dtest
|
||||
rm dtest.exe
|
||||
|
||||
# Unit test for APRStt tone seqence parsing.
|
||||
|
||||
.PHONTY: ttest
|
||||
ttest : aprs_tt.c tt_text.c latlong.o textcolor.o geotranz.a misc.a
|
||||
$(CC) $(CFLAGS) -Igeotranz -DTT_MAIN -o $@ $^
|
||||
./ttest
|
||||
rm ttest.exe
|
||||
|
||||
# Unit test for APRStt tone sequence / text conversions.
|
||||
|
||||
.PHONY: tttexttest
|
||||
tttexttest : tt_text.c textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -DTTT_TEST -o $@ $^
|
||||
./tttexttest
|
||||
rm tttexttest.exe
|
||||
|
||||
# Unit test for Packet Filtering.
|
||||
|
||||
.PHONY: pftest
|
||||
pftest : pfilter.c ax25_pad.o textcolor.o fcs_calc.o decode_aprs.o dwgpsnmea.o dwgps.o serial_port.o latlong.o symbols.o telemetry.o tt_text.o misc.a regex.a
|
||||
$(CC) $(CFLAGS) -DPFTEST -o $@ $^
|
||||
./pftest
|
||||
rm pftest.exe
|
||||
|
||||
|
||||
|
||||
# Unit test for telemetry decoding.
|
||||
|
||||
.PHONY: tlmtest
|
||||
tlmtest : telemetry.c ax25_pad.o fcs_calc.o textcolor.o misc.a regex.a
|
||||
$(CC) $(CFLAGS) -DTEST -o $@ $^
|
||||
./tlmtest
|
||||
rm tlmtest.exe
|
||||
|
||||
|
||||
# Unit test for location coordinate conversion.
|
||||
|
||||
.PHONY: lltest
|
||||
lltest : latlong.c textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -DLLTEST -o $@ $^
|
||||
./lltest
|
||||
rm lltest.exe
|
||||
|
||||
# Unit test for encoding position & object report.
|
||||
|
||||
.PHONY: enctest
|
||||
enctest : encode_aprs.c latlong.c textcolor.c misc.a
|
||||
$(CC) $(CFLAGS) -DEN_MAIN -o $@ $^
|
||||
./enctest
|
||||
rm enctest.exe
|
||||
|
||||
|
||||
# Unit test for KISS encapsulation.
|
||||
|
||||
.PHONY: kisstest
|
||||
kisstest : kiss_frame.c
|
||||
$(CC) $(CFLAGS) -DKISSTEST -o $@ $^
|
||||
./kisstest
|
||||
rm kisstest.exe
|
||||
|
||||
|
||||
# Unit test for constructing frames besides UI.
|
||||
|
||||
.PHONY: pad2test
|
||||
pad2test : ax25_pad2.c ax25_pad.c fcs_calc.o textcolor.o regex.a misc.a
|
||||
$(CC) $(CFLAGS) -DPAD2TEST -o $@ $^
|
||||
./pad2test
|
||||
rm pad2test.exe
|
||||
|
||||
# Unit Test for XID frame encode/decode.
|
||||
|
||||
.PHONY: xidtest
|
||||
xidtest : xid.c textcolor.o misc.a
|
||||
$(CC) $(CFLAGS) -DXIDTEST -o $@ $^
|
||||
./xidtest
|
||||
rm xidtest.exe
|
||||
|
||||
# Unit Test for DTMF encode/decode.
|
||||
|
||||
.PHONY: dtmftest
|
||||
dtmftest : dtmf.c textcolor.o
|
||||
$(CC) $(CFLAGS) -DDTMF_TEST -o $@ $^
|
||||
./dtmftest
|
||||
rm dtmftest.exe
|
||||
|
||||
|
||||
# ------------------------------ Other manual testing & experimenting -------------------------------
|
||||
|
||||
|
||||
tnctest : tnctest.c textcolor.o dtime_now.o serial_port.o misc.a
|
||||
$(CC) $(CFLAGS) -o $@ $^ -lwinmm -lws2_32
|
||||
|
||||
tnctest-issue-132 : tnctest-issue-132.c textcolor.o dtime_now.o serial_port.o misc.a
|
||||
$(CC) $(CFLAGS) -o $@ $^ -lwinmm -lws2_32
|
||||
|
||||
|
||||
# For tweaking the demodulator.
|
||||
|
||||
demod.o : tune.h
|
||||
demod_9600.o : tune.h
|
||||
demod_afsk.o : tune.h
|
||||
demod_psk.o : tune.h
|
||||
|
||||
testagc : atest.c demod.c dsp.c demod_afsk.c demod_psk.c demod_9600.o fsk_demod_agc.h \
|
||||
hdlc_rec.o hdlc_rec2.o multi_modem.o \
|
||||
rrbb.o fcs_calc.o ax25_pad.o decode_aprs.o latlong.o symbols.o textcolor.o telemetry.o \
|
||||
dwgpsnmea.o dwgps.o serial_port.o tt_text.o dtime_now.o regex.a misc.a
|
||||
rm -f atest.exe
|
||||
$(CC) $(CFLAGS) -o atest $^
|
||||
./atest -P H+ -F 0 ../01_Track_1.wav ../02_Track_2.wav | grep "packets decoded in" >atest.out
|
||||
echo " " > tune.h
|
||||
|
||||
|
||||
noisy3.wav : gen_packets
|
||||
./gen_packets -B 300 -n 100 -o noisy3.wav
|
||||
|
||||
testagc3 : atest.c demod.c dsp.c demod_afsk.c demod_psk.c demod_9600.c hdlc_rec.c hdlc_rec2.c multi_modem.c \
|
||||
rrbb.c fcs_calc.c ax25_pad.c decode_aprs.c latlong.c symbols.c textcolor.c telemetry.c dtime_now.o regex.a misc.a \
|
||||
tune.h
|
||||
rm -f atest3.exe
|
||||
$(CC) $(CFLAGS) -o atest3 $^
|
||||
./atest3 -B 300 -P D -D 3 noisy3.wav | grep "packets decoded in" >atest.out
|
||||
echo " " > tune.h
|
||||
|
||||
|
||||
noisy96.wav : gen_packets
|
||||
./gen_packets -B 9600 -n 100 -o noisy96.wav
|
||||
|
||||
testagc96 : atest.c fsk_fast_filter.h tune.h demod.c demod_afsk.c demod_psk.c demod_9600.c \
|
||||
dsp.o hdlc_rec.o hdlc_rec2.o multi_modem.o \
|
||||
rrbb.o fcs_calc.o ax25_pad.o decode_aprs.o \
|
||||
dwgpsnmea.o dwgps.o serial_port.o latlong.o \
|
||||
symbols.o tt_text.o textcolor.o telemetry.o dtime_now.o \
|
||||
misc.a regex.a
|
||||
rm -f atest96.exe
|
||||
$(CC) $(CFLAGS) -o atest96 $^
|
||||
./atest96 -B 9600 ../walkabout9600c.wav noisy96.wav zzz16.wav zzz16.wav zzz16.wav zzz8.wav zzz8.wav zzz8.wav | grep "packets decoded in" >atest.out
|
||||
#./atest96 -B 9600 ../walkabout9600c.wav | grep "packets decoded in" >atest.out
|
||||
#./atest96 -B 9600 zzz16.wav zzz8.wav | grep "packets decoded in" >atest.out
|
||||
#./atest96 -B 9600 noisy96.wav | grep "packets decoded in" >atest.out
|
||||
#./atest96 -B 9600 19990303_0225_9600_8bis_22kHz.wav | grep "packets decoded in" >atest.out
|
||||
#./atest96 -B 9600 19990303_0225_9600_16bit_22kHz.wav | grep "packets decoded in" >atest.out
|
||||
#./atest96 -B 9600 -P + z8-22k.wav| grep "packets decoded in" >atest.out
|
||||
#./atest96 -B 9600 test9600.wav | grep "packets decoded in" >atest.out
|
||||
echo " " > tune.h
|
||||
|
||||
testagc24 : atest.c fsk_fast_filter.h tune.h demod.c demod_afsk.c demod_psk.c demod_9600.c \
|
||||
dsp.o hdlc_rec.o hdlc_rec2.o multi_modem.o \
|
||||
rrbb.o fcs_calc.o ax25_pad.o decode_aprs.o \
|
||||
dwgpsnmea.o dwgps.o serial_port.o latlong.o \
|
||||
symbols.o tt_text.o textcolor.o telemetry.o dtime_now.o \
|
||||
misc.a regex.a
|
||||
rm -f atest24.exe
|
||||
sleep 1
|
||||
$(CC) $(CFLAGS) -o atest24mfj $^
|
||||
./atest24 -B 2400 test2400.wav | grep "packets decoded in" >atest.out
|
||||
echo " " > tune.h
|
||||
|
||||
testagc24mfj : atest.c fsk_fast_filter.h tune.h demod.c demod_afsk.c demod_psk.c demod_9600.c \
|
||||
dsp.o hdlc_rec.o hdlc_rec2.o multi_modem.o \
|
||||
rrbb.o fcs_calc.o ax25_pad.o decode_aprs.o \
|
||||
dwgpsnmea.o dwgps.o serial_port.o latlong.o \
|
||||
symbols.o tt_text.o textcolor.o telemetry.o dtime_now.o \
|
||||
misc.a regex.a
|
||||
rm -f atest24mfj.exe
|
||||
sleep 1
|
||||
$(CC) $(CFLAGS) -o atest24mfj $^
|
||||
./atest24mfj -F 1 -B 2400 ../ref-doc/MFJ-2400-PSK/2k4_short.wav
|
||||
echo " " > tune.h
|
||||
|
||||
testagc48 : atest.c fsk_fast_filter.h tune.h demod.c demod_afsk.c demod_psk.c demod_9600.c \
|
||||
dsp.o hdlc_rec.o hdlc_rec2.o multi_modem.o \
|
||||
rrbb.o fcs_calc.o ax25_pad.o decode_aprs.o \
|
||||
dwgpsnmea.o dwgps.o serial_port.o latlong.o \
|
||||
symbols.o tt_text.o textcolor.o telemetry.o dtime_now.o \
|
||||
misc.a regex.a
|
||||
rm -f atest48.exe
|
||||
sleep 1
|
||||
$(CC) $(CFLAGS) -o atest48 $^
|
||||
./atest48 -B 4800 test4800.wav | grep "packets decoded in" >atest.out
|
||||
#./atest48 -B 4800 test4800.wav
|
||||
echo " " > tune.h
|
||||
|
||||
|
||||
# Unit test for IGate
|
||||
|
||||
itest : igate.c textcolor.c ax25_pad.c fcs_calc.c misc.a regex.a
|
||||
$(CC) $(CFLAGS) -DITEST -o $@ $^ -lwinmm -lws2_32
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# Multiple AGWPE network or serial port clients to test TNCs side by side.
|
||||
|
||||
aclients : aclients.c ax25_pad.c fcs_calc.c textcolor.c misc.a regex.a
|
||||
$(CC) $(CFLAGS) -o $@ $^ -lwinmm -lws2_32
|
||||
|
||||
|
||||
# Talk to a KISS TNC.
|
||||
|
||||
# Note: kiss_frame.c has conditional compilation on KISSUTIL.
|
||||
|
||||
kissutil : kissutil.c kiss_frame.c ax25_pad.o fcs_calc.o textcolor.o serial_port.o dwsock.o dtime_now.o misc.a regex.a
|
||||
$(CC) $(CFLAGS) -DKISSUTIL -o $@ $^ -lwinmm -lws2_32
|
||||
|
||||
|
||||
mqtest : aprsmsg.c kiss_frame.c encode_aprs.o ax25_pad.o fcs_calc.o textcolor.o serial_port.o dwsock.o dtime_now.o latlong.o misc.a regex.a
|
||||
$(CC) $(CFLAGS) -DMQTEST -DKISSUTIL -o $@ $^ -lwinmm -lws2_32
|
||||
|
||||
|
||||
|
||||
# Touch Tone to Speech sample application.
|
||||
|
||||
ttcalc : ttcalc.o ax25_pad.o fcs_calc.o textcolor.o misc.a regex.a
|
||||
$(CC) $(CFLAGS) -o $@ $^ -lwinmm -lws2_32
|
||||
|
||||
|
||||
# Send GPS location to KISS TNC each second.
|
||||
|
||||
walk96 : walk96.c dwgps.o dwgpsnmea.o kiss_frame.o \
|
||||
latlong.o encode_aprs.o serial_port.o textcolor.o \
|
||||
ax25_pad.o fcs_calc.o \
|
||||
xmit.o hdlc_send.o gen_tone.o ptt.o tq.o \
|
||||
hdlc_rec.o hdlc_rec2.o rrbb.o dsp.o audio_win.o \
|
||||
multi_modem.o demod.o demod_afsk.o demod_psk.c demod_9600.o rdq.o \
|
||||
server.o morse.o dtmf.o audio_stats.o dtime_now.o dlq.o \
|
||||
regex.a misc.a
|
||||
$(CC) $(CFLAGS) -DWALK96 -o $@ $^ -lwinmm -lws2_32
|
||||
|
||||
|
||||
|
||||
|
||||
#--------------------------------------------------------------
|
||||
|
||||
|
||||
.PHONY: depend
|
||||
depend : $(wildcard *.c)
|
||||
makedepend -f $(lastword $(MAKEFILE_LIST)) -- $(CFLAGS) -- $^
|
||||
|
||||
.PHONY: clean
|
||||
clean :
|
||||
rm -f *.o *.a *.exe fsk_fast_filter.h noisy96.wav
|
||||
echo " " > tune.h
|
||||
|
||||
|
||||
|
||||
# ------------------------------- Packaging for distribution ----------------------
|
||||
|
||||
# Name of zip file for distribution.
|
||||
|
||||
z := $(notdir ${CURDIR})
|
||||
|
||||
|
||||
.PHONY: dist-win
|
||||
dist-win : direwolf.exe decode_aprs.exe text2tt.exe tt2text.exe ll2utm.exe utm2ll.exe \
|
||||
aclients.exe log2gpx.exe gen_packets.exe atest.exe ttcalc.exe kissutil.exe \
|
||||
generic.conf dwespeak.bat \
|
||||
README.md CHANGES.md \
|
||||
doc/User-Guide.pdf \
|
||||
doc/Raspberry-Pi-APRS.pdf \
|
||||
doc/APRStt-Implementation-Notes.pdf
|
||||
rm -f ../$z-win.zip
|
||||
egrep '^C|^W' generic.conf | cut -c2-999 > direwolf.conf
|
||||
unix2dos direwolf.conf
|
||||
cp doc/README.md README-doc.md
|
||||
zip --junk-paths ../$z-win.zip \
|
||||
README.md \
|
||||
CHANGES.md \
|
||||
README-doc.md \
|
||||
doc/2400-4800-PSK-for-APRS-Packet-Radio.pdf \
|
||||
doc/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf \
|
||||
doc/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf \
|
||||
doc/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf \
|
||||
doc/APRS-Telemetry-Toolkit.pdf \
|
||||
doc/APRStt-Implementation-Notes.pdf \
|
||||
doc/APRStt-interface-for-SARTrack.pdf \
|
||||
doc/APRStt-Listening-Example.pdf \
|
||||
doc/Bluetooth-KISS-TNC.pdf \
|
||||
doc/Going-beyond-9600-baud.pdf \
|
||||
doc/Raspberry-Pi-APRS.pdf \
|
||||
doc/Raspberry-Pi-APRS-Tracker.pdf \
|
||||
doc/Raspberry-Pi-SDR-IGate.pdf \
|
||||
doc/Successful-APRS-IGate-Operation.pdf \
|
||||
doc/User-Guide.pdf \
|
||||
doc/WA8LMF-TNC-Test-CD-Results.pdf \
|
||||
doc/Why-is-9600-only-twice-as-fast-as-1200.pdf \
|
||||
LICENSE* \
|
||||
direwolf.conf \
|
||||
direwolf.exe \
|
||||
decode_aprs.exe \
|
||||
tocalls.txt symbols-new.txt symbolsX.txt \
|
||||
text2tt.exe tt2text.exe \
|
||||
ll2utm.exe utm2ll.exe \
|
||||
aclients.exe \
|
||||
log2gpx.exe \
|
||||
gen_packets.exe \
|
||||
atest.exe \
|
||||
ttcalc.exe \
|
||||
kissutil.exe \
|
||||
dwespeak.bat \
|
||||
telemetry-toolkit/*
|
||||
rm README-doc.md
|
||||
|
||||
|
||||
# Reminders if pdf files are not up to date.
|
||||
|
||||
doc/User-Guide.pdf : doc/User-Guide.docx
|
||||
echo "***** User-Guide.pdf is out of date *****"
|
||||
|
||||
doc/Raspberry-Pi-APRS.pdf : doc/Raspberry-Pi-APRS.docx
|
||||
echo "***** Raspberry-Pi-APRS.pdf is out of date *****"
|
||||
|
||||
doc/Raspberry-Pi-APRS-Tracker.pdf : doc/Raspberry-Pi-APRS-Tracker.docx
|
||||
echo "***** Raspberry-Pi-APRS-Tracker.pdf is out of date *****"
|
||||
|
||||
doc/APRStt-Implementation-Notes.pdf : doc/APRStt-Implementation-Notes.docx
|
||||
echo "***** APRStt-Implementation-Notes.pdf is out of date *****"
|
||||
|
||||
doc/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf : doc/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.docx
|
||||
echo "***** A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf is out of date *****"
|
||||
|
||||
doc/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf : doc/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.docx
|
||||
echo "***** A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf is out of date *****"
|
||||
|
||||
doc/APRS-Telemetry-Toolkit.pdf : doc/APRS-Telemetry-Toolkit.docx
|
||||
echo "***** APRS-Telemetry-Toolkit.pdf is out of date *****"
|
||||
|
||||
|
||||
|
||||
.PHONY: backup
|
||||
backup :
|
||||
mkdir /cygdrive/e/backup-cygwin-home/`date +"%Y-%m-%d"`
|
||||
cp -r . /cygdrive/e/backup-cygwin-home/`date +"%Y-%m-%d"`
|
||||
|
||||
|
||||
#
|
||||
# The following is updated by "make depend"
|
||||
#
|
||||
# DO NOT DELETE
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
# empty for the moment
|
|
@ -0,0 +1,10 @@
|
|||
[Desktop Entry]
|
||||
Name=@APPLICATION_NAME@
|
||||
Comment=APRS Soundcard TNC
|
||||
Exec=@APPLICATION_DESKTOP_EXEC@
|
||||
Icon=@CMAKE_PROJECT_NAME@_icon.png
|
||||
StartupNotify=true
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=HamRadio
|
||||
Keywords=Ham Radio;APRS;Soundcard TNC;KISS;AGWPE;AX.25
|
|
@ -0,0 +1 @@
|
|||
MAINICON ICON "direwolf_icon.ico"
|
Before Width: | Height: | Size: 361 KiB After Width: | Height: | Size: 361 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
@ -0,0 +1,16 @@
|
|||
#include <stdint.h>
|
||||
#include <arm_neon.h>
|
||||
#include <stdlib.h>
|
||||
#include <signal.h>
|
||||
|
||||
void signalHandler(int signum) {
|
||||
exit(signum); // SIGILL = 4
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
signal(SIGILL, signalHandler);
|
||||
uint32x4_t x={0};
|
||||
x=veorq_u32(x,x);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <immintrin.h>
|
||||
|
||||
void signalHandler(int signum) {
|
||||
exit(signum); // SIGILL = 4
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
signal(SIGILL, signalHandler);
|
||||
__m256d x = _mm256_setzero_pd();
|
||||
x=_mm256_addsub_pd(x,x);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <immintrin.h>
|
||||
|
||||
void signalHandler(int signum) {
|
||||
exit(signum); // SIGILL = 4
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
signal(SIGILL, signalHandler);
|
||||
__m256i x = _mm256_setzero_si256();
|
||||
x=_mm256_add_epi64 (x,x);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <signal.h>
|
||||
#include <immintrin.h>
|
||||
|
||||
void signalHandler(int signum) {
|
||||
exit(signum); // SIGILL = 4
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
signal(SIGILL, signalHandler);
|
||||
uint64_t x[8] = {0};
|
||||
__m512i y = _mm512_loadu_si512((__m512i*)x);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <emmintrin.h>
|
||||
|
||||
void signalHandler(int signum) {
|
||||
exit(signum); // SIGILL = 4
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
signal(SIGILL, signalHandler);
|
||||
__m128i x = _mm_setzero_si128();
|
||||
x=_mm_add_epi64(x,x);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <emmintrin.h>
|
||||
#include <pmmintrin.h>
|
||||
|
||||
void signalHandler(int signum) {
|
||||
exit(signum); // SIGILL = 4
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
signal(SIGILL, signalHandler);
|
||||
__m128d x = _mm_setzero_pd();
|
||||
x=_mm_addsub_pd(x,x);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <emmintrin.h>
|
||||
#include <smmintrin.h>
|
||||
|
||||
void signalHandler(int signum) {
|
||||
exit(signum); // SIGILL = 4
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
signal(SIGILL, signalHandler);
|
||||
__m128i x = _mm_setzero_si128();
|
||||
__m128i a = _mm_setzero_si128();
|
||||
__m128i b = _mm_setzero_si128();
|
||||
x=_mm_blend_epi16(a,b,4);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <nmmintrin.h>
|
||||
|
||||
void signalHandler(int signum) {
|
||||
exit(signum); // SIGILL = 4
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
signal(SIGILL, signalHandler);
|
||||
unsigned int x=32;
|
||||
x=_mm_crc32_u8(x,4);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
#include <emmintrin.h>
|
||||
#include <tmmintrin.h>
|
||||
|
||||
void signalHandler(int signum) {
|
||||
exit(signum); // SIGILL = 4
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
signal(SIGILL, signalHandler);
|
||||
__m128i x = _mm_setzero_si128();
|
||||
x=_mm_alignr_epi8(x,x,2);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,21 @@
|
|||
if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||
message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||
endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
|
||||
|
||||
file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
|
||||
string(REGEX REPLACE "\n" ";" files "${files}")
|
||||
foreach(file ${files})
|
||||
message(STATUS "Uninstalling $ENV{DESTDIR}${file}")
|
||||
if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
|
||||
exec_program(
|
||||
"@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
|
||||
OUTPUT_VARIABLE rm_out
|
||||
RETURN_VALUE rm_retval
|
||||
)
|
||||
if(NOT "${rm_retval}" STREQUAL 0)
|
||||
message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}")
|
||||
endif(NOT "${rm_retval}" STREQUAL 0)
|
||||
else(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
|
||||
message(STATUS "File $ENV{DESTDIR}${file} does not exist.")
|
||||
endif(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}")
|
||||
endforeach(file)
|
|
@ -0,0 +1,290 @@
|
|||
# Clang or AppleClang (see CMP0025)
|
||||
if(NOT DEFINED C_CLANG AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
set(C_CLANG 1)
|
||||
elseif(NOT DEFINED C_GCC AND CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||
set(C_GCC 1)
|
||||
elseif(NOT DEFINED C_MSVC AND CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
set(C_MSVC 1)
|
||||
endif()
|
||||
|
||||
# Detect current compilation architecture and create standard definitions
|
||||
include(CheckSymbolExists)
|
||||
function(detect_architecture symbol arch)
|
||||
if (NOT DEFINED ARCHITECTURE)
|
||||
set(CMAKE_REQUIRED_QUIET 1)
|
||||
check_symbol_exists("${symbol}" "" ARCHITECTURE_${arch})
|
||||
unset(CMAKE_REQUIRED_QUIET)
|
||||
|
||||
# The output variable needs to be unique across invocations otherwise
|
||||
# CMake's crazy scope rules will keep it defined
|
||||
if (ARCHITECTURE_${arch})
|
||||
set(ARCHITECTURE "${arch}" PARENT_SCOPE)
|
||||
set(ARCHITECTURE_${arch} 1 PARENT_SCOPE)
|
||||
add_definitions(-DARCHITECTURE_${arch}=1)
|
||||
endif()
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
if (NOT ENABLE_GENERIC)
|
||||
if (C_MSVC)
|
||||
detect_architecture("_M_AMD64" x86_64)
|
||||
detect_architecture("_M_IX86" x86)
|
||||
detect_architecture("_M_ARM" ARM)
|
||||
detect_architecture("_M_ARM64" ARM64)
|
||||
else()
|
||||
detect_architecture("__x86_64__" x86_64)
|
||||
detect_architecture("__i386__" x86)
|
||||
detect_architecture("__arm__" ARM)
|
||||
detect_architecture("__aarch64__" ARM64)
|
||||
endif()
|
||||
endif()
|
||||
if (NOT DEFINED ARCHITECTURE)
|
||||
set(ARCHITECTURE "GENERIC")
|
||||
set(ARCHITECTURE_GENERIC 1)
|
||||
add_definitions(-DARCHITECTURE_GENERIC=1)
|
||||
endif()
|
||||
message(STATUS "Target architecture: ${ARCHITECTURE}")
|
||||
|
||||
set(TEST_DIR ${PROJECT_SOURCE_DIR}/cmake/cpu_tests)
|
||||
|
||||
# flag that set the minimum cpu flag requirements
|
||||
# used to create re-distribuitable binary
|
||||
if (${ARCHITECTURE} MATCHES "x86_64|x86" AND (FORCE_SSE OR FORCE_SSSE3 OR FORCE_SSE41))
|
||||
if (FORCE_SSE)
|
||||
set(HAS_SSE ON CACHE BOOL "SSE SIMD enabled")
|
||||
if(C_GCC OR C_CLANG)
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse" )
|
||||
message(STATUS "Use SSE SIMD instructions")
|
||||
add_definitions(-DUSE_SSE)
|
||||
elseif(C_MSVC)
|
||||
#set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:SSE" )
|
||||
#set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:SSE" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||
message(STATUS "Use MSVC SSSE3 SIMD instructions")
|
||||
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||
add_definitions(-DUSE_SSSE3)
|
||||
endif()
|
||||
elseif (FORCE_SSSE3)
|
||||
set(HAS_SSSE3 ON CACHE BOOL "SSSE3 SIMD enabled")
|
||||
if(C_GCC OR C_CLANG)
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mssse3" )
|
||||
message(STATUS "Use SSSE3 SIMD instructions")
|
||||
add_definitions(-DUSE_SSSE3)
|
||||
elseif(C_MSVC)
|
||||
#set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:SSSE3" )
|
||||
#set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:SSSE3" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||
message(STATUS "Use MSVC SSSE3 SIMD instructions")
|
||||
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||
add_definitions(-DUSE_SSSE3)
|
||||
endif()
|
||||
elseif (FORCE_SSE41)
|
||||
set(HAS_SSSE3 ON CACHE BOOL "SSSE3 SIMD enabled")
|
||||
set(HAS_SSE4_1 ON CACHE BOOL "Architecture has SSE 4.1 SIMD enabled")
|
||||
if(C_GCC OR C_CLANG)
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -msse4.1" )
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -msse4.1" )
|
||||
message(STATUS "Use SSE 4.1 SIMD instructions")
|
||||
add_definitions(-DUSE_SSSE3)
|
||||
add_definitions(-DUSE_SSE4_1)
|
||||
elseif(C_MSVC)
|
||||
# seems that from MSVC 2015 comiler doesn't support those flags
|
||||
#set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:SSE4_1" )
|
||||
#set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:SSE4_1" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||
message(STATUS "Use SSE 4.1 SIMD instructions")
|
||||
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||
add_definitions(-DUSE_SSSE3)
|
||||
add_definitions(-DUSE_SSE4_1)
|
||||
endif()
|
||||
endif()
|
||||
else ()
|
||||
if (${ARCHITECTURE} MATCHES "x86_64|x86")
|
||||
if(C_MSVC)
|
||||
try_run(RUN_SSE2 COMPILE_SSE2 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_sse2.cxx" COMPILE_DEFINITIONS /O0)
|
||||
else()
|
||||
try_run(RUN_SSE2 COMPILE_SSE2 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_sse2.cxx" COMPILE_DEFINITIONS -msse2 -O0)
|
||||
endif()
|
||||
if(COMPILE_SSE2 AND RUN_SSE2 EQUAL 0)
|
||||
set(HAS_SSE2 ON CACHE BOOL "Architecture has SSSE2 SIMD enabled")
|
||||
message(STATUS "Use SSE2 SIMD instructions")
|
||||
if(C_GCC OR C_CLANG)
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2" )
|
||||
add_definitions(-DUSE_SSE2)
|
||||
elseif(C_MSVC)
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:SSE2" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:SSE2" )
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||
add_definitions(-DUSE_SSE2)
|
||||
endif()
|
||||
else()
|
||||
set(HAS_SSE2 OFF CACHE BOOL "Architecture does not have SSSE2 SIMD enabled")
|
||||
endif()
|
||||
if(C_MSVC)
|
||||
try_run(RUN_SSSE3 COMPILE_SSSE3 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_ssse3.cxx" COMPILE_DEFINITIONS /O0)
|
||||
else()
|
||||
try_run(RUN_SSSE3 COMPILE_SSSE3 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_ssse3.cxx" COMPILE_DEFINITIONS -mssse3 -O0)
|
||||
endif()
|
||||
if(COMPILE_SSSE3 AND RUN_SSSE3 EQUAL 0)
|
||||
set(HAS_SSSE3 ON CACHE BOOL "Architecture has SSSE3 SIMD enabled")
|
||||
message(STATUS "Use SSSE3 SIMD instructions")
|
||||
if(C_GCC OR C_CLANG)
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mssse3" )
|
||||
add_definitions(-DUSE_SSSE3)
|
||||
elseif(C_MSVC)
|
||||
# seems not present on MSVC 2017
|
||||
#set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:SSSE3" )
|
||||
#set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:SSSE3" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||
add_definitions(-DUSE_SSSE3)
|
||||
endif()
|
||||
else()
|
||||
set(HAS_SSSE3 OFF CACHE BOOL "Architecture does not have SSSE3 SIMD enabled")
|
||||
endif()
|
||||
if(C_MSVC)
|
||||
try_run(RUN_SSE4_1 COMPILE_SSE4_1 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_sse41.cxx" COMPILE_DEFINITIONS /O0)
|
||||
else()
|
||||
try_run(RUN_SSE4_1 COMPILE_SSE4_1 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_sse41.cxx" COMPILE_DEFINITIONS -msse4.1 -O0)
|
||||
endif()
|
||||
if(COMPILE_SSE4_1 AND RUN_SSE4_1 EQUAL 0)
|
||||
set(HAS_SSE4_1 ON CACHE BOOL "Architecture has SSE 4.1 SIMD enabled")
|
||||
message(STATUS "Use SSE 4.1 SIMD instructions")
|
||||
if(C_GCC OR C_CLANG)
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -msse4.1" )
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -msse4.1" )
|
||||
add_definitions(-DUSE_SSE4_1)
|
||||
elseif(C_MSVC)
|
||||
# seems not present on MSVC 2017
|
||||
#set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:SSE4_1" )
|
||||
#set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:SSE4_1" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||
add_definitions(-DUSE_SSE4_1)
|
||||
endif()
|
||||
else()
|
||||
set(HAS_SSE4_1 OFF CACHE BOOL "Architecture does not have SSE 4.1 SIMD enabled")
|
||||
endif()
|
||||
if(C_MSVC)
|
||||
try_run(RUN_SSE4_2 COMPILE_SSE4_2 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_sse42.cxx" COMPILE_DEFINITIONS /O0)
|
||||
else()
|
||||
try_run(RUN_SSE4_2 COMPILE_SSE4_2 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_sse42.cxx" COMPILE_DEFINITIONS -msse4.2 -O0)
|
||||
endif()
|
||||
if(COMPILE_SSE4_2 AND RUN_SSE4_2 EQUAL 0)
|
||||
set(HAS_SSE4_2 ON CACHE BOOL "Architecture has SSE 4.2 SIMD enabled")
|
||||
message(STATUS "Use SSE 4.2 SIMD instructions")
|
||||
if(C_GCC OR C_CLANG)
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -msse4.2" )
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -msse4.2" )
|
||||
add_definitions(-DUSE_SSE4_2)
|
||||
elseif(C_MSVC)
|
||||
# seems not present on MSVC 2017
|
||||
#set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:SSE4_2" )
|
||||
#set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:SSE4_2" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox" )
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||
add_definitions(-DUSE_SSE4_2)
|
||||
endif()
|
||||
else()
|
||||
set(HAS_SSE4_2 OFF CACHE BOOL "Architecture does not have SSE 4.2 SIMD enabled")
|
||||
endif()
|
||||
if(C_MSVC)
|
||||
try_run(RUN_AVX COMPILE_AVX "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_avx.cxx" COMPILE_DEFINITIONS /O0)
|
||||
else()
|
||||
try_run(RUN_AVX COMPILE_AVX "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_avx.cxx" COMPILE_DEFINITIONS -mavx -O0)
|
||||
endif()
|
||||
if(COMPILE_AVX AND RUN_AVX EQUAL 0)
|
||||
set(HAS_AVX ON CACHE BOOL "Architecture has AVX SIMD enabled")
|
||||
message(STATUS "Use AVX SIMD instructions")
|
||||
if(C_GCC OR C_CLANG)
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -mavx" )
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -mavx" )
|
||||
add_definitions(-DUSE_AVX)
|
||||
elseif(C_MSVC)
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:AVX" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:AVX" )
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||
add_definitions(-DUSE_AVX)
|
||||
endif()
|
||||
else()
|
||||
set(HAS_AVX OFF CACHE BOOL "Architecture does not have AVX SIMD enabled")
|
||||
endif()
|
||||
if(C_MSVC)
|
||||
try_run(RUN_AVX2 COMPILE_AVX2 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_avx2.cxx" COMPILE_DEFINITIONS /O0)
|
||||
else()
|
||||
try_run(RUN_AVX2 COMPILE_AVX2 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_avx2.cxx" COMPILE_DEFINITIONS -mavx2 -O0)
|
||||
endif()
|
||||
if(COMPILE_AVX2 AND RUN_AVX2 EQUAL 0)
|
||||
set(HAS_AVX2 ON CACHE BOOL "Architecture has AVX2 SIMD enabled")
|
||||
message(STATUS "Use AVX2 SIMD instructions")
|
||||
if(C_GCC OR C_CLANG)
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -mavx2" )
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -mavx2" )
|
||||
add_definitions(-DUSE_AVX2)
|
||||
elseif(C_MSVC)
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:AVX2" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:AVX2" )
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||
add_definitions(-DUSE_AVX2)
|
||||
endif()
|
||||
else()
|
||||
set(HAS_AVX2 OFF CACHE BOOL "Architecture does not have AVX2 SIMD enabled")
|
||||
endif()
|
||||
if(C_MSVC)
|
||||
try_run(RUN_AVX512 COMPILE_AVX512 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_avx512.cxx" COMPILE_DEFINITIONS /O0)
|
||||
else()
|
||||
try_run(RUN_AVX512 COMPILE_AVX512 "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_x86_avx512.cxx" COMPILE_DEFINITIONS -mavx512f -O0)
|
||||
endif()
|
||||
if(COMPILE_AVX512 AND RUN_AVX512 EQUAL 0)
|
||||
set(HAS_AVX512 ON CACHE BOOL "Architecture has AVX512 SIMD enabled")
|
||||
message(STATUS "Use AVX512 SIMD instructions")
|
||||
if(C_GCC OR C_CLANG)
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -mavx512f" )
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -mavx512f" )
|
||||
add_definitions(-DUSE_AVX512)
|
||||
elseif(C_MSVC)
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /arch:AVX512" )
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /Oi /GL /Ot /Ox /arch:AVX512" )
|
||||
set( CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /LTCG" )
|
||||
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
|
||||
add_definitions(-DUSE_AVX512)
|
||||
endif()
|
||||
else()
|
||||
set(HAS_AVX512 OFF CACHE BOOL "Architecture does not have AVX512 SIMD enabled")
|
||||
endif()
|
||||
elseif(ARCHITECTURE_ARM)
|
||||
if(C_MSVC)
|
||||
try_run(RUN_NEON COMPILE_NEON "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_arm_neon.cxx" COMPILE_DEFINITIONS /O0)
|
||||
else()
|
||||
try_run(RUN_NEON COMPILE_NEON "${CMAKE_BINARY_DIR}/tmp" "${TEST_DIR}/test_arm_neon.cxx" COMPILE_DEFINITIONS -mfpu=neon -O0)
|
||||
endif()
|
||||
if(COMPILE_NEON AND RUN_NEON EQUAL 0)
|
||||
set(HAS_NEON ON CACHE BOOL "Architecture has NEON SIMD enabled")
|
||||
message(STATUS "Use NEON SIMD instructions")
|
||||
if(C_GCC OR C_CLANG)
|
||||
set( CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -mfpu=neon" )
|
||||
set( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -mfpu=neon" )
|
||||
add_definitions(-DUSE_NEON)
|
||||
endif()
|
||||
else()
|
||||
set(HAS_NEON OFF CACHE BOOL "Architecture does not have NEON SIMD enabled")
|
||||
endif()
|
||||
elseif(ARCHITECTURE_ARM64)
|
||||
# Advanced SIMD (aka NEON) is mandatory for AArch64
|
||||
set(HAS_NEON ON CACHE BOOL "Architecture has NEON SIMD enabled")
|
||||
message(STATUS "Use NEON SIMD instructions")
|
||||
add_definitions(-DUSE_NEON)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# clear binary test folder
|
||||
FILE(REMOVE_RECURSE ${CMAKE_BINARY_DIR}/tmp)
|
|
@ -0,0 +1,13 @@
|
|||
# Clang or AppleClang (see CMP0025)
|
||||
if(NOT DEFINED C_CLANG AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
||||
set(C_CLANG 1)
|
||||
elseif(NOT DEFINED C_GCC AND CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
||||
set(C_GCC 1)
|
||||
elseif(NOT DEFINED C_MSVC AND CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
set(C_MSVC 1)
|
||||
if(MSVC_VERSION GREATER 1910 AND MSVC_VERSION LESS 1919)
|
||||
set(VS2017 ON)
|
||||
elseif(MSVC_VERSION GREATER 1899 AND MSVC_VERSION LESS 1910)
|
||||
set(VS2015 ON)
|
||||
endif()
|
||||
endif()
|
|
@ -0,0 +1,87 @@
|
|||
# - Try to find GPSD
|
||||
# Once done this will define
|
||||
#
|
||||
# GPSD_FOUND - system has GPSD
|
||||
# GPSD_INCLUDE_DIRS - the GPSD include directory
|
||||
# GPSD_LIBRARIES - Link these to use GPSD
|
||||
# GPSD_DEFINITIONS - Compiler switches required for using GPSD
|
||||
#
|
||||
# Copyright (c) 2006 Andreas Schneider <mail@cynapses.org>
|
||||
#
|
||||
# Redistribution and use is allowed according to the terms of the New
|
||||
# BSD license.
|
||||
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
|
||||
#
|
||||
|
||||
set(GPSD_ROOT_DIR
|
||||
"${GPSD_ROOT_DIR}"
|
||||
CACHE
|
||||
PATH
|
||||
"Directory to search for gpsd")
|
||||
|
||||
find_package(PkgConfig QUIET)
|
||||
if(PKG_CONFIG_FOUND)
|
||||
pkg_check_modules(PC_GPSD libgps)
|
||||
endif()
|
||||
|
||||
if (GPSD_LIBRARIES AND GPSD_INCLUDE_DIRS)
|
||||
# in cache already
|
||||
set(GPSD_FOUND TRUE)
|
||||
else (GPSD_LIBRARIES AND GPSD_INCLUDE_DIRS)
|
||||
find_path(GPSD_INCLUDE_DIRS
|
||||
NAMES
|
||||
gps.h
|
||||
PATHS
|
||||
/usr/include
|
||||
/usr/local/include
|
||||
/opt/local/include
|
||||
/sw/include
|
||||
/usr/include/gps
|
||||
/usr/local/include/gps
|
||||
/opt/local/include/gps
|
||||
/sw/include/gps
|
||||
HINTS
|
||||
${PC_GPSD_INCLUDEDIR}
|
||||
${GPSD_ROOT_DIR}
|
||||
)
|
||||
|
||||
# debian uses version suffixes
|
||||
# add suffix evey new release
|
||||
find_library(GPSD_LIBRARIES
|
||||
NAMES
|
||||
gps
|
||||
PATHS
|
||||
/usr/lib64
|
||||
/usr/lib
|
||||
/usr/local/lib
|
||||
/opt/local/lib
|
||||
/sw/lib
|
||||
HINTS
|
||||
${PC_GPSD_LIBDIR}
|
||||
${GPSD_ROOT_DIR}
|
||||
)
|
||||
|
||||
if (GPSD_INCLUDE_DIRS AND GPSD_LIBRARIES)
|
||||
set(GPSD_FOUND TRUE)
|
||||
endif (GPSD_INCLUDE_DIRS AND GPSD_LIBRARIES)
|
||||
|
||||
if (GPSD_FOUND)
|
||||
if (NOT GPSD_FIND_QUIETLY)
|
||||
message(STATUS "Found GPSD: ${GPSD_LIBRARIES}")
|
||||
endif (NOT GPSD_FIND_QUIETLY)
|
||||
else (GPSD_FOUND)
|
||||
if (GPSD_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "Could not find GPSD")
|
||||
endif (GPSD_FIND_REQUIRED)
|
||||
endif (GPSD_FOUND)
|
||||
|
||||
# show the GPSD_INCLUDE_DIRS and GPSD_LIBRARIES variables only in the advanced view
|
||||
mark_as_advanced(GPSD_INCLUDE_DIRS GPSD_LIBRARIES)
|
||||
|
||||
endif (GPSD_LIBRARIES AND GPSD_INCLUDE_DIRS)
|
||||
|
||||
if (WIN32)
|
||||
set(GPSD_FOUND FALSE)
|
||||
set(GPSD_LIBRARIES "")
|
||||
set(GPSD_INCLUDE_DIRS "")
|
||||
endif (WIN32)
|
|
@ -0,0 +1,64 @@
|
|||
# - Try to find Portaudio
|
||||
# Once done this will define
|
||||
#
|
||||
# PORTAUDIO_FOUND - system has Portaudio
|
||||
# PORTAUDIO_INCLUDE_DIRS - the Portaudio include directory
|
||||
# PORTAUDIO_LIBRARIES - Link these to use Portaudio
|
||||
|
||||
set(PORTAUDIO_ROOT_DIR
|
||||
"${PORTAUDIO_ROOT_DIR}"
|
||||
CACHE
|
||||
PATH
|
||||
"Directory to search for portaudio")
|
||||
|
||||
find_package(PkgConfig QUIET)
|
||||
if(PKG_CONFIG_FOUND)
|
||||
pkg_check_modules(PC_PORTAUDIO portaudio-2.0)
|
||||
endif()
|
||||
|
||||
find_path(PORTAUDIO_INCLUDE_DIRS
|
||||
NAMES
|
||||
portaudio.h
|
||||
PATHS
|
||||
/usr/local/include
|
||||
/usr/include
|
||||
/opt/local/include
|
||||
HINTS
|
||||
${PC_PORTAUDIO_INCLUDEDIR}
|
||||
${PORTAUDIO_ROOT_DIR}
|
||||
)
|
||||
|
||||
find_library(PORTAUDIO_LIBRARIES
|
||||
NAMES
|
||||
portaudio
|
||||
PATHS
|
||||
/usr/local/lib
|
||||
/usr/lib
|
||||
/usr/lib64
|
||||
/opt/local/lib
|
||||
HINTS
|
||||
${PC_PORTAUDIO_LIBDIR}
|
||||
${PORTAUDIO_ROOT_DIR}
|
||||
)
|
||||
|
||||
mark_as_advanced(PORTAUDIO_INCLUDE_DIRS PORTAUDIO_LIBRARIES)
|
||||
|
||||
# Found PORTAUDIO, but it may be version 18 which is not acceptable.
|
||||
if(EXISTS ${PORTAUDIO_INCLUDE_DIRS}/portaudio.h)
|
||||
include(CheckCXXSourceCompiles)
|
||||
set(CMAKE_REQUIRED_INCLUDES_SAVED ${CMAKE_REQUIRED_INCLUDES})
|
||||
set(CMAKE_REQUIRED_INCLUDES ${PORTAUDIO_INCLUDE_DIRS})
|
||||
CHECK_CXX_SOURCE_COMPILES(
|
||||
"#include <portaudio.h>\nPaDeviceIndex pa_find_device_by_name(const char *name); int main () {return 0;}"
|
||||
PORTAUDIO2_FOUND)
|
||||
set(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES_SAVED})
|
||||
unset(CMAKE_REQUIRED_INCLUDES_SAVED)
|
||||
if(PORTAUDIO2_FOUND)
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PORTAUDIO DEFAULT_MSG PORTAUDIO_INCLUDE_DIRS PORTAUDIO_LIBRARIES)
|
||||
else(PORTAUDIO2_FOUND)
|
||||
message(STATUS
|
||||
" portaudio.h not compatible (requires API 2.0)")
|
||||
set(PORTAUDIO_FOUND FALSE)
|
||||
endif(PORTAUDIO2_FOUND)
|
||||
endif()
|
|
@ -0,0 +1,67 @@
|
|||
# - Try to find Hamlib
|
||||
#
|
||||
# HAMLIB_FOUND - system has Hamlib
|
||||
# HAMLIB_LIBRARIES - location of the library for hamlib
|
||||
# HAMLIB_INCLUDE_DIRS - location of the include files for hamlib
|
||||
#
|
||||
# Requires these CMake modules:
|
||||
# FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
|
||||
#
|
||||
# Original Author:
|
||||
# 2019 Davide Gerhard <rainbow@irh.it>
|
||||
|
||||
set(HAMLIB_ROOT_DIR
|
||||
"${HAMLIB_ROOT_DIR}"
|
||||
CACHE
|
||||
PATH
|
||||
"Directory to search for hamlib")
|
||||
|
||||
find_package(PkgConfig QUIET)
|
||||
if(PKG_CONFIG_FOUND)
|
||||
pkg_check_modules(PC_HAMLIB hamlib)
|
||||
endif()
|
||||
|
||||
find_path(HAMLIB_INCLUDE_DIR
|
||||
NAMES hamlib/rig.h
|
||||
PATHS
|
||||
/usr/include
|
||||
/usr/local/include
|
||||
/opt/local/include
|
||||
HINTS
|
||||
${PC_HAMLIB_INCLUDEDIR}
|
||||
${HAMLIB_ROOT_DIR}
|
||||
)
|
||||
|
||||
find_library(HAMLIB_LIBRARY
|
||||
NAMES hamlib
|
||||
PATHS
|
||||
/usr/lib64/hamlib
|
||||
/usr/lib/hamlib
|
||||
/usr/lib64
|
||||
/usr/lib
|
||||
/usr/local/lib64/hamlib
|
||||
/usr/local/lib/hamlib
|
||||
/usr/local/lib64
|
||||
/usr/local/lib
|
||||
/opt/local/lib
|
||||
/opt/local/lib/hamlib
|
||||
HINTS
|
||||
${PC_HAMLIB_LIBDIR}
|
||||
${HAMLIB_ROOT_DIR}
|
||||
|
||||
)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(HAMLIB
|
||||
DEFAULT_MSG
|
||||
HAMLIB_LIBRARY
|
||||
HAMLIB_INCLUDE_DIR
|
||||
)
|
||||
|
||||
if(HAMLIB_FOUND)
|
||||
list(APPEND HAMLIB_LIBRARIES ${HAMLIB_LIBRARY})
|
||||
list(APPEND HAMLIB_INCLUDE_DIRS ${HAMLIB_INCLUDE_DIR})
|
||||
mark_as_advanced(HAMLIB_ROOT_DIR)
|
||||
endif()
|
||||
|
||||
mark_as_advanced(HAMLIB_INCLUDE_DIR HAMLIB_LIBRARY)
|
|
@ -0,0 +1,76 @@
|
|||
# - try to find the udev library
|
||||
#
|
||||
# Cache Variables: (probably not for direct use in your scripts)
|
||||
# UDEV_INCLUDE_DIR
|
||||
# UDEV_SOURCE_DIR
|
||||
# UDEV_LIBRARY
|
||||
#
|
||||
# Non-cache variables you might use in your CMakeLists.txt:
|
||||
# UDEV_FOUND
|
||||
# UDEV_INCLUDE_DIRS
|
||||
# UDEV_LIBRARIES
|
||||
#
|
||||
# Requires these CMake modules:
|
||||
# FindPackageHandleStandardArgs (known included with CMake >=2.6.2)
|
||||
#
|
||||
# Original Author:
|
||||
# 2014 Kevin M. Godby <kevin@godby.org>
|
||||
#
|
||||
# Distributed under the Boost Software License, Version 1.0.
|
||||
# (See accompanying file LICENSE_1_0.txt or copy at
|
||||
# http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
set(UDEV_ROOT_DIR
|
||||
"${UDEV_ROOT_DIR}"
|
||||
CACHE
|
||||
PATH
|
||||
"Directory to search for udev")
|
||||
|
||||
find_package(PkgConfig QUIET)
|
||||
if(PKG_CONFIG_FOUND)
|
||||
pkg_check_modules(PC_LIBUDEV libudev)
|
||||
endif()
|
||||
|
||||
find_library(UDEV_LIBRARY
|
||||
NAMES
|
||||
udev
|
||||
PATHS
|
||||
${PC_LIBUDEV_LIBRARY_DIRS}
|
||||
${PC_LIBUDEV_LIBDIR}
|
||||
HINTS
|
||||
"${UDEV_ROOT_DIR}"
|
||||
PATH_SUFFIXES
|
||||
lib
|
||||
)
|
||||
|
||||
get_filename_component(_libdir "${UDEV_LIBRARY}" PATH)
|
||||
|
||||
find_path(UDEV_INCLUDE_DIR
|
||||
NAMES
|
||||
libudev.h
|
||||
PATHS
|
||||
${PC_LIBUDEV_INCLUDE_DIRS}
|
||||
${PC_LIBUDEV_INCLUDEDIR}
|
||||
HINTS
|
||||
"${_libdir}"
|
||||
"${_libdir}/.."
|
||||
"${UDEV_ROOT_DIR}"
|
||||
PATH_SUFFIXES
|
||||
include
|
||||
)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(UDEV
|
||||
DEFAULT_MSG
|
||||
UDEV_LIBRARY
|
||||
UDEV_INCLUDE_DIR
|
||||
)
|
||||
|
||||
if(UDEV_FOUND)
|
||||
list(APPEND UDEV_LIBRARIES ${UDEV_LIBRARY})
|
||||
list(APPEND UDEV_INCLUDE_DIRS ${UDEV_INCLUDE_DIR})
|
||||
mark_as_advanced(UDEV_ROOT_DIR)
|
||||
endif()
|
||||
|
||||
mark_as_advanced(UDEV_INCLUDE_DIR
|
||||
UDEV_LIBRARY)
|
|
@ -0,0 +1,48 @@
|
|||
# generate conf per platform
|
||||
file(READ "${CUSTOM_CONF_DIR}/generic.conf" file_content)
|
||||
|
||||
if(LINUX)
|
||||
string(REGEX REPLACE "\n%W%[^\n]*" "" file_content "${file_content}")
|
||||
string(REGEX REPLACE "\n%M%[^\n]*" "" file_content "${file_content}")
|
||||
string(REGEX REPLACE "\n%L%([^\n]*)" "\n\\1" file_content "${file_content}")
|
||||
elseif(WIN32)
|
||||
string(REGEX REPLACE "\n%M%[^\n]*" "" file_content "${file_content}")
|
||||
string(REGEX REPLACE "\n%L%[^\n]*" "" file_content "${file_content}")
|
||||
string(REGEX REPLACE "\n%W%([^\n]*)" "\n\\1" file_content "${file_content}")
|
||||
else() # macOS FreeBSD OpenBSD
|
||||
string(REGEX REPLACE "\n%W%[^\n]*" "" file_content "${file_content}")
|
||||
string(REGEX REPLACE "\n%L%[^\n]*" "" file_content "${file_content}")
|
||||
string(REGEX REPLACE "\n%M%([^\n]*)" "\n\\1" file_content "${file_content}")
|
||||
endif()
|
||||
|
||||
# remove remark
|
||||
string(REGEX REPLACE "\n%R%[^\n]*" "" file_content "${file_content}")
|
||||
|
||||
# clear common lines
|
||||
string(REGEX REPLACE "\n%C%([^\n]*)" "\n\\1" file_content "${file_content}")
|
||||
string(REGEX REPLACE "^%C%([^\n]*)" "\\1" file_content "${file_content}")
|
||||
|
||||
file(WRITE "${CMAKE_BINARY_DIR}/direwolf.conf" "${file_content}")
|
||||
|
||||
|
||||
# install udev rules for CM108
|
||||
if(LINUX)
|
||||
install(FILES "${CUSTOM_CONF_DIR}/99-direwolf-cmedia.rules" DESTINATION etc/udev/rules.d/)
|
||||
endif()
|
||||
|
||||
install(FILES "${CMAKE_BINARY_DIR}/direwolf.conf" DESTINATION share/doc/${CMAKE_PROJECT_NAME}/examples)
|
||||
install(FILES "${CUSTOM_CONF_DIR}/sdr.conf" DESTINATION share/doc/${CMAKE_PROJECT_NAME}/examples)
|
||||
|
||||
# Put sample configuration & startup files in home directory.
|
||||
# This step would be done as ordinary user.
|
||||
# Some people like to put the direwolf config file in /etc/ax25.
|
||||
# Note that all of these are also in $(DESTDIR)/share/doc/direwolf/examples/.
|
||||
add_custom_target(install-conf-conf
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_BINARY_DIR}/direwolf.conf" ~
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${CUSTOM_CONF_DIR}/sdr.conf" ~
|
||||
)
|
||||
|
||||
if(LINUX)
|
||||
add_custom_target(install-conf)
|
||||
add_dependencies(install-conf install-conf-conf install-conf-scripts install-conf-telemetry)
|
||||
endif()
|
|
@ -0,0 +1,92 @@
|
|||
#
|
||||
# The destination field is often used to identify the manufacturer/model.
|
||||
# These are not hardcoded into Dire Wolf. Instead they are read from
|
||||
# a file called tocalls.txt at application start up time.
|
||||
#
|
||||
# The original permanent symbols are built in but the "new" symbols,
|
||||
# using overlays, are often updated. These are also read from files.
|
||||
#
|
||||
# You can obtain an updated copy by typing "make data-update".
|
||||
# This is not part of the normal build process. You have to do this explicitly.
|
||||
#
|
||||
# The locations below appear to be the most recent.
|
||||
# The copy at http://www.aprs.org/tocalls.txt is out of date.
|
||||
#
|
||||
|
||||
include(ExternalProject)
|
||||
|
||||
set(TOCALLS_TXT "tocalls.txt")
|
||||
set(TOCALLS_TXT_BKP "tocalls.txt.old")
|
||||
set(TOCALLS_URL "http://www.aprs.org/aprs11/tocalls.txt")
|
||||
set(SYMBOLS-NEW_TXT "symbols-new.txt")
|
||||
set(SYMBOLS-NEW_TXT_BKP "symbols-new.txt.old")
|
||||
set(SYMBOLS-NEW_URL "http://www.aprs.org/symbols/symbols-new.txt")
|
||||
set(SYMBOLSX_TXT "symbolsX.txt")
|
||||
set(SYMBOLSX_TXT_BKP "symbolsX.txt.old")
|
||||
set(SYMBOLSX_URL "http://www.aprs.org/symbols/symbolsX.txt")
|
||||
set(CUSTOM_BINARY_DATA_DIR "${CMAKE_BINARY_DIR}/data")
|
||||
|
||||
file(COPY "${CUSTOM_DATA_DIR}/${TOCALLS_TXT}" DESTINATION "${CUSTOM_BINARY_DATA_DIR}")
|
||||
file(COPY "${CUSTOM_DATA_DIR}/${SYMBOLS-NEW_TXT}" DESTINATION "${CUSTOM_BINARY_DATA_DIR}")
|
||||
file(COPY "${CUSTOM_DATA_DIR}/${SYMBOLSX_TXT}" DESTINATION "${CUSTOM_BINARY_DATA_DIR}")
|
||||
|
||||
add_custom_target(data_rename
|
||||
COMMAND ${CMAKE_COMMAND} -E rename "${CUSTOM_BINARY_DATA_DIR}/${TOCALLS_TXT}" "${CUSTOM_BINARY_DATA_DIR}/${TOCALLS_TXT_BKP}"
|
||||
COMMAND ${CMAKE_COMMAND} -E rename "${CUSTOM_BINARY_DATA_DIR}/${SYMBOLS-NEW_TXT}" "${CUSTOM_BINARY_DATA_DIR}/${SYMBOLS-NEW_TXT_BKP}"
|
||||
COMMAND ${CMAKE_COMMAND} -E rename "${CUSTOM_BINARY_DATA_DIR}/${SYMBOLSX_TXT}" "${CUSTOM_BINARY_DATA_DIR}/${SYMBOLSX_TXT_BKP}"
|
||||
)
|
||||
|
||||
ExternalProject_Add(download_tocalls
|
||||
DEPENDS data_rename
|
||||
URL ${TOCALLS_URL}
|
||||
PREFIX ""
|
||||
DOWNLOAD_DIR "${CUSTOM_BINARY_DATA_DIR}"
|
||||
DOWNLOAD_NAME "${TOCALLS_TXT}"
|
||||
DOWNLOAD_NO_EXTRACT 0
|
||||
EXCLUDE_FROM_ALL 1
|
||||
UPDATE_COMMAND ""
|
||||
PATCH_COMMAND ""
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ""
|
||||
INSTALL_COMMAND ""
|
||||
TEST_COMMAND ""
|
||||
)
|
||||
|
||||
ExternalProject_Add(download_symbols-new
|
||||
DEPENDS data_rename
|
||||
URL ${SYMBOLS-NEW_URL}
|
||||
PREFIX ""
|
||||
DOWNLOAD_DIR "${CUSTOM_BINARY_DATA_DIR}"
|
||||
DOWNLOAD_NAME "${SYMBOLS-NEW_TXT}"
|
||||
DOWNLOAD_NO_EXTRACT 0
|
||||
EXCLUDE_FROM_ALL 1
|
||||
UPDATE_COMMAND ""
|
||||
PATCH_COMMAND ""
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ""
|
||||
INSTALL_COMMAND ""
|
||||
TEST_COMMAND ""
|
||||
)
|
||||
|
||||
ExternalProject_Add(download_symbolsx
|
||||
DEPENDS data_rename
|
||||
URL ${SYMBOLSX_URL}
|
||||
PREFIX ""
|
||||
DOWNLOAD_DIR "${CUSTOM_BINARY_DATA_DIR}"
|
||||
DOWNLOAD_NAME "${SYMBOLSX_TXT}"
|
||||
DOWNLOAD_NO_EXTRACT 0
|
||||
EXCLUDE_FROM_ALL 1
|
||||
UPDATE_COMMAND ""
|
||||
PATCH_COMMAND ""
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND ""
|
||||
INSTALL_COMMAND ""
|
||||
TEST_COMMAND ""
|
||||
)
|
||||
|
||||
add_custom_target(data-update)
|
||||
add_dependencies(data-update data_rename download_tocalls download_symbols-new download_symbolsx)
|
||||
|
||||
install(FILES "${CUSTOM_BINARY_DATA_DIR}/${TOCALLS_TXT}" DESTINATION share/${PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_BINARY_DATA_DIR}/${SYMBOLS-NEW_TXT}" DESTINATION share/${PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_BINARY_DATA_DIR}/${SYMBOLSX_TXT}" DESTINATION share/${PROJECT_NAME})
|
|
@ -0,0 +1,5 @@
|
|||
In order to start direwolf as a service the configuration file
|
||||
/etc/direwolf.conf needs to exist. Otherwise attempting to start the service
|
||||
returns an 'Assertion failed' error. An example configuration file which may be
|
||||
used as a model can be found in
|
||||
/usr/share/doc/direwolf/examples/direwolf.conf.gz
|
|
@ -0,0 +1 @@
|
|||
../CHANGES.md
|
|
@ -0,0 +1 @@
|
|||
10
|
|
@ -0,0 +1,30 @@
|
|||
Source: direwolf
|
||||
Maintainer: Debian Hamradio Maintainers <debian-hams@lists.debian.org>
|
||||
Uploaders: Iain R. Learmonth <irl@debian.org>
|
||||
Section: hamradio
|
||||
Priority: optional
|
||||
Build-Depends: debhelper (>= 9),
|
||||
libasound2-dev,
|
||||
libgps-dev,
|
||||
libhamlib-dev,
|
||||
dh-systemd
|
||||
Standards-Version: 4.1.0
|
||||
Vcs-Browser: https://anonscm.debian.org/cgit/pkg-hamradio/direwolf.git/
|
||||
Vcs-Git: https://anonscm.debian.org/git/pkg-hamradio/direwolf.git
|
||||
Homepage: https://github.com/wb2osz/direwolf
|
||||
|
||||
Package: direwolf
|
||||
Architecture: alpha amd64 arm64 armel armhf i386 mipsel ppc64el sh4 x32
|
||||
Depends: ${shlibs:Depends},
|
||||
${misc:Depends},
|
||||
adduser,
|
||||
libhamlib2
|
||||
Suggests: gpsd, libhamlib-utils
|
||||
Breaks: direwolf-docs (<< 1.1-1)
|
||||
Replaces: direwolf-docs (<< 1.1-1)
|
||||
Description: Soundcard TNC for APRS
|
||||
Dire Wolf is a software "soundcard" modem/TNC and APRS encoder/decoder. It can
|
||||
be used stand-alone to receive APRS messages, as a digipeater, APRStt gateway,
|
||||
or Internet Gateway (IGate). It can also be used as a virtual TNC for other
|
||||
applications such as APRSIS32, UI-View32, Xastir, APRS-TW, YAAC, UISS, Linux
|
||||
AX25, SARTrack, and many others.
|
|
@ -0,0 +1,176 @@
|
|||
Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: direwolf
|
||||
Files-Excluded: doc/*.pdf
|
||||
Source: https://github.com/wb2osz/direwolf
|
||||
Comment:
|
||||
The files in misc/ are copied directly from the Cygwin source code. These are
|
||||
listed here as dual licensed as they are both part of the Cygwin distribution
|
||||
and originally part of BSD. See misc/README-dire-wolf.txt for more information.
|
||||
.
|
||||
Please see ftp-master's comments on this here:
|
||||
https://lists.debian.org/debian-hams/2014/09/msg00063.html
|
||||
https://lists.debian.org/debian-hams/2014/10/msg00003.html
|
||||
|
||||
Files: *
|
||||
Copyright: (C) 2011-2014 John Langner WB2OSZ
|
||||
License: GPL-2+
|
||||
|
||||
Files: geotranz/*
|
||||
Copyright: National Geospatial-Intelligence Agency
|
||||
License: Permissive-NGA
|
||||
|
||||
Files: regex/*
|
||||
Copyright: (C) 2002, 2003, 2005 Free Software Foundation, Inc.
|
||||
License: LGPL-2.1+
|
||||
|
||||
Files: misc/strcasestr.c
|
||||
Copyright:
|
||||
(C) 1990, 1993 The Regents of the University of California
|
||||
(C) RedHat
|
||||
License: BSD-4-clause or GPL-2+
|
||||
|
||||
Files: misc/strtok_r.c misc/strsep.c
|
||||
Copyright:
|
||||
(C) 1988 Regents of the University of California
|
||||
(C) RedHat
|
||||
License: BSD-3-clause or GPL-2+
|
||||
|
||||
Files: debian/*
|
||||
Copyright: (C) 2014 Iain R. Learmonth <irl@fsfe.org>
|
||||
License: GPL-2+
|
||||
|
||||
License: BSD-3-clause
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
.
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
.
|
||||
3. Neither the name of the University nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
.
|
||||
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGE.
|
||||
|
||||
License: BSD-4-clause
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
.
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
.
|
||||
3. All advertising materials mentioning features or use of this software
|
||||
must display the following acknowledgement:
|
||||
This product includes software developed by the University of
|
||||
California, Berkeley and its contributors.
|
||||
.
|
||||
4. Neither the name of the University nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software
|
||||
without specific prior written permission.
|
||||
.
|
||||
THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
SUCH DAMAGE.
|
||||
|
||||
License: GPL-2+
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
.
|
||||
On Debian systems, a copy of the full license text is available in
|
||||
/usr/share/common-licenses/GPL-2.
|
||||
|
||||
License: LGPL-2.1+
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
.
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
.
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
.
|
||||
On Debian systems, a copy of the full license text is available in
|
||||
/usr/share/common-licenses/LGPL-2.1.
|
||||
|
||||
License: Permissive-NGA
|
||||
1. The GEOTRANS source code ("the software") is provided free of charge by the
|
||||
National Geospatial-Intelligence Agency (NGA) of the United States Department
|
||||
of Defense. Although NGA makes no copyright claim under Title 17 U.S.C., NGA
|
||||
claims copyrights in the source code under other legal regimes. NGA hereby
|
||||
grants to each user of the software a license to use and distribute the
|
||||
software, and develop derivative works.
|
||||
.
|
||||
2. NGA requests that products developed using the software credit the source of
|
||||
the software with the following statement, "The product was developed using
|
||||
GEOTRANS, a product of the National Geospatial-Intelligence Agency (NGA) and
|
||||
U.S. Army Engineering Research and Development Center." Do not use the name
|
||||
GEOTRANS for any derived work.
|
||||
.
|
||||
3. Warranty Disclaimer: The software was developed to meet only the internal
|
||||
requirements of the National Geospatial-Intelligence Agency (NGA). The software
|
||||
is provided "as is," and no warranty, express or implied, including but not
|
||||
limited to the implied warranties of merchantability and fitness for particular
|
||||
purpose or arising by statute or otherwise in law or from a course of dealing
|
||||
or usage in trade, is made by NGA as to the accuracy and functioning of the
|
||||
software.
|
||||
.
|
||||
4. NGA and its personnel are not required to provide technical support or
|
||||
general assistance with respect to public use of the software. Government
|
||||
customers may contact NGA.
|
||||
.
|
||||
5. Neither NGA nor its personnel will be liable for any claims, losses, or
|
||||
damages arising from or connected with the use of the software. The user agrees
|
||||
to hold harmless the United States National Geospatial-Intelligence Agency
|
||||
(NGA). The user's sole and exclusive remedy is to stop using the software.
|
||||
.
|
||||
6. Please be advised that pursuant to the United States Code, 10 U.S.C. 425,
|
||||
the name of the National Geospatial-Intelligence Agency, the initials "NGA",
|
||||
the seal of the National Geospatial-Intelligence Agency, or any colorable
|
||||
imitation thereof shall not be used to imply approval, endorsement, or
|
||||
authorization of a product without prior written permission from United States
|
||||
Secretary of Defense. Do not create the impression that NGA, the Secretary of
|
||||
Defense or the Director of National Intelligence has endorsed any product
|
||||
derived from GEOTRANS.
|
|
@ -0,0 +1,33 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
. /usr/share/debconf/confmodule
|
||||
|
||||
add_group_if_missing() {
|
||||
if ! getent group direwolf >/dev/null; then
|
||||
addgroup --system --force-badname direwolf || true
|
||||
fi
|
||||
}
|
||||
|
||||
add_user_if_missing() {
|
||||
if ! id -u direwolf > /dev/null 2>&1; then
|
||||
mkdir -m 02750 -p /var/lib/direwolf
|
||||
adduser --system --home /var/lib/direwolf \
|
||||
--disabled-password \
|
||||
--force-badname direwolf \
|
||||
--ingroup direwolf
|
||||
adduser direwolf dialout
|
||||
chown direwolf:direwolf /var/lib/direwolf
|
||||
fi
|
||||
}
|
||||
|
||||
add_group_if_missing
|
||||
add_user_if_missing
|
||||
|
||||
db_stop
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
|
||||
case "$1" in
|
||||
purge)
|
||||
rm -rf /var/lib/direwolf/
|
||||
;;
|
||||
remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
|
||||
;;
|
||||
*)
|
||||
echo "postrm called with unknown argument \`$1'" >&2
|
||||
exit 1
|
||||
esac
|
||||
|
||||
#DEBHELPER#
|
||||
|
||||
exit 0
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
#!/usr/bin/make -f
|
||||
|
||||
%:
|
||||
dh $@ --parallel
|
||||
|
||||
override_dh_auto_configure:
|
||||
dh_auto_configure -- -DFORCE_SSE=1
|
|
@ -0,0 +1 @@
|
|||
3.0 (quilt)
|
|
@ -0,0 +1,18 @@
|
|||
|
||||
install(FILES "${CUSTOM_DOC_DIR}/README.md" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/2400-4800-PSK-for-APRS-Packet-Radio.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/A-Better-APRS-Packet-Demodulator-Part-1-1200-baud.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/A-Better-APRS-Packet-Demodulator-Part-2-9600-baud.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/A-Closer-Look-at-the-WA8LMF-TNC-Test-CD.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/APRS-Telemetry-Toolkit.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/APRStt-Implementation-Notes.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/APRStt-interface-for-SARTrack.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/APRStt-Listening-Example.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/Bluetooth-KISS-TNC.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/Going-beyond-9600-baud.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/Raspberry-Pi-APRS.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/Raspberry-Pi-APRS-Tracker.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/Raspberry-Pi-SDR-IGate.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/Successful-APRS-IGate-Operation.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/User-Guide.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
||||
install(FILES "${CUSTOM_DOC_DIR}/WA8LMF-TNC-Test-CD-Results.pdf" DESTINATION share/doc/${CMAKE_PROJECT_NAME})
|
|
@ -1 +0,0 @@
|
|||
MAINICON ICON "dw-icon.ico"
|
|
@ -0,0 +1,18 @@
|
|||
# UTM, USNG, MGRS conversions
|
||||
|
||||
set(GEOTRANZ_LIBRARIES geotranz CACHE INTERNAL "geotranz")
|
||||
|
||||
set(geotranz_SOURCES
|
||||
${geotranz_SOURCES}
|
||||
error_string.c
|
||||
mgrs.c
|
||||
polarst.c
|
||||
tranmerc.c
|
||||
ups.c
|
||||
usng.c
|
||||
utm.c
|
||||
)
|
||||
|
||||
ADD_LIBRARY(geotranz STATIC
|
||||
${geotranz_SOURCES}
|
||||
)
|
|
@ -0,0 +1,36 @@
|
|||
|
||||
set(MISC_LIBRARIES misc CACHE INTERNAL "misc")
|
||||
|
||||
include_directories(
|
||||
${CMAKE_SOURCE_DIR}/src
|
||||
)
|
||||
|
||||
if(LINUX)
|
||||
set(misc_SOURCES
|
||||
${misc_SOURCES}
|
||||
# Provide our own copy of strlcpy and strlcat
|
||||
# because they are not included with Linux.
|
||||
${CUSTOM_MISC_DIR}/strlcpy.c
|
||||
${CUSTOM_MISC_DIR}/strlcat.c
|
||||
)
|
||||
ADD_LIBRARY(misc STATIC
|
||||
${misc_SOURCES}
|
||||
)
|
||||
elseif(WIN32) # windows
|
||||
set(misc_SOURCES
|
||||
${misc_SOURCES}
|
||||
# There are several string functions found in Linux
|
||||
# but not on Windows. Need to provide our own copy.
|
||||
${CUSTOM_MISC_DIR}/strsep.c
|
||||
${CUSTOM_MISC_DIR}/strtok_r.c
|
||||
${CUSTOM_MISC_DIR}/strcasestr.c
|
||||
${CUSTOM_MISC_DIR}/strlcpy.c
|
||||
${CUSTOM_MISC_DIR}/strlcat.c
|
||||
)
|
||||
ADD_LIBRARY(misc STATIC
|
||||
${misc_SOURCES}
|
||||
)
|
||||
else()
|
||||
# on macOS, OpenBSD and FreeBSD not misc is necessary
|
||||
set(MISC_LIBRARIES "" CACHE INTERNAL "")
|
||||
endif()
|
|
@ -0,0 +1,21 @@
|
|||
set(REGEX_LIBRARIES "" CACHE INTERNAL "")
|
||||
|
||||
if(WIN32) # windows
|
||||
|
||||
set(REGEX_LIBRARIES regex CACHE INTERNAL "regex")
|
||||
|
||||
set(regex_SOURCES
|
||||
${regex_SOURCES}
|
||||
# When building for Linux, we use regular expression
|
||||
# functions supplied by the gnu C library.
|
||||
# For the native WIN32 version, we need to use our own copy.
|
||||
# These were copied from http://gnuwin32.sourceforge.net/packages/regex.htm
|
||||
# Consider upgrading from https://www.gnu.org/software/libc/sources.html
|
||||
#
|
||||
# check if needed: -Dbool=int -Dtrue=1 -Dfalse=0
|
||||
${CUSTOM_REGEX_DIR}/regex.c
|
||||
)
|
||||
ADD_LIBRARY(regex STATIC
|
||||
${regex_SOURCES}
|
||||
)
|
||||
endif()
|
|
@ -0,0 +1,11 @@
|
|||
install(FILES "${CUSTOM_MAN_DIR}/aclients.1" DESTINATION share/man/man1)
|
||||
install(FILES "${CUSTOM_MAN_DIR}/atest.1" DESTINATION share/man/man1)
|
||||
install(FILES "${CUSTOM_MAN_DIR}/decode_aprs.1" DESTINATION share/man/man1)
|
||||
install(FILES "${CUSTOM_MAN_DIR}/direwolf.1" DESTINATION share/man/man1)
|
||||
install(FILES "${CUSTOM_MAN_DIR}/gen_packets.1" DESTINATION share/man/man1)
|
||||
install(FILES "${CUSTOM_MAN_DIR}/kissutil.1" DESTINATION share/man/man1)
|
||||
install(FILES "${CUSTOM_MAN_DIR}/ll2utm.1" DESTINATION share/man/man1)
|
||||
install(FILES "${CUSTOM_MAN_DIR}/log2gpx.1" DESTINATION share/man/man1)
|
||||
install(FILES "${CUSTOM_MAN_DIR}/text2tt.1" DESTINATION share/man/man1)
|
||||
install(FILES "${CUSTOM_MAN_DIR}/tt2text.1" DESTINATION share/man/man1)
|
||||
install(FILES "${CUSTOM_MAN_DIR}/utm2ll.1" DESTINATION share/man/man1)
|
|
@ -0,0 +1,11 @@
|
|||
|
||||
if(NOT WIN32)
|
||||
install(PROGRAMS "${CUSTOM_SCRIPTS_DIR}/dwespeak.sh" DESTINATION bin)
|
||||
install(PROGRAMS "${CUSTOM_SCRIPTS_DIR}/dw-start.sh" DESTINATION share/doc/${CMAKE_PROJECT_NAME}/examples)
|
||||
|
||||
add_custom_target(install-conf-scripts
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${CUSTOM_SCRIPTS_DIR}/dw-start.sh" ~
|
||||
)
|
||||
|
||||
add_subdirectory(telemetry-toolkit)
|
||||
endif()
|
|
@ -0,0 +1,19 @@
|
|||
add_custom_target(install-conf-telemetry
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${CUSTOM_TELEMETRY_DIR}/telem-m0xer-3.txt" ~
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${CUSTOM_TELEMETRY_DIR}/telem-balloon.conf" ~
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${CUSTOM_TELEMETRY_DIR}/telem-volts.conf" ~
|
||||
)
|
||||
|
||||
install(PROGRAMS "${CUSTOM_TELEMETRY_DIR}/telem-balloon.pl" DESTINATION bin)
|
||||
install(PROGRAMS "${CUSTOM_TELEMETRY_DIR}/telem-bits.pl" DESTINATION bin)
|
||||
install(PROGRAMS "${CUSTOM_TELEMETRY_DIR}/telem-data.pl" DESTINATION bin)
|
||||
install(PROGRAMS "${CUSTOM_TELEMETRY_DIR}/telem-data91.pl" DESTINATION bin)
|
||||
install(PROGRAMS "${CUSTOM_TELEMETRY_DIR}/telem-eqns.pl" DESTINATION bin)
|
||||
install(PROGRAMS "${CUSTOM_TELEMETRY_DIR}/telem-parm.pl" DESTINATION bin)
|
||||
install(PROGRAMS "${CUSTOM_TELEMETRY_DIR}/telem-seq.sh" DESTINATION bin)
|
||||
install(PROGRAMS "${CUSTOM_TELEMETRY_DIR}/telem-unit.pl" DESTINATION bin)
|
||||
install(PROGRAMS "${CUSTOM_TELEMETRY_DIR}/telem-volts.py" DESTINATION bin)
|
||||
|
||||
install(FILES "${CUSTOM_TELEMETRY_DIR}/telem-m0xer-3.txt" DESTINATION share/doc/${CMAKE_PROJECT_NAME}/examples)
|
||||
install(FILES "${CUSTOM_TELEMETRY_DIR}/telem-balloon.conf" DESTINATION share/doc/${CMAKE_PROJECT_NAME}/examples)
|
||||
install(FILES "${CUSTOM_TELEMETRY_DIR}/telem-volts.conf" DESTINATION share/doc/${CMAKE_PROJECT_NAME}/examples)
|
110
search_sdks.sh
110
search_sdks.sh
|
@ -1,110 +0,0 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# This file is part of Dire Wolf, an amateur radio packet TNC.
|
||||
#
|
||||
# Bash script to search for SDKs on various MacOSX versions.
|
||||
#
|
||||
# Copyright (C) 2015 Robert Stiles
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
FILENAME="./use_this_sdk"
|
||||
selected_sdk=""
|
||||
valid_flag=0
|
||||
system_sdk=""
|
||||
|
||||
if [ -f $FILENAME ]; then
|
||||
selected_sdk=`cat $FILENAME`
|
||||
if [ -d $selected_sdk ]; then
|
||||
valid_flag=1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ $valid_flag -eq "0" ]; then
|
||||
echo " " >&2
|
||||
echo " " >&2
|
||||
echo "Searching for SDKs.... (Wait for results)" >&2
|
||||
echo " " >&2
|
||||
echo "Enter the number and press Enter/Return Key" >&2
|
||||
echo " " >&2
|
||||
echo " " >&2
|
||||
|
||||
prompt="Select SDK to use:"
|
||||
|
||||
loc1=( $(find /Applications/Xcode.app -type l -name "MacOSX10.*.sdk") )
|
||||
loc2=( $(find /Developer/SDKs -maxdepth 1 -type d -name "MacOSX10.*.sdk") )
|
||||
|
||||
options=("${loc1[@]}" "${loc2[@]}")
|
||||
|
||||
if [ "${#options[@]}" -lt "2" ]; then
|
||||
echo "$options"
|
||||
fi
|
||||
|
||||
PS3="$prompt "
|
||||
select opt in "${options[@]}" "Do not use any SDK" ; do
|
||||
if (( REPLY == 1 + ${#options[@]} )) ; then
|
||||
echo " "
|
||||
break
|
||||
elif (( REPLY > 0 && REPLY <= ${#options[@]} )) ; then
|
||||
selected_sdk="$opt"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ ! -z "$selected_sdk" ]; then
|
||||
echo "$selected_sdk" > $FILENAME
|
||||
else
|
||||
echo " " > $FILENAME
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -z "$selected_sdk" ]; then
|
||||
temp_str="$selected_sdk"
|
||||
min_str=""
|
||||
flag=true
|
||||
|
||||
# Search for the last MacOSX in the string.
|
||||
while [ "${#temp_str}" -gt 4 ]; do
|
||||
temp_str="${temp_str#*MacOSX}"
|
||||
temp_str="${temp_str%%.sdk}"
|
||||
min_str="$temp_str"
|
||||
temp_str="${temp_str:1}"
|
||||
done
|
||||
|
||||
# Remove the "u" if 10.4u Universal SDK is used.
|
||||
min_str="${min_str%%u}"
|
||||
min_str="${min_str:-10.14}"
|
||||
|
||||
system_sdk="-isystem ${selected_sdk} -mmacosx-version-min=${min_str}"
|
||||
else
|
||||
system_sdk=" "
|
||||
fi
|
||||
|
||||
echo " " >&2
|
||||
echo "*******************************************************************" >&2
|
||||
|
||||
if [ -z "${system_sdk}" ]; then
|
||||
echo "SDK Selected: None" >&2
|
||||
else
|
||||
echo "SDK Selected: ${system_sdk}" >&2
|
||||
fi
|
||||
|
||||
echo "To change SDK version execute 'make clean' followed by 'make'." >&2
|
||||
echo "*******************************************************************" >&2
|
||||
echo " " >&2
|
||||
|
||||
echo ${system_sdk}
|
||||
|
||||
|
|
@ -0,0 +1,440 @@
|
|||
# global includes
|
||||
# not ideal but not so slow
|
||||
include_directories(
|
||||
${GPSD_INCLUDE_DIRS}
|
||||
${HAMLIB_INCLUDE_DIRS}
|
||||
${ALSA_INCLUDE_DIRS}
|
||||
${UDEV_INCLUDE_DIRS}
|
||||
${PORTAUDIO_INCLUDE_DIRS}
|
||||
${CUSTOM_GEOTRANZ_DIR}
|
||||
)
|
||||
|
||||
# build gen_fff to create fsk_fast_filter.h
|
||||
# optimization for slow processors
|
||||
set(gen_fff_SOURCES
|
||||
${gen_fff_SOURCES}
|
||||
demod_afsk.c
|
||||
dsp.c
|
||||
textcolor.c
|
||||
)
|
||||
|
||||
add_executable(gen_fff
|
||||
${gen_fff_SOURCES}
|
||||
)
|
||||
|
||||
set_target_properties(gen_fff
|
||||
PROPERTIES COMPILE_FLAGS "-DGEN_FFF"
|
||||
)
|
||||
|
||||
add_custom_command(TARGET gen_fff
|
||||
POST_BUILD
|
||||
COMMAND gen_fff > fsk_fast_filter.h
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||
)
|
||||
|
||||
# direwolf
|
||||
set(direwolf_SOURCES
|
||||
${direwolf_SOURCES}
|
||||
direwolf.c
|
||||
aprs_tt.c
|
||||
audio_stats.c
|
||||
ax25_link.c
|
||||
ax25_pad.c
|
||||
ax25_pad2.c
|
||||
beacon.c
|
||||
config.c
|
||||
decode_aprs.c
|
||||
dedupe.c
|
||||
demod_9600.c
|
||||
demod_afsk.c
|
||||
demod_psk.c
|
||||
demod.c
|
||||
digipeater.c
|
||||
cdigipeater.c
|
||||
dlq.c
|
||||
dsp.c
|
||||
dtime_now.c
|
||||
dtmf.c
|
||||
dwgps.c
|
||||
encode_aprs.c
|
||||
encode_aprs.c
|
||||
fcs_calc.c
|
||||
fcs_calc.c
|
||||
gen_tone.c
|
||||
hdlc_rec.c
|
||||
hdlc_rec2.c
|
||||
hdlc_send.c
|
||||
igate.c
|
||||
kiss_frame.c
|
||||
kiss.c
|
||||
kissserial.c
|
||||
kissnet.c
|
||||
latlong.c
|
||||
latlong.c
|
||||
log.c
|
||||
morse.c
|
||||
multi_modem.c
|
||||
waypoint.c
|
||||
serial_port.c
|
||||
pfilter.c
|
||||
ptt.c
|
||||
rdq.c
|
||||
recv.c
|
||||
rrbb.c
|
||||
server.c
|
||||
symbols.c
|
||||
telemetry.c
|
||||
textcolor.c
|
||||
tq.c
|
||||
tt_text.c
|
||||
tt_user.c
|
||||
xid.c
|
||||
xmit.c
|
||||
dwgps.c
|
||||
dwgpsnmea.c
|
||||
dwgpsd.c
|
||||
mheard.c
|
||||
)
|
||||
|
||||
if(LINUX)
|
||||
set(direwolf_SOURCES
|
||||
${direwolf_SOURCES}
|
||||
audio.c
|
||||
)
|
||||
if(UDEV_FOUND)
|
||||
set(direwolf_SOURCES
|
||||
${direwolf_SOURCES}
|
||||
cm108.c
|
||||
)
|
||||
endif()
|
||||
elseif(WIN32) # windows
|
||||
set(direwolf_SOURCES
|
||||
${direwolf_SOURCES}
|
||||
audio_win.c
|
||||
|
||||
# icon
|
||||
${CMAKE_SOURCE_DIR}/cmake/cpack/direwolf.rc
|
||||
)
|
||||
else() # macOS freebsd openbsd
|
||||
set(direwolf_SOURCES
|
||||
${direwolf_SOURCES}
|
||||
audio_portaudio.c
|
||||
)
|
||||
endif()
|
||||
|
||||
add_executable(direwolf
|
||||
${direwolf_SOURCES}
|
||||
)
|
||||
|
||||
add_dependencies(direwolf gen_fff)
|
||||
|
||||
target_link_libraries(direwolf
|
||||
${GEOTRANZ_LIBRARIES}
|
||||
${MISC_LIBRARIES}
|
||||
${REGEX_LIBRARIES}
|
||||
Threads::Threads
|
||||
${GPSD_LIBRARIES}
|
||||
${HAMLIB_LIBRARIES}
|
||||
${ALSA_LIBRARIES}
|
||||
${UDEV_LIBRARIES}
|
||||
${PORTAUDIO_LIBRARIES}
|
||||
)
|
||||
|
||||
# decode_aprs
|
||||
set(decode_aprs_SOURCES
|
||||
${decode_aprs_SOURCES}
|
||||
decode_aprs.c
|
||||
kiss_frame.c
|
||||
ax25_pad.c
|
||||
dwgpsnmea.c
|
||||
dwgps.c
|
||||
dwgpsd.c
|
||||
serial_port.c
|
||||
symbols.c
|
||||
textcolor.c
|
||||
fcs_calc.c
|
||||
latlong.c
|
||||
log.c
|
||||
telemetry.c
|
||||
tt_text.c
|
||||
)
|
||||
|
||||
add_executable(decode_aprs
|
||||
${decode_aprs_SOURCES}
|
||||
)
|
||||
|
||||
add_dependencies(decode_aprs gen_fff)
|
||||
|
||||
set_target_properties(decode_aprs
|
||||
PROPERTIES COMPILE_FLAGS "-DDECAMAIN"
|
||||
)
|
||||
|
||||
target_link_libraries(decode_aprs
|
||||
${MISC_LIBRARIES}
|
||||
Threads::Threads
|
||||
${GPSD_LIBRARIES}
|
||||
)
|
||||
|
||||
|
||||
# Convert between text and touch tone representation.
|
||||
# text2tt
|
||||
set(text2tt_SOURCES
|
||||
${text2tt_SOURCES}
|
||||
tt_text.c
|
||||
)
|
||||
|
||||
add_executable(text2tt
|
||||
${text2tt_SOURCES}
|
||||
)
|
||||
|
||||
set_target_properties(text2tt
|
||||
PROPERTIES COMPILE_FLAGS "-DENC_MAIN"
|
||||
)
|
||||
|
||||
target_link_libraries(text2tt
|
||||
${MISC_LIBRARIES}
|
||||
)
|
||||
|
||||
# tt2text
|
||||
set(tt2text_SOURCES
|
||||
${tt2text_SOURCES}
|
||||
tt_text.c
|
||||
)
|
||||
|
||||
add_executable(tt2text
|
||||
${tt2text_SOURCES}
|
||||
)
|
||||
|
||||
set_target_properties(tt2text
|
||||
PROPERTIES COMPILE_FLAGS "-DDEC_MAIN"
|
||||
)
|
||||
|
||||
target_link_libraries(tt2text
|
||||
${MISC_LIBRARIES}
|
||||
)
|
||||
|
||||
|
||||
# Convert between Latitude/Longitude and UTM coordinates.
|
||||
# ll2utm
|
||||
set(ll2utm_SOURCES
|
||||
${ll2utm_SOURCES}
|
||||
ll2utm.c
|
||||
textcolor.c
|
||||
)
|
||||
|
||||
add_executable(ll2utm
|
||||
${ll2utm_SOURCES}
|
||||
)
|
||||
|
||||
target_link_libraries(ll2utm
|
||||
${GEOTRANZ_LIBRARIES}
|
||||
${MISC_LIBRARIES}
|
||||
)
|
||||
|
||||
# utm2ll
|
||||
set(utm2ll_SOURCES
|
||||
${utm2ll_SOURCES}
|
||||
utm2ll.c
|
||||
textcolor.c
|
||||
)
|
||||
|
||||
add_executable(utm2ll
|
||||
${utm2ll_SOURCES}
|
||||
)
|
||||
|
||||
target_link_libraries(utm2ll
|
||||
${GEOTRANZ_LIBRARIES}
|
||||
${MISC_LIBRARIES}
|
||||
)
|
||||
|
||||
|
||||
# Convert from log file to GPX.
|
||||
# log2gpx
|
||||
set(log2gpx_SOURCES
|
||||
${log2gpx_SOURCES}
|
||||
log2gpx.c
|
||||
textcolor.c
|
||||
)
|
||||
|
||||
add_executable(log2gpx
|
||||
${log2gpx_SOURCES}
|
||||
)
|
||||
|
||||
target_link_libraries(log2gpx
|
||||
${MISC_LIBRARIES}
|
||||
)
|
||||
|
||||
|
||||
# Test application to generate sound.
|
||||
# gen_packets
|
||||
set(gen_packets_SOURCES
|
||||
${gen_packets_SOURCES}
|
||||
gen_packets.c
|
||||
ax25_pad.c
|
||||
hdlc_send.c
|
||||
fcs_calc.c
|
||||
gen_tone.c
|
||||
morse.c
|
||||
dtmf.c
|
||||
textcolor.c
|
||||
dsp.c
|
||||
)
|
||||
|
||||
add_executable(gen_packets
|
||||
${gen_packets_SOURCES}
|
||||
)
|
||||
|
||||
target_link_libraries(gen_packets
|
||||
${MISC_LIBRARIES}
|
||||
)
|
||||
|
||||
|
||||
# Unit test for AFSK demodulator
|
||||
# atest
|
||||
set(atest_SOURCES
|
||||
${atest_SOURCES}
|
||||
atest.c
|
||||
demod.c
|
||||
demod_afsk.c
|
||||
demod_psk.c
|
||||
demod_9600.c
|
||||
dsp.c
|
||||
hdlc_rec.c
|
||||
hdlc_rec2.c
|
||||
multi_modem.c
|
||||
rrbb.c
|
||||
fcs_calc.c
|
||||
ax25_pad.c
|
||||
decode_aprs.c
|
||||
dwgpsnmea.c
|
||||
dwgps.c
|
||||
dwgpsd.c
|
||||
serial_port.c
|
||||
telemetry.c
|
||||
dtime_now.c
|
||||
latlong.c
|
||||
symbols.c
|
||||
tt_text.c
|
||||
textcolor.c
|
||||
)
|
||||
|
||||
add_executable(atest
|
||||
${atest_SOURCES}
|
||||
)
|
||||
|
||||
add_dependencies(atest gen_fff)
|
||||
|
||||
target_link_libraries(atest
|
||||
${MISC_LIBRARIES}
|
||||
${GPSD_LIBRARIES}
|
||||
Threads::Threads
|
||||
)
|
||||
|
||||
|
||||
# Multiple AGWPE network or serial port clients to test TNCs side by side.
|
||||
# aclients
|
||||
set(aclients_SOURCES
|
||||
${aclients_SOURCES}
|
||||
aclients.c
|
||||
ax25_pad.c
|
||||
fcs_calc.c
|
||||
textcolor.c
|
||||
)
|
||||
|
||||
add_executable(aclients
|
||||
${aclients_SOURCES}
|
||||
)
|
||||
|
||||
target_link_libraries(aclients
|
||||
${MISC_LIBRARIES}
|
||||
Threads::Threads
|
||||
)
|
||||
|
||||
|
||||
# Talk to a KISS TNC.
|
||||
# Note: kiss_frame.c has conditional compilation on KISSUTIL.
|
||||
# kissutil
|
||||
set(kissutil_SOURCES
|
||||
${kissutil_SOURCES}
|
||||
kissutil.c
|
||||
kiss_frame.c
|
||||
ax25_pad.c
|
||||
fcs_calc.c
|
||||
textcolor.c
|
||||
serial_port.c
|
||||
dtime_now.c
|
||||
dwsock.c
|
||||
)
|
||||
|
||||
add_executable(kissutil
|
||||
${kissutil_SOURCES}
|
||||
)
|
||||
|
||||
set_target_properties(kissutil
|
||||
PROPERTIES COMPILE_FLAGS "-DKISSUTIL"
|
||||
)
|
||||
|
||||
target_link_libraries(kissutil
|
||||
${MISC_LIBRARIES}
|
||||
Threads::Threads
|
||||
)
|
||||
|
||||
|
||||
# List USB audio adapters than can use GPIO for PTT.
|
||||
# cm108
|
||||
if(UDEV_FOUND)
|
||||
set(cm108_SOURCES
|
||||
${cm108_SOURCES}
|
||||
cm108.c
|
||||
textcolor.c
|
||||
)
|
||||
|
||||
add_executable(cm108
|
||||
${cm108_SOURCES}
|
||||
)
|
||||
|
||||
set_target_properties(cm108
|
||||
PROPERTIES COMPILE_FLAGS "-DCM108_MAIN"
|
||||
)
|
||||
|
||||
target_link_libraries(cm108
|
||||
${MISC_LIBRARIES}
|
||||
${UDEV_LIBRARIES}
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
# Touch Tone to Speech sample application.
|
||||
# ttcalc
|
||||
set(ttcalc_SOURCES
|
||||
${ttcalc_SOURCES}
|
||||
ttcalc.c
|
||||
ax25_pad.c
|
||||
fcs_calc.c
|
||||
textcolor.c
|
||||
)
|
||||
|
||||
add_executable(ttcalc
|
||||
${ttcalc_SOURCES}
|
||||
)
|
||||
|
||||
target_link_libraries(ttcalc
|
||||
${MISC_LIBRARIES}
|
||||
)
|
||||
|
||||
|
||||
install(TARGETS direwolf DESTINATION bin)
|
||||
install(TARGETS decode_aprs DESTINATION bin)
|
||||
install(TARGETS text2tt DESTINATION bin)
|
||||
install(TARGETS tt2text DESTINATION bin)
|
||||
install(TARGETS ll2utm DESTINATION bin)
|
||||
install(TARGETS utm2ll DESTINATION bin)
|
||||
install(TARGETS aclients DESTINATION bin)
|
||||
install(TARGETS log2gpx DESTINATION bin)
|
||||
install(TARGETS gen_packets DESTINATION bin)
|
||||
install(TARGETS atest DESTINATION bin)
|
||||
install(TARGETS ttcalc DESTINATION bin)
|
||||
install(TARGETS kissutil DESTINATION bin)
|
||||
if(UDEV_FOUND)
|
||||
install(TARGETS cm108 DESTINATION bin)
|
||||
endif()
|
Loading…
Reference in New Issue