Linker now doesn't unecessarily rebuild

This commit is contained in:
Fazana
2021-12-07 00:53:26 +00:00
parent 70e918bb35
commit b0663f2601
2 changed files with 62 additions and 42 deletions
+29 -21
View File
@@ -2,6 +2,7 @@ import sys
import json
import re
import os
import hashlib
from file_util import FileUtil
@@ -16,27 +17,34 @@ class GenerateAssets:
self.UCODE_TEXT_FILENAME = rootDir + '/asm/assets/ucode_text.s'
self.UCODE_DATA_FILENAME = rootDir + '/asm/assets/ucode_data.s'
self.BUILD_DIR = rootDir + '/build/' + version
self.generate_assets_file()
self.generate_ucode_files()
def generate_assets_file(self):
with open(self.ASSETS_DIR + '/assets.json') as jsonFile:
with open(self.ASSETS_DIR + '/md5.txt', 'w') as a_file:
with open(self.ASSETS_DIR + '/assets.json',"rb") as f:
bytes = f.read() # read file as bytes
readable_hash = hashlib.md5(bytes).hexdigest();
a_file.write(readable_hash)
assetsJSON = json.load(jsonFile)
assets = assetsJSON['assets']
self.generate_asset_sections_header_file(assets)
assetsTextFinal = '# This file was generated by generate_ld.py\n\n'
assetsTextFinal += '.include "macros.inc"\n\n'
assetsText = 'glabel ASSETS_START\n\n'
assetSectionTexts = [''] * len(assets)
numAssets = len(assets)
self.numAssets = numAssets
for i in range(0, numAssets):
assetSectionTexts[i] = 'glabel ASSET_SECTION_' + str(i) + '\n'
for i in range(0, numAssets):
@@ -51,9 +59,9 @@ class GenerateAssets:
assetSectionTexts[tableIndex] += '.word ASSET_SECTION_' + str(i) + '_END - ASSET_SECTION_' + str(i) + '\n'
assetSectionTexts[tableIndex] += '.word 0xFFFFFFFF\n'
continue
folder = self.BUILD_DIR + '/' + assets[i]['folder']
numFiles = len(assets[i]['filenames'])
for j in range(0, numFiles):
assetSectionTexts[i] += 'glabel ASSET_' + str(i) + '_' + str(j) + '\n'
@@ -61,26 +69,26 @@ class GenerateAssets:
if not filename.endswith('.bin'):
filename = os.path.splitext(filename)[0] + '.bin'
assetSectionTexts[i] += '.incbin "' + filename + '"\n'
if 'table' in assets[i]:
assetSectionTexts[assets[i]['table']] += self.generate_asset_table(i, assets[i], assetType, numFiles)
for i in range(0, numAssets):
assetSectionTexts[i] += 'glabel ASSET_SECTION_' + str(i) + '_END\n'
for assetSectionText in assetSectionTexts:
assetsText += '.balign 16\n' + assetSectionText + '\n'
assetsText += '.balign 16\nglabel ASSETS_END\n'
assetsTextFinal += '.word ' + str(numAssets) + ' # Number of asset sections \n'
for i in range(0, numAssets):
assetsTextFinal += '.word ASSET_SECTION_' + str(i) + ' - ASSETS_START\n'
assetsTextFinal += '.word ASSETS_END - ASSETS_START\n\n'
assetsTextFinal += assetsText
with open(self.ASSETS_FILENAME, "w") as assetsFile:
assetsFile.write(assetsTextFinal)
def generate_asset_table(self, i, asset, assetType, numFiles):
outText = ''
if assetType == 'TTGhosts':
@@ -122,7 +130,7 @@ class GenerateAssets:
assetsUCodeText += self.generate_ucode_file('rspUnknown2Start', 'ucode/ucode_unknown_2.bin')
with open(self.UCODE_TEXT_FILENAME, "w") as assetsFile:
assetsFile.write(assetsUCodeText)
assetsUCodeData = '# This file was generated by generate_ld.py\n\n'
assetsUCodeData += '.include "macros.inc"\n\n'
assetsUCodeData += self.generate_ucode_file('rspUnknownDataStart', 'ucode/data_unknown.bin')
@@ -130,21 +138,21 @@ class GenerateAssets:
assetsUCodeData += self.generate_ucode_file('rspF3DDKRDataFifoStart', 'ucode/data_f3ddkr_fifo.bin')
assetsUCodeData += self.generate_ucode_file('rspF3DDKRDataXbusStart', 'ucode/data_f3ddkr_xbus.bin')
assetsUCodeData += self.generate_ucode_file('rspUnknown2DataStart', 'ucode/data_unknown_2.bin')
with open(self.UCODE_DATA_FILENAME, "w") as assetsFile:
assetsFile.write(assetsUCodeData)
def generate_ucode_file(self, label, path):
return 'glabel ' + label + '\n.incbin "' + self.BUILD_DIR + '/' + path + '"\n'
def generate_asset_sections_header_file(self, assets):
out = '/* This file was generated by generate_ld.py */\n'
out += '\n#ifndef _ASSET_SECTIONS_H_\n#define _ASSET_SECTIONS_H_\n\n'
for i in range(0, len(assets)):
asset = assets[i]
out += '#define ASSET_' + asset['name'] + ' ' + str(i) + '\n'
out += '\n#endif\n'
with open(ASSETS_INCLUDE, "w") as assetSectionsFile:
assetSectionsFile.write(out)