# Fuchsia Firmware SDK

We attempt to bring the Fuchsa Firmware SDK in with as few modifications as
possible, but at the moment there are a few small changes that are necessary.

Standard library includes are a bit tricky, for example `stdint.h`. We can't
include `stdint.h` directly because it uses the toolchain's built-in
mplementation which conflicts with u-boot's custom `common.h` definitions.

However, we also can't create a fake `stdint.h` that just redirects to
`common.h` because the `scp_task` sub-build *does* use the built-in `stdint.h`,
so replacing it breaks that build.

The current approach is just to modify the SDK files directly as needed to
point to u-boot's custom headers instead of the standard library ones.

## libabr

* `sysdeps.h`:
  * Undefine `LIBABR_USE_STDLIB_DEPS`
  * Adjust include files
  * Add `AbrIsValidMetadata()` API
* `util.h`:
  * Add `<common.h>` include
* `util.c`:
  * Add `<util.h>` include
* Add `abr_sysdeps.c` to provide sysdep implementations

## libavb

* `avb_atx_validate.h`
  * Set `AVB_ATX_PIK_VERSION_LOCATION` to 7
  * Set `AVB_ATX_PSK_VERSION_LOCATION` to 6
* `avb_cmdline.c`
  * Initialize `verity_mode` and `dm_verity_mode` to `NULL`
* `avb_slot_verify.h`
  * Set `AVB_MAX_NUMBER_OF_ROLLBACK_INDEX_LOCATIONS` to 6
* `avb_slot_verify.c`
  * Initialize `ret` in `avb_slot_verify()`
* `avb_sysdeps.h`
  * Replace standard library includes

## libzbi

* `zbi.c`:
  * Replace `<string.h>` include

## sysroot

* `zircon/boot/image.h`:
  * Replace `<stdint.h>` include
