+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)