summaryrefslogtreecommitdiff
path: root/libcpu/risc-v/SConscript
diff options
context:
space:
mode:
Diffstat (limited to 'libcpu/risc-v/SConscript')
-rw-r--r--libcpu/risc-v/SConscript69
1 files changed, 55 insertions, 14 deletions
diff --git a/libcpu/risc-v/SConscript b/libcpu/risc-v/SConscript
index fafb8524ec..eb259f7125 100644
--- a/libcpu/risc-v/SConscript
+++ b/libcpu/risc-v/SConscript
@@ -1,27 +1,68 @@
-# RT-Thread building script for bridge
+# RT-Thread building script for RISC-V
import os
from building import *
Import('rtconfig')
-common64_arch = ['virt64', 'c906', 'c908','ur-cp100']
-cwd = GetCurrentDir()
+cwd = GetCurrentDir()
group = []
-list = os.listdir(cwd)
+cpu = getattr(rtconfig, 'CPU', '')
+vendor = getattr(rtconfig, 'VENDOR', '')
+
+if GetDepend('RT_USING_RISCV_NEW_COMMON'):
+ bsp_path = Dir('#').abspath
+
+ if not os.path.exists(os.path.join(bsp_path, 'link.lds')):
+ Env['LINKFLAGS'] = Env['LINKFLAGS'].replace(
+ 'link.lds', os.path.join(cwd, 'link.lds'))
+ Preprocessing('link.lds.S', '.lds',
+ CPPPATH=[bsp_path, os.path.join(cwd, 'common', 'include')])
+
+ # The new common owns the complete C runtime entry.
+ Env['LINKFLAGS'] += ' -nostartfiles'
-# add common code files
-if rtconfig.CPU in common64_arch :
- group += SConscript(os.path.join('common64', 'SConscript'))
-else :
group += SConscript(os.path.join('common', 'SConscript'))
-group += SConscript(os.path.join('vector', 'SConscript'))
+ # New vendor ports are architecture-wide overrides, not per-CPU copies.
+ if vendor:
+ vendor_path = os.path.join(cwd, vendor)
+ vendor_script = os.path.join(vendor, 'SConscript')
+
+ if os.path.isfile(os.path.join(cwd, vendor_script)):
+ Env.Append(CPPPATH=[vendor_path])
+ group += SConscript(vendor_script)
+
+ if os.path.exists(os.path.join(vendor_path, 'mmu_vendor.h')):
+ Env.Append(ASFLAGS=' -D__HAS_MMU_VENDOR__')
+ Env.Append(CFLAGS=' -D__HAS_MMU_VENDOR__')
+ Env.Append(CXXFLAGS=' -D__HAS_MMU_VENDOR__')
+
+ if os.path.exists(os.path.join(vendor_path, 'opcode_vendor.h')):
+ Env.Append(ASFLAGS=' -D__HAS_OPCODE_VENDOR__')
+ Env.Append(CFLAGS=' -D__HAS_OPCODE_VENDOR__')
+ Env.Append(CXXFLAGS=' -D__HAS_OPCODE_VENDOR__')
+else:
+ common64_cpus = ['virt64', 'c906', 'c908', 'ur-cp100']
+
+ if cpu in common64_cpus:
+ group += SConscript(os.path.join('common64', 'SConscript'))
+ else:
+ group += SConscript(os.path.join('legacy_common', 'SConscript'))
+
+ group += SConscript(os.path.join('vector', 'SConscript'))
+
+ if vendor:
+ if vendor == 't-head':
+ port_script = os.path.join('legacy-t-head', cpu, 'SConscript')
+ else:
+ port_script = os.path.join(vendor, cpu, 'SConscript')
-# cpu porting code files
-if 'VENDOR' in vars(rtconfig) and rtconfig.VENDOR != '':
- group = group + SConscript(os.path.join(rtconfig.VENDOR, rtconfig.CPU, 'SConscript'))
-elif rtconfig.CPU in list:
- group = group + SConscript(os.path.join(rtconfig.CPU, 'SConscript'))
+ if os.path.isfile(os.path.join(cwd, port_script)):
+ group += SConscript(port_script)
+ elif cpu:
+ port_script = os.path.join(cpu, 'SConscript')
+ if os.path.isfile(os.path.join(cwd, port_script)):
+ group += SConscript(port_script)
Return('group')