From a1c16a67efb3f2870daaccb7847f9e4ab43d0dd3 Mon Sep 17 00:00:00 2001 From: Davide Gerhard Date: Thu, 15 Aug 2019 08:30:42 +0200 Subject: [PATCH] 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 --- .gitignore | 4 + CMakeLists.txt | 216 +++++ Makefile | 20 - Makefile.linux | 856 ------------------ Makefile.macosx | 563 ------------ Makefile.win | 727 --------------- cmake/cpack/CMakeLists.txt | 1 + cmake/cpack/direwolf.desktop.in | 10 + cmake/cpack/direwolf.rc | 1 + dw-icon.ico => cmake/cpack/direwolf_icon.ico | Bin dw-icon.png => cmake/cpack/direwolf_icon.png | Bin cmake/cpu_tests/test_arm_neon.cxx | 16 + cmake/cpu_tests/test_x86_avx.cxx | 15 + cmake/cpu_tests/test_x86_avx2.cxx | 15 + cmake/cpu_tests/test_x86_avx512.cxx | 16 + cmake/cpu_tests/test_x86_sse2.cxx | 15 + cmake/cpu_tests/test_x86_sse3.cxx | 16 + cmake/cpu_tests/test_x86_sse41.cxx | 18 + cmake/cpu_tests/test_x86_sse42.cxx | 15 + cmake/cpu_tests/test_x86_ssse3.cxx | 16 + cmake/include/uninstall.cmake.in | 21 + cmake/modules/FindCPUflags.cmake | 290 ++++++ cmake/modules/FindCompiler.cmake | 13 + cmake/modules/FindGPSD.cmake | 87 ++ cmake/modules/FindPortaudio.cmake | 64 ++ cmake/modules/Findhamlib.cmake | 67 ++ cmake/modules/Findudev.cmake | 76 ++ conf/CMakeLists.txt | 48 + data/CMakeLists.txt | 92 ++ debian/README.Debian | 5 + debian/changelog | 1 + debian/compat | 1 + debian/control | 30 + debian/copyright | 176 ++++ debian/direwolf.postinst | 33 + debian/direwolf.postrm | 19 + debian/rules | 7 + debian/source/format | 1 + doc/CMakeLists.txt | 18 + dw-icon.rc | 1 - external/geotranz/CMakeLists.txt | 18 + external/misc/CMakeLists.txt | 36 + .../misc/README | 0 {src => external}/misc/strcasestr.c | 0 {src => external}/misc/strlcat.c | 0 {src => external}/misc/strlcpy.c | 0 {src => external}/misc/strsep.c | 0 {src => external}/misc/strtok_r.c | 0 external/regex/CMakeLists.txt | 21 + man/CMakeLists.txt | 11 + scripts/CMakeLists.txt | 11 + scripts/dwespeak.sh | 0 scripts/telemetry-toolkit/CMakeLists.txt | 19 + search_sdks.sh | 110 --- src/CMakeLists.txt | 440 +++++++++ 55 files changed, 1979 insertions(+), 2277 deletions(-) create mode 100644 CMakeLists.txt delete mode 100644 Makefile delete mode 100644 Makefile.linux delete mode 100644 Makefile.macosx delete mode 100644 Makefile.win create mode 100644 cmake/cpack/CMakeLists.txt create mode 100644 cmake/cpack/direwolf.desktop.in create mode 100644 cmake/cpack/direwolf.rc rename dw-icon.ico => cmake/cpack/direwolf_icon.ico (100%) rename dw-icon.png => cmake/cpack/direwolf_icon.png (100%) create mode 100644 cmake/cpu_tests/test_arm_neon.cxx create mode 100644 cmake/cpu_tests/test_x86_avx.cxx create mode 100644 cmake/cpu_tests/test_x86_avx2.cxx create mode 100644 cmake/cpu_tests/test_x86_avx512.cxx create mode 100644 cmake/cpu_tests/test_x86_sse2.cxx create mode 100644 cmake/cpu_tests/test_x86_sse3.cxx create mode 100644 cmake/cpu_tests/test_x86_sse41.cxx create mode 100644 cmake/cpu_tests/test_x86_sse42.cxx create mode 100644 cmake/cpu_tests/test_x86_ssse3.cxx create mode 100644 cmake/include/uninstall.cmake.in create mode 100644 cmake/modules/FindCPUflags.cmake create mode 100644 cmake/modules/FindCompiler.cmake create mode 100644 cmake/modules/FindGPSD.cmake create mode 100644 cmake/modules/FindPortaudio.cmake create mode 100644 cmake/modules/Findhamlib.cmake create mode 100644 cmake/modules/Findudev.cmake create mode 100644 conf/CMakeLists.txt create mode 100644 data/CMakeLists.txt create mode 100644 debian/README.Debian create mode 120000 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/direwolf.postinst create mode 100644 debian/direwolf.postrm create mode 100644 debian/rules create mode 100644 debian/source/format create mode 100644 doc/CMakeLists.txt delete mode 100644 dw-icon.rc create mode 100644 external/geotranz/CMakeLists.txt create mode 100644 external/misc/CMakeLists.txt rename src/misc/README-dire-wolf.txt => external/misc/README (100%) rename {src => external}/misc/strcasestr.c (100%) rename {src => external}/misc/strlcat.c (100%) rename {src => external}/misc/strlcpy.c (100%) rename {src => external}/misc/strsep.c (100%) rename {src => external}/misc/strtok_r.c (100%) create mode 100644 external/regex/CMakeLists.txt create mode 100644 man/CMakeLists.txt create mode 100644 scripts/CMakeLists.txt mode change 100644 => 100755 scripts/dwespeak.sh create mode 100644 scripts/telemetry-toolkit/CMakeLists.txt delete mode 100755 search_sdks.sh create mode 100644 src/CMakeLists.txt diff --git a/.gitignore b/.gitignore index 3f8779d..659c845 100644 --- a/.gitignore +++ b/.gitignore @@ -107,3 +107,7 @@ $RECYCLE.BIN/ *.lnk /use_this_sdk *.dSYM + +# cmake +build/ +tmp/ \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..2fd7ede --- /dev/null +++ b/CMakeLists.txt @@ -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) diff --git a/Makefile b/Makefile deleted file mode 100644 index 87850c4..0000000 --- a/Makefile +++ /dev/null @@ -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 diff --git a/Makefile.linux b/Makefile.linux deleted file mode 100644 index a5a6f74..0000000 --- a/Makefile.linux +++ /dev/null @@ -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 - - diff --git a/Makefile.macosx b/Makefile.macosx deleted file mode 100644 index 9f3ff59..0000000 --- a/Makefile.macosx +++ /dev/null @@ -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 diff --git a/Makefile.win b/Makefile.win deleted file mode 100644 index c3f1497..0000000 --- a/Makefile.win +++ /dev/null @@ -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 - - diff --git a/cmake/cpack/CMakeLists.txt b/cmake/cpack/CMakeLists.txt new file mode 100644 index 0000000..ffc1ede --- /dev/null +++ b/cmake/cpack/CMakeLists.txt @@ -0,0 +1 @@ +# empty for the moment diff --git a/cmake/cpack/direwolf.desktop.in b/cmake/cpack/direwolf.desktop.in new file mode 100644 index 0000000..79c63aa --- /dev/null +++ b/cmake/cpack/direwolf.desktop.in @@ -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 \ No newline at end of file diff --git a/cmake/cpack/direwolf.rc b/cmake/cpack/direwolf.rc new file mode 100644 index 0000000..99de6d9 --- /dev/null +++ b/cmake/cpack/direwolf.rc @@ -0,0 +1 @@ +MAINICON ICON "direwolf_icon.ico" \ No newline at end of file diff --git a/dw-icon.ico b/cmake/cpack/direwolf_icon.ico similarity index 100% rename from dw-icon.ico rename to cmake/cpack/direwolf_icon.ico diff --git a/dw-icon.png b/cmake/cpack/direwolf_icon.png similarity index 100% rename from dw-icon.png rename to cmake/cpack/direwolf_icon.png diff --git a/cmake/cpu_tests/test_arm_neon.cxx b/cmake/cpu_tests/test_arm_neon.cxx new file mode 100644 index 0000000..cb48159 --- /dev/null +++ b/cmake/cpu_tests/test_arm_neon.cxx @@ -0,0 +1,16 @@ +#include +#include +#include +#include + +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; +} diff --git a/cmake/cpu_tests/test_x86_avx.cxx b/cmake/cpu_tests/test_x86_avx.cxx new file mode 100644 index 0000000..2344fbc --- /dev/null +++ b/cmake/cpu_tests/test_x86_avx.cxx @@ -0,0 +1,15 @@ +#include +#include +#include + +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; +} diff --git a/cmake/cpu_tests/test_x86_avx2.cxx b/cmake/cpu_tests/test_x86_avx2.cxx new file mode 100644 index 0000000..369186d --- /dev/null +++ b/cmake/cpu_tests/test_x86_avx2.cxx @@ -0,0 +1,15 @@ +#include +#include +#include + +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; +} diff --git a/cmake/cpu_tests/test_x86_avx512.cxx b/cmake/cpu_tests/test_x86_avx512.cxx new file mode 100644 index 0000000..eed07d3 --- /dev/null +++ b/cmake/cpu_tests/test_x86_avx512.cxx @@ -0,0 +1,16 @@ +#include +#include +#include +#include + +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; +} diff --git a/cmake/cpu_tests/test_x86_sse2.cxx b/cmake/cpu_tests/test_x86_sse2.cxx new file mode 100644 index 0000000..98eb27e --- /dev/null +++ b/cmake/cpu_tests/test_x86_sse2.cxx @@ -0,0 +1,15 @@ +#include +#include +#include + +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; +} diff --git a/cmake/cpu_tests/test_x86_sse3.cxx b/cmake/cpu_tests/test_x86_sse3.cxx new file mode 100644 index 0000000..70a31e3 --- /dev/null +++ b/cmake/cpu_tests/test_x86_sse3.cxx @@ -0,0 +1,16 @@ +#include +#include +#include +#include + +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; +} diff --git a/cmake/cpu_tests/test_x86_sse41.cxx b/cmake/cpu_tests/test_x86_sse41.cxx new file mode 100644 index 0000000..e08697f --- /dev/null +++ b/cmake/cpu_tests/test_x86_sse41.cxx @@ -0,0 +1,18 @@ +#include +#include +#include +#include + +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; +} diff --git a/cmake/cpu_tests/test_x86_sse42.cxx b/cmake/cpu_tests/test_x86_sse42.cxx new file mode 100644 index 0000000..58032a5 --- /dev/null +++ b/cmake/cpu_tests/test_x86_sse42.cxx @@ -0,0 +1,15 @@ +#include +#include +#include + +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; +} diff --git a/cmake/cpu_tests/test_x86_ssse3.cxx b/cmake/cpu_tests/test_x86_ssse3.cxx new file mode 100644 index 0000000..01688f4 --- /dev/null +++ b/cmake/cpu_tests/test_x86_ssse3.cxx @@ -0,0 +1,16 @@ +#include +#include +#include +#include + +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; +} diff --git a/cmake/include/uninstall.cmake.in b/cmake/include/uninstall.cmake.in new file mode 100644 index 0000000..2037e36 --- /dev/null +++ b/cmake/include/uninstall.cmake.in @@ -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) diff --git a/cmake/modules/FindCPUflags.cmake b/cmake/modules/FindCPUflags.cmake new file mode 100644 index 0000000..69710e8 --- /dev/null +++ b/cmake/modules/FindCPUflags.cmake @@ -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) diff --git a/cmake/modules/FindCompiler.cmake b/cmake/modules/FindCompiler.cmake new file mode 100644 index 0000000..f339a73 --- /dev/null +++ b/cmake/modules/FindCompiler.cmake @@ -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() diff --git a/cmake/modules/FindGPSD.cmake b/cmake/modules/FindGPSD.cmake new file mode 100644 index 0000000..7973b35 --- /dev/null +++ b/cmake/modules/FindGPSD.cmake @@ -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 +# +# 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) diff --git a/cmake/modules/FindPortaudio.cmake b/cmake/modules/FindPortaudio.cmake new file mode 100644 index 0000000..9cda342 --- /dev/null +++ b/cmake/modules/FindPortaudio.cmake @@ -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 \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() diff --git a/cmake/modules/Findhamlib.cmake b/cmake/modules/Findhamlib.cmake new file mode 100644 index 0000000..2086a98 --- /dev/null +++ b/cmake/modules/Findhamlib.cmake @@ -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 + +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) diff --git a/cmake/modules/Findudev.cmake b/cmake/modules/Findudev.cmake new file mode 100644 index 0000000..3a70625 --- /dev/null +++ b/cmake/modules/Findudev.cmake @@ -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 +# +# 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) diff --git a/conf/CMakeLists.txt b/conf/CMakeLists.txt new file mode 100644 index 0000000..df31598 --- /dev/null +++ b/conf/CMakeLists.txt @@ -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() diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt new file mode 100644 index 0000000..d2af835 --- /dev/null +++ b/data/CMakeLists.txt @@ -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}) diff --git a/debian/README.Debian b/debian/README.Debian new file mode 100644 index 0000000..853f55f --- /dev/null +++ b/debian/README.Debian @@ -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 diff --git a/debian/changelog b/debian/changelog new file mode 120000 index 0000000..cf54708 --- /dev/null +++ b/debian/changelog @@ -0,0 +1 @@ +../CHANGES.md \ No newline at end of file diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..9a03714 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +10 \ No newline at end of file diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..106663b --- /dev/null +++ b/debian/control @@ -0,0 +1,30 @@ +Source: direwolf +Maintainer: Debian Hamradio Maintainers +Uploaders: Iain R. Learmonth +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. \ No newline at end of file diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..b546bf7 --- /dev/null +++ b/debian/copyright @@ -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 +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 . + . + 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. \ No newline at end of file diff --git a/debian/direwolf.postinst b/debian/direwolf.postinst new file mode 100644 index 0000000..e42b9f8 --- /dev/null +++ b/debian/direwolf.postinst @@ -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 + diff --git a/debian/direwolf.postrm b/debian/direwolf.postrm new file mode 100644 index 0000000..886af3d --- /dev/null +++ b/debian/direwolf.postrm @@ -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 + diff --git a/debian/rules b/debian/rules new file mode 100644 index 0000000..b8c2222 --- /dev/null +++ b/debian/rules @@ -0,0 +1,7 @@ +#!/usr/bin/make -f + +%: + dh $@ --parallel + +override_dh_auto_configure: + dh_auto_configure -- -DFORCE_SSE=1 diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..46ebe02 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) \ No newline at end of file diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt new file mode 100644 index 0000000..187924e --- /dev/null +++ b/doc/CMakeLists.txt @@ -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}) diff --git a/dw-icon.rc b/dw-icon.rc deleted file mode 100644 index ce34b40..0000000 --- a/dw-icon.rc +++ /dev/null @@ -1 +0,0 @@ -MAINICON ICON "dw-icon.ico" \ No newline at end of file diff --git a/external/geotranz/CMakeLists.txt b/external/geotranz/CMakeLists.txt new file mode 100644 index 0000000..2da168a --- /dev/null +++ b/external/geotranz/CMakeLists.txt @@ -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} + ) diff --git a/external/misc/CMakeLists.txt b/external/misc/CMakeLists.txt new file mode 100644 index 0000000..379d0f6 --- /dev/null +++ b/external/misc/CMakeLists.txt @@ -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() diff --git a/src/misc/README-dire-wolf.txt b/external/misc/README similarity index 100% rename from src/misc/README-dire-wolf.txt rename to external/misc/README diff --git a/src/misc/strcasestr.c b/external/misc/strcasestr.c similarity index 100% rename from src/misc/strcasestr.c rename to external/misc/strcasestr.c diff --git a/src/misc/strlcat.c b/external/misc/strlcat.c similarity index 100% rename from src/misc/strlcat.c rename to external/misc/strlcat.c diff --git a/src/misc/strlcpy.c b/external/misc/strlcpy.c similarity index 100% rename from src/misc/strlcpy.c rename to external/misc/strlcpy.c diff --git a/src/misc/strsep.c b/external/misc/strsep.c similarity index 100% rename from src/misc/strsep.c rename to external/misc/strsep.c diff --git a/src/misc/strtok_r.c b/external/misc/strtok_r.c similarity index 100% rename from src/misc/strtok_r.c rename to external/misc/strtok_r.c diff --git a/external/regex/CMakeLists.txt b/external/regex/CMakeLists.txt new file mode 100644 index 0000000..b33c708 --- /dev/null +++ b/external/regex/CMakeLists.txt @@ -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() diff --git a/man/CMakeLists.txt b/man/CMakeLists.txt new file mode 100644 index 0000000..91af1fd --- /dev/null +++ b/man/CMakeLists.txt @@ -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) diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt new file mode 100644 index 0000000..1a3d612 --- /dev/null +++ b/scripts/CMakeLists.txt @@ -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() diff --git a/scripts/dwespeak.sh b/scripts/dwespeak.sh old mode 100644 new mode 100755 diff --git a/scripts/telemetry-toolkit/CMakeLists.txt b/scripts/telemetry-toolkit/CMakeLists.txt new file mode 100644 index 0000000..5d44c21 --- /dev/null +++ b/scripts/telemetry-toolkit/CMakeLists.txt @@ -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) diff --git a/search_sdks.sh b/search_sdks.sh deleted file mode 100755 index e131be4..0000000 --- a/search_sdks.sh +++ /dev/null @@ -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 . -# - -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} - - diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 0000000..501ed4a --- /dev/null +++ b/src/CMakeLists.txt @@ -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()