Skip to content

Commit

Permalink
Tools: Track dependencies properly also for NMAKE on windows
Browse files Browse the repository at this point in the history
  • Loading branch information
Pagghiu committed Apr 1, 2024
1 parent dea0a62 commit 05854a4
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 3 deletions.
24 changes: 21 additions & 3 deletions Tools/Build/Windows/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -70,20 +70,38 @@ SCTool_CLEAN:
@if exist "$(SCTool_INTERMEDIATE_DIR)\*.d" del /q "$(SCTool_INTERMEDIATE_DIR)\*.d"

SCTool_OBJECT_FILES = $(SCTool_INTERMEDIATE_DIR)\Tools.obj $(SCTool_INTERMEDIATE_DIR)\$(TOOL).obj
SCTool_DEPENDENCY_FILES=$(SCTool_OBJECT_FILES:.obj=.d)

# Rules for compiling source files

$(SCTool_INTERMEDIATE_DIR)\Tools.obj: $(SCTool_INTERMEDIATE_DIR) $(MAKEDIR)\..\..\..\Tools\Tools.cpp
@cl.exe $(SCTool_CXXFLAGS) /c /Fd"$(SCTool_INTERMEDIATE_DIR)\$(TOOL).pdb" /Fo$@ /MD $(MAKEDIR)\..\..\..\Tools\Tools.cpp
@cl.exe $(SCTool_CXXFLAGS) /c /sourceDependencies $(SCTool_INTERMEDIATE_DIR)\Tools.json /Fd"$(SCTool_INTERMEDIATE_DIR)\$(TOOL).pdb" /Fo$@ /MD $(MAKEDIR)\..\..\..\Tools\Tools.cpp

$(SCTool_INTERMEDIATE_DIR)\Tools.d: $(SCTool_INTERMEDIATE_DIR)\Tools.obj
@echo Generating dependencies for Tools.cpp
@powershell.exe -ExecutionPolicy Bypass -File jsonToDependencies.ps1 -jsonFilePath $(SCTool_INTERMEDIATE_DIR)\Tools.json -objFile $(SCTool_INTERMEDIATE_DIR)\Tools.obj > $(SCTool_INTERMEDIATE_DIR)\Tools.d

!if exist($(SCTool_INTERMEDIATE_DIR)\Tools.d)
!include $(SCTool_INTERMEDIATE_DIR)\Tools.d
!endif

$(SCTool_INTERMEDIATE_DIR)\$(TOOL).obj: $(SCTool_INTERMEDIATE_DIR) $(TOOL_SOURCE_DIR)\$(TOOL).cpp
@cl.exe $(SCTool_CXXFLAGS) /c /Fd"$(SCTool_INTERMEDIATE_DIR)\$(TOOL).pdb" /Fo$@ /MD $(TOOL_SOURCE_DIR)\$(TOOL).cpp
@cl.exe $(SCTool_CXXFLAGS) /c /sourceDependencies $(SCTool_INTERMEDIATE_DIR)\$(TOOL).json /Fd"$(SCTool_INTERMEDIATE_DIR)\$(TOOL).pdb" /Fo$@ /MD $(TOOL_SOURCE_DIR)\$(TOOL).cpp

$(SCTool_INTERMEDIATE_DIR)\$(TOOL).d: $(SCTool_INTERMEDIATE_DIR)\$(TOOL).obj
@echo Generating dependencies for $(TOOL).cpp
@powershell.exe -ExecutionPolicy Bypass -File jsonToDependencies.ps1 -jsonFilePath $(SCTool_INTERMEDIATE_DIR)\$(TOOL).json -objFile $(SCTool_INTERMEDIATE_DIR)\$(TOOL).obj > $(SCTool_INTERMEDIATE_DIR)\$(TOOL).d

!if exist($(SCTool_INTERMEDIATE_DIR)\$(TOOL).d)
!include $(SCTool_INTERMEDIATE_DIR)\$(TOOL).d
!endif

$(SCTool_TARGET_DIR) $(SCTool_INTERMEDIATE_DIR):
@echo Creating "$@"
@if not exist "$@" mkdir "$@"

SCTool_BUILD: $(SCTool_TARGET_DIR)\$(SCTool_TARGET_NAME)

$(SCTool_TARGET_DIR)\$(SCTool_TARGET_NAME): $(SCTool_TARGET_DIR) $(SCTool_OBJECT_FILES)
$(SCTool_TARGET_DIR)\$(SCTool_TARGET_NAME): $(SCTool_TARGET_DIR) $(SCTool_OBJECT_FILES) $(SCTool_DEPENDENCY_FILES)
@echo Linking "$(SCTool_TARGET_NAME)"
@link /nologo /OUT:"$(SCTool_TARGET_DIR)\$(SCTool_TARGET_NAME)" $(SCTool_OBJECT_FILES) $(SCTool_LDFLAGS)
24 changes: 24 additions & 0 deletions Tools/Build/Windows/jsonToDependencies.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Copyright (c) Stefano Cristiano
# SPDX-License-Identifier: MIT
param(
[string]$jsonFilePath,
[string]$objFile
)

# Read the JSON file
$jsonContent = Get-Content -Raw -Path $jsonFilePath | ConvertFrom-Json

# Define an array of patterns that indicate system header files
$systemHeaderPatterns = @(
"windows kits",
"microsoft visual studio"
)

# Get the dependencies, removing system header paths
$dependencies = $jsonContent.Data.Includes | Where-Object { $dependency = $_; -not ($systemHeaderPatterns | Where-Object { $dependency -like "*$_*" }) }

# Write the dependencies in .d format
Write-Output "${objFile}: \"
foreach ($dependency in $dependencies) {
Write-Output " $dependency \"
}

0 comments on commit 05854a4

Please sign in to comment.