Rewrote AVR8 TDF build script
This commit is contained in:
84
build/scripts/Avr8TargetDescriptionFiles.php
Normal file
84
build/scripts/Avr8TargetDescriptionFiles.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
/*
|
||||
* Copies AVR8 target description files to AVR_TDF_DEST_FILE_PATH, in preparation for a build, and creates a JSON
|
||||
* mapping of target signatures to file paths (relative to Bloom's binary).
|
||||
* The JSON mapping is compiled as a Qt resource and used for looking-up target description file paths, by target ID.
|
||||
*
|
||||
* This script should be run as part of the build process.
|
||||
*/
|
||||
|
||||
namespace Bloom\BuildScripts;
|
||||
|
||||
require_once __DIR__ . "/TargetDescriptionFiles/Factory.php";
|
||||
|
||||
CONST AVR_TDF_DEST_FILE_PATH = __DIR__ . "/../resources/TargetDescriptionFiles/AVR";
|
||||
CONST AVR_TDF_DEST_RELATIVE_FILE_PATH = "../resources/TargetDescriptionFiles/AVR";
|
||||
CONST AVR_TDF_MAPPING_FILE_PATH = AVR_TDF_DEST_FILE_PATH . "/Mapping.json";
|
||||
|
||||
// Empty destination directory
|
||||
if (file_exists(AVR_TDF_DEST_FILE_PATH)) {
|
||||
// There is no PHP function to delete a non-empty directory and I can't be arsed to write one. Bite me
|
||||
exec("rm -r " . AVR_TDF_DEST_FILE_PATH);
|
||||
}
|
||||
|
||||
if (file_exists(AVR_TDF_MAPPING_FILE_PATH)) {
|
||||
unlink(AVR_TDF_MAPPING_FILE_PATH);
|
||||
}
|
||||
|
||||
mkdir(AVR_TDF_DEST_FILE_PATH, 0700, true);
|
||||
|
||||
print "Loading AVR8 TDFs\n\n";
|
||||
|
||||
$tdfMapping = [];
|
||||
$avrTdfs = TargetDescriptionFiles\Factory::loadAvr8Tdfs();
|
||||
|
||||
print "Processing " . count($avrTdfs) . " AVR8 TDFs...\n\n";
|
||||
|
||||
foreach ($avrTdfs as $avrTdf) {
|
||||
print "Processing AVR8 TDF for target " . $avrTdf->targetName . "\n";
|
||||
|
||||
$destinationFilePath = AVR_TDF_DEST_FILE_PATH;
|
||||
$relativeDestinationFilePath = AVR_TDF_DEST_RELATIVE_FILE_PATH;
|
||||
|
||||
if (!empty($avrTdf->targetArchitecture)) {
|
||||
// Group by architecture
|
||||
$destinationFilePath .= "/" . strtoupper($avrTdf->targetArchitecture);
|
||||
$relativeDestinationFilePath .= "/" . strtoupper($avrTdf->targetArchitecture);
|
||||
}
|
||||
|
||||
if (!empty($avrTdf->family)) {
|
||||
// Group by family
|
||||
$destinationFilePath .= "/" . str_replace([' '] , '_', strtoupper($avrTdf->family));
|
||||
$relativeDestinationFilePath .= "/" . str_replace([' '] , '_', strtoupper($avrTdf->family));
|
||||
}
|
||||
|
||||
if (!file_exists($destinationFilePath)) {
|
||||
mkdir($destinationFilePath, 0700, true);
|
||||
}
|
||||
|
||||
$strippedTargetName = str_replace([' '] , '_', $avrTdf->targetName);
|
||||
$destinationFilePath .= "/" . strtoupper($strippedTargetName) . ".xml";
|
||||
$relativeDestinationFilePath .= "/" . strtoupper($strippedTargetName) . ".xml";
|
||||
|
||||
// Copy TDF to build location
|
||||
if (copy($avrTdf->filePath, $destinationFilePath) === false) {
|
||||
print "FATAL ERROR: Failed to TDF file to " . $destinationFilePath . "\n";
|
||||
print "Aborting\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
$tdfMapping[strtolower($avrTdf->signature->toHex())][] = [
|
||||
'targetName' => $strippedTargetName,
|
||||
'targetDescriptionFilePath' => $relativeDestinationFilePath,
|
||||
];
|
||||
}
|
||||
|
||||
if (file_put_contents(AVR_TDF_MAPPING_FILE_PATH, json_encode($tdfMapping, JSON_PRETTY_PRINT)) === false) {
|
||||
print "FATAL ERROR: Failed to create JSON mapping of target IDs to target description file paths\n";
|
||||
exit(1);
|
||||
}
|
||||
|
||||
print "\n";
|
||||
print "Created JSON mapping of target IDs to target description file paths: " . AVR_TDF_MAPPING_FILE_PATH . "\n\n";
|
||||
print "Processed " . count($avrTdfs) . " files.\n";
|
||||
print "Done\n";
|
||||
Reference in New Issue
Block a user