[stm32] Add BUILD.gn for stm32cubef4

Change-Id: Id8f708d5e9ddbac373019a243cec563adea7dcd2
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/experimental/+/39766
Commit-Queue: Varun Sharma <vars@google.com>
Reviewed-by: Ali Zhang <alizhang@google.com>
Reviewed-by: Yecheng Zhao <zyecheng@google.com>
diff --git a/third_party/stm32cubef4/BUILD.gn b/third_party/stm32cubef4/BUILD.gn
new file mode 100644
index 0000000..83043e6
--- /dev/null
+++ b/third_party/stm32cubef4/BUILD.gn
@@ -0,0 +1,159 @@
+# Copyright 2021 The Pigweed Authors
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may not
+# use this file except in compliance with the License. You may obtain a copy of
+# the License at
+#
+#     https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations under
+# the License.
+
+import("//build_overrides/pigweed.gni")
+
+import("$dir_pw_build/target_types.gni")
+
+declare_args() {
+  # Product (ex. "STM32F429xx")
+  pw_third_party_stm32cubef4_product = ""
+
+  # External clock frequency (ex. "8000000" for 8Mhz)
+  pw_third_party_stm32cubef4_hse_hz = ""
+}
+
+config("flags") {
+  cflags = [
+    "-DUSE_HAL_DRIVER",
+    "-D" + pw_third_party_stm32cubef4_product,
+    "-DHSE_VALUE=((uint32_t)" + pw_third_party_stm32cubef4_hse_hz + "U)",
+    "-Wno-redundant-decls",
+    "-Wno-unused-parameter",
+  ]
+  visibility = [ ":*" ]
+}
+
+config("public_include_paths") {
+  include_dirs = [
+    #TODO: Allow target to define their own `stm32f4xx_hal_conf.h`
+    ".",
+
+    "cmsis_device_f4/Include",
+    "cmsis_core_cm4/Include",
+    "stm32f4xx_hal_driver/Inc",
+    "stm32f4xx_hal_driver/Inc/Legacy",
+  ]
+  visibility = [ ":*" ]
+}
+
+pw_source_set("stm32f4xx_hal") {
+  public_configs = [
+    ":flags",
+    ":public_include_paths",
+  ]
+
+  public = [ "cmsis_device_f4/Include/stm32f4xx.h" ]
+
+  sources = [
+    #TODO: Allow target to not use these templates if desired.
+    "cmsis_device_f4/Source/Templates/system_stm32f4xx.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_msp_template.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_timebase_tim_template.c",
+  ]
+
+  sources += [
+    "stm32f4xx_hal_driver/Src/Legacy/stm32f4xx_hal_can.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_adc.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_adc_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_can.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_cec.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_cortex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_crc.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_cryp.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_cryp_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_dac.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_dac_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_dcmi.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_dcmi_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_dfsdm.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_dma.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_dma2d.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_dma_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_dsi.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_eth.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_exti.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_flash.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_flash_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_flash_ramfunc.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_fmpi2c.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_fmpi2c_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_fmpsmbus.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_fmpsmbus_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_gpio.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_hash.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_hash_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_hcd.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_i2c.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_i2c_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_i2s.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_i2s_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_irda.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_iwdg.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_lptim.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_ltdc.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_ltdc_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_mmc.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_nand.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_nor.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_pccard.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_pcd.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_pcd_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_pwr.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_pwr_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_qspi.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_rcc.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_rcc_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_rng.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_rtc.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_rtc_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_sai.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_sai_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_sd.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_sdram.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_smartcard.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_smbus.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_spdifrx.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_spi.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_sram.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_tim.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_tim_ex.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_uart.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_usart.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_hal_wwdg.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_adc.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_crc.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_dac.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_dma.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_dma2d.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_exti.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_fmc.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_fmpi2c.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_fsmc.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_gpio.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_i2c.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_lptim.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_pwr.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_rcc.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_rng.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_rtc.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_sdmmc.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_spi.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_tim.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_usart.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_usb.c",
+    "stm32f4xx_hal_driver/Src/stm32f4xx_ll_utils.c",
+  ]
+}
diff --git a/third_party/stm32cubef4/stm32f4xx_hal_conf.h b/third_party/stm32cubef4/stm32f4xx_hal_conf.h
new file mode 100644
index 0000000..fbbe150
--- /dev/null
+++ b/third_party/stm32cubef4/stm32f4xx_hal_conf.h
@@ -0,0 +1,18 @@
+// Copyright 2021 The Pigweed Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License. You may obtain a copy of
+// the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+// Use Default config template, which includes the entire HAL
+//  + some defaults (i.e. Ethernet MAC Address, oscillator config)
+// Some configs, i.e. HSE_VALUE are set in the BUILD.gn through cflags.
+#include "stm32f4xx_hal_conf_template.h"