build: Add infrastructure for the bootloader program and libcommon.
[gps-watch.git] / SConscript.target
diff --git a/SConscript.target b/SConscript.target
new file mode 100644 (file)
index 0000000..6dd2f41
--- /dev/null
@@ -0,0 +1,70 @@
+import os
+
+Import('env')
+env = env.Clone()
+
+host = os.environ.get('HOST', 'arm-none-eabi-')
+
+d = {
+    'CC': 'gcc',
+    'LD': 'ld',
+    'AR': 'ar',
+    'RANLIB': 'ranlib',
+    'OBJCOPY': 'objcopy',
+}
+
+for k, v in d.items():
+    env[k] = host + v
+
+env.Append(CCFLAGS = [
+    '-mcpu=cortex-m0plus',
+    '-mthumb',
+    '-ffunction-sections',
+    '-fdata-sections',
+    '-Os',
+])
+
+env.Append(LINKFLAGS = [
+    '-mcpu=cortex-m0plus',
+    '-mthumb',
+    '-specs=nano.specs',
+    '-specs=nosys.specs',
+    '-nostdlib',
+    '-nostartfiles',
+])
+
+env.Append(RUSTCFLAGS = [
+    '-C', 'opt-level=s',
+    '--target=thumbv6m-none-eabi',
+    '-L', '$LIBPATH',
+])
+
+env.Append(LINKFLAGS = [
+    '-Wl,--gc-sections'
+])
+
+SConscript('SConscript.libcommon', exports='env', duplicate=0)
+
+libbootloader_source_files = [
+    'src/bootloader/main.rs', # Must be listed first (see below).
+]
+
+libbootloader = env.Rustc('libbootloader.a', libbootloader_source_files[0])
+
+for f in libbootloader_source_files:
+    Depends(libbootloader, f)
+
+Depends(libbootloader, 'libcommon.rlib')
+Depends(libbootloader, 'libcommon.a')
+
+bootloader_env = env.Clone()
+
+bootloader_env.Append(LINKFLAGS = [
+    '-Tsrc/bootloader/bootloader.ld',
+])
+
+bootloader_elf = bootloader_env.Program('gps-watch-bootloader.elf', 'src/bootloader/start.c', LIBS = ['bootloader', 'common'])
+
+bootloader_bin = bootloader_env.Objcopy(bootloader_elf)
+
+Default(bootloader_bin)