Commit Graph

15 Commits

Author SHA1 Message Date
Wyatt Hepler
c3a2d475ce Build tweaks for C files
- Use the full file name for object files in the GN build, e.g.
  file.cc.o instead of file.o. This allows having .cc and .c files with
  the same name.
- Have the pw_auto_add_simple_module CMake function build .c and .cc
  test files together.

Change-Id: I3086a96bcc55b013db4f2c278418c17ce1b9fd82
2020-01-09 22:18:49 +00:00
Alexei Frolov
77af7193e0 Fix MacOS xcode sysroot command
The way in which the exec script receives arguments was recently
modified but the MacOS clang toolchain that calls it was not updated.
This change fixes that.

Fixes: 11
Change-Id: Ie41a1c62c9c9aa3b7e7d54d16b1f8096b9dbb559
2019-12-20 20:10:18 +00:00
Rob Mohr
4b501c6f84
Use --sysroot on Mac.
Fix: 11
Change-Id: Iff15f485294f503f00d3a3f7b9fe8d3bd2eb3544
2019-12-19 11:33:12 -08:00
Paul Mathieu
0b955ca0d3 arm_gcc: help ld link all these libs together
There is some confusion as to what the following flags do:

--start-group/--end-group
--[no-]whole-archive

Before explaining them further, the following facts should be
highlighted:

Fact: the linker loads *all* input *.o objects
Fact: a static library is an archive of object files
Fact: the linker will try to resolve symbols across *all* currently
	loaded object
Fact: if a symbol cannot be resolved among currently loaded object, the
	linker will consider static libraries in the order provided and
	load the first object that provides that symbol
Fact: the linker only considers static libraries once and in the order
	provided

--start-group/--end-group pairs tell the linker to re-attempt
considering the libraries contained within the pair, and *in the order
provded* for as long as new unresolved symbols can be resolved that way.

--whole-archive/--no-whole-archive pairs tell the linker to load all
objects from the libraries contained within the pair, making it
equivalent to manually extracting all the object files out of these
libraries and providing them on the command line to the linker

In well-formed cases, none of these flags are necessary. An acyclic
chain of depencies can be established within these libraries by making
them into source_set() targets that depend on each other. In this case,
gn will output the correct order for these libraries.

There are cases where this is not possible. This is typically the case
when vendor-provided libraries have circular dependencies among them.
In these cases, either --start-group/--end-group or
--whole-archive/--no-whole-archive pairs need to be used.

--whole-archive/--no-whole-archive is safer because it allows the proper
resolution of weak/strong symbols.
Example:
libfoo.a:
  foo.o:
    w foo

libbar.a:
  bar.o:
    T foo

main.o:
  U foo

$ gcc main.o libfoo.a libbar.a

will result in the weak symbol defined in libfoo.a to be used.

$ gcc main.o --Wl,--whole-archive libfoo.a libbar.a -wl,--no-whole-archive

will result in the strong symbol defined in libbar.a to be used.

In light of all of the above, we propose always using
--whole-archive/--no-whole-archive and relying on --gc-sections to trim
the resulting executable to a reasonable size.

Change-Id: I355200961b6df6e797f3035f7945eb1a7f9e30b7
2019-12-18 16:43:36 +00:00
Keir Mierle
3db839697b Switch ARM GCC toolchain to use string_join()
This switches the ARM GCC toolchain to use the GN's new string_join()
function to make the long literals in the GCC toolchain files easier to
read.

Change-Id: I7fac49d591a4f589cb11afa41d213adaef411b30
2019-12-17 19:18:07 +00:00
Armando Montanez
050eae89d2 stm32f429i-disc1: Enable hardware FPU
* Add Cortex-M4 toolchains with floating point hardware instructions.
 * Update stm32f429i-disc1 to use hardware fpu toolchain by default.
 * Add code to enable FPU in pw_dumb_io.

Verified tests that use floating point operations continue to pass.

Change-Id: I76bc7eeaf457eca1abacbc60992648d63dc85bf2
2019-12-13 00:33:46 +00:00
Wyatt Hepler
becb431e5f Apply pw format to the repository
Change-Id: I3c8e4f956dfe6c9e81d3069f72c30c5950852074
2019-12-05 09:31:11 -08:00
Armando Montanez
4f803342ba Small Cortex-M4 toolchain tweaks
Updates Cortex-M4 toolchain to use nano.specs and soft FPU.

Change-Id: I7f4d97bb428b38d90cae9041487460e6c2eed184
2019-11-18 21:14:52 +00:00
Rob Mohr
e8fbe6a882 Add license metadata to bazel files.
Change-Id: Id32c7db700f3fba809d4e90473cbd3e8b8d7ca47
2019-11-15 11:52:14 -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
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
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
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
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