From e5fee507ce741eed4e75d912df4a016afd3ec2bc Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Fri, 14 Oct 2022 13:54:57 -0400 Subject: [PATCH] initial commit of 3.0-dev branch; migrate from Makefile to CMake; --- CMakeLists.txt | 257 +++++++++++++++++++++++++++++++++++++++++++++++++ Defines.h | 2 +- Makefile | 208 --------------------------------------- 3 files changed, 258 insertions(+), 209 deletions(-) create mode 100644 CMakeLists.txt delete mode 100644 Makefile diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 00000000..9cb61aa3 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,257 @@ +cmake_minimum_required(VERSION 3.18.4) + +# dvmhost +file(GLOB dvmhost_SRC + # DMR module + "dmr/*.h" + "dmr/*.cpp" + "dmr/acl/*.h" + "dmr/acl/*.cpp" + "dmr/data/*.h" + "dmr/data/*.cpp" + "dmr/edac/*.h" + "dmr/edac/*.cpp" + "dmr/lc/*.h" + "dmr/lc/*.cpp" + "dmr/packet*.h" + "dmr/packet/*.cpp" + + # P25 module + "p25/*.h" + "p25/*.cpp" + "p25/acl/*.h" + "p25/acl/*.cpp" + "p25/data/*.h" + "p25/data/*.cpp" + "p25/dfsi/*.h" + "p25/dfsi/*.cpp" + "p25/dfsi/packet/*.h" + "p25/dfsi/packet/*.cpp" + "p25/edac/*.h" + "p25/edac/*.cpp" + "p25/lc/*.h" + "p25/lc/*.cpp" + "p25/lookups/*.h" + "p25/lookups/*.cpp" + "p25/packet/*.h" + "p25/packet/*.cpp" + + # NXDN module + "nxdn/*.h" + "nxdn/*.cpp" + "nxdn/acl/*.h" + "nxdn/acl/*.cpp" + "nxdn/channel/*.h" + "nxdn/channel/*.cpp" + "nxdn/lc/*.h" + "nxdn/lc/*.cpp" + "nxdn/packet/*.h" + "nxdn/packet/*.cpp" + + # Core + "edac/*.h" + "edac/*.cpp" + "host/*.h" + "host/*.cpp" + "host/calibrate/*.h" + "host/calibrate/*.cpp" + "host/setup/*.h" + "host/setup/*.cpp" + "lookups/*.h" + "lookups/*.cpp" + "modem/*.h" + "modem/*.cpp" + "modem/port/*.h" + "modem/port/*.cpp" + "network/*.h" + "network/*.cpp" + "network/json/*.h" + "yaml/*.h" + "yaml/*.cpp" + "*.h" + "*.cpp" +) + +# dvmcmd +file(GLOB dvmcmd_SRC + "network/UDPSocket.h" + "network/UDPSocket.cpp" + "remote/*.h" + "remote/*.cpp" + "edac/SHA256.h" + "edac/SHA256.cpp" + "Defines.h" + "Thread.h" + "Thread.cpp" + "Log.h" + "Log.cpp" + "Utils.h" + "Utils.cpp" +) + +# digital mode options +option(ENABLE_DMR "Enable DMR Digtial Mode" on) +option(ENABLE_P25 "Enable P25 Digital Mode" on) +option(ENABLE_NXDN "Enable NXDN Digital Mode" off) +option(ENABLE_DFSI_SUPPORT "Enable P25 DFSI Transport Support" off) + +message(CHECK_START "DMR Digital Mode") +if (ENABLE_DMR) + add_definitions(-DENABLE_DMR) + message(CHECK_PASS "enabled") +else () + message(CHECK_PASS "disabled") +endif (ENABLE_DMR) +message(CHECK_START "P25 Digital Mode") +if (ENABLE_P25) + add_definitions(-DEANBLE_P25) + message(CHECK_PASS "enabled") +else () + message(CHECK_PASS "disabled") +endif (ENABLE_P25) +message(CHECK_START "NXDN Digital Mode") +if (ENABLE_NXDN) + add_definitions(-DENABLE_NXDN) + message(CHECK_PASS "enabled") +else () + message(CHECK_PASS "disabled") +endif (ENABLE_NXDN) +message(CHECK_START "P25 DFSI Support") +if (ENABLE_DFSI_SUPPORT) + add_definitions(-DENABLE_DFSI_SUPPORT) + message(CHECK_PASS "enabled") +else () + message(CHECK_PASS "disabled") +endif (ENABLE_DFSI_SUPPORT) + +# debug options +option(DEBUG_DMR_PDU_DATA "" off) +option(DEBUG_CRC "" off) +option(DEBUG_MODEM_CAL "" off) +option(DEBUG_MODEM "" off) +option(DEBUG_NXDN_FACCH1 "" off) +option(DEBUG_NXDN_SACCH "" off) +option(DEBUG_NXDN_UDCH "" off) +option(DEBUG_NXDN_LICH "" off) +option(DEBUG_NXDN_CAC "" off) +option(DEBUG_P25_PDU_DATA "" off) +option(DEBUG_P25_HDU "" off) +option(DEBUG_P25_LDU1 "" off) +option(DEBUG_P25_LDU2 "" off) +option(DEBUG_P25_TDULC "" off) +option(DEBUG_P25_TSBK "" off) +option(DEBUG_P25_DFSI "" off) +option(DEBUG_RINGBUFFER "" off) + +if (DEBUG_DMR_PDU_DATA) + add_definitions(-DDEBUG_DMR_PDU_DATA) +endif (DEBUG_DMR_PDU_DATA) +if (DEBUG_CRC) + add_definitions(-DDEBUG_CRC) +endif (DEBUG_CRC) +if (DEBUG_MODEM_CAL) + add_definitions(-DDEBUG_MODEM_CAL) +endif (DEBUG_MODEM_CAL) +if (DEBUG_MODEM) + add_definitions(-DDEBUG_MODEM) +endif (DEBUG_MODEM) +if (DEBUG_NXDN_FACCH1) + add_definitions(-DDEBUG_NXDN_FACCH1) +endif (DEBUG_NXDN_FACCH1) +if (DEBUG_NXDN_SACCH) + add_definitions(-DDEBUG_NXDN_SACCH) +endif (DEBUG_NXDN_SACCH) +if (DEBUG_NXDN_UDCH) + add_definitions(-DDEBUG_NXDN_UDCH) +endif (DEBUG_NXDN_UDCH) +if (DEBUG_NXDN_LICH) + add_definitions(-DDEBUG_NXDN_LICH) +endif (DEBUG_NXDN_LICH) +if (DEBUG_NXDN_CAC) + add_definitions(-DDEBUG_NXDN_CAC) +endif (DEBUG_NXDN_CAC) +if (DEBUG_P25_PDU_DATA) + add_definitions(-DDEBUG_P25_PDU_DATA) +endif (DEBUG_P25_PDU_DATA) +if (DEBUG_P25_HDU) + add_definitions(-DDEBUG_P25_HDU) +endif (DEBUG_P25_HDU) +if (DEBUG_P25_LDU1) + add_definitions(-DDEBUG_P25_LDU1) +endif (DEBUG_P25_LDU1) +if (DEBUG_P25_LDU2) + add_definitions(-DDEBUG_P25_LDU2) +endif (DEBUG_P25_LDU2) +if (DEBUG_P25_TDULC) + add_definitions(-DDEBUG_P25_TDULC) +endif (DEBUG_P25_TDULC) +if (DEBUG_P25_TSBK) + add_definitions(-DDEBUG_P25_TSBK) +endif (DEBUG_P25_TSBK) +if (DEBUG_P25_DFSI) + add_definitions(-DDEBUG_P25_DFSI) +endif (DEBUG_P25_DFSI) +if (DEBUG_RINGBUFFER) + add_definitions(-DDEBUG_RINGBUFFER) +endif (DEBUG_RINGBUFFER) + +# cross-compile options +option(CROSS_COMPILE_ARM "Cross-compile for 32-bit ARM" off) +option(CROSS_COMPILE_AARCH64 "Cross-compile for 64-bit ARM" off) +option(CROSS_COMPILE_RPI_ARM "Cross-compile for (old RPi) 32-bit ARM" off) + +set(CMAKE_C_COMPILER gcc) +set(CMAKE_CXX_COMPILER g++) + +message(CHECK_START "Cross compiling for 32-bit ARM") +if (CROSS_COMPILE_ARM) + set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) + set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++) + message(CHECK_PASS "yes") +else () + message(CHECK_PASS "no") +endif (CROSS_COMPILE_ARM) +message(CHECK_START "Cross compiling for 64-bit ARM") +if (CROSS_COMPILE_AARCH64) + set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) + set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++) + message(CHECK_PASS "yes") +else () + message(CHECK_PASS "no") +endif (CROSS_COMPILE_AARCH64) +message(CHECK_START "Cross compiling for (old RPi) 32-bit ARM") +if (CROSS_COMPILE_RPI_ARM) + set(CMAKE_C_COMPILER /opt/tools/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc) + set(CMAKE_CXX_COMPILER /opt/tools/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++) + message(CHECK_PASS "yes") +else () + message(CHECK_PASS "no") +endif (CROSS_COMPILE_RPI_ARM) + +set(THREADS_PREFER_PTHREAD_FLAG ON) + +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY .) +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -O3 -Wall -std=c++0x") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -O3 -Wall -std=c++0x") +set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -g -O3 -Wall -std=c++0x -s") +set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -g -O3 -Wall -std=c++0x -s") + +set(GIT_VER "") +set(GIT_VER_HASH "") +execute_process(COMMAND git describe --abbrev=8 --dirty --always --tags WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} OUTPUT_VARIABLE GIT_VER OUTPUT_STRIP_TRAILING_WHITESPACE) +execute_process(COMMAND git describe --abbrev=8 --always --tags WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} OUTPUT_VARIABLE GIT_VER_HASH OUTPUT_STRIP_TRAILING_WHITESPACE) + +add_definitions(-D__GIT_VER__="${GIT_VER}") +add_definitions(-D__GIT_VER_HASH__="${GIT_VER_HASH}") + +project(dvmhost) +find_package(Threads REQUIRED) +add_executable(dvmhost ${dvmhost_SRC}) +target_include_directories(dvmhost PRIVATE .) +target_link_libraries(dvmhost PRIVATE Threads::Threads util) + +project(dvmcmd) +find_package(Threads REQUIRED) +add_executable(dvmcmd ${dvmcmd_SRC}) +target_link_libraries(dvmcmd PRIVATE Threads::Threads) +target_include_directories(dvmcmd PRIVATE .) diff --git a/Defines.h b/Defines.h index 05c2469c..f0ca0296 100644 --- a/Defines.h +++ b/Defines.h @@ -107,7 +107,7 @@ typedef unsigned long long ulong64_t; #define __PROG_NAME__ "Digital Voice Modem Host" #define __NET_NAME__ "DVM_DMR_P25" #define __EXE_NAME__ "dvmhost" -#define __VER__ "R02.00.69 (" __GIT_VER__ ")" +#define __VER__ "D03.00.00 (" __GIT_VER__ ")" #define __BUILD__ __DATE__ " " __TIME__ #define HOST_SW_API diff --git a/Makefile b/Makefile deleted file mode 100644 index 8fa318f5..00000000 --- a/Makefile +++ /dev/null @@ -1,208 +0,0 @@ -CC = gcc -CXX = g++ -STRIP = strip -armCC = arm-linux-gnueabihf-gcc -armCXX = arm-linux-gnueabihf-g++ -armSTRIP = arm-linux-gnueabihf-strip -aarch64CC = aarch64-linux-gnu-gcc -aarch64CXX = aarch64-linux-gnu-g++ -aarch64STRIP= aarch64-linux-gnu-strip -rpi-armCC = /opt/tools/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -rpi-armCXX = /opt/tools/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++ -rpi-armSTRIP= /opt/tools/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-strip - -CFLAGS = -g -O3 -Wall -std=c++0x -pthread -I. -HSTFLAGS= -DENABLE_DMR -DENABLE_P25 -CMDFLAGS = -I.. -LIBS = -lpthread -lutil -LDFLAGS = -g - -TAR_ARCH = -ifneq ($(ARCH),) -TAR_ARCH = "_$(ARCH)" -endif - -GITFLAGS= -GIT_VER = -GIT_VER_HASH = -ifneq ("$(wildcard .git)",) - GIT_VER = \"$(shell git describe --abbrev=8 --dirty --always --tags)\" - GIT_VER_HASH = \"$(shell git describe --abbrev=8 --always --tags)\" - GITFLAGS= -D__GIT_VER__=$(GIT_VER) -D__GIT_VER_HASH__=$(GIT_VER_HASH) -endif - -HOST_BIN = dvmhost -HOST_OBJECTS = \ - edac/AMBEFEC.o \ - edac/BCH.o \ - edac/BPTC19696.o \ - edac/CRC.o \ - edac/Golay2087.o \ - edac/Golay24128.o \ - edac/Hamming.o \ - edac/QR1676.o \ - edac/RS129.o \ - edac/RS634717.o \ - edac/SHA256.o \ - dmr/acl/AccessControl.o \ - dmr/data/Data.o \ - dmr/data/DataHeader.o \ - dmr/data/EMB.o \ - dmr/data/EmbeddedData.o \ - dmr/edac/Trellis.o \ - dmr/lc/CSBK.o \ - dmr/lc/FullLC.o \ - dmr/lc/LC.o \ - dmr/lc/PrivacyLC.o \ - dmr/lc/ShortLC.o \ - dmr/packet/ControlSignaling.o \ - dmr/packet/Data.o \ - dmr/packet/Voice.o \ - dmr/Control.o \ - dmr/Slot.o \ - dmr/SlotType.o \ - dmr/Sync.o \ - lookups/AffiliationLookup.o \ - lookups/IdenTableLookup.o \ - lookups/RadioIdLookup.o \ - lookups/RSSIInterpolator.o \ - lookups/TalkgroupIdLookup.o \ - nxdn/acl/AccessControl.o \ - nxdn/channel/CAC.o \ - nxdn/channel/FACCH1.o \ - nxdn/channel/LICH.o \ - nxdn/channel/SACCH.o \ - nxdn/channel/UDCH.o \ - nxdn/lc/PacketInformation.o \ - nxdn/lc/RCCH.o \ - nxdn/lc/RTCH.o \ - nxdn/packet/Data.o \ - nxdn/packet/Trunk.o \ - nxdn/packet/Voice.o \ - nxdn/Audio.o \ - nxdn/Control.o \ - nxdn/Convolution.o \ - nxdn/Sync.o \ - nxdn/NXDNUtils.o \ - p25/acl/AccessControl.o \ - p25/data/DataBlock.o \ - p25/data/DataHeader.o \ - p25/data/LowSpeedData.o \ - p25/dfsi/LC.o \ - p25/dfsi/packet/DFSITrunk.o \ - p25/dfsi/packet/DFSIVoice.o \ - p25/edac/Trellis.o \ - p25/lc/LC.o \ - p25/lc/TDULC.o \ - p25/lc/TSBK.o \ - p25/lookups/P25AffiliationLookup.o \ - p25/packet/Data.o \ - p25/packet/Trunk.o \ - p25/packet/Voice.o \ - p25/Audio.o \ - p25/Control.o \ - p25/NID.o \ - p25/Sync.o \ - p25/P25Utils.o \ - modem/port/IModemPort.o \ - modem/port/ISerialPort.o \ - modem/port/ModemNullPort.o \ - modem/port/UARTPort.o \ - modem/port/PseudoPTYPort.o \ - modem/port/UDPPort.o \ - modem/Modem.o \ - network/UDPSocket.o \ - network/RemoteControl.o \ - network/BaseNetwork.o \ - network/Network.o \ - yaml/Yaml.o \ - host/Console.o \ - host/calibrate/HostCal.o \ - host/setup/HostSetup.o \ - host/Host.o \ - Log.o \ - Mutex.o \ - Thread.o \ - Timer.o \ - StopWatch.o \ - Utils.o \ - HostMain.o -CMD_BIN = dvmcmd -CMD_OBJECTS = \ - remote/RemoteCommand.cmd.o \ - edac/SHA256.cmd.o \ - network/UDPSocket.cmd.o \ - Thread.cmd.o \ - Log.cmd.o \ - Utils.cmd.o - -.PHONY: dvmhost dvmcmd all strip clean install dpkg tarball - -all: dvmhost dvmcmd -dvmhost: $(HOST_OBJECTS) - $($(ARCH)CXX) $(HOST_OBJECTS) $(CFLAGS) $(HSTFLAGS) $(GITFLAGS) $(LIBS) -o $(HOST_BIN) -dvmcmd: $(CMD_OBJECTS) - $($(ARCH)CXX) $(CMD_OBJECTS) $(GITFLAGS) $(CFLAGS) $(CMDFLAGS) $(LIBS) -o $(CMD_BIN) -%.o: %.cpp - $($(ARCH)CXX) $(CFLAGS) $(HSTFLAGS) $(GITFLAGS) -c -o $@ $< -%.cmd.o: %.cpp - $($(ARCH)CXX) $(CFLAGS) $(HSTFLAGS) $(CMDFLAGS) $(GITFLAGS) -c -o $@ $< -strip: - -$($(ARCH)STRIP) $(HOST_BIN) - -$($(ARCH)STRIP) $(CMD_BIN) -clean: - $(RM) $(HOST_BIN) $(HOST_OBJECTS) $(CMD_BIN) $(CMD_OBJECTS) *.o *.d *.bak *~ - $(RM) -r dpkg_build tar_build - $(RM) dvmhost_1.0.0* dvmhost-dbgsym*.deb - -install: all - mkdir -p /opt/dvm/bin || true - install -m 755 $(HOST_BIN) /opt/dvm/bin/ - install -m 755 $(CMD_BIN) /opt/dvm/bin/ - mkdir -p /opt/dvm || true - install -m 644 config.example.yml /opt/dvm/config.yml - install -m 644 iden_table.dat /opt/dvm/iden_table.dat - install -m 644 RSSI.dat /opt/dvm/RSSI.dat - install -m 644 rid_acl.example.dat /opt/dvm/rid_acl.dat - install -m 644 tg_acl.example.dat /opt/dvm/tg_acl.dat - install -m 755 start-dvm.sh /opt/dvm - install -m 755 stop-dvm.sh /opt/dvm - install -m 755 dvm-watchdog.sh /opt/dvm - install -m 755 stop-watchdog.sh /opt/dvm - sed -i 's/filePath: ./filePath: \/opt\/dvm\/log\//' /opt/dvm/config.yml - sed -i 's/activityFilePath: ./activityFilePath: \/opt\/dvm\/log\//' /opt/dvm/config.yml - sed -i 's/file: iden_table.dat/file: \/opt\/dvm\/iden_table.dat/' /opt/dvm/config.yml - sed -i 's/file: rid_acl.dat/file: \/opt\/dvm\/rid_acl.dat/' /opt/dvm/config.yml - sed -i 's/file: tg_acl.dat/file: \/opt\/dvm\/tg_acl.dat/' /opt/dvm/config.yml - mkdir -p /opt/dvm/log || true - -dpkg: clean - which debuild || (echo "debuild is missing? Is 'devscripts' package installed?"; exit 1) - tar -caf ../dvmhost_1.0.0.orig.tar.gz --exclude=.git --exclude=.gitattributes --exclude=.gitignore --exclude=.vscode -v . - mv ../dvmhost_1.0.0.orig.tar.gz . - mkdir -p dpkg_build - cd dpkg_build; tar xvf ../dvmhost_1.0.0.orig.tar.gz .; debuild -us -uc -tarball: clean dvmhost dvmcmd strip - mkdir -p tar_build/dvm - mkdir -p tar_build/dvm/bin - cp -v $(HOST_BIN) tar_build/dvm/bin - cp -v $(CMD_BIN) tar_build/dvm/bin - cp *.sh tar_build/dvm - chmod +x tar_build/dvm/*.sh - cp -v config*.yml tar_build/dvm - cp -v *.dat tar_build/dvm - cd tar_build; tar czvf ../dvmhost_1.0.0$(TAR_ARCH).tar.gz * - -install-service: install - @useradd --user-group -M --system dvmhost --shell /bin/false || true - @usermod --groups dialout --append dvmhost || true - @chown dvmhost:dvmhost /opt/dvm/config.yml - @chown dvmhost:dvmhost /opt/dvm/iden_table.dat - @chown dvmhost:dvmhost /opt/dvm/RSSI.dat - @chown dvmhost:dvmhost /opt/dvm/rid_acl.dat - @chown dvmhost:dvmhost /opt/dvm/tg_acl.dat - @chown dvmhost:dvmhost /opt/dvm/log - @cp ./linux/dvmhost.service /lib/systemd/system/ - -uninstall-service: - @rm -f /lib/systemd/system/dvmhost.service || true