Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 27 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,24 +1,43 @@
name: ci.yaml
on:
- push
push:
pull_request:
jobs:
ci:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: ubuntu
os: ubuntu-latest
cmake_flags: -DCMAKE_BUILD_TYPE=Release
- name: ubuntu-sanitizers
os: ubuntu-latest
cmake_flags: -DCMAKE_BUILD_TYPE=Debug -DDEMUXUSB_SANITIZE=ON
- name: macos
os: macos-latest
cmake_flags: -DCMAKE_BUILD_TYPE=Release
name: ${{ matrix.name }}
runs-on: ${{ matrix.os }}
steps:
- name: Checkout code
uses: actions/checkout@v2
uses: actions/checkout@v4

- name: Install dependencies
- name: Install dependencies (Ubuntu)
if: runner.os == 'Linux'
run: |
sudo apt-get update
sudo apt-get install -y cmake pkg-config libplist-dev libboost-container-dev libplist++-dev libboost-filesystem-dev libboost-iostreams-dev libboost-test-dev
sudo apt-get install -y cmake pkg-config libplist-dev libboost-container-dev libboost-filesystem-dev libboost-iostreams-dev libboost-test-dev

- name: Install dependencies (macOS)
if: runner.os == 'macOS'
run: brew install pkg-config boost libplist

- name: Configure CMake
run: cmake -B build -DCMAKE_BUILD_TYPE=Release
run: cmake -B build ${{ matrix.cmake_flags }}

- name: Build
run: cmake --build build
run: cmake --build build --parallel

- name: Run tests
run: ctest --test-dir build --output-on-failure

3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.idea/
cmake-build-debug/
build/
build/
build-*/
50 changes: 34 additions & 16 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,31 +1,49 @@
cmake_minimum_required(VERSION 3.17)
project(demuxusb)
project(demuxusb CXX)
enable_testing()

find_package(PkgConfig REQUIRED)


set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

option(DEMUXUSB_SANITIZE "Build with address and undefined behaviour sanitizers" OFF)
if (DEMUXUSB_SANITIZE)
add_compile_options(-fsanitize=address,undefined -fno-sanitize-recover=undefined -fno-omit-frame-pointer)
add_link_options(-fsanitize=address,undefined)
endif ()

pkg_check_modules(PLIST REQUIRED IMPORTED_TARGET libplist-2.0)

find_package(Boost REQUIRED COMPONENTS container filesystem iostreams unit_test_framework)

add_executable(demuxusb src/main.cpp src/file/InputFile.cpp src/file/InputFile.h
src/usb/Device.cpp src/usb/Device.h src/protocol/MuxStream.cpp src/protocol/MuxStream.h src/file/PcapNGInputFile.cpp
src/file/PcapNGInputFile.h src/protocol/InterfaceExpert.cpp src/protocol/InterfaceExpert.h src/protocol/DFUInterfaceExpert.cpp
src/protocol/DFUInterfaceExpert.h src/protocol/RecoveryInterfaceExpert.cpp src/protocol/RecoveryInterfaceExpert.h
src/protocol/USBMUXInterfaceExpert.cpp src/protocol/USBMUXInterfaceExpert.h src/usb/USBDescriptor.cpp src/usb/USBDescriptor.h)

target_include_directories(demuxusb PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/ext)
target_precompile_headers(demuxusb PRIVATE src/demuxusb.hpp)
target_link_libraries(demuxusb PUBLIC PkgConfig::PLIST Boost::container
Boost::iostreams Boost::filesystem)
add_library(demuxusb_lib STATIC
src/file/InputFile.cpp src/file/InputFile.h
src/file/PcapNGInputFile.cpp src/file/PcapNGInputFile.h
src/file/PcapInputFile.cpp src/file/PcapInputFile.h
src/usb/Device.cpp src/usb/Device.h
src/protocol/MuxStream.cpp src/protocol/MuxStream.h
src/protocol/InterfaceExpert.cpp src/protocol/InterfaceExpert.h
src/protocol/DFUInterfaceExpert.cpp src/protocol/DFUInterfaceExpert.h
src/protocol/RecoveryInterfaceExpert.cpp src/protocol/RecoveryInterfaceExpert.h
src/protocol/USBMUXInterfaceExpert.cpp src/protocol/USBMUXInterfaceExpert.h)
set_target_properties(demuxusb_lib PROPERTIES OUTPUT_NAME demuxusb)

target_include_directories(demuxusb_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/src ${CMAKE_CURRENT_SOURCE_DIR}/ext)
target_compile_options(demuxusb_lib PRIVATE -Wall)
target_link_libraries(demuxusb_lib PUBLIC PkgConfig::PLIST Boost::container Boost::iostreams Boost::filesystem)
if (PLIST_VERSION VERSION_GREATER_EQUAL 2.3)
target_compile_definitions(demuxusb_lib PRIVATE HAVE_PLIST_MEM_FREE)
endif ()

add_executable(demuxusb src/main.cpp)
target_link_libraries(demuxusb PRIVATE demuxusb_lib)


# Testing framework
add_executable(demuxusb_test_suite test/test_main.cpp test/test_PcapNGInputFile.cpp)
target_precompile_headers(demuxusb_test_suite REUSE_FROM demuxusb)
target_link_libraries(demuxusb_test_suite PUBLIC Boost::unit_test_framework)
target_include_directories(demuxusb_test_suite PRIVATE ${Boost_INCLUDE_DIRS})
add_test(NAME tests COMMAND demuxusb_test_suite)
add_executable(demuxusb_test_suite test/test_main.cpp test/CaptureBuilder.h test/test_PcapNGInputFile.cpp
test/test_PcapInputFile.cpp test/test_Device.cpp test/test_USBMUX.cpp test/test_DFU.cpp
test/test_Recovery.cpp test/test_Robustness.cpp)
target_link_libraries(demuxusb_test_suite PRIVATE demuxusb_lib Boost::unit_test_framework)
add_test(NAME tests COMMAND demuxusb_test_suite)
Loading
Loading