From 92aec5b8cdf1491f160bc9baa99c88bbe115cb6b Mon Sep 17 00:00:00 2001
From: Rahix <rahix@rahix.de>
Date: Sat, 15 Jun 2019 18:59:21 +0200
Subject: [PATCH] build(bootloader): Integrate into meson

Signed-off-by: Rahix <rahix@rahix.de>
---
 bootloader/meson.build                        | 19 +++++++
 lib/card10/meson.build                        | 28 +++++++++
 lib/card10/mscmem.h                           | 57 +++++++++++++++++++
 lib/ff13/meson.build                          | 23 ++++++++
 lib/meson.build                               |  1 +
 .../CMSIS/Device/Maxim/MAX32665/meson.build   | 14 +++++
 lib/sdk/Libraries/MAXUSB/meson.build          | 33 +++++++++++
 lib/sdk/meson.build                           |  2 +
 meson.build                                   |  1 +
 9 files changed, 178 insertions(+)
 create mode 100644 bootloader/meson.build
 create mode 100644 lib/card10/mscmem.h
 create mode 100644 lib/ff13/meson.build
 create mode 100644 lib/sdk/Libraries/MAXUSB/meson.build

diff --git a/bootloader/meson.build b/bootloader/meson.build
new file mode 100644
index 00000000..04a4f73c
--- /dev/null
+++ b/bootloader/meson.build
@@ -0,0 +1,19 @@
+name = 'bootloader'
+
+executable(
+  name + '.elf',
+  'main.c',
+  'mscmem.c',
+  'bootloader-usb.c',
+  'crc16-ccitt.c',
+  dependencies: [
+    libcard10,
+    max32665_startup_boot,
+    libff13,
+    maxusb,
+  ],
+  link_whole: [max32665_startup_boot_lib, board_card10_lib],
+  link_args: [
+    '-Wl,-Map=' + meson.current_build_dir() + '/' + name + '.map',
+  ],
+)
diff --git a/lib/card10/meson.build b/lib/card10/meson.build
index 07c9e3e3..8e6ce61f 100644
--- a/lib/card10/meson.build
+++ b/lib/card10/meson.build
@@ -31,3 +31,31 @@ libcard10 = declare_dependency(
   link_with: lib,
   dependencies: deps,
 )
+
+##########################################################
+
+includes = include_directories(
+  './',
+)
+
+sources = files(
+  'mx25lba.c',
+)
+
+deps = [
+    board_card10,
+    periphdriver,
+]
+
+lib = static_library(
+  'mx25lba',
+  sources,
+  include_directories: includes,
+  dependencies: deps,
+)
+
+mx25lba = declare_dependency(
+  include_directories: includes,
+  link_with: lib,
+  dependencies: deps,
+)
diff --git a/lib/card10/mscmem.h b/lib/card10/mscmem.h
new file mode 100644
index 00000000..9d4a6e94
--- /dev/null
+++ b/lib/card10/mscmem.h
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (C) 2017 Maxim Integrated Products, Inc., All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
+ * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of Maxim Integrated
+ * Products, Inc. shall not be used except as stated in the Maxim Integrated
+ * Products, Inc. Branding Policy.
+ *
+ * The mere transfer of this software does not imply any licenses
+ * of trade secrets, proprietary technology, copyrights, patents,
+ * trademarks, maskwork rights, or any other form of intellectual
+ * property whatsoever. Maxim Integrated Products, Inc. retains all
+ * ownership rights.
+ *
+ * Description: Communications Device Class ACM (Serial Port) over USB
+ * $Id: descriptors.h 31172 2017-10-05 19:05:57Z zach.metzinger $
+ *
+ *******************************************************************************
+ */
+
+/**
+ * @file    mscmem.h
+ * @brief   Memory routines used by the USB Mass Storage Class example.
+ *          See the msc_mem_t structure in msc.h for function details.
+ */
+
+#ifndef __MSC_MEM_H__
+#define __MSC_MEM_H__
+
+#include <stdint.h>
+
+int mscmem_init(void);
+int mscmem_start(void);
+int mscmem_stop(void);
+uint32_t mscmem_size(void);
+int mscmem_read(uint32_t lba, uint8_t* buffer);
+int mscmem_write(uint32_t lba, uint8_t* buffer);
+int mscmem_ready(void);
+
+#endif  /* __MSC_MEM_H__ */
diff --git a/lib/ff13/meson.build b/lib/ff13/meson.build
new file mode 100644
index 00000000..48a26349
--- /dev/null
+++ b/lib/ff13/meson.build
@@ -0,0 +1,23 @@
+includes = include_directories(
+  './Source/',
+)
+
+sources = files(
+  './Source/diskio.c',
+  './Source/ff.c',
+  './Source/ffsystem.c',
+  './Source/ffunicode.c',
+)
+
+lib = static_library(
+  'ff13',
+  sources,
+  include_directories: includes,
+  dependencies: [periphdriver, mx25lba],
+)
+
+libff13 = declare_dependency(
+  include_directories: includes,
+  link_with: lib,
+  dependencies: [periphdriver, mx25lba],
+)
diff --git a/lib/meson.build b/lib/meson.build
index e2f7c313..80fd654a 100644
--- a/lib/meson.build
+++ b/lib/meson.build
@@ -7,3 +7,4 @@ subdir('./vendor/Maxim/MAX77650/')
 subdir('./gfx/')
 
 subdir('./card10/')
