Commit Graph

31 Commits

Author SHA1 Message Date
Rob Mohr
7f519e26bf Change presubmit.py to Python 3.
Change-Id: I7367e32c752353d78dd78a59e3288f3d1666db1a
2019-11-15 09:05:16 -08:00
Keir Mierle
367493555e pw_string: Add missing string_view include
Change-Id: I0e6cdb68c48d9e8f21e64af719acf53e4e6495c6
2019-11-15 03:17:30 +00:00
Rob Mohr
443bb9d20e Initial presubmit.py script.
Change-Id: I4b22f34222078ed139fca747da3f5f1733951d63
2019-11-15 01:51:54 +00:00
Alexei Frolov
0efdb117e1
Add root docs directory
This change adds a docs directory at the root level of the Pigweed
repository for building documentation for the entirety of Pigweed.
The directory contains a top-level index.rst and conf.py for docgen,
and a pw_doc_gen build target to render the documentation.

Change-Id: Iba981c64662d48a1d23bb7bda9bf0ed5a104873b
2019-11-14 17:29:23 -08:00
Alexei Frolov
4c035b0487
Integrate bloat reports into docgen
This change updates the bloat script to output an RST version of its
report card table. Metadata is added to the bloat_report GN template
indicating its RST output, allowing it to be listed as a dependency of
pw_doc_group targets.

Change-Id: I3f098d352856a9dd8688bac44e3b60ddbb97a3a6
2019-11-14 16:39:09 -08:00
Alexei Frolov
e2016763a8
Add pw_bloat module
This change adds a size reporting module named pw_bloat. The module
uses Bloaty McBloatface to generate size report cards for binaries. It
provides a GN template which defines an action to perform a size diff
on a group of binary targets.

Example output:

                       simple_bloat
                       ────────────
┌────────────────┬──────────────┬────────┬───────┬───────┐
│      Label     │    Segment   │ Before │ Delta │ After │
├════════════════┼══════════════┼════════┼═══════┼═══════┤
│     Add a loop │ EXAMPLE CODE │    429 │   +32 │   461 │
│                │ EXAMPLE  RAM │    576 │    +8 │   584 │
├────────────────┼──────────────┼────────┼───────┼───────┤
│ Add a function │ EXAMPLE CODE │    429 │   +16 │   445 │
│                │ EXAMPLE  RAM │    576 │    +8 │   584 │
└────────────────┴──────────────┴────────┴───────┴───────┘

Change-Id: I14b3d383ec450bc6d017bf5d0111e266b0a3c368
2019-11-14 14:29:28 -08:00
Wyatt Hepler
09517ed9b8 Have targets set pw_unit_test_create_run_targets
- Move pw_unit_test_create_run_targets to pw_vars_default.gni so that
  targets can set it.
- Keep the default false, but set it to true for the host targets.

Change-Id: Ia1af584642d0dd4d16b801b2ee4a8bb1a78c286e
2019-11-14 12:45:18 -08:00
Wyatt Hepler
cca0daf7b1 Clang toolchain Linux support
- Update host_clang to work on Linux: switch to -Map and --gc-sections
  options
- Make pw_target_toolchain a build arg for Linux and macOS targets.
  Default to gcc on Linux, clang on macOS.
- Rename x86_linux_gcc to host_gcc.

Change-Id: I72eef9ba9398a331f6567b68ad404092186eb15b
2019-11-14 12:34:15 -08:00
Wyatt Hepler
0dae2d63db Use EXPECT_STREQ instead of EXPECT_EQ
EXPECT_EQ happens to work (sometimes) because of string interning, but
these strings should be compared by value with EXPECT_STREQ.

Change-Id: Ifdcc7cf12d9c0868d8e7976baf549935ef117efc
2019-11-14 10:43:51 -08:00
Rob Mohr
cf185b4ccc Update bazel for pw_status and pw_string changes.
Change-Id: I698260e5dbb82625bb34e8a2c68a683eb569eddc
2019-11-14 18:29:39 +00:00
Keir Mierle
586719197a pw_toolchain: Start host_clang toolchain
This adds a generic host_clang toolchain, targeting hosts running Mac and
Linux to start, and likely Windows later.

For now, on Mac the default toolchain is set to host_clang_og

Change-Id: Iea457c61586930d509439c6616574c9a74919433
2019-11-14 18:26:54 +00:00
Rob Mohr
cb0558101b Add pw_docgen to bazel build.
Even though it does nothing, it makes importing elsewhere easier.

Change-Id: I2c2d6dcdcfa5d9f6113b8cde57e027beb26da5c6
2019-11-14 18:18:20 +00:00
Wyatt Hepler
58823c1bea pw_string: ToString function
ToString allows writing string representations of arbitrary types to a
buffer.

