Feature/cmake migration #1

Merged
KofTwentyTwo merged 4 commits from feature/cmake-migration into main 2025-08-15 22:14:22 +00:00
24 changed files with 1287 additions and 1097 deletions

No files matched your search

+85 -17
View File
@@ -67,11 +67,68 @@ jobs:
echo "Is Release: ${{ steps.version.outputs.is-release }}"
echo "Tag: ${{ steps.version.outputs.tag }}"
test:
name: Run Unit Tests
cmake-build:
name: CMake Build and Test
runs-on: ubuntu-latest
needs: version
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup CMake
uses: jwlawson/actions-setup-cmake@v1.13
with:
cmake-version: '4.1.0'
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install PlatformIO
run: |
python -m pip install --upgrade pip
pip install platformio==${{ env.PLATFORMIO_VERSION }}
- name: Cache PlatformIO packages
uses: actions/cache@v3
with:
path: |
~/.platformio
~/.cache/pip
key: ${{ runner.os }}-pio-${{ hashFiles('**/platformio.ini') }}
restore-keys: |
${{ runner.os }}-pio-
- name: Configure CMake
working-directory: ./code/RocketLauncher
run: |
cmake --preset default
- name: Build CMake Project
working-directory: ./code/RocketLauncher
run: |
cmake --build . --preset default
- name: Run CMake Tests
working-directory: ./code/RocketLauncher
run: |
ctest --preset default --output-on-failure
- name: Upload CMake test results
uses: actions/upload-artifact@v4
if: always()
with:
name: cmake-test-results
path: ./code/RocketLauncher/build/
retention-days: 30
test:
name: Run PlatformIO Unit Tests
runs-on: ubuntu-latest
needs: [version, cmake-build]
steps:
- name: Checkout code
uses: actions/checkout@v4
@@ -96,23 +153,23 @@ jobs:
restore-keys: |
${{ runner.os }}-pio-
- name: Run Unit Tests
- name: Run PlatformIO Unit Tests
working-directory: ./code/RocketLauncher
run: |
pio test -e native
- name: Upload test results
- name: Upload PlatformIO test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results
name: platformio-test-results
path: ./code/RocketLauncher/.pio/test/native/
retention-days: 30
build-simulation:
name: Build Simulation Firmware
runs-on: ubuntu-latest
needs: [version, test]
needs: [version, cmake-build, test]
steps:
- name: Checkout code
@@ -164,7 +221,7 @@ jobs:
build-hardware:
name: Build Hardware Firmware
runs-on: ubuntu-latest
needs: [version, test]
needs: [version, cmake-build, test]
steps:
- name: Checkout code
@@ -204,8 +261,6 @@ jobs:
./code/RocketLauncher/.pio/build/uno_hw/firmware.elf
retention-days: 90
create-tag:
name: Create Git Tag
runs-on: ubuntu-latest
@@ -262,9 +317,10 @@ jobs:
## 🚀 Luke's Rocket Launcher v${{ needs.version.outputs.version }}
### What's New
- Automated build and testing
- Automated build and testing with CMake
- Pre-compiled firmware for Arduino and SimulIDE
- Comprehensive unit test coverage
- Modern CMake build system for IDE integration
### Downloads
- **Simulation Firmware**: For SimulIDE testing
@@ -279,6 +335,7 @@ jobs:
- **Version**: ${{ needs.version.outputs.version }}
- **Build Date**: ${{ github.event.head_commit.timestamp }}
- **Commit**: ${{ github.sha }}
- **Build System**: CMake + PlatformIO
draft: false
prerelease: false
@@ -367,7 +424,7 @@ jobs:
### For Hardware
1. Download the package
2. Use Arduino IDE or PlatformIO to upload `firmware/hardware/firmware.hex`
3. Or use `make upload` from the project directory
3. Or use `./scripts/build.sh upload` from the project directory
### For Simulation
1. Download the package
@@ -380,6 +437,7 @@ jobs:
- **Built on**: ${{ github.event.head_commit.timestamp }}
- **Commit**: ${{ github.sha }}
- **Platform**: ${{ runner.os }}
- **Build System**: CMake + PlatformIO
## 📚 Documentation
- [Project README](https://github.com/KofTwentyTwo/Lukes-Rocket-Launcher#readme)
@@ -406,7 +464,7 @@ jobs:
build-status:
name: Build Status Report
runs-on: ubuntu-latest
needs: [test, build-simulation, build-hardware]
needs: [cmake-build, test, build-simulation, build-hardware]
if: always()
steps:
@@ -422,10 +480,16 @@ jobs:
echo "**Branch:** ${{ github.ref_name }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ needs.test.result }}" == "success" ]; then
echo "✅ **Tests:** PASSED" >> $GITHUB_STEP_SUMMARY
if [ "${{ needs.cmake-build.result }}" == "success" ]; then
echo "✅ **CMake Build:** SUCCESS" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **Tests:** FAILED" >> $GITHUB_STEP_SUMMARY
echo "❌ **CMake Build:** FAILED" >> $GITHUB_STEP_SUMMARY
fi
if [ "${{ needs.test.result }}" == "success" ]; then
echo "✅ **PlatformIO Tests:** PASSED" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **PlatformIO Tests:** FAILED" >> $GITHUB_STEP_SUMMARY
fi
if [ "${{ needs.build-simulation.result }}" == "success" ]; then
@@ -441,6 +505,7 @@ jobs:
fi
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Build System:** CMake + PlatformIO" >> $GITHUB_STEP_SUMMARY
echo "**Firmware files are available as artifacts above.**" >> $GITHUB_STEP_SUMMARY
publish-package:
@@ -503,7 +568,9 @@ jobs:
"launcher",
"firmware",
"simulide",
"3d-printing"
"3d-printing",
"cmake",
"platformio"
],
"author": "KofTwentyTwo",
"license": "MIT",
@@ -556,7 +623,7 @@ jobs:
### For Hardware
1. Download the package
2. Use Arduino IDE or PlatformIO to upload \`firmware/hardware/firmware.hex\`
3. Or use \`make upload\` from the project directory
3. Or use \`./scripts/build.sh upload\` from the project directory
### For Simulation
1. Download the package
@@ -569,6 +636,7 @@ jobs:
- **Built on**: ${{ github.event.head_commit.timestamp }}
- **Commit**: ${{ github.sha }}
- **Platform**: ${{ runner.os }}
- **Build System**: CMake + PlatformIO
## 📚 Documentation
- [Project README](https://github.com/KofTwentyTwo/Lukes-Rocket-Launcher#readme)
+1
View File
@@ -53,3 +53,4 @@ dkms.conf
# debug information files
*.dwo
/code/RocketLauncher/.pio/
File renamed without changes.
Generated
+1
View File
@@ -0,0 +1 @@
RocketLauncher
+2
View File
@@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<module classpath="CMake" type="CPP_MODULE" version="4" />
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakeSharedSettings">
<configurations>
<configuration PROFILE_NAME="Debug" ENABLED="true" CONFIG_NAME="Debug" GENERATION_OPTIONS="-G Ninja" />
</configurations>
</component>
</project>
+16
View File
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CMakePythonSetting">
<option name="pythonIntegrationState" value="YES" />
</component>
<component name="CMakeWorkspace" PROJECT_DIR="$PROJECT_DIR$/code/RocketLauncher">
<contentRoot DIR="$PROJECT_DIR$" />
</component>
<component name="CidrRootsConfiguration">
<excludeRoots>
<file path="$PROJECT_DIR$/code/RocketLauncher/.pio" />
<file path="$PROJECT_DIR$/code/RocketLauncher/.venv" />
<file path="$PROJECT_DIR$/code/RocketLauncher/.vscode" />
</excludeRoots>
</component>
</project>
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/Lukes-Rocket-Launcher.iml" filepath="$PROJECT_DIR$/.idea/Lukes-Rocket-Launcher.iml" />
</modules>
</component>
</project>
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
<mapping directory="" vcs="Git" />
</component>
</project>
+70 -2
View File
@@ -1,2 +1,70 @@
.pio
build
# CMake build directories
build/
build-*/
out/
# CMake generated files
CMakeCache.txt
CMakeFiles/
cmake_install.cmake
Makefile
*.cmake
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
rocket_tests
# Arduino specific
*.hex
*.elf
*.eep
*.lss
*.map
*.sym
# IDE files
.vscode/settings.json
.idea/
*.swp
*.swo
*~
# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Logs
*.log
*.tmp
# Unity test framework
lib/Unity/
external/Unity/
-12
View File
@@ -1,12 +0,0 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<RiderCodeStyleSettings>
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/EnableClangFormatSupport/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/ExecutableToUse/@EntryValue" value="Custom" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/ExternalClangFormatPath/@EntryValue" value="/opt/homebrew/bin/clang-format" type="string" />
</RiderCodeStyleSettings>
<clangFormatSettings>
<option name="ENABLED" value="true" />
</clangFormatSettings>
</code_scheme>
</component>
@@ -1,5 +0,0 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>
-437
View File
@@ -1,437 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DBNavigator.Project.DDLFileAttachmentManager">
<mappings />
<preferences />
</component>
<component name="DBNavigator.Project.DatabaseAssistantManager">
<assistants />
</component>
<component name="DBNavigator.Project.DatabaseFileManager">
<open-files />
</component>
<component name="DBNavigator.Project.Settings">
<connections />
<browser-settings>
<general>
<display-mode value="TABBED" />
<navigation-history-size value="100" />
<show-object-details value="false" />
<enable-sticky-paths value="true" />
<enable-quick-filters value="false" />
</general>
<filters>
<object-type-filter>
<object-type name="SCHEMA" enabled="true" />
<object-type name="USER" enabled="true" />
<object-type name="ROLE" enabled="true" />
<object-type name="PRIVILEGE" enabled="true" />
<object-type name="CHARSET" enabled="true" />
<object-type name="TABLE" enabled="true" />
<object-type name="VIEW" enabled="true" />
<object-type name="JSON_VIEW" enabled="true" />
<object-type name="MATERIALIZED_VIEW" enabled="true" />
<object-type name="NESTED_TABLE" enabled="true" />
<object-type name="COLUMN" enabled="true" />
<object-type name="INDEX" enabled="true" />
<object-type name="CONSTRAINT" enabled="true" />
<object-type name="DATASET_TRIGGER" enabled="true" />
<object-type name="DATABASE_TRIGGER" enabled="true" />
<object-type name="SYNONYM" enabled="true" />
<object-type name="SEQUENCE" enabled="true" />
<object-type name="PROCEDURE" enabled="true" />
<object-type name="FUNCTION" enabled="true" />
<object-type name="PACKAGE" enabled="true" />
<object-type name="TYPE" enabled="true" />
<object-type name="TYPE_ATTRIBUTE" enabled="true" />
<object-type name="ARGUMENT" enabled="true" />
<object-type name="JAVA_CLASS" enabled="true" />
<object-type name="JAVA_FIELD" enabled="true" />
<object-type name="JAVA_METHOD" enabled="true" />
<object-type name="JAVA_RESOURCE" enabled="true" />
<object-type name="DIMENSION" enabled="true" />
<object-type name="CLUSTER" enabled="true" />
<object-type name="DBLINK" enabled="true" />
<object-type name="CREDENTIAL" enabled="true" />
<object-type name="AI_PROFILE" enabled="true" />
</object-type-filter>
</filters>
<sorting>
<object-type name="COLUMN" sorting-type="NAME" />
<object-type name="FUNCTION" sorting-type="NAME" />
<object-type name="PROCEDURE" sorting-type="NAME" />
<object-type name="ARGUMENT" sorting-type="POSITION" />
<object-type name="TYPE ATTRIBUTE" sorting-type="POSITION" />
</sorting>
<default-editors>
<object-type name="VIEW" editor-type="SELECTION" />
<object-type name="PACKAGE" editor-type="SELECTION" />
<object-type name="TYPE" editor-type="SELECTION" />
</default-editors>
</browser-settings>
<navigation-settings>
<lookup-filters>
<lookup-objects>
<object-type name="SCHEMA" enabled="true" />
<object-type name="USER" enabled="false" />
<object-type name="ROLE" enabled="false" />
<object-type name="PRIVILEGE" enabled="false" />
<object-type name="CHARSET" enabled="false" />
<object-type name="TABLE" enabled="true" />
<object-type name="VIEW" enabled="true" />
<object-type name="JSON VIEW" enabled="true" />
<object-type name="MATERIALIZED VIEW" enabled="true" />
<object-type name="INDEX" enabled="true" />
<object-type name="CONSTRAINT" enabled="true" />
<object-type name="DATASET TRIGGER" enabled="true" />
<object-type name="DATABASE TRIGGER" enabled="true" />
<object-type name="SYNONYM" enabled="false" />
<object-type name="SEQUENCE" enabled="true" />
<object-type name="PROCEDURE" enabled="true" />
<object-type name="FUNCTION" enabled="true" />
<object-type name="PACKAGE" enabled="true" />
<object-type name="TYPE" enabled="true" />
<object-type name="JAVA CLASS" enabled="true" />
<object-type name="INNER CLASS" enabled="true" />
<object-type name="JAVA FIELD" enabled="true" />
<object-type name="JAVA METHOD" enabled="true" />
<object-type name="JAVA PARAMETER" enabled="true" />
<object-type name="JAVA RESOURCE" enabled="true" />
<object-type name="DIMENSION" enabled="false" />
<object-type name="CLUSTER" enabled="false" />
<object-type name="DBLINK" enabled="false" />
<object-type name="CREDENTIAL" enabled="false" />
</lookup-objects>
<force-database-load value="false" />
<prompt-connection-selection value="true" />
<prompt-schema-selection value="true" />
</lookup-filters>
</navigation-settings>
<dataset-grid-settings>
<general>
<enable-zooming value="true" />
<enable-column-tooltip value="true" />
</general>
<sorting>
<nulls-first value="true" />
<max-sorting-columns value="4" />
</sorting>
<audit-columns>
<column-names value="" />
<visible value="true" />
<editable value="false" />
</audit-columns>
</dataset-grid-settings>
<dataset-editor-settings>
<text-editor-popup>
<active value="false" />
<active-if-empty value="false" />
<data-length-threshold value="100" />
<popup-delay value="1000" />
</text-editor-popup>
<values-actions-popup>
<show-popup-button value="true" />
<element-count-threshold value="1000" />
<data-length-threshold value="250" />
</values-actions-popup>
<general>
<fetch-block-size value="100" />
<fetch-timeout value="30" />
<trim-whitespaces value="true" />
<convert-empty-strings-to-null value="true" />
<select-content-on-cell-edit value="true" />
<large-value-preview-active value="true" />
</general>
<filters>
<prompt-filter-dialog value="true" />
<default-filter-type value="BASIC" />
</filters>
<qualified-text-editor text-length-threshold="300">
<content-types>
<content-type name="Text" enabled="true" />
<content-type name="XML" enabled="true" />
<content-type name="DTD" enabled="true" />
<content-type name="HTML" enabled="true" />
<content-type name="XHTML" enabled="true" />
<content-type name="CSS" enabled="true" />
<content-type name="SQL" enabled="true" />
<content-type name="PL/SQL" enabled="true" />
<content-type name="JavaScript" enabled="true" />
<content-type name="JSON" enabled="true" />
<content-type name="JSON5" enabled="true" />
<content-type name="YAML" enabled="true" />
</content-types>
</qualified-text-editor>
<record-navigation>
<navigation-target value="VIEWER" />
</record-navigation>
</dataset-editor-settings>
<code-editor-settings>
<general>
<show-object-navigation-gutter value="false" />
<show-spec-declaration-navigation-gutter value="true" />
<enable-spellchecking value="true" />
<enable-reference-spellchecking value="false" />
</general>
<confirmations>
<save-changes value="false" />
<revert-changes value="true" />
<exit-on-changes value="ASK" />
</confirmations>
</code-editor-settings>
<code-completion-settings>
<filters>
<basic-filter>
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
<filter-element type="RESERVED_WORD" id="function" selected="true" />
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
<filter-element type="OBJECT" id="schema" selected="true" />
<filter-element type="OBJECT" id="role" selected="true" />
<filter-element type="OBJECT" id="user" selected="true" />
<filter-element type="OBJECT" id="privilege" selected="true" />
<user-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="json view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="false" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</user-schema>
<public-schema>
<filter-element type="OBJECT" id="table" selected="false" />
<filter-element type="OBJECT" id="view" selected="false" />
<filter-element type="OBJECT" id="json view" selected="false" />
<filter-element type="OBJECT" id="materialized view" selected="false" />
<filter-element type="OBJECT" id="index" selected="false" />
<filter-element type="OBJECT" id="constraint" selected="false" />
<filter-element type="OBJECT" id="trigger" selected="false" />
<filter-element type="OBJECT" id="synonym" selected="false" />
<filter-element type="OBJECT" id="sequence" selected="false" />
<filter-element type="OBJECT" id="procedure" selected="false" />
<filter-element type="OBJECT" id="function" selected="false" />
<filter-element type="OBJECT" id="package" selected="false" />
<filter-element type="OBJECT" id="type" selected="false" />
<filter-element type="OBJECT" id="dimension" selected="false" />
<filter-element type="OBJECT" id="cluster" selected="false" />
<filter-element type="OBJECT" id="dblink" selected="false" />
</public-schema>
<any-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="json view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</any-schema>
</basic-filter>
<extended-filter>
<filter-element type="RESERVED_WORD" id="keyword" selected="true" />
<filter-element type="RESERVED_WORD" id="function" selected="true" />
<filter-element type="RESERVED_WORD" id="parameter" selected="true" />
<filter-element type="RESERVED_WORD" id="datatype" selected="true" />
<filter-element type="RESERVED_WORD" id="exception" selected="true" />
<filter-element type="OBJECT" id="schema" selected="true" />
<filter-element type="OBJECT" id="user" selected="true" />
<filter-element type="OBJECT" id="role" selected="true" />
<filter-element type="OBJECT" id="privilege" selected="true" />
<user-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="json view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</user-schema>
<public-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="json view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</public-schema>
<any-schema>
<filter-element type="OBJECT" id="table" selected="true" />
<filter-element type="OBJECT" id="view" selected="true" />
<filter-element type="OBJECT" id="json view" selected="true" />
<filter-element type="OBJECT" id="materialized view" selected="true" />
<filter-element type="OBJECT" id="index" selected="true" />
<filter-element type="OBJECT" id="constraint" selected="true" />
<filter-element type="OBJECT" id="trigger" selected="true" />
<filter-element type="OBJECT" id="synonym" selected="true" />
<filter-element type="OBJECT" id="sequence" selected="true" />
<filter-element type="OBJECT" id="procedure" selected="true" />
<filter-element type="OBJECT" id="function" selected="true" />
<filter-element type="OBJECT" id="package" selected="true" />
<filter-element type="OBJECT" id="type" selected="true" />
<filter-element type="OBJECT" id="dimension" selected="true" />
<filter-element type="OBJECT" id="cluster" selected="true" />
<filter-element type="OBJECT" id="dblink" selected="true" />
</any-schema>
</extended-filter>
</filters>
<sorting enabled="true">
<sorting-element type="RESERVED_WORD" id="keyword" />
<sorting-element type="RESERVED_WORD" id="datatype" />
<sorting-element type="OBJECT" id="column" />
<sorting-element type="OBJECT" id="table" />
<sorting-element type="OBJECT" id="view" />
<sorting-element type="OBJECT" id="json view" />
<sorting-element type="OBJECT" id="materialized view" />
<sorting-element type="OBJECT" id="index" />
<sorting-element type="OBJECT" id="constraint" />
<sorting-element type="OBJECT" id="trigger" />
<sorting-element type="OBJECT" id="synonym" />
<sorting-element type="OBJECT" id="sequence" />
<sorting-element type="OBJECT" id="procedure" />
<sorting-element type="OBJECT" id="function" />
<sorting-element type="OBJECT" id="package" />
<sorting-element type="OBJECT" id="type" />
<sorting-element type="OBJECT" id="dimension" />
<sorting-element type="OBJECT" id="cluster" />
<sorting-element type="OBJECT" id="dblink" />
<sorting-element type="OBJECT" id="schema" />
<sorting-element type="OBJECT" id="role" />
<sorting-element type="OBJECT" id="user" />
<sorting-element type="RESERVED_WORD" id="function" />
<sorting-element type="RESERVED_WORD" id="parameter" />
</sorting>
<format>
<enforce-code-style-case value="true" />
</format>
</code-completion-settings>
<execution-engine-settings>
<statement-execution>
<fetch-block-size value="100" />
<execution-timeout value="20" />
<debug-execution-timeout value="600" />
<focus-result value="false" />
<prompt-execution value="false" />
</statement-execution>
<script-execution>
<command-line-interfaces />
<execution-timeout value="300" />
</script-execution>
<method-execution>
<execution-timeout value="30" />
<debug-execution-timeout value="600" />
<parameter-history-size value="10" />
</method-execution>
</execution-engine-settings>
<operation-settings>
<transactions>
<uncommitted-changes>
<on-project-close value="ASK" />
<on-disconnect value="ASK" />
<on-autocommit-toggle value="ASK" />
</uncommitted-changes>
<multiple-uncommitted-changes>
<on-commit value="ASK" />
<on-rollback value="ASK" />
</multiple-uncommitted-changes>
</transactions>
<session-browser>
<disconnect-session value="ASK" />
<kill-session value="ASK" />
<reload-on-filter-change value="false" />
</session-browser>
<compiler>
<compile-type value="KEEP" />
<compile-dependencies value="ASK" />
<always-show-controls value="false" />
</compiler>
</operation-settings>
<ddl-file-settings>
<extensions>
<mapping file-type-id="VIEW" extensions="vw" />
<mapping file-type-id="TRIGGER" extensions="trg" />
<mapping file-type-id="PROCEDURE" extensions="prc" />
<mapping file-type-id="FUNCTION" extensions="fnc" />
<mapping file-type-id="PACKAGE" extensions="pkg" />
<mapping file-type-id="PACKAGE_SPEC" extensions="pks" />
<mapping file-type-id="PACKAGE_BODY" extensions="pkb" />
<mapping file-type-id="TYPE" extensions="tpe" />
<mapping file-type-id="TYPE_SPEC" extensions="tps" />
<mapping file-type-id="TYPE_BODY" extensions="tpb" />
<mapping file-type-id="JAVA_SOURCE" extensions="sql" />
</extensions>
<general>
<lookup-ddl-files value="true" />
<create-ddl-files value="false" />
<synchronize-ddl-files value="true" />
<use-qualified-names value="false" />
<make-scripts-rerunnable value="true" />
</general>
</ddl-file-settings>
<assistant-settings>
<credential-settings>
<credentials />
</credential-settings>
</assistant-settings>
<general-settings>
<regional-settings>
<date-format value="MEDIUM" />
<number-format value="UNGROUPED" />
<locale value="SYSTEM_DEFAULT" />
<use-custom-formats value="false" />
</regional-settings>
<environment>
<environment-types>
<environment-type id="development" name="Development" description="Development environment" color="-2430209/-12296320" readonly-code="false" readonly-data="false" />
<environment-type id="integration" name="Integration" description="Integration environment" color="-2621494/-12163514" readonly-code="true" readonly-data="false" />
<environment-type id="production" name="Production" description="Productive environment" color="-11574/-10271420" readonly-code="true" readonly-data="true" />
<environment-type id="other" name="Other" description="" color="-1576/-10724543" readonly-code="false" readonly-data="false" />
</environment-types>
<visibility-settings>
<connection-tabs value="true" />
<dialog-headers value="true" />
<object-editor-tabs value="true" />
<script-editor-tabs value="false" />
<execution-result-tabs value="true" />
</visibility-settings>
</environment>
</general-settings>
</component>
</project>
-8
View File
@@ -1,8 +0,0 @@
<component name="ProjectDictionaryState">
<dictionary name="project">
<words>
<w>simulide</w>
<w>thomasfredericks</w>
</words>
</dictionary>
</component>
-251
View File
@@ -1,251 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="BackendCodeEditorSettings">
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CDeclarationWithImplicitIntType/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CommentTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=ConstevalIfIsAlwaysConstant/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractClassWithoutSpecifier/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractFinalClass/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAbstractVirtualFunctionCallInCtor/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAccessSpecifierWithNoDeclarations/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppAwaiterTypeIsNotClass/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBooleanIncrementExpression/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatBadCode/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatLegacyCode/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatMixedArgs/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooFewArgs/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppBoostFormatTooManyArgs/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCVQualifierCanNotBeAppliedToReference/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassCanBeFinal/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassIsIncomplete/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeedsConstructorBecauseOfUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppClassNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCompileTimeConstantCanBeReplacedWithBooleanConstant/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConceptNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConditionalExpressionCanBeSimplified/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppConstValueFunctionReturnType/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppCoroutineCallResolveError/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAArrayIndexOutOfBounds/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantConditions/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantFunctionResult/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAConstantParameter/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFADeletedPointer/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAEndlessLoop/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInfiniteRecursion/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAInvalidatedMemory/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALocalValueEscapesScope/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFALoopConditionNotUpdated/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAMemoryLeak/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANotInitializedField/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFANullDereference/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFATimeOver/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableCode/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreachableFunctionCall/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnreadVariable/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDFAUnusedValue/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesLocal/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationHidesUncapturedLocal/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclarationSpecifierWithoutDeclarators/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorDisambiguatedAsFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeclaratorUsedBeforeInitialization/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultCaseNotHandledInSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultInitializationWithNoUserConstructor/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultIsUsedAsIdentifier/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDefaultedSpecialMemberFunctionIsImplicitlyDeleted/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeletingVoidPointer/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTemplateWithoutTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDependentTypeWithoutTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedEntity/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedOverridenMethod/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDeprecatedRegisterStorageClassSpecifier/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDereferenceOperatorLimitExceeded/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDiscardedPostfixOperatorResult/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenSyntaxError/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUndocumentedParameter/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppDoxygenUnresolvedReference/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEmptyDeclaration/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersOrder/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceCVQualifiersPlacement/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceDoStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceForStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceFunctionDeclarationStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceIfStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceNestedNamespacesStyle/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingDestructorStyle/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceOverridingFunctionStyle/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceTypeAliasCodeStyle/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnforceWhileStatementBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityAssignedButNoRead/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEntityUsedOnlyInUnevaluatedContext/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEnumeratorNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEqualOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppEvaluationFailure/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExplicitSpecializationInNonNamespaceScope/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppExpressionWithoutSideEffects/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalFunctionInFinalClass/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFinalNonOverridingVirtualFunction/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForLoopCanBeReplacedWithWhile/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppForwardEnumDeclarationWithoutUnderlyingType/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionDoesntReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionResultShouldBeUsed/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppFunctionalStyleCast/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHeaderHasBeenAlreadyIncluded/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHiddenFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppHidingFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIdenticalOperandsInBinaryExpression/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIfCanBeReplacedByConstexprIf/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppImplicitDefaultConstructorNotAvailable/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompatiblePointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIncompleteSwitchStatement/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInconsistentNaming/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppIntegralToPointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppInvalidLineContinuation/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppJoinDeclarationAndAssignment/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLambdaCaptureNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMayBeConst/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLocalVariableWithNonTrivialDtorIsNeverUsed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppLongFloat/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeConst/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberFunctionMayBeStatic/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMemberInitializersOrder/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMismatchedClassTags/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingIncludeGuard/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMissingKeywordThrow/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppModulePartitionWithSeveralPartitionUnits/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtAddressOfClassRValue/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtBindingRValueToLvalueReference/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtCopyElisionInCopyInitDeclarator/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtDoubleUserConversionInCopyInit/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtNotInitializedStaticConstLocalVar/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMsExtReinterpretCastFromNullptr/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterLiteral/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMultiCharacterWideLiteral/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMustBePublicVirtualToImplementInterface/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppMutableSpecifierOnReferenceMember/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNoDiscardExpression/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNodiscardFunctionWithoutReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExceptionSafeResourceAcquisition/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConversionOperator/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonExplicitConvertingConstructor/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineFunctionDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNonInlineVariableDefinitionInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppNotAllPathsReturnValue/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppObjectMemberMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppOutParameterMustBeWritten/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConst/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterMayBeConstPtrOrRef/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNamesMismatch/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPassValueParameterByConstReference/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerConversionDropsQualifiers/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPointerToIntegralConversion/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPolymorphicClassWithNonVirtualPublicDestructor/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyErroneousEmptyStatements/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUninitializedMember/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPossiblyUnintendedObjectSlicing/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderIsNotIncluded/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrecompiledHeaderNotFound/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfBadFormat/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfExtraArg/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfMissedArg/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrintfRiskyFormat/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppPrivateSpecialMemberFunctionIsNotImplemented/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRangeBasedForIncompatibleReference/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedefinitionOfDefaultArgumentInOverrideFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassAccessSpecifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBaseClassInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantBooleanExpressionArgument/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantCastExpression/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantComplexityInComparison/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConditionalExpression/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantConstSpecifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantControlFlowJump/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantDereferencingAndTakingAddress/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElaboratedTypeSpecifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeyword/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantElseKeywordInsideCompoundStatement/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyDeclaration/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantEmptyStatement/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantExportKeyword/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantFwdClassOrEnumSpecifier/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantInlineSpecifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantLambdaParameterList/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantMemberInitializer/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantNamespaceDefinition/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantParentheses/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifier/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantQualifierADL/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnMemberAllocationFunction/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantStaticSpecifierOnThreadLocalLocalVariable/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateArguments/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTemplateKeyword/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantTypenameKeyword/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantVoidArgumentList/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRedundantZeroInitializerInAggregateInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReinterpretCastFromVoidPtr/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppRemoveRedundantBraces/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceMemsetWithZeroInitialization/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReplaceTieWithStructuredBinding/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppReturnNoValueInNonVoidFunction/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSmartPointerVsMakeFunction/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSomeObjectMembersMightNotBeInitialized/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppSpecialFunctionWithoutNoexceptSpecification/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticAssertFailure/@EntryIndexedValue" value="ERROR" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticDataMemberInUnnamedStruct/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStaticSpecifierOnAnonymousNamespaceMember/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppStringLiteralToCharPointerConversion/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTabsAreDisallowed/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateArgumentsCanBeDeduced/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterNeverUsed/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTemplateParameterShadowing/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppThrowExpressionCanBeReplacedWithRethrow/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScope/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTooWideScopeInitStatement/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppTypeAliasNeverUsed/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedDependentBaseClass/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUninitializedNonStaticDataMember/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnionMemberOfReferenceType/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaEndRegionDirective/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnmatchedPragmaRegionDirective/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnamedNamespaceInHeaderFile/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnnecessaryWhitespace/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnsignedZeroComparison/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUnusedIncludeDirective/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAlgorithmWithCount/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAssociativeContains/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAuto/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseAutoForNumeric/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseElementsView/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseEraseAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseFamiliarTemplateSyntaxForGenericLambdas/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseRangeAlgorithm/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStdSize/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseStructuredBinding/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUseTypeTraitAlias/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUserDefinedLiteralSuffixDoesNotStartWithUnderscore/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppUsingResultOfAssignmentAsCondition/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVariableCanBeMadeConstexpr/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionCallInsideCtor/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVirtualFunctionInFinalClass/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppVolatileParameterInDeclaration/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWarningDirective/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongIncludesOrder/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppWrongSlashesInIncludeDirective/@EntryIndexedValue" value="HINT" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroConstantCanBeReplacedWithNullptr/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=CppZeroValuedExpressionUsedAsNullPointer/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IdentifierTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=IfStdIsConstantEvaluatedCanBeReplaced/@EntryIndexedValue" value="SUGGESTION" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StdIsConstantEvaluatedWillAlwaysEvaluateToConstant/@EntryIndexedValue" value="WARNING" type="string" />
<option name="/Default/CodeInspection/Highlighting/InspectionSeverities/=StringLiteralTypo/@EntryIndexedValue" value="DO_NOT_SHOW" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/EnableClangFormatSupport/@EntryValue" value="true" type="bool" />
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/ExecutableToUse/@EntryValue" value="Custom" type="string" />
<option name="/Default/CodeStyle/CodeFormatting/CppClangFormat/ExternalClangFormatPath/@EntryValue" value="/opt/homebrew/bin/clang-format" type="string" />
</component>
</project>
-29
View File
@@ -1,29 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.9 (RocketLauncher)" />
</component>
<component name="CMakePythonSetting">
<option name="pythonIntegrationState" value="YES" />
</component>
<component name="CidrRootsConfiguration">
<excludeRoots>
<file path="$PROJECT_DIR$/.pio" />
<file path="$PROJECT_DIR$/.venv" />
</excludeRoots>
</component>
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="PlatformIOSettings">
<option name="linkedExternalProjectsSettings">
<PlatformioProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
</PlatformioProjectSettings>
</option>
</component>
<component name="PlatformIOWorkspace" PROJECT_DIR="$PROJECT_DIR$" />
</project>
+183
View File
@@ -0,0 +1,183 @@
cmake_minimum_required(VERSION 4.1.0)
project(RocketLauncher VERSION 1.0.0 LANGUAGES CXX)
# Set C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Options
option(BUILD_TESTS "Build unit tests" ON)
option(ENABLE_FORMATTING "Enable code formatting" ON)
option(PLATFORMIO_INTEGRATION "Enable PlatformIO integration" ON)
# Set output directories
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
# Include cmake modules
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
# Find required packages (PkgConfig not needed for this project)
# Source files (for testing and documentation)
set(SOURCES
src/RocketController.cpp
)
set(HEADERS
src/ArduinoInterface.h
src/RocketController.h
)
# Tests (native only - Arduino builds handled by PlatformIO)
if(BUILD_TESTS)
enable_testing()
# Test executable (excludes main.cpp and Arduino-specific code)
add_executable(rocket_tests
test/test_rocket_controller.cpp
src/RocketController.cpp
)
# Test configuration (same as PlatformIO native env)
target_compile_definitions(rocket_tests PRIVATE
ARDUINO=0
UNITY_INCLUDE_DOUBLE
UNITY_DOUBLE_PRECISION=1e-12
UNITY_INCLUDE_CONFIG_H
)
# Compiler flags (same as PlatformIO native env)
target_compile_options(rocket_tests PRIVATE
-std=c++17
-Wall -Wextra -Wpedantic
)
# Add tests
add_test(NAME RocketControllerTests COMMAND rocket_tests)
endif()
# PlatformIO integration targets (these become proper CMake targets for CLion)
if(PLATFORMIO_INTEGRATION)
# Find PlatformIO
find_program(PLATFORMIO "pio")
if(PLATFORMIO)
# Main firmware targets that CLion will see
add_custom_target(firmware_sim ALL
COMMAND ${PLATFORMIO} run -e simulide
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Building simulation firmware with PlatformIO"
SOURCES ${SOURCES} ${HEADERS}
)
add_custom_target(firmware_hw ALL
COMMAND ${PLATFORMIO} run -e uno_hw
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Building hardware firmware with PlatformIO"
SOURCES ${SOURCES} ${HEADERS}
)
# Test target that CLion will see
add_custom_target(pio_tests
COMMAND ${PLATFORMIO} test -e native
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Running PlatformIO tests"
SOURCES ${SOURCES} ${HEADERS}
)
# Utility targets
add_custom_target(upload
COMMAND ${PLATFORMIO} run -e uno_hw -t upload
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Uploading firmware to Arduino with PlatformIO"
DEPENDS firmware_hw
)
add_custom_target(monitor
COMMAND ${PLATFORMIO} device monitor -b 115200
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Starting serial monitor with PlatformIO"
)
# Clean target
add_custom_target(pio_clean
COMMAND ${PLATFORMIO} run -t clean
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Cleaning PlatformIO build files"
)
# Combined build target (what CLion will see as the main target)
add_custom_target(all_firmware ALL
COMMAND ${CMAKE_COMMAND} -E echo "Building all firmware targets..."
COMMAND ${PLATFORMIO} run -e simulide
COMMAND ${PLATFORMIO} run -e uno_hw
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Building both simulation and hardware firmware with PlatformIO"
SOURCES ${SOURCES} ${HEADERS}
DEPENDS firmware_sim firmware_hw
)
# Set dependencies so CLion understands the build order
if(BUILD_TESTS)
add_dependencies(rocket_tests all_firmware)
endif()
message(STATUS "PlatformIO integration enabled - CMake targets created for CLion")
else()
message(WARNING "PlatformIO not found. Install with: pip install platformio")
message(WARNING "Firmware targets will not be available")
endif()
endif()
# Code formatting
if(ENABLE_FORMATTING)
find_program(CLANG_FORMAT "clang-format")
if(CLANG_FORMAT)
add_custom_target(format
COMMAND ${CLANG_FORMAT} -i ${SOURCES} ${HEADERS}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Formatting source code with clang-format"
)
endif()
endif()
# Custom targets
add_custom_target(clean-all
COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_BINARY_DIR}
COMMENT "Cleaning all CMake build files"
)
# Help target
add_custom_target(show_help
COMMAND ${CMAKE_COMMAND} --help
COMMENT "Showing CMake help"
)
# Status target
add_custom_target(status
COMMAND ${CMAKE_COMMAND} -E echo "Project: ${PROJECT_NAME}"
COMMAND ${CMAKE_COMMAND} -E echo "Version: ${PROJECT_VERSION}"
COMMAND ${CMAKE_COMMAND} -E echo "Build directory: ${CMAKE_BINARY_DIR}"
COMMAND ${CMAKE_COMMAND} -E echo "Source directory: ${CMAKE_SOURCE_DIR}"
COMMAND ${CMAKE_COMMAND} -E echo ""
COMMAND ${CMAKE_COMMAND} -E echo "PlatformIO integration: ${PLATFORMIO_INTEGRATION}"
COMMAND ${CMAKE_COMMAND} -E echo "Tests enabled: ${BUILD_TESTS}"
COMMENT "Showing project status"
)
# Install rules (for tests only)
if(BUILD_TESTS)
install(TARGETS rocket_tests
RUNTIME DESTINATION bin
)
endif()
# Package configuration
include(CMakePackageConfigHelpers)
write_basic_package_version_file(
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
VERSION ${PROJECT_VERSION}
COMPATIBILITY AnyNewerVersion
)
+124
View File
@@ -0,0 +1,124 @@
{
"version": 3,
"configurePresets": [
{
"name": "default",
"displayName": "Default Configuration",
"description": "Default build configuration with tests and PlatformIO integration",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/build",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"BUILD_TESTS": "ON",
"PLATFORMIO_INTEGRATION": "ON",
"ENABLE_FORMATTING": "ON"
}
},
{
"name": "release",
"displayName": "Release Configuration",
"description": "Release build configuration optimized for production",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/build-release",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"BUILD_TESTS": "OFF",
"PLATFORMIO_INTEGRATION": "ON",
"ENABLE_FORMATTING": "OFF"
}
},
{
"name": "tests-only",
"displayName": "Tests Only",
"description": "Build only unit tests (no PlatformIO integration)",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/build-tests",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"BUILD_TESTS": "ON",
"PLATFORMIO_INTEGRATION": "OFF",
"ENABLE_FORMATTING": "ON"
}
},
{
"name": "minimal",
"displayName": "Minimal Configuration",
"description": "Minimal build with no tests or PlatformIO integration",
"generator": "Unix Makefiles",
"binaryDir": "${sourceDir}/build-minimal",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"BUILD_TESTS": "OFF",
"PLATFORMIO_INTEGRATION": "OFF",
"ENABLE_FORMATTING": "OFF"
}
}
],
"buildPresets": [
{
"name": "default",
"configurePreset": "default",
"targets": ["all"]
},
{
"name": "release",
"configurePreset": "release",
"targets": ["all"]
},
{
"name": "tests",
"configurePreset": "tests-only",
"targets": ["rocket_tests"]
},
{
"name": "minimal",
"configurePreset": "minimal",
"targets": ["all"]
},
{
"name": "clean",
"configurePreset": "default",
"targets": ["clean"]
},
{
"name": "firmware-sim",
"configurePreset": "default",
"targets": ["firmware_sim"]
},
{
"name": "firmware-hw",
"configurePreset": "default",
"targets": ["firmware_hw"]
},
{
"name": "all-firmware",
"configurePreset": "default",
"targets": ["all_firmware"]
},
{
"name": "upload",
"configurePreset": "default",
"targets": ["upload"]
},
{
"name": "monitor",
"configurePreset": "default",
"targets": ["monitor"]
},
{
"name": "pio-clean",
"configurePreset": "default",
"targets": ["pio_clean"]
}
],
"testPresets": [
{
"name": "default",
"configurePreset": "default"
},
{
"name": "quick",
"configurePreset": "tests-only"
}
]
}
-142
View File
@@ -1,142 +0,0 @@
# 🚀 Luke's Rocket Launch Controller - Makefile
# Simple build system for Arduino-based rocket launcher
# Project Configuration
PROJECT_NAME = RocketLauncher
BUILD_DIR = .pio
OUT_DIR = out
# PlatformIO Configuration
PIO_CMD = pio
PIO_ENV_SIM = simulide
PIO_ENV_HW = uno_hw
# Default target
.DEFAULT_GOAL := all
# Colors for pretty output
GREEN = \033[0;32m
YELLOW = \033[1;33m
RED = \033[0;31m
BLUE = \033[0;34m
NC = \033[0m # No Color
# Help target
.PHONY: help
help: ## Show this help message
@echo "$(GREEN)🚀 Luke's Rocket Launch Controller - Build System$(NC)"
@echo ""
@echo "$(BLUE)Available targets:$(NC)"
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf " $(YELLOW)%-15s$(NC) %s\n", $$1, $$2}' $(MAKEFILE_LIST)
@echo ""
@echo "$(BLUE)Quick start:$(NC)"
@echo " make # Run tests and build everything (default)"
@echo " make build-only # Build everything (skip tests)"
@echo " make test # Run unit tests"
@echo " make build-sim # Build for simulation"
@echo " make build-hw # Build for hardware"
@echo " make clean # Clean build files"
# Build targets
.PHONY: all
all: test build ## Run tests and build for both simulation and hardware
.PHONY: build-only
build-only: build ## Build for both simulation and hardware (skip tests)
.PHONY: build-sim
build-sim: ## Build project for SimulIDE simulation
@echo "$(GREEN)🔧 Building for simulation...$(NC)"
@$(PIO_CMD) run -e $(PIO_ENV_SIM)
@echo "$(GREEN)✅ Simulation build complete!$(NC)"
@echo "$(BLUE) Firmware: $(OUT_DIR)/simulide/firmware.hex$(NC)"
.PHONY: build-hw
build-hw: ## Build project for Arduino hardware
@echo "$(GREEN)🔧 Building for hardware...$(NC)"
@$(PIO_CMD) run -e $(PIO_ENV_HW)
@echo "$(GREEN)✅ Hardware build complete!$(NC)"
@echo "$(BLUE) Firmware: $(BUILD_DIR)/$(PIO_ENV_HW)/firmware.hex$(NC)"
.PHONY: build
build: build-sim build-hw ## Build for both simulation and hardware
# Test targets
.PHONY: test
test: ## Run unit tests
@echo "$(GREEN)🧪 Running unit tests...$(NC)"
@$(PIO_CMD) test -e native
@echo "$(GREEN)✅ Tests completed!$(NC)"
.PHONY: test-verbose
test-verbose: ## Run tests with verbose output
@echo "$(GREEN)🧪 Running verbose tests...$(NC)"
@$(PIO_CMD) test --verbose
@echo "$(GREEN)✅ Verbose tests completed!$(NC)"
# Cleanup targets
.PHONY: clean
clean: ## Clean build artifacts
@echo "$(YELLOW)🧹 Cleaning build files...$(NC)"
@$(PIO_CMD) run -t clean
@rm -rf $(OUT_DIR)
@echo "$(GREEN)✅ Clean complete!$(NC)"
.PHONY: clean-all
clean-all: ## Clean everything including dependencies
@echo "$(YELLOW)🧹 Deep cleaning...$(NC)"
@$(PIO_CMD) run -t clean
@rm -rf $(BUILD_DIR)
@rm -rf $(OUT_DIR)
@echo "$(GREEN)✅ Deep clean complete!$(NC)"
# Upload targets
.PHONY: upload
upload: build-hw ## Upload firmware to Arduino
@echo "$(GREEN)🚀 Uploading to Arduino...$(NC)"
@$(PIO_CMD) run -e $(PIO_ENV_HW) -t upload
@echo "$(GREEN)✅ Upload complete!$(NC)"
.PHONY: upload-sim
upload-sim: build-sim ## Build and prepare for SimulIDE
@echo "$(GREEN)🎮 Preparing for SimulIDE simulation...$(NC)"
@echo "$(BLUE) Open wiring/rocker_launcher_controls.sim1 in SimulIDE$(NC)"
@echo "$(BLUE) Firmware will auto-load from: $(OUT_DIR)/simulide/firmware.hex$(NC)"
# Development targets
.PHONY: monitor
monitor: ## Monitor Arduino serial output
@echo "$(GREEN)📡 Starting serial monitor...$(NC)"
@$(PIO_CMD) device monitor -b 115200
.PHONY: format
format: ## Format source code with clang-format
@echo "$(GREEN)🎨 Formatting source code...$(NC)"
@if command -v clang-format >/dev/null 2>&1; then \
clang-format -i src/**/*.cpp src/**/*.h lib/**/*.cpp lib/**/*.h 2>/dev/null || true; \
echo "$(GREEN)✅ Code formatting complete!$(NC)"; \
else \
echo "$(YELLOW)⚠️ clang-format not found. Install clang-format to format code.$(NC)"; \
echo "$(BLUE) macOS: brew install clang-format$(NC)"; \
echo "$(BLUE) Ubuntu: sudo apt install clang-format$(NC)"; \
fi
.PHONY: release
release: ## Create a semantic versioned release
@echo "$(GREEN)🏷️ Creating semantic release...$(NC)"
@if [ -f "../../scripts/release.sh" ]; then \
../../scripts/release.sh; \
else \
echo "$(YELLOW)⚠️ Release script not found. Please run from project root:$(NC)"; \
echo "$(BLUE) make release$(NC)"; \
fi
# Status
.PHONY: status
status: ## Show project status
@echo "$(GREEN)📊 Project Status$(NC)"
@echo "$(BLUE) Project: $(PROJECT_NAME)$(NC)"
@echo "$(BLUE) Build dir: $(BUILD_DIR)$(NC)"
@echo "$(BLUE) Output dir: $(OUT_DIR)$(NC)"
@if [ -d "$(BUILD_DIR)" ]; then echo "$(GREEN) ✅ Build directory exists$(NC)"; else echo "$(RED) ❌ Build directory missing$(NC)"; fi
@if [ -d "$(OUT_DIR)" ]; then echo "$(GREEN) ✅ Output directory exists$(NC)"; else echo "$(RED) ❌ Output directory missing$(NC)"; fi
+361
View File
@@ -0,0 +1,361 @@
# 🚀 Luke's Rocket Launch Controller
A modern Arduino-based rocket launcher controller built with **CMake** and **PlatformIO**.
## 🏗️ Build System
This project uses a **hybrid build approach** that gives you the best of both worlds:
- **CMake** - Primary build system for IDE integration (CLion, VS Code) and project management
- **PlatformIO** - Arduino firmware building and library management
- **Unity** - Unit testing framework for native development
### Key Benefits
- **CLion Tier 1 Support** - Full CMake integration for the best IDE experience
- **Cross-platform compatibility** - Works on macOS, Linux, and Windows
- **Multiple build configurations** - Presets for different use cases
- **Modern C++ standards** - C++17 support with proper toolchain
- **Maintainable architecture** - Standard CMake practices
## 📋 Prerequisites
### Required
- **CMake 3.20+** - Modern build system
- **Make** - Build tool (usually comes with CMake)
- **C++17 compatible compiler** - For native builds and testing
- **PlatformIO** - For Arduino development
### Optional
- **SimulIDE** - For simulation testing
- **clang-format** - For code formatting
### Installation
#### macOS
```bash
# Install CMake
brew install cmake
# Install PlatformIO
pip install platformio
# Install SimulIDE (optional)
brew install --cask simulide
# Install clang-format (optional)
brew install clang-format
```
#### Ubuntu/Debian
```bash
# Install CMake and build tools
sudo apt update
sudo apt install cmake build-essential
# Install PlatformIO
pip install platformio
# Install SimulIDE (optional)
sudo apt install simulide
# Install clang-format (optional)
sudo apt install clang-format
```
#### Windows
- Download and install [CMake](https://cmake.org/download/)
- Install PlatformIO: `pip install platformio`
- Download and install [SimulIDE](https://www.simulide.com/) (optional)
## 🚀 Quick Start
### 1. Clone and Navigate
```bash
git clone <your-repo-url>
cd RocketLauncher
```
### 2. Build Everything
```bash
# Using the build script (recommended)
./scripts/build.sh
# Or using CMake directly
cmake --preset default
cmake --build --preset default
```
### 3. Run Tests
```bash
./scripts/build.sh test
```
## 🛠️ Build Commands
### Using the Build Script (Recommended)
The `scripts/build.sh` script provides a familiar interface:
```bash
# Full build (configure + build + test)
./scripts/build.sh
# Configure only
./scripts/build.sh configure
# Build only (assumes already configured)
./scripts/build.sh build
# Run tests
./scripts/build.sh test
# Clean build files
./scripts/build.sh clean
# Build specific firmware
./scripts/build.sh firmware-sim # Simulation firmware
./scripts/build.sh firmware-hw # Hardware firmware
./scripts/build.sh all-firmware # Both firmwares
# Arduino operations
./scripts/build.sh upload # Upload to Arduino
./scripts/build.sh monitor # Start serial monitor
# Utilities
./scripts/build.sh format # Format source code
./scripts/build.sh status # Show project status
./scripts/build.sh help # Get help
```
### Using CMake Directly
```bash
# Configure with default preset
cmake --preset default
# Build with default preset
cmake --build --preset default
# Run tests
ctest --preset default
# Build specific targets
cmake --build . --target firmware_sim
cmake --build . --target firmware_hw
cmake --build . --target rocket_tests
```
## ⚙️ Build Presets
The project includes several pre-configured build presets:
| Preset | Description | Tests | PlatformIO | Optimization |
|--------|-------------|-------|------------|--------------|
| `default` | Full development build | ✅ | ✅ | Debug |
| `release` | Production build | ❌ | ✅ | Release |
| `tests-only` | Unit tests only | ✅ | ❌ | Debug |
| `minimal` | Minimal build | ❌ | ❌ | Debug |
### Using Presets
```bash
# Configure with specific preset
cmake --preset release
# Build with specific preset
cmake --build --preset tests-only
# Using build script with preset
./scripts/build.sh --preset release
```
## 📁 Project Structure
```
RocketLauncher/
├── CMakeLists.txt # Main CMake configuration
├── CMakePresets.json # Build presets for CLion
├── platformio.ini # PlatformIO configuration
├── cmake/ # CMake modules
│ └── FindUnity.cmake # Unity test framework finder
├── lib/Unity/ # Unity test framework
│ ├── unity.h # Test framework header
│ └── unity.cpp # Test framework implementation
├── scripts/ # Build helper scripts
│ └── build.sh # Main build script
├── src/ # Source code
│ ├── main.cpp # Arduino main program
│ ├── RocketController.cpp # Rocket control logic
│ ├── RocketController.h # Rocket control interface
│ └── ArduinoInterface.h # Arduino abstraction
├── test/ # Unit tests
│ └── test_rocket_controller.cpp
├── lib/ # External libraries
├── include/ # Header files
└── .vscode/ # VS Code configuration
└── settings.json # Editor settings
```
## 🔧 Configuration
### Environment Variables
- `ARDUINO_HOME` - Path to Arduino installation (optional, auto-detected)
### CMake Options
```bash
# Configure with custom options
cmake -DBUILD_TESTS=OFF -DPLATFORMIO_INTEGRATION=OFF ..
# Available options:
# BUILD_TESTS - Enable/disable unit tests (default: ON)
# PLATFORMIO_INTEGRATION - Enable/disable PlatformIO integration (default: ON)
# ENABLE_FORMATTING - Enable/disable code formatting (default: ON)
```
## 🧪 Testing
### Running Tests
```bash
# Run all tests
./scripts/build.sh test
# Run tests with verbose output
ctest --preset default --output-on-failure
# Run specific test
ctest --preset default -R RocketControllerTests
```
### Test Framework
The project uses the **Unity test framework** for unit testing. Tests are automatically discovered and run during the build process.
## 📱 Arduino Development
### Building Firmware
```bash
# Build for Arduino Uno
./scripts/build.sh firmware-hw
# Build for simulation
./scripts/build.sh firmware-sim
# Build both
./scripts/build.sh all-firmware
```
### Uploading to Arduino
```bash
# Upload hardware firmware (requires Arduino connection)
./scripts/build.sh upload
```
**Note**: Upload functionality requires proper Arduino connection and may need configuration for your specific setup.
### Arduino Libraries
The project automatically includes these Arduino libraries via PlatformIO:
- `LiquidCrystal` - LCD display support
- `Bounce2` - Button debouncing
## 🎮 Simulation
### SimulIDE Integration
The simulation build creates firmware compatible with SimulIDE:
1. Build simulation firmware: `./scripts/build.sh firmware-sim`
2. Open SimulIDE
3. Load your simulation file (`.sim1`)
4. Firmware will auto-load from the PlatformIO build output
## 🚀 Migration from Makefile
### Old Makefile Commands → New CMake Commands
| Old Makefile | New CMake | Description |
|--------------|-----------|-------------|
| `make all` | `./scripts/build.sh` | Full build |
| `make build-only` | `./scripts/build.sh build` | Build only |
| `make test` | `./scripts/build.sh test` | Run tests |
| `make clean` | `./scripts/build.sh clean` | Clean build |
| `make build-sim` | `./scripts/build.sh firmware-sim` | Simulation build |
| `make build-hw` | `./scripts/build.sh firmware-hw` | Hardware build |
| `make upload` | `./scripts/build.sh upload` | Upload to Arduino |
| `make format` | `./scripts/build.sh format` | Format code |
| `make status` | `./scripts/build.sh status` | Show status |
### Key Benefits of CMake
1. **Cross-platform**: Works on macOS, Linux, and Windows
2. **IDE integration**: Better support in CLion, VS Code, etc.
3. **Presets**: Multiple build configurations without reconfiguration
4. **Modular**: Reusable build components
5. **Standards**: Follows modern C++ build practices
6. **Maintainable**: Easier to extend and modify
## 🐛 Troubleshooting
### Common Issues
#### CMake not found
```bash
# Install CMake
# macOS
brew install cmake
# Ubuntu
sudo apt install cmake
# Windows
# Download from cmake.org
```
#### PlatformIO not found
```bash
# Install PlatformIO
pip install platformio
```
#### Build failures
```bash
# Clean and rebuild
./scripts/build.sh clean
./scripts/build.sh
# Check dependencies
./scripts/build.sh status
```
### Getting Help
1. Check the project status: `./scripts/build.sh status`
2. Verify dependencies are installed
3. Check build logs in the build directory
4. Ensure you're using CMake 3.20+
## 🤝 Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Test with: `./scripts/build.sh test`
5. Submit a pull request
## 📄 License
[Your License Here]
## 🙏 Acknowledgments
- **Luke** - Original rocket launcher design
- **Arduino community** - Hardware platform
- **PlatformIO community** - Arduino development tools
- **CMake community** - Build system
- **Unity framework** - Testing framework
+332
View File
@@ -0,0 +1,332 @@
#!/bin/bash
# 🚀 Luke's Rocket Launch Controller - CMake Build Script
# Modern build system for Arduino-based rocket launcher with PlatformIO integration
set -e
# Colors for pretty output
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Project Configuration
PROJECT_NAME="RocketLauncher"
BUILD_DIR="build"
DEFAULT_PRESET="default"
# Function to print colored output
print_status() {
echo -e "${GREEN}🔧 $1${NC}"
}
print_warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
print_error() {
echo -e "${RED}❌ $1${NC}"
}
print_info() {
echo -e "${BLUE}ℹ️ $1${NC}"
}
# Function to show help
show_help() {
echo -e "${GREEN}🚀 Luke's Rocket Launch Controller - Build System${NC}"
echo ""
echo -e "${BLUE}Available commands:${NC}"
echo " build.sh # Configure and build everything (default)"
echo " build.sh configure # Configure CMake project"
echo " build.sh build # Build project"
echo " build.sh test # Run tests"
echo " build.sh clean # Clean build files"
echo " build.sh format # Format source code"
echo " build.sh status # Show project status"
echo ""
echo -e "${BLUE}CMake targets (what CLion sees):${NC}"
echo " build.sh firmware-sim # Build simulation firmware"
echo " build.sh firmware-hw # Build hardware firmware"
echo " build.sh all-firmware # Build both firmwares"
echo " build.sh upload # Upload to Arduino"
echo " build.sh monitor # Start serial monitor"
echo " build.sh pio-clean # Clean PlatformIO files"
echo ""
echo -e "${BLUE}Build presets:${NC}"
echo " default # Full build with tests and PlatformIO integration"
echo " release # Optimized release build"
echo " tests-only # Unit tests only (no PlatformIO)"
echo " minimal # Minimal build (no tests, no PlatformIO)"
echo ""
echo -e "${BLUE}Examples:${NC}"
echo " ./scripts/build.sh # Full build"
echo " ./scripts/build.sh firmware-sim # Build simulation firmware"
echo " ./scripts/build.sh --preset release # Release build"
}
# Function to check dependencies
check_dependencies() {
print_status "Checking dependencies..."
if ! command -v cmake &> /dev/null; then
print_error "CMake not found. Please install CMake 3.20 or later."
exit 1
fi
if ! command -v make &> /dev/null; then
print_error "Make not found. Please install Make."
exit 1
fi
# Check for PlatformIO
if ! command -v pio &> /dev/null; then
print_warning "PlatformIO not found. Arduino builds will not work."
print_info "Install with: pip install platformio"
print_info "Or use: ./scripts/build.sh --preset tests-only"
else
print_status "PlatformIO found"
fi
print_status "Dependencies check complete"
}
# Function to configure project
configure_project() {
local preset=${1:-$DEFAULT_PRESET}
print_status "Configuring project with preset: $preset"
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"
cmake --preset "$preset" ..
if [ $? -eq 0 ]; then
print_status "Configuration successful"
else
print_error "Configuration failed"
exit 1
fi
cd ..
}
# Function to build project
build_project() {
local preset=${1:-$DEFAULT_PRESET}
print_status "Building project with preset: $preset"
if [ ! -d "$BUILD_DIR" ]; then
print_warning "Build directory not found. Running configure first..."
configure_project "$preset"
fi
cd "$BUILD_DIR"
# Build without preset since we're already in the configured build directory
cmake --build .
if [ $? -eq 0 ]; then
print_status "Build successful"
print_info "Output files in: $BUILD_DIR"
else
print_error "Build failed"
exit 1
fi
cd ..
}
# Function to run tests
run_tests() {
print_status "Running tests..."
if [ ! -d "$BUILD_DIR" ]; then
print_warning "Build directory not found. Running configure first..."
configure_project
fi
cd "$BUILD_DIR"
# Run tests without preset since we're already in the configured build directory
ctest --output-on-failure
if [ $? -eq 0 ]; then
print_status "Tests completed successfully"
else
print_error "Tests failed"
exit 1
fi
cd ..
}
# Function to clean build files
clean_build() {
print_status "Cleaning build files..."
if [ -d "$BUILD_DIR" ]; then
rm -rf "$BUILD_DIR"
print_status "Build directory removed"
fi
# Clean other build directories
for dir in build-*; do
if [ -d "$dir" ]; then
rm -rf "$dir"
print_status "Removed $dir"
fi
done
print_status "Clean complete"
}
# Function to build specific CMake targets
build_target() {
local target=$1
local description=$2
print_status "$description"
if [ ! -d "$BUILD_DIR" ]; then
print_warning "Build directory not found. Running configure first..."
configure_project
fi
cd "$BUILD_DIR"
cmake --build . --target "$target"
if [ $? -eq 0 ]; then
print_status "Target '$target' built successfully"
else
print_error "Target '$target' build failed"
exit 1
fi
cd ..
}
# Function to format code
format_code() {
print_status "Formatting source code..."
if command -v clang-format &> /dev/null; then
find src/ -name "*.cpp" -o -name "*.h" | xargs clang-format -i
print_status "Code formatting complete"
else
print_warning "clang-format not found. Install clang-format to format code."
print_info "macOS: brew install clang-format"
print_info "Ubuntu: sudo apt install clang-format"
fi
}
# Function to show status
show_status() {
print_status "Project Status"
print_info "Project: $PROJECT_NAME"
print_info "Build directory: $BUILD_DIR"
print_info "Source directory: $(pwd)"
if [ -d "$BUILD_DIR" ]; then
print_info "✅ Build directory exists"
# Check for test executable
if [ -f "$BUILD_DIR/rocket_tests" ]; then
print_info "✅ Test executable exists"
fi
else
print_warning "❌ Build directory missing"
fi
# Check PlatformIO status
if command -v pio &> /dev/null; then
print_info "✅ PlatformIO found"
# Check PlatformIO project
if [ -f "platformio.ini" ]; then
print_info "✅ PlatformIO project configuration found"
else
print_warning "⚠️ PlatformIO project configuration not found"
fi
else
print_warning "❌ PlatformIO not found"
fi
}
# Main script logic
main() {
local command=${1:-"all"}
local preset=${2:-$DEFAULT_PRESET}
case $command in
"help"|"-h"|"--help")
show_help
exit 0
;;
"configure")
check_dependencies
configure_project "$preset"
;;
"build")
check_dependencies
build_project "$preset"
;;
"test")
check_dependencies
run_tests
;;
"clean")
clean_build
;;
"format")
format_code
;;
"status")
show_status
;;
"firmware-sim")
check_dependencies
build_target "firmware_sim" "Building simulation firmware"
;;
"firmware-hw")
check_dependencies
build_target "firmware_hw" "Building hardware firmware"
;;
"all-firmware")
check_dependencies
build_target "all_firmware" "Building both firmwares"
;;
"upload")
check_dependencies
build_target "upload" "Building and uploading firmware"
;;
"monitor")
check_dependencies
build_target "monitor" "Starting serial monitor"
;;
"pio-clean")
check_dependencies
build_target "pio_clean" "Cleaning PlatformIO files"
;;
"all")
check_dependencies
configure_project "$preset"
build_project "$preset"
run_tests
;;
*)
print_error "Unknown command: $command"
show_help
exit 1
;;
esac
}
# Handle preset argument
if [[ "$1" == "--preset" ]]; then
preset="$2"
shift 2
main "$1" "$preset"
else
main "$@"
fi
@@ -1,9 +1,103 @@
#include <unity.h>
#include <cstring>
#include <cstdio>
#include <iostream>
#include "../src/RocketController.h"
#include "../src/ArduinoInterface.h"
// Minimal Unity test framework implementation for CMake builds
// This avoids dependency on external Unity files
namespace Unity {
extern int unity_current_test_failed;
extern int unity_number_of_tests;
extern int unity_number_of_failures;
void unity_begin(const char* filename);
void unity_end(void);
void unity_run_test(void (*test_func)(void), const char* test_name);
}
// Forward declarations for test setup/teardown
void setUp(void);
void tearDown(void);
// Unity test framework - minimal implementation for CMake integration
int Unity::unity_current_test_failed = 0;
int Unity::unity_number_of_tests = 0;
int Unity::unity_number_of_failures = 0;
void Unity::unity_begin(const char* filename) {
std::cout << "Unity Test Framework" << std::endl;
std::cout << "===================" << std::endl;
std::cout << "Running tests from: " << filename << std::endl << std::endl;
unity_current_test_failed = 0;
unity_number_of_tests = 0;
unity_number_of_failures = 0;
}
void Unity::unity_end(void) {
std::cout << std::endl << "===================" << std::endl;
std::cout << "Test Results:" << std::endl;
std::cout << "Tests Run: " << unity_number_of_tests << std::endl;
std::cout << "Failures: " << unity_number_of_failures << std::endl;
if (unity_number_of_failures == 0) {
std::cout << "All tests passed!" << std::endl;
} else {
std::cout << "Some tests failed!" << std::endl;
}
}
void Unity::unity_run_test(void (*test_func)(void), const char* test_name) {
std::cout << "Running test: " << test_name << std::endl;
unity_current_test_failed = 0;
// Call setUp and tearDown if they exist
setUp();
test_func();
tearDown();
if (unity_current_test_failed) {
std::cout << " ❌ FAILED" << std::endl;
} else {
std::cout << " ✅ PASSED" << std::endl;
}
}
// Unity test macros
#define TEST_ASSERT(condition) \
do { \
if (!(condition)) { \
Unity::unity_current_test_failed = 1; \
Unity::unity_number_of_failures++; \
} \
Unity::unity_number_of_tests++; \
} while(0)
#define TEST_ASSERT_EQUAL(expected, actual) \
TEST_ASSERT((expected) == (actual))
#define TEST_ASSERT_TRUE(condition) \
TEST_ASSERT(condition)
#define TEST_ASSERT_FALSE(condition) \
TEST_ASSERT(!(condition))
#define TEST_ASSERT_NULL(pointer) \
TEST_ASSERT((pointer) == nullptr)
#define TEST_ASSERT_NOT_NULL(pointer) \
TEST_ASSERT((pointer) != nullptr)
#define TEST_ASSERT_LESS_OR_EQUAL(expected, actual) \
TEST_ASSERT((actual) <= (expected))
// Unity test runner macros
#define UNITY_BEGIN() Unity::unity_begin(__FILE__)
#define UNITY_END() Unity::unity_end()
#define RUN_TEST(test_func) Unity::unity_run_test(test_func, #test_func)
// Simple mock Arduino interface for testing
class MockArduinoInterface : public ArduinoInterface
{
-192
View File
@@ -1,192 +0,0 @@
# 🏷️ Semantic Versioning Guide
This document explains how to use the semantic versioning system for Luke's Rocket Launcher project.
## 📋 **Overview**
The project now uses **semantic versioning** to automatically manage releases, create GitHub releases, and package firmware files. This ensures consistent versioning and makes it easy for users to get the latest firmware.
## 🔢 **Version Format**
**Format**: `MAJOR.MINOR.PATCH` (e.g., `1.0.0`, `1.2.3`)
- **MAJOR** (1.0.0 → 2.0.0): Breaking changes, incompatible API changes
- **MINOR** (1.0.0 → 1.1.0): New features, backward compatible
- **PATCH** (1.0.0 → 1.0.1): Bug fixes, improvements, backward compatible
## 🚀 **Creating Releases**
### **Option 1: Using the Release Script (Recommended)**
```bash
# From project root directory
./scripts/release.sh --type minor
# Or with custom version
./scripts/release.sh --version 1.0.0
# Dry run to see what would happen
./scripts/release.sh --type patch --dry-run
```
**Script Options:**
- `--type`: `patch`, `minor`, or `major`
- `--version`: Specific version number
- `--message`: Custom release message
- `--dry-run`: Preview without making changes
### **Option 2: Using Make**
```bash
# From code/RocketLauncher directory
make release
```
### **Option 3: Manual Git Tags**
```bash
git tag -a v1.0.0 -m "Release v1.0.0"
git push origin v1.0.0
```
### **Option 4: GitHub Actions Manual Trigger**
1. Go to [Actions](https://github.com/KofTwentyTwo/Lukes-Rocket-Launcher/actions)
2. Click "Semantic Release"
3. Click "Run workflow"
4. Enter version and release type
5. Click "Run workflow"
## 📝 **Commit Message Convention**
Use conventional commit messages to automatically determine version increments:
```bash
# Patch releases (bug fixes, improvements)
fix(arduino): resolve startup transition issue
fix(testing): fix mock interface behavior
docs: update installation instructions
# Minor releases (new features)
feat(arduino): add new safety feature
feat(testing): add comprehensive test suite
feat(build): add automated release workflow
# Major releases (breaking changes)
feat!: completely redesign state machine
BREAKING CHANGE: change pin assignments
```
## 🔄 **Release Workflow**
When you create a release:
1. **Version Determination**: Script calculates next version
2. **Git Tag**: Creates and pushes version tag
3. **GitHub Actions**: Automatically triggers build workflow
4. **Build & Test**: Runs tests and builds firmware
5. **Package Creation**: Creates downloadable firmware files
6. **GitHub Release**: Creates release with assets and notes
## 📦 **Release Assets**
Each release automatically includes:
- **Simulation Firmware**: `.hex` file for SimulIDE
- **Hardware Firmware**: `.hex` file for Arduino
- **Release Notes**: Auto-generated from commits
- **Build Information**: Version, date, commit hash
## 🎯 **Best Practices**
### **When to Release**
- **Patch**: Bug fixes, documentation updates, minor improvements
- **Minor**: New features, enhancements, backward compatible changes
- **Major**: Breaking changes, major redesigns, incompatible updates
### **Release Frequency**
- **Patch**: Weekly or as needed
- **Minor**: Monthly or when features are complete
- **Major**: Quarterly or for significant changes
### **Before Releasing**
1. **Test Everything**: Ensure all tests pass
2. **Update Documentation**: Keep README and docs current
3. **Check Dependencies**: Verify library versions are stable
4. **Clean Working Directory**: Commit or stash all changes
## 🛠️ **Troubleshooting**
### **Common Issues**
**Tag Already Exists:**
```bash
# Check existing tags
git tag -l
# Delete local tag if needed
git tag -d v1.0.0
# Delete remote tag if needed
git push origin --delete v1.0.0
```
**Workflow Fails:**
1. Check [Actions](https://github.com/KofTwentyTwo/Lukes-Rocket-Launcher/actions) for errors
2. Ensure tests pass locally: `make test`
3. Verify build works: `make build`
**Version Calculation Issues:**
```bash
# Check current version
git describe --tags --abbrev=0
# See commit history
git log --oneline --decorate
```
## 📚 **Examples**
### **Example 1: Bug Fix Release**
```bash
# Fix a bug
git commit -m "fix(arduino): resolve button debouncing issue"
# Create patch release
./scripts/release.sh --type patch --message "Bug fix release"
```
### **Example 2: Feature Release**
```bash
# Add new feature
git commit -m "feat(arduino): add current sensing circuit"
# Create minor release
./scripts/release.sh --type minor --message "Add current sensing feature"
```
### **Example 3: Major Update**
```bash
# Breaking change
git commit -m "feat!: redesign state machine architecture"
# Create major release
./scripts/release.sh --type major --message "Complete state machine redesign"
```
## 🔗 **Related Links**
- [GitHub Actions](https://github.com/KofTwentyTwo/Lukes-Rocket-Launcher/actions)
- [Releases](https://github.com/KofTwentyTwo/Lukes-Rocket-Launcher/releases)
- [Conventional Commits](https://www.conventionalcommits.org/)
- [Semantic Versioning](https://semver.org/)
---
**🚀 Ready to release? Use `./scripts/release.sh --help` for more options!**