+subdir('./ff13/')
diff --git a/lib/sdk/Libraries/CMSIS/Device/Maxim/MAX32665/meson.build b/lib/sdk/Libraries/CMSIS/Device/Maxim/MAX32665/meson.build
index 9f9b1f64..4fef47d4 100644
--- a/lib/sdk/Libraries/CMSIS/Device/Maxim/MAX32665/meson.build
+++ b/lib/sdk/Libraries/CMSIS/Device/Maxim/MAX32665/meson.build
@@ -66,3 +66,17 @@ max32665_startup_core1 = declare_dependency(
     '--entry', 'Reset_Handler',
   ],
 )
+
+#############################################################
+# For the bootloader
+#############################################################
+
+# We can just reuse the same lib here
+max32665_startup_boot_lib = max32665_startup_lib
+
+max32665_startup_boot = declare_dependency(
+  link_args: [
+    '-T', meson.current_source_dir() + 'Source/GCC/max32665_boot.ld',
+    '--entry', 'Reset_Handler',
+  ],
+)
diff --git a/lib/sdk/Libraries/MAXUSB/meson.build b/lib/sdk/Libraries/MAXUSB/meson.build
new file mode 100644
index 00000000..6df655d6
--- /dev/null
+++ b/lib/sdk/Libraries/MAXUSB/meson.build
@@ -0,0 +1,33 @@
+includes = include_directories(
+  'include/core/musbhsfc',
+  'include/core',
+  'include/devclass',
+  'include/enumerate',
+  'include/util',
+  'include/dbg_log',
+)
+
+sources = files(
+  'src/core/musbhsfc/usb.c',
+  'src/core/usb_event.c',
+  'src/dbg_log/dbg_log.c',
+  'src/devclass/cdc_acm.c',
+  'src/devclass/hid_kbd.c',
+  'src/devclass/hid_raw.c',
+  'src/devclass/msc.c',
+  'src/enumerate/enumerate.c',
+  'src/util/fifo.c',
+)
+
+lib = static_library(
+  'maxusb',
+  sources,
+  include_directories: includes,
+  dependencies: periphdriver,
+)
+
+maxusb = declare_dependency(
+  include_directories: includes,
+  link_with: lib,
+  dependencies: periphdriver,
+)
diff --git a/lib/sdk/meson.build b/lib/sdk/meson.build
index b78dc88f..e71031e5 100644
--- a/lib/sdk/meson.build
+++ b/lib/sdk/meson.build
@@ -4,3 +4,5 @@ subdir('./Libraries/CMSIS/Device/Maxim/MAX32665/')
 subdir('./Libraries/Boards/card10/')
 
 subdir('./Libraries/FreeRTOS/')
+
+subdir('./Libraries/MAXUSB/')
diff --git a/meson.build b/meson.build
index 0cb5a984..a00a065b 100644
--- a/meson.build
+++ b/meson.build
@@ -30,4 +30,5 @@ add_global_link_arguments(
 python3 = import('python').find_installation('python3')
 
 subdir('lib/')
+subdir('bootloader/')
 subdir('hw-tests/')
-- 
GitLab