| # ========================================================================= | |
| # Ceedling - Test-Centered Build System for C | |
| # ThrowTheSwitch.org | |
| # Copyright (c) 2010-25 Mike Karlesky, Mark VanderVoord, & Greg Williams | |
| # SPDX-License-Identifier: MIT | |
| # ========================================================================= | |
| --- | |
| :project: | |
| # how to use ceedling. If you're not sure, leave this as `gem` and `?` | |
| :which_ceedling: gem | |
| :ceedling_version: 1.0.0 | |
| :verbosity: 3 | |
| # optional features. If you don't need them, keep them turned off for performance | |
| :use_mocks: TRUE | |
| :use_test_preprocessor: :mocks # options are :none, :mocks, :tests, or :all | |
| :use_deep_dependencies: :all # options are :none, :mocks, :tests, or :all | |
| :use_backtrace: :simple # options are :none, :simple, or :gdb | |
| :use_decorators: :auto # decorate Ceedling's output text. options are :auto, :all, or :none | |
| # tweak the way ceedling handles automatic tasks | |
| :build_root: _build | |
| :test_file_prefix: test_ | |
| :default_tasks: | |
| - test:all | |
| # performance options. If your tools start giving mysterious errors, consider | |
| # dropping this to 1 to force single-tasking | |
| :test_threads: 8 | |
| :compile_threads: 8 | |
| # enable release build (more details in release_build section below) | |
| :release_build: FALSE | |
| # Specify where to find mixins and any that should be enabled automatically | |
| :mixins: | |
| :enabled: [] | |
| :load_paths: [] | |
| # further details to configure the way Ceedling handles test code | |
| :test_build: | |
| :use_assembly: FALSE | |
| :test_runner: | |
| # Insert additional #include statements in a generated runner | |
| :includes: | |
| - osal.h | |
| # further details to configure the way Ceedling handles release code | |
| :release_build: | |
| :output: MyApp.out | |
| :use_assembly: FALSE | |
| :artifacts: [] | |
| # Plugins are optional Ceedling features which can be enabled. Ceedling supports | |
| # a variety of plugins which may effect the way things are compiled, reported, | |
| # or may provide new command options. Refer to the readme in each plugin for | |
| # details on how to use it. | |
| :plugins: | |
| :load_paths: [] | |
| :enabled: | |
| #- beep # beeps when finished, so you don't waste time waiting for ceedling | |
| - module_generator # handy for quickly creating source, header, and test templates | |
| #- gcov # test coverage using gcov. Requires gcc, gcov, and a coverage analyzer like gcovr | |
| #- bullseye # test coverage using bullseye. Requires bullseye for your platform | |
| #- command_hooks # write custom actions to be called at different points during the build process | |
| #- compile_commands_json_db # generate a compile_commands.json file | |
| #- dependencies # automatically fetch 3rd party libraries, etc. | |
| #- subprojects # managing builds and test for static libraries | |
| #- fake_function_framework # use FFF instead of CMock | |
| # Report options (You'll want to choose one stdout option, but may choose multiple stored options if desired) | |
| #- report_build_warnings_log | |
| #- report_tests_gtestlike_stdout | |
| #- report_tests_ide_stdout | |
| #- report_tests_log_factory | |
| - report_tests_pretty_stdout | |
| #- report_tests_raw_output_log | |
| #- report_tests_teamcity_stdout | |
| # Specify which reports you'd like from the log factory | |
| :report_tests_log_factory: | |
| :reports: | |
| - json | |
| - junit | |
| - cppunit | |
| - html | |
| # override the default extensions for your system and toolchain | |
| :extension: | |
| #:header: .h | |
| #:source: .c | |
| #:assembly: .s | |
| #:dependencies: .d | |
| #:object: .o | |
| :executable: .out | |
| #:testpass: .pass | |
| #:testfail: .fail | |
| #:subprojects: .a | |
| # This is where Ceedling should look for your source and test files. | |
| # see documentation for the many options for specifying this. | |
| :paths: | |
| :test: | |
| - +:test/** | |
| - -:test/support | |
| :source: | |
| - ../../src/** | |
| :include: | |
| - ../../src/** | |
| :support: | |
| - test/support | |
| :libraries: [] | |
| # You can even specify specific files to add or remove from your test | |
| # and release collections. Usually it's better to use paths and let | |
| # Ceedling do the work for you! | |
| :files: | |
| :test: [] | |
| :source: [] | |
| # Compilation symbols to be injected into builds | |
| # See documentation for advanced options: | |
| # - Test name matchers for different symbols per test executable build | |
| # - Referencing symbols in multiple lists using advanced YAML | |
| # - Specifying symbols used during test preprocessing | |
| :defines: | |
| :test: | |
| :*: | |
| - _UNITY_TEST_ | |
| - CFG_TUD_EDPT_DEDICATED_HWFIFO=1 | |
| - CFG_TUSB_FIFO_HWFIFO_DATA_STRIDE=6 | |
| - CFG_TUSB_FIFO_HWFIFO_ADDR_STRIDE=0 | |
| :test_audio_host: | |
| - CFG_TUH_ENABLED=1 | |
| - CFG_TUH_AUDIO=1 | |
| - CFG_TUH_AUDIO_PROTOCOLS=3 | |
| - CFG_TUSB_DEBUG=0 | |
| - CFG_TUH_AUDIO_EPIN_BUFSIZE=1024 | |
| - CFG_TUH_AUDIO_EPOUT_BUFSIZE=1024 | |
| :test_dfu_rt_device: | |
| - CFG_TUD_MSC=0 | |
| - CFG_TUD_DFU_RUNTIME=1 | |
| :test_hid_device: | |
| - CFG_TUD_MSC=0 | |
| - CFG_TUD_HID=1 | |
| :test_hid_host: | |
| - CFG_TUH_ENABLED=1 | |
| - CFG_TUH_HID=2 | |
| - CFG_TUSB_DEBUG=0 | |
| :test_msc_host: | |
| - CFG_TUH_ENABLED=1 | |
| - CFG_TUH_MSC=1 | |
| - CFG_TUSB_DEBUG=0 | |
| :test_midi2_device_gtb_default: | |
| - CFG_TUD_MSC=0 | |
| - CFG_TUD_MIDI2=1 | |
| :test_midi2_device_gtb_midi1: | |
| - CFG_TUD_MSC=0 | |
| - CFG_TUD_MIDI2=1 | |
| :test_mtp_device: | |
| - CFG_TUD_MSC=0 | |
| - CFG_TUD_MTP=1 | |
| :test_mtp_fs_example: | |
| - CFG_TUD_MSC=0 | |
| - CFG_TUD_MTP=1 | |
| :release: [] | |
| # Enable to inject name of a test as a unique compilation symbol into its respective executable build. | |
| :use_test_definition: FALSE | |
| # Configure additional command line flags provided to tools used in each build step | |
| :flags: | |
| :test: | |
| :compile: | |
| :test_mtp_fs_example: # bsp/board_api.h for the example it compiles in place | |
| - -I../../hw | |
| # :flags: | |
| # :release: | |
| # :compile: # Add '-Wall' and '--02' to compilation of all files in release target | |
| # - -Wall | |
| # - --O2 | |
| # :test: | |
| # :compile: | |
| # '(_|-)special': # Add '-pedantic' to compilation of all files in all test executables with '_special' or '-special' in their names | |
| # - -pedantic | |
| # '*': # Add '-foo' to compilation of all files in all test executables | |
| # - -foo | |
| # Configuration Options specific to CMock. See CMock docs for details | |
| :cmock: | |
| # Core configuration | |
| :plugins: # What plugins should be used by CMock? | |
| - :ignore | |
| - :ignore_arg | |
| - :return_thru_ptr | |
| - :callback | |
| - :array | |
| :verbosity: 2 # the options being 0 errors only, 1 warnings and errors, 2 normal info, 3 verbose | |
| :when_no_prototypes: :warn # the options being :ignore, :warn, or :error | |
| # File configuration | |
| :skeleton_path: '' # Subdirectory to store stubs when generated (default: '') | |
| :mock_prefix: 'mock_' # Prefix to append to filenames for mocks | |
| :mock_suffix: '' # Suffix to append to filenames for mocks | |
| # Parser configuration | |
| :strippables: ['(?:__attribute__\s*\([ (]*.*?[ )]*\)+)'] | |
| :attributes: | |
| - __ramfunc | |
| - __irq | |
| - __fiq | |
| - register | |
| - extern | |
| :c_calling_conventions: | |
| - __stdcall | |
| - __cdecl | |
| - __fastcall | |
| :treat_externs: :exclude # the options being :include or :exclud | |
| :treat_inlines: :exclude # the options being :include or :exclud | |
| # Type handling configuration | |
| #:unity_helper_path: '' # specify a string of where to find a unity_helper.h file to discover custom type assertions | |
| :treat_as: # optionally add additional types to map custom types | |
| uint8: HEX8 | |
| uint16: HEX16 | |
| uint32: UINT32 | |
| int8: INT8 | |
| bool: UINT8 | |
| #:treat_as_array: {} # hint to cmock that these types are pointers to something | |
| #:treat_as_void: [] # hint to cmock that these types are actually aliases of void | |
| :memcmp_if_unknown: true # allow cmock to use the memory comparison assertions for unknown types | |
| :when_ptr: :compare_data # hint to cmock how to handle pointers in general, the options being :compare_ptr, :compare_data, or :smart | |
| # Mock generation configuration | |
| :weak: '' # Symbol to use to declare weak functions | |
| :enforce_strict_ordering: true # Do we want cmock to enforce ordering of all function calls? | |
| :fail_on_unexpected_calls: true # Do we want cmock to fail when it encounters a function call that wasn't expected? | |
| :callback_include_count: true # Do we want cmock to include the number of calls to this callback, when using callbacks? | |
| :callback_after_arg_check: false # Do we want cmock to enforce an argument check first when using a callback? | |
| #:includes: [] # You can add additional includes here, or specify the location with the options below | |
| #:includes_h_pre_orig_header: [] | |
| #:includes_h_post_orig_header: [] | |
| #:includes_c_pre_header: [] | |
| #:includes_c_post_header: [] | |
| #:array_size_type: [] # Specify a type or types that should be used for array lengths | |
| #:array_size_name: 'size|len' # Specify a name or names that CMock might automatically recognize as the length of an array | |
| :exclude_setjmp_h: false # Don't use setjmp when running CMock. Note that this might result in late reporting or out-of-order failures. | |
| # Configuration options specific to Unity. | |
| :unity: | |
| :defines: | |
| - UNITY_EXCLUDE_FLOAT | |
| # You can optionally have ceedling create environment variables for you before | |
| # performing the rest of its tasks. | |
| :environment: [] | |
| # :environment: | |
| # # List enforces order allowing later to reference earlier with inline Ruby substitution | |
| # - :var1: value | |
| # - :var2: another value | |
| # - :path: # Special PATH handling with platform-specific path separators | |
| # - #{ENV['PATH']} # Environment variables can use inline Ruby substitution | |
| # - /another/path/to/include | |
| # LIBRARIES | |
| # These libraries are automatically injected into the build process. Those specified as | |
| # common will be used in all types of builds. Otherwise, libraries can be injected in just | |
| # tests or releases. These options are MERGED with the options in supplemental yaml files. | |
| :libraries: | |
| :placement: :end | |
| :flag: "-l${1}" | |
| :path_flag: "-L ${1}" | |
| :system: [] # for example, you might list 'm' to grab the math library | |
| :test: [] | |
| :release: [] | |
| ################################################################ | |
| # PLUGIN CONFIGURATION | |
| ################################################################ | |
| # Add -gcov to the plugins list to make sure of the gcov plugin | |
| # You will need to have gcov and gcovr both installed to make it work. | |
| # For more information on these options, see docs in plugins/gcov | |
| :gcov: | |
| :summaries: TRUE # Enable simple coverage summaries to console after tests | |
| :report_task: FALSE # Disabled dedicated report generation task (this enables automatic report generation) | |
| :utilities: | |
| - gcovr # Use gcovr to create the specified reports (default). | |
| #- ReportGenerator # Use ReportGenerator to create the specified reports. | |
| :reports: # Specify one or more reports to generate. | |
| # Make an HTML summary report. | |
| - HtmlBasic | |
| # - HtmlDetailed | |
| # - Text | |
| # - Cobertura | |
| # - SonarQube | |
| # - JSON | |
| # - HtmlInline | |
| # - HtmlInlineAzure | |
| # - HtmlInlineAzureDark | |
| # - HtmlChart | |
| # - MHtml | |
| # - Badges | |
| # - CsvSummary | |
| # - Latex | |
| # - LatexSummary | |
| # - PngChart | |
| # - TeamCitySummary | |
| # - lcov | |
| # - Xml | |
| # - XmlSummary | |
| :gcovr: | |
| # :html_artifact_filename: TestCoverageReport.html | |
| # :html_title: Test Coverage Report | |
| :html_medium_threshold: 75 | |
| :html_high_threshold: 90 | |
| # :html_absolute_paths: TRUE | |
| # :html_encoding: UTF-8 | |
| # :module_generator: | |
| # :project_root: ./ | |
| # :source_root: source/ | |
| # :inc_root: includes/ | |
| # :test_root: tests/ | |
| # :naming: :snake #options: :bumpy, :camel, :caps, or :snake | |
| # :includes: | |
| # :tst: [] | |
| # :src: [] | |
| # :boilerplates: | |
| # :src: "" | |
| # :inc: "" | |
| # :tst: "" | |
| # :dependencies: | |
| # :libraries: | |
| # - :name: WolfSSL | |
| # :source_path: third_party/wolfssl/source | |
| # :build_path: third_party/wolfssl/build | |
| # :artifact_path: third_party/wolfssl/install | |
| # :fetch: | |
| # :method: :zip | |
| # :source: \\shared_drive\third_party_libs\wolfssl\wolfssl-4.2.0.zip | |
| # :environment: | |
| # - CFLAGS+=-DWOLFSSL_DTLS_ALLOW_FUTURE | |
| # :build: | |
| # - "autoreconf -i" | |
| # - "./configure --enable-tls13 --enable-singlethreaded" | |
| # - make | |
| # - make install | |
| # :artifacts: | |
| # :static_libraries: | |
| # - lib/wolfssl.a | |
| # :dynamic_libraries: | |
| # - lib/wolfssl.so | |
| # :includes: | |
| # - include/** | |
| # :subprojects: | |
| # :paths: | |
| # - :name: libprojectA | |
| # :source: | |
| # - ./subprojectA/source | |
| # :include: | |
| # - ./subprojectA/include | |
| # :build_root: ./subprojectA/build | |
| # :defines: [] | |
| # :command_hooks: | |
| # :pre_mock_preprocess: | |
| # :post_mock_preprocess: | |
| # :pre_test_preprocess: | |
| # :post_test_preprocess: | |
| # :pre_mock_generate: | |
| # :post_mock_generate: | |
| # :pre_runner_generate: | |
| # :post_runner_generate: | |
| # :pre_compile_execute: | |
| # :post_compile_execute: | |
| # :pre_link_execute: | |
| # :post_link_execute: | |
| # :pre_test_fixture_execute: | |
| # :post_test_fixture_execute: | |
| # :pre_test: | |
| # :post_test: | |
| # :pre_release: | |
| # :post_release: | |
| # :pre_build: | |
| # :post_build: | |
| # :post_error: | |
| ################################################################ | |
| # TOOLCHAIN CONFIGURATION | |
| ################################################################ | |
| #:tools: | |
| # Ceedling defaults to using gcc for compiling, linking, etc. | |
| # As [:tools] is blank, gcc will be used (so long as it's in your system path) | |
| # See documentation to configure a given toolchain for use | |
| #:tools: | |
| # :test_compiler: | |
| # :executable: gcc | |
| # :name: 'gcc compiler' | |
| # :arguments: | |
| # - -I"$": COLLECTION_PATHS_TEST_TOOLCHAIN_INCLUDE #expands to -I search paths | |
| # - -I"$": COLLECTION_PATHS_TEST_SUPPORT_SOURCE_INCLUDE_VENDOR #expands to -I search paths | |
| # - -D$: COLLECTION_DEFINES_TEST_AND_VENDOR #expands to all -D defined symbols | |
| # #- -fsanitize=address | |
| # - -c ${1} #source code input file (Ruby method call param list sub) | |
| # - -o ${2} #object file output (Ruby method call param list sub) | |
| # :test_linker: | |
| # :executable: gcc | |
| # :name: 'gcc linker' | |
| # :arguments: | |
| # #- -fsanitize=address | |
| # - ${1} #list of object files to link (Ruby method call param list sub) | |
| # - -o ${2} #executable file output (Ruby method call param list sub) | |
| # :test_compiler: | |
| # :executable: | |
| # :arguments: [] | |
| # :name: | |
| # :optional: FALSE | |
| # :test_linker: | |
| # :executable: | |
| # :arguments: [] | |
| # :name: | |
| # :optional: FALSE | |
| # :test_assembler: | |
| # :executable: | |
| # :arguments: [] | |
| # :name: | |
| # :optional: FALSE | |
| # :test_fixture: | |
| # :executable: | |
| # :arguments: [] | |
| # :name: | |
| # :optional: FALSE | |
| # :test_includes_preprocessor: | |
| # :executable: | |
| # :arguments: [] | |
| # :name: | |
| # :optional: FALSE | |
| # :test_file_preprocessor: | |
| # :executable: | |
| # :arguments: [] | |
| # :name: | |
| # :optional: FALSE | |
| # :test_file_preprocessor_directives: | |
| # :executable: | |
| # :arguments: [] | |
| # :name: | |
| # :optional: FALSE | |
| # :test_dependencies_generator: | |
| # :executable: | |
| # :arguments: [] | |
| # :name: | |
| # :optional: FALSE | |
| # :release_compiler: | |
| # :executable: | |
| # :arguments: [] | |
| # :name: | |
| # :optional: FALSE | |
| # :release_linker: | |
| # :executable: | |
| # :arguments: [] | |
| # :name: | |
| # :optional: FALSE | |
| # :release_assembler: | |
| # :executable: | |
| # :arguments: [] | |
| # :name: | |
| # :optional: FALSE | |
| # :release_dependencies_generator: | |
| # :executable: | |
| # :arguments: [] | |
| # :name: | |
| # :optional: FALSE | |
| ... |