Change-Id: Ie0e327560847509b03c651bd1697be8bc084b360
2019-11-14 17:58:56 +00:00
Wyatt Hepler
463359c485 Fix the namespace for the pw_status tests
Change-Id: Iec5a3bdc52ccf97da7f46b05c4d4747aa12e4c59
2019-11-14 17:58:14 +00:00
Rob Mohr
75e5fc9a15 Add pw_string to bazel build.
Change-Id: I0aa7741959b741de082d44afe87786754b572951
2019-11-14 09:16:03 -08:00
Wyatt Hepler
48db4d6f50 Start the pw_string module
Introduce functions for outputting numbers as strings. Unlike some
snprintf implementations, these functions support 64-bit integers. Also,
very limited floating point support is provided.

These functions are faster than snprintf and never truncate numbers.

Change-Id: Id5ae06a5d175f15403c34cddb2a077a88be47cf8
2019-11-14 16:32:39 +00:00
Rob Mohr
be98ead12a Add bazel build system files.
Build everything with 'bazel build //...' and run all tests with
'bazel test //...'.

Change-Id: Ia912e999e33caa9b490002d639dc4c9a80034afc
2019-11-14 07:16:44 -08:00
Alexei Frolov
e899dcf4a3 Start build target config files
This change defines the build target system used by Pigweed, where the
build is configured using per-target globals imported from a target .gni
file. A single build arg specifying the path to the target file replaces
the previous args.

A default build variables file is provided in the Pigweed root. This
file defines and documents all of the build variables used by Pigweed.

A top-level targets directory is added to define the targets used by
Pigweed developers. Currently, only a "host" target is added, which
configures the build for a development system based on the host OS.

Change-Id: Ie62b8d41e5789bfe7fffe20462160142c79076c4
2019-11-14 00:34:25 +00:00
Wyatt Hepler
b66792804a pw_status: StatusWithSize class
- Create StatusWithSize, which efficiently stores a Status and a
  non-negative integer.
- Add tests for Status and StatusWithSize.

Change-Id: I34ade117d890318d45a27664fe53303365f21f68
2019-11-13 22:58:45 +00:00
Alexei Frolov
baaa2d62a6
Add pw_docgen module
This change adds a module which builds documentation using Sphinx.
Documentation files and assets are defined using a pw_doc_group GN
template which lists out all of the sources as metadata. Another GN
template, pw_doc_gen, collects the metadata from pw_doc_group targets
into a JSON file and defines an action that runs a script to build the
HTML docs.

A docgen script is provided by the pw_docgen module. This script reads
the JSON metadata file collected by a pw_doc_gen template, copies all of
the source and resource files into a documentation tree, and runs Sphinx
on the tree to render the docs as HTML.

Change-Id: I97890f05d850d5119cbd3bbf48138cd82f22d56c
2019-11-13 13:28:28 -08:00
Alexei Frolov
917756d925
Add a stamp option to pw_python_script
GN requires all actions to have at least one output file. However, many
Python scripts are run to process data without generating a file. Such
scripts would previously have to specify a dummy output file and touch
it on completion.

This change adds this stamp functionality to the script-runner script.
The pw_python_script template accepts a boolean "stamp" argument. If
set, the runner will touch a dummy file after it runs its sub-command.

Change-Id: Iff0408ea0d93007418a1766f1eb7ed7b30ec6913
2019-11-12 15:07:43 -08:00
Alexei Frolov
d1f98fadeb Script-runner script and pw_python_script template
This change adds a pw_python_script GN template which defines an action
to run a Python script through a script-runner script. This runner is
responsible for resolving any GN paths to filesystem paths, and finding
output binaries for compiled targets. This allows writing Python scripts
which are ignorant of the GN build system and work only with filesystem
paths.

The unit test runner script is updated to use the new runner template.

Change-Id: I132bb620af2bb1e57e9278fac57b676f8ab5a415
2019-11-12 18:40:24 +00:00
Alexei Frolov
02dfcc47d9 Make default toolchain a build argument
This change makes the default toolchain for the build system an
argument so that it can be configured per build target.

Change-Id: I32822be9a6e33376bb1e75b996f79d3451ef9963
2019-11-11 17:59:47 +00:00
Wyatt Hepler
771056581c pw_span module
pw::span is a stand-in for C++20's std::span.

