Skip to content

Commit

Permalink
Добавлена поддержка Linux. Незначительные исправления.
Browse files Browse the repository at this point in the history
  • Loading branch information
KruFFT committed Jul 14, 2024
1 parent c451d7c commit fb1308b
Show file tree
Hide file tree
Showing 8 changed files with 292 additions and 193 deletions.
6 changes: 3 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ include(FetchContent)
FetchContent_Declare(
wxWidgets
GIT_REPOSITORY https://github.com/wxWidgets/wxWidgets.git
GIT_TAG v3.2.5
#GIT_TAG v3.2.5
GIT_SHALLOW ON
)
FetchContent_MakeAvailable(wxWidgets)
Expand All @@ -21,12 +21,12 @@ FetchContent_MakeAvailable(wxWidgets)
set(Sources "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}")
set(SRCS
${Sources}/Application.h
${Sources}/Application.cpp
${Sources}/Application.cpp
${Sources}/CANParser.h
${Sources}/CANParser.cpp
${Sources}/CircularFrameBuffer.h
${Sources}/CircularFrameBuffer.cpp
${Sources}/Common.h
${Sources}/Common.h
${Sources}/FormMain.h
${Sources}/FormMain.cpp
${Sources}/FramesContainer.h
Expand Down
120 changes: 102 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# wxCAN Sniffer - CAN bus sniffer (PC side)
# wxCAN-Sniffer - CAN bus sniffer (PC side)

#### Возможности
[TOC]

## Возможности
- Отображение передаваемых в CAN-шине пакетов
- Сохранение всех данных в журнал
- Отображение выбранных данных в двоичном и десятичном виде
Expand All @@ -10,28 +12,29 @@
## Статья
[О проекте](https://habr.com/ru/post/479672)

## Сборка приложения используя CMake
1. Понадобится [Visual Studio 2022 Community](https://visualstudio.microsoft.com/ru/downloads/) (используется компилятор и SDK)
2. Распаковать исходники
3. Запустить **Developer Command Prompt for VS 2022** и перейти в директорию с исходниками
4. Запустить подготовку проекта к сборке, будет автоматически скачан и подготовлен пакет **wxWidgets** в директорию `./build`:
## Сборка приложения в Windows
### Используя Windows CMake
1. Понадобится [Visual Studio 2022 Community](https://visualstudio.microsoft.com/ru/downloads/) (используется компилятор и SDK) и [CMake](https://cmake.org/download/)
2. Запустить **Developer Command Prompt for VS 2022** и перейти в директорию с исходниками
3. Запустить подготовку проекта к сборке, будет автоматически скачан и подготовлен пакет **wxWidgets** в директорию `./build`:
```sh
cmake -S . -B build
```
5. Запустить сборку (результат будет в `./build/Release`):
4. Запустить сборку (результат будет в `./build/Release`):
```sh
cmake --build build -j --config Release
```
6. Если необходима отладочная сборка (результат будет в `./build/Debug`):
5. Если необходима отладочная сборка (результат будет в `./build/Debug`):
```sh
cmake --build build -j
```
PS: Если по каким-либо причинам подготовка завершается с ошибкой, то в файле **CMakeLists.txt** можно убрать строку **GIT_TAG v3.2.5**. В таком случае, будет использоваться самая свежая версия wxWidgets.

## Сборка приложения используя Visual Studio 2022
Если по каким-либо причинам подготовка завершается с ошибкой, то в файле **CMakeLists.txt** можно указать версию wxWidgets раскомментировав строку **GIT_TAG v3.2.5** и задав в ней номер версии.

### Используя Visual Studio 2022 Community
Сначала необходимо собрать **wxWidgets** в static-режиме и потом само приложение.

#### Сборка wxWidgets
#### 1. Сборка Windows wxWidgets
1. Понадобится [Visual Studio 2022 Community](https://visualstudio.microsoft.com/ru/downloads/)
2. Скачать и установить [wxWidgets](https://www.wxwidgets.org/downloads/) если это установщик, либо распаковать, если это архив. Например в директорию `C:/wxWidget`
3. Создать переменную окружения `WXWIN` и присвоить ей значение директории `C:/wxWidget`
Expand All @@ -41,11 +44,92 @@ PS: Если по каким-либо причинам подготовка за
- для конфигурации **Debug** выбрать **/MTd**
- для конфигурации **Release** выбрать **/MT**
7. Нажать **Ok** и скомпилировать (**Ctrl+B**) библиотеки wxWidgets по очереди для Debug и Release конфигураций.
#### Сборка приложения в Visual Studio
1. Распаковать исходники
2. Открыть файл решения `wxCAN-Sniffer.sln`
3. Выбрать необходимую конфигурацию **Debug** или **Release**
4. Произвести сборку **F7** (результат будет в `./x64/Debug` и `./x64/Release` соответственно)


#### 2. Сборка приложения в Visual Studio
1. Открыть файл решения `wxCAN-Sniffer.sln`
2. Выбрать необходимую конфигурацию **Release** или **Debug**
3. Произвести сборку нажав **F7** (результат будет в `./x64/Release` или `./x64/Debug` соответственно)

## Сборка приложения в Linux
### Используя Linux CMake
1. Понадобится установить следующие пакеты:
```
sudo apt-get install build-essential
sudo apt-get install libgtk-3-dev
sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev
sudo apt-get install cmake
```
2. Запустить подготовку проекта к сборке, будет автоматически скачан и подготовлен пакет **wxWidgets** в директорию `./build-release`:
```sh
cmake -S . -B build-release -DCMAKE_BUILD_TYPE=Release
```
или отладчной сборки в `./build-debug`:
```sh
cmake -S . -B build-debug -DCMAKE_BUILD_TYPE=Debug
```
3. Запустить сборку Release (результат будет в `./build-release`):
```sh
cmake --build build-release -j
```
или Debug (результат будет в `./build-debug`):
```sh
cmake --build build-debug -j
```

По каким-то причинам, сборка через CMake в Linux требует огромных ресурсов памяти. На компьютере с 8 ГБ оперативной памяти сборка не завершалась. Помогло увеличение размера swap-файла до 64 ГБ:
```
sudo swapoff /swapfile
sudo fallocate -l 64G /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
```

Если по каким-либо причинам подготовка завершается с ошибкой, то в файле **CMakeLists.txt** можно указать версию wxWidgets раскомментировав строку **GIT_TAG v3.2.5** и задав в ней номер версии.

### Используя Visual Studio Code
#### 1. Сборка Linux wxWidgets
1. Понадобится [Visual Studio Code](https://code.visualstudio.com/download/) и установить следующие пакеты:
```
sudo apt-get install build-essential
sudo apt-get install libgtk-3-dev
sudo apt-get install libglu1-mesa-dev freeglut3-dev mesa-common-dev
```
2. Скачать и установить wxWidgets:
```
git clone https://github.com/wxWidgets/wxWidgets.git
```
3. Обновить необходимые зависимости:
```
cd wxWidgets
git submodule update --init src/stc/scintilla
git submodule update --init src/stc/lexilla
git submodule update --init 3rdparty/catch
git submodule update --init 3rdparty/nanosvg
```
4. Подготовить директорию `./gtk-build` для сборки и запустить настройку:
```
mkdir gtk-build
cd gtk-build
../configure --with-gtk=3 --with-opengl --disable-shared
```
5. Запустить сборку (использовать 8 потоков):
```
make -j8
```
6. Установить собранный пакет в систему:
```
sudo make install
sudo ldconfig
```
7. Скопировать файл **setup.h** (обратите внимание на номер версии в директориях, если версия отличается от 3.3, то их надо поправить):
```
sudo cp ./lib/wx/include/gtk3-unicode-static-3.3/wx/setup.h /usr/local/include/wx-3.3/wx
```

#### 2. Сборка приложения в Visual Studio Code
1. Открыть директорию проекта `./wxCAN-Sniffer/wxCAN-Sniffer` в редакторе Visual Studio Code
2. Открыть файл **Application.cpp**
3. В меню **Terminal** выбрать пункт **Run Task**, выбрать необходимую конфигурацию **C/C++: GCC build release** или **C/C++: GCC build debug** (результат будет в этой же директории)

## License
MIT
7 changes: 7 additions & 0 deletions wxCAN-Sniffer.sln
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,12 @@ EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{D6E6DD6C-F675-4E06-ACA2-D5C0B6EAF174}"
ProjectSection(SolutionItems) = preProject
CMakeLists.txt = CMakeLists.txt
wxCAN-Sniffer\.vscode\c_cpp_properties.json = wxCAN-Sniffer\.vscode\c_cpp_properties.json
wxCAN-Sniffer\.vscode\launch.json = wxCAN-Sniffer\.vscode\launch.json
LICENSE = LICENSE
README.md = README.md
wxCAN-Sniffer\.vscode\settings.json = wxCAN-Sniffer\.vscode\settings.json
wxCAN-Sniffer\.vscode\tasks.json = wxCAN-Sniffer\.vscode\tasks.json
EndProjectSection
EndProject
Global
Expand All @@ -26,4 +30,7 @@ Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {13BEFDE9-4814-4D22-B5B7-6E9DD93F6D5A}
EndGlobalSection
EndGlobal
35 changes: 18 additions & 17 deletions wxCAN-Sniffer/.vscode/c_cpp_properties.json
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
{
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/include",
"/usr/include/x86_64-linux-gnu",
"/usr/local/include/wx-3.2"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "c++20",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**",
"/usr/include",
"/usr/include/x86_64-linux-gnu",
"/usr/local/include/wx-3.3",
"/usr/local/include/wx-3.2"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "c17",
"cppStandard": "c++20",
"intelliSenseMode": "linux-gcc-x64"
}
],
"version": 4
}
102 changes: 51 additions & 51 deletions wxCAN-Sniffer/.vscode/launch.json
Original file line number Diff line number Diff line change
@@ -1,57 +1,57 @@
{
"configurations": [
"configurations": [
{
"name": "C/C++: GCC build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/wxCAN-Sniffer",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"name": "C/C++: GCC build and debug active file",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/wxCAN-Sniffer",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: GCC debug build",
"miDebuggerPath": "/usr/bin/gdb"
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"name": "C/C++: GCC build release",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/wxCAN-Sniffer",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: GCC release build",
"miDebuggerPath": "/usr/bin/gdb"
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"version": "2.0.0"
],
"preLaunchTask": "C/C++: GCC build debug",
"miDebuggerPath": "/usr/bin/gdb"
},
{
"name": "C/C++: GCC build release",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}/wxCAN-Sniffer",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "Set Disassembly Flavor to Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "C/C++: GCC build release",
"miDebuggerPath": "/usr/bin/gdb"
}
],
"version": "2.0.0"
}
Loading

0 comments on commit fb1308b

Please sign in to comment.