STM32MiniC8T6_TestLogic/Code/tools/gen_compile_commands.ps1

51 lines
1.6 KiB
PowerShell
Raw Normal View History

$ErrorActionPreference = "Stop"
$repoRoot = Split-Path -Parent $PSScriptRoot
$projectFile = Join-Path $repoRoot "..\Project\TianyunV1.uvprojx"
$flagsFile = Join-Path $repoRoot "compile_flags.txt"
$outputFile = Join-Path $repoRoot "compile_commands.json"
if (!(Test-Path -LiteralPath $projectFile)) {
throw "Keil project file not found: $projectFile"
}
if (!(Test-Path -LiteralPath $flagsFile)) {
throw "compile_flags.txt not found: $flagsFile"
}
[xml]$project = Get-Content -LiteralPath $projectFile
$fileNodes = $project.SelectNodes("//File[FileType='1']/FilePath")
if ($null -eq $fileNodes -or $fileNodes.Count -eq 0) {
throw "No C source files found in project."
}
$baseFlags = [System.IO.File]::ReadAllLines($flagsFile) |
Where-Object { $_.Trim().Length -gt 0 } |
ForEach-Object { [string]$_ }
$compileDb = @()
foreach ($node in $fileNodes) {
$relativePath = $node.'#text'
if (![string]::IsNullOrWhiteSpace($relativePath) -and $relativePath.ToLower().EndsWith(".c")) {
$resolved = [System.IO.Path]::GetFullPath((Join-Path (Split-Path -Parent $projectFile) $relativePath))
$arguments = @("clang") + @($baseFlags) + @("-c", [string]$resolved)
$command = "clang " + ($baseFlags -join " ") + " -c `"$resolved`""
$compileDb += [PSCustomObject]@{
directory = $repoRoot
file = $resolved
command = $command
arguments = $arguments
}
}
}
$compileDb |
ConvertTo-Json -Depth 4 |
Set-Content -LiteralPath $outputFile -Encoding utf8
Write-Output "Generated: $outputFile"
Write-Output "Entries: $($compileDb.Count)"