Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

using treat_inlines causes include files under support folder to break #407

Open
stotzd opened this issue Aug 10, 2022 · 5 comments
Open
Labels

Comments

@stotzd
Copy link

stotzd commented Aug 10, 2022

ceedling version
Ceedling:: 0.31.1
Unity:: 2.5.4
CMock:: 2.5.4
CException:: 1.3.3

I have a file "DSP280x_Device.h" under the test/support/ folder.

If I use treat_inlines and mock "gpio.h" (which includes "DSP280x_Device.h"), the generated "gpio.h" file under the mock folder will add the test/support/ path, which causes the compile to fail.

In file included from build/test/mocks/mock_gpio.h:6,
                 from test/test_can_runtime.c:12:
build/test/mocks/gpio.h:2:10: fatal error: test/support/DSP280x_Device.h: No such file or directory
    2 | #include "test/support/DSP280x_Device.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
@Letme
Copy link

Letme commented Aug 10, 2022

You will need to give a bit more than that, because here it seems like your compiler and build system cannot find the "DSP280x_Device.h" and not a CMock failure.

@stotzd
Copy link
Author

stotzd commented Aug 10, 2022

Here is a sample gpio.h

#ifndef GPIO_H
#define GPIO_H

#include <stdint.h>
#include <stdbool.h>
#include "DSP280x_Device.h"
#include "DSP280x_Examples.h"

static inline bool gpio_get(uint16_t gpio_id)
{
    /* code here */
}

void GPIO_init_Startup( void );

#endif  /* GPIO_H */

Which will turn into this generated file in the mock folder:

#include "../../CodeVault/inc/sys/DSP280x_Examples.h"
#include "test/support/DSP280x_Device.h"
_Bool 

                  gpio_get(uint16_t gpio_id);

void GPIO_init_Startup( void );

For some reason, the compiler cannot find "test/support/DSP280x_Device.h" but it can find "DSP280x_Device.h". Is there something wrong with my project.yaml maybe?

---

# Notes:
# Sample project C code is not presently written to produce a release artifact.
# As such, release build options are disabled.
# This sample, therefore, only demonstrates running a collection of unit tests.

:project:
  :use_exceptions: FALSE
  :use_test_preprocessor: TRUE
  :use_auxiliary_dependencies: TRUE
  :build_root: build
#  :release_build: TRUE
  :test_file_prefix: test_
  :which_ceedling: gem
  :ceedling_version: 0.31.0
  :default_tasks:
    - test:all

#:test_build:
#  :use_assembly: TRUE

#:release_build:
#  :output: MyApp.out
#  :use_assembly: FALSE

:environment:

:extension:
  :executable: .out

:paths:
  :test:
    - +:test/**
    - -:test/support
  :source:
    - ../../CodeVault/src/**
    - ../../CodeVault/inc/**
  :support:
    - test/support
  :libraries: []

:flags:
  :test:
    :compile:
      :*: # use :*: for all sources.
        - -Wno-trampolines # nested functions useful for defining stub callbacks
:defines:
  # in order to add common defines:
  #  1) remove the trailing [] from the :common: section
  #  2) add entries to the :common: section (e.g. :test: has TEST defined)
  :common: &common_defines
    - OSCCLK_MHZ=20U    
  :test:
    - *common_defines
    - TEST
  :test_preprocess:
    - *common_defines
    - TEST

:cmock:
  :treat_externs: :include
  :treat_inlines: :include
  :mock_prefix: mock_
  :when_no_prototypes: :warn
  :enforce_strict_ordering: TRUE
  :plugins:
    - :ignore
    - :callback
  :treat_as:
    uint8:    HEX8
    uint16:   HEX16
    uint32:   UINT32
    int8:     INT8
    bool:     UINT8

# 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:
  :reports:
    - HtmlDetailed
  :gcovr:
    :html_medium_threshold: 75
    :html_high_threshold: 90
    :report_include: "^../../CodeVault/src.*"

#: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

# 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: []

:plugins:
  :load_paths:
    - "#{Ceedling.load_path}"
  :enabled:
    - stdout_pretty_tests_report
    - module_generator
    - gcov
...

@stotzd
Copy link
Author

stotzd commented Aug 10, 2022

I am attaching an example that fails. But if you remove the treat_inlines from the project.yaml it works.

inline_test.zip

@stotzd
Copy link
Author

stotzd commented Aug 10, 2022

Is this related to the use_test_preprocessor setting? If I set it to FALSE, then it seems to compile. Is this correct?

@radu-toma
Copy link

radu-toma commented Jan 16, 2023

I see similar issues and behaviour. Seems that

:use_test_preprocessor: FALSE

somehow works.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants