An implementation of oeedger8r in C++
C++ 11
support.The default C++ compilers and cmake that come with Ubuntu 20.04, Ubuntu 18.04 ought to be sufficient for compiling oeedger8r. On Windows, VS 2017 Build Tools or later should be sufficient.
The following platforms are tested in CI
oeedger8r should build and run successfully on most Linux distrubitions and flavors of Windows.
Clone the repository:
git clone https://github.com/openenclave/oeedger8r-cpp
Create a build folder and configure:
cd oeedger8r-cpp
mkdir build
cd build
cmake ..
This should produce output similar to:
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: oeedger8r-cpp/build
Build the project
make -j 4
This would generate oeeger8r executable in the build folder:
ls -la oeedger8r
-rwxr-xr-x 1 user user 379848 Jun 1 14:15 oeedger8r*
Use ctest to run all the tests:
ctest
Test project oeedger8r-cpp/build
Start 1: oeedger8r_test_basic
1/19 Test #1: oeedger8r_test_basic ........................................... Passed 0.00 sec
Start 2: oeedger8r_private_trusted_warning
2/19 Test #2: oeedger8r_private_trusted_warning .............................. Passed 0.01 sec
Start 3: oeedger8r_allow_list_warning
3/19 Test #3: oeedger8r_allow_list_warning ................................... Passed 0.01 sec
Start 4: oeedger8r_portability_trusted_wchar_t_warning
4/19 Test #4: oeedger8r_portability_trusted_wchar_t_warning .................. Passed 0.01 sec
Start 5: oeedger8r_portability_trusted_long_double_warning
5/19 Test #5: oeedger8r_portability_trusted_long_double_warning .............. Passed 0.01 sec
Start 6: oeedger8r_portability_trusted_long_warning
6/19 Test #6: oeedger8r_portability_trusted_long_warning ..................... Passed 0.00 sec
Start 7: oeedger8r_portability_trusted_unsigned_long_warning
7/19 Test #7: oeedger8r_portability_trusted_unsigned_long_warning ............ Passed 0.00 sec
Start 8: oeedger8r_portability_untrusted_wchar_t_warning
8/19 Test #8: oeedger8r_portability_untrusted_wchar_t_warning ................ Passed 0.00 sec
Start 9: oeedger8r_portability_untrusted_long_double_warning
9/19 Test #9: oeedger8r_portability_untrusted_long_double_warning ............ Passed 0.00 sec
Start 10: oeedger8r_portability_untrusted_long_warning
10/19 Test #10: oeedger8r_portability_untrusted_long_warning ................... Passed 0.00 sec
Start 11: oeedger8r_portability_untrusted_unsigned_long_double_warning
11/19 Test #11: oeedger8r_portability_untrusted_unsigned_long_double_warning ... Passed 0.00 sec
Start 12: oeedger8r_size_signedness_warning
12/19 Test #12: oeedger8r_size_signedness_warning .............................. Passed 0.01 sec
Start 13: oeedger8r_count_signedness_warning
13/19 Test #13: oeedger8r_count_signedness_warning ............................. Passed 0.01 sec
Start 14: oeedger8r_size_and_count_warning
14/19 Test #14: oeedger8r_size_and_count_warning ............................... Passed 0.01 sec
Start 15: oeedger8r_deepcopy_value_warning
15/19 Test #15: oeedger8r_deepcopy_value_warning ............................... Passed 0.00 sec
Start 16: oeedger8r_missing_trusted_dir
16/19 Test #16: oeedger8r_missing_trusted_dir .................................. Passed 0.00 sec
Start 17: oeedger8r_missing_untrusted_dir
17/19 Test #17: oeedger8r_missing_untrusted_dir ................................ Passed 0.00 sec
Start 18: oeedger8r_missing_search_path
18/19 Test #18: oeedger8r_missing_search_path .................................. Passed 0.00 sec
Start 19: oeedger8r_comprehensive
19/19 Test #19: oeedger8r_comprehensive ........................................ Passed 0.00 sec
100% tests passed, 0 tests failed out of 19
Total Test time (real) = 0.10 sec
Code Coverage is supported only when building with GCC.
Additionally code coverage requires lcov
, and python lcov_cobertura
package.
sudo apt install lcov
pip3 install lcov_cobertura
To obtain code coverage, configure cmake by passing -DCODE_COVERAGE=on
to cmake.
cd build
cmake .. -DCODE_COVERAGE=on
The output would show that oeedger8r will be built for code coverage.
Building for code coverage.
-- Configuring done
-- Generating done
-- Build files have been written to: /home/anakrish/work/oeedger8r-cpp/build
To obtain code coverage, run make code_coverage
.
That will build oeedger8r, run tests and generate code-coverage report as html, as well as cobertura xml.
Writing data to ./oeedger8r_total_filtered.info
Summary coverage rate:
lines......: 74.0% (1303 of 1762 lines)
functions..: 88.3% (218 of 247 functions)
branches...: no data found
Generating html report...
Reading data file ./oeedger8r_total_filtered.info
Found 11 entries.
Found common filename prefix "/home/anakrish/work"
Writing .css and .png files.
Generating output.
Processing file oeedger8r-cpp/lexer.h
Processing file oeedger8r-cpp/lexer.cpp
Processing file oeedger8r-cpp/args_h_emitter.h
Processing file oeedger8r-cpp/utils.h
Processing file oeedger8r-cpp/ast.h
Processing file oeedger8r-cpp/h_emitter.h
Processing file oeedger8r-cpp/c_emitter.h
Processing file oeedger8r-cpp/f_emitter.h
Processing file oeedger8r-cpp/parser.cpp
Processing file oeedger8r-cpp/w_emitter.h
Processing file oeedger8r-cpp/main.cpp
Writing directory view page.
Overall coverage rate:
lines......: 74.0% (1303 of 1762 lines)
functions..: 88.3% (218 of 247 functions)
Generating cobertura xml...
Built target code_coverage