优化编译脚本
This commit is contained in:
@@ -12,7 +12,7 @@ OBJCPY="riscv64-unknown-elf-objcopy"
|
||||
OBJDUMP="riscv64-unknown-elf-objdump"
|
||||
|
||||
CFLAG=[
|
||||
"-march=rv32i_zicsr",
|
||||
"-march=rv32i",
|
||||
"-mabi=ilp32",
|
||||
"-ffunction-sections",
|
||||
"-fdata-sections",
|
||||
@@ -75,7 +75,7 @@ SRC=[
|
||||
"riscv/rtthread/components/drivers/core/device.c"
|
||||
]
|
||||
|
||||
LD_FILE="riscv.ld"
|
||||
LD_FILE="riscv/riscv.ld"
|
||||
|
||||
TARGET="riscv"
|
||||
|
||||
@@ -84,12 +84,11 @@ OUTPUT="output"
|
||||
|
||||
|
||||
def tran_path(path:str):
|
||||
p=path.replace('\\','/')
|
||||
p=p.replace('/','_')
|
||||
if(p[0]=='.'):
|
||||
return p[1:]
|
||||
else:
|
||||
return p
|
||||
path=os.path.normpath(os.path.join(OUTPUT,path))
|
||||
base_path=os.path.dirname(path)
|
||||
if not os.path.exists(base_path):
|
||||
os.makedirs(base_path)
|
||||
return path
|
||||
|
||||
|
||||
# 判断是否需要重新生成
|
||||
@@ -132,9 +131,8 @@ def read_depend_files(name:str):
|
||||
def build_depend(src:list):
|
||||
flags=f"{' '.join(INC)} {' '.join(DEF)} {' '.join(CFLAG)}"
|
||||
for i in src:
|
||||
name=tran_path(i).split('.')[0]
|
||||
name=os.path.splitext(tran_path(i))[0]
|
||||
dst='.'.join([name,'d'])
|
||||
dst=os.path.join(OUTPUT,dst)
|
||||
if(check_rebuild(dst,[i])):
|
||||
cmd=f"{CC} -MM {i} -o {dst} {flags}"
|
||||
print(f"更新 {dst}")
|
||||
@@ -149,22 +147,20 @@ def build_depend(src:list):
|
||||
def build_object(src:list):
|
||||
flags=f"{' '.join(INC)} {' '.join(DEF)} {' '.join(CFLAG)}"
|
||||
for i in src:
|
||||
name_l=tran_path(i).split('.')
|
||||
name=name_l[0]
|
||||
file_type=name_l[-1]
|
||||
name_t=os.path.splitext(tran_path(i))
|
||||
name=name_t[0]
|
||||
file_type=name_t[-1]
|
||||
dst='.'.join([name,'o'])
|
||||
dst=os.path.join(OUTPUT,dst)
|
||||
cd='.'.join([name,'d'])
|
||||
cmd = ''
|
||||
if(file_type in ['c','.C']):
|
||||
cd=os.path.join(OUTPUT,cd)
|
||||
if(file_type in ['.c','.C']):
|
||||
if(check_rebuild(dst,read_depend_files(cd))):
|
||||
cmd=f"{CC} -c {i} -o {dst} {flags}"
|
||||
else:
|
||||
# print(f"{i} 没有更新依赖关系")
|
||||
pass
|
||||
elif(file_type in ['s','S','asm','ASM']):
|
||||
if(check_rebuild(dst,[i])):
|
||||
elif(file_type in ['.s','.S','.asm','.ASM']):
|
||||
if(check_rebuild(dst,read_depend_files(cd))):
|
||||
cmd=f"{CC} -c {i} -o {dst} {flags}"
|
||||
else:
|
||||
# print(f"{i} 没有更新依赖关系")
|
||||
@@ -181,8 +177,8 @@ def build_target(src:list):
|
||||
flags=f"{' '.join(INC)} {' '.join(DEF)} {' '.join(CFLAG)}"
|
||||
obj_list=[]
|
||||
for i in src:
|
||||
name=tran_path(i).split('.')[0]
|
||||
obj_list.append(OUTPUT+'/'+'.'.join([name,'o']))
|
||||
name=os.path.splitext(tran_path(i))[0]
|
||||
obj_list.append('.'.join([name,'o']))
|
||||
dst=os.path.join(OUTPUT,TARGET)+".elf"
|
||||
if(check_rebuild(dst,obj_list)):
|
||||
cmd=f"{CC} {' '.join(obj_list)} -o {dst} {flags} -T{LD_FILE} -Wall -Wextra -nostartfiles -Wl,-Map,\"{OUTPUT}/{TARGET}.map\""
|
||||
|
Reference in New Issue
Block a user