Change-Id: I1f36d5da43493c20b4806f6cb1198faf62d47743
2019-11-08 17:15:01 -08:00
Keir Mierle
2b0e008a75 pw_unit_test: Clang fixes
This makes two tweaks to enable compiling with Clang on the desktop:
- Switch from (&function_pointer) to (*function_pointer) style.
- Make destructor final in derived test class to prevent warning from
  the "-Wdelete-non-abstract-non-virtual-dtor" flag.

Change-Id: Ic1783e41ee8092a5ad218ebdb48376742f85ff50
2019-11-08 00:01:49 -08:00
Alexei Frolov
925fb8f510 Build and run unit tests through GN
This change adds a GN template for defining unit test executables.
The template, called pw_test, defines the executable and outputs a JSON
metadata file for the test.

A new build argument is added. This argument determines whether unit
test run targets are supported by the current build target. If this is
set, the pw_test template additionally creates a run target for its test
executable which invokes the executable through a script.

A basic test runner script is added to the pw_unit_test module. This
script currently only runs a single test executable directly.

The unit tests in the pw_preprocessor module are updated to use the
pw_test template.

Change-Id: I3cbde9c19440276dbab80dd2bab5fec87abe6d7e
2019-11-08 01:16:04 +00:00
Wyatt Hepler
979890d732 Compiler option updates
- Add -fdiagnostics-color so that compiler warnings are colorized. The
  way Ninja invokes GCC disables colors by default.
- Move -Wno-psabi up to the arm_gcc_toolchain template so that it
  doesn't have to be specified for each arm_gcc_toolchain instance.
- Add -Werror to the strict_warnings config to prevent warnings from
  slipping through. Exempt a few warnings that should actually be
  warnings.

Change-Id: I8656d6690b488f7b004f15abd7100b62e1945cfd
2019-11-07 10:51:32 -08:00
Keir Mierle
243e32a85f pw_unit_test: Make simple runner look like GTest
This makes these changes to the unit test framework:

(1) Makes the simple test runner output match GTest
(2) Adds a new RunAllTestsStart() and RunAllTestsEnd() event
(3) Adds an intentionally-failing expectation to the sample test

Example output:

[==========] Running all tests.
[ RUN      ] PigweedTest.ExpectBool
[       OK ] PigweedTest.ExpectBool
[ RUN      ] PigweedTest.ExpectBasicComparisons
[       OK ] PigweedTest.ExpectBasicComparisons
[ RUN      ] PigweedTest.ExpectStringEquality
[       OK ] PigweedTest.ExpectStringEquality
[ RUN      ] PigweedTest.NonCopyableType
[       OK ] PigweedTest.NonCopyableType
[ RUN      ] PigweedTest.MacroArgumentsOnlyAreEvaluatedOnce
[       OK ] PigweedTest.MacroArgumentsOnlyAreEvaluatedOnce
[ RUN      ] FixtureTest.CustomFixture
[       OK ] FixtureTest.CustomFixture
[ RUN      ] PigweedTestFixture.TheNumberIs35
[       OK ] PigweedTestFixture.TheNumberIs35
[ RUN      ] PigweedTestFixture.YupTheNumberIs35
[       OK ] PigweedTestFixture.YupTheNumberIs35
[ RUN      ] PigweedTestFixture.MissingExpectations
../pw_unit_test/framework_test.cc:156: Failure
      Expected: missed_expectations == 200
[  FAILED  ] PigweedTestFixture.MissingExpectations
[==========] Done running all tests.
[  PASSED  ] 8 test(s).
[  FAILED  ] 1 test(s).

Change-Id: I813096a9d62423e256993ae03724337d52702297
2019-11-05 14:48:19 -08:00
Alexei Frolov
c10c81201d Add preprocessor and unit_test modules
This change adds two Pigweed modules: pw_preprocessor and pw_unit_test.
The preprocessor module contains header files providing helpful macros
for the C preprocessor. The unit test module contains a starter
implementation of a unit testing framework for Pigweed.

Change-Id: I46e1a4cae1fd8ce36d7840a2e92f8013fb489cde
2019-11-04 16:07:34 -08:00
Alexei Frolov
1a82c146ff
Initial Pigweed modules
This change adds Pigweed's first few (incomplete) modules: pw_build,
pw_status, and pw_toolchain. The main scaffolding for Pigweed's GN-based
build system is also included, with a root BUILDCONFIG and BUILD.gn file
defining a top-level modules build target.

Change-Id: I09599443d50696343d6c5b85853cb5cee3ce0026
2019-10-31 17:43:53 -07:00
Keir Mierle
5d1226f428 Initial commit for Pigweed
This sets up a basic license, readme, and contributors file.

Change-Id: I384e59e5d5ac0a2369606a360d5d2ed2cbface35
2019-10-31 13:26:45 -07:00