Build System Integration - pascaldisse/open-sourcefy GitHub Wiki
Comprehensive guide to Open-Sourcefy's build system integration with Visual Studio 2022 Preview, MSBuild, and compilation orchestration.
Open-Sourcefy integrates deeply with the Windows build ecosystem to compile generated source code using production-grade tools and configurations.
- Primary: Visual Studio 2022 Preview with MSBuild
- Secondary: CMake with Visual Studio generator
- Tools: Windows SDK, MSVC compiler toolchain
- Resources: RC.EXE for resource compilation
Required Components:
├── MSVC v143 Compiler Toolset (x64/x86)
├── Windows 11 SDK (10.0.22000.0 or later)
├── CMake Tools for Modern CMake Support
├── Git for Windows (optional but recommended)
└── IntelliCode (optional enhancement)
# Verify VS2022 Preview installation
python main.py --verify-build-system
# Check component availability
dir "C:\Program Files\Microsoft Visual Studio\2022\Preview"
build_system:
type: "visual_studio"
version: "2022_preview"
visual_studio:
installation_path: "C:/Program Files/Microsoft Visual Studio/2022/Preview"
edition: "Preview"
version: "17.0"
msbuild:
path: "C:/Program Files/Microsoft Visual Studio/2022/Preview/MSBuild/Current/Bin/MSBuild.exe"
version: "17.0"
platform_toolset: "v143"
windows_sdk_version: "10.0.22000.0"
build_tools:
cl_exe_path: "C:/Program Files/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC/14.40.33807/bin/Hostx64/x64/cl.exe"
rc_exe_path: "C:/Program Files (x86)/Windows Kits/10/bin/10.0.22000.0/x64/rc.exe"
lib_exe_path: "C:/Program Files/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC/14.40.33807/bin/Hostx64/x64/lib.exe"
link_exe_path: "C:/Program Files/Microsoft Visual Studio/2022/Preview/VC/Tools/MSVC/14.40.33807/bin/Hostx64/x64/link.exe"
mt_exe_path: "C:/Program Files (x86)/Windows Kits/10/bin/10.0.22000.0/x64/mt.exe"
compilation:
target_platform: "x64"
configuration: "Release"
compiler_flags:
- "/O2" # Optimize for speed
- "/GL" # Whole program optimization
- "/MD" # Multithreaded DLL runtime
- "/EHsc" # C++ exception handling
- "/W3" # Warning level 3
- "/DWIN32" # Windows platform
- "/D_WINDOWS" # Windows application
linker_flags:
- "/LTCG" # Link-time code generation
- "/OPT:REF" # Eliminate unreferenced functions
- "/OPT:ICF" # Identical COMDAT folding
- "/SUBSYSTEM:CONSOLE" # Console application
- "/MACHINE:X64" # Target x64 architecture
File: src/core/agents/agent09_commander_locke.py
def orchestrate_compilation(self, source_data: Dict[str, Any]) -> CompilationResult:
"""Orchestrate complete compilation process"""
# 1. Generate Visual Studio project files
project_result = self._generate_vs_project(source_data)
# 2. Process resources with RC.EXE
resource_result = self._compile_resources(source_data['resources'])
# 3. Compile source code with MSVC
compilation_result = self._compile_source_code(project_result.project_path)
# 4. Link final executable
linking_result = self._link_executable(compilation_result, resource_result)
return CompilationResult(
status="SUCCESS",
binary_path=linking_result.output_path,
binary_size=linking_result.size,
compilation_time=linking_result.duration
)
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{GENERATED-GUID}</ProjectGuid>
<WindowsTargetPlatformVersion>10.0.22000.0</WindowsTargetPlatformVersion>
<PlatformToolset>v143</PlatformToolset>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<OutDir>$(SolutionDir)bin\$(Platform)\$(Configuration)\</OutDir>
<IntDir>$(SolutionDir)obj\$(Platform)\$(Configuration)\</IntDir>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<PreprocessorDefinitions>WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<SubSystem>Console</SubSystem>
<AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
<ResourceCompile>
<Culture>0x0409</Culture>
</ResourceCompile>
</ItemDefinitionGroup>
<ItemGroup>
<!-- Source files will be dynamically added here -->
</ItemGroup>
<ItemGroup>
<!-- Header files will be dynamically added here -->
</ItemGroup>
<ItemGroup>
<!-- Resource files will be dynamically added here -->
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
</Project>
# MSBuild execution with specific configuration
MSBuild.exe "project.vcxproj" /p:Configuration=Release /p:Platform=x64 /p:PlatformToolset=v143 /m:4 /v:minimal
# With detailed logging for debugging
MSBuild.exe "project.vcxproj" /p:Configuration=Release /p:Platform=x64 /flp:logfile=build.log;verbosity=diagnostic
<Target Name="PreBuild" BeforeTargets="Build">
<Message Text="Starting Open-Sourcefy compilation process..." />
<Exec Command="echo Preprocessing resources..." />
</Target>
<Target Name="PostBuild" AfterTargets="Build">
<Message Text="Build completed successfully" />
<Exec Command="echo Binary size: $(TargetPath)" />
</Target>
def compile_resources(self, resource_data: Dict[str, Any]) -> ResourceCompilationResult:
"""Compile resources using RC.EXE"""
# Generate .rc file from extracted resources
rc_content = self._generate_rc_file(resource_data)
rc_file_path = self.output_paths['resources'] / 'app.rc'
with open(rc_file_path, 'w', encoding='utf-8') as f:
f.write(rc_content)
# Execute RC.EXE compilation
rc_exe_path = self.config.get_build_config().rc_exe_path
output_res_path = rc_file_path.with_suffix('.res')
cmd = [
rc_exe_path,
'/r', # Compile only (don't link)
'/fo', str(output_res_path), # Output file
str(rc_file_path) # Input file
]
result = subprocess.run(cmd, capture_output=True, text=True)
return ResourceCompilationResult(
success=(result.returncode == 0),
output_path=output_res_path,
size=output_res_path.stat().st_size if output_res_path.exists() else 0
)
// Generated by Open-Sourcefy Matrix Pipeline
#include "resource.h"
// Version Information
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,0
PRODUCTVERSION 1,0,0,0
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
FILEFLAGS 0x0L
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE VFT2_UNKNOWN
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "Open-Sourcefy Generated"
VALUE "FileDescription", "Reconstructed Application"
VALUE "FileVersion", "1.0.0.0"
VALUE "ProductName", "Open-Sourcefy Binary Reconstruction"
VALUE "ProductVersion", "1.0.0.0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
// Icons
IDI_ICON1 ICON "icons/app_icon.ico"
// Dialogs
IDD_DIALOG1 DIALOGEX 0, 0, 320, 200
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Application Dialog"
FONT 8, "MS Shell Dlg"
BEGIN
DEFPUSHBUTTON "OK",IDOK,263,179,50,14
PUSHBUTTON "Cancel",IDCANCEL,207,179,50,14
END
// String Table
STRINGTABLE
BEGIN
IDS_STRING1 "Generated by Open-Sourcefy"
IDS_STRING2 "Binary Reconstruction Success"
END
cmake_minimum_required(VERSION 3.20)
project(OpenSourcefyReconstructed)
# Set C++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Configuration
set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "" FORCE)
# Platform-specific settings
if(WIN32)
set(CMAKE_GENERATOR_PLATFORM x64)
set(CMAKE_GENERATOR_TOOLSET v143)
endif()
# Output directories
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
# Source files (dynamically populated)
set(SOURCES
src/main.c
# Additional sources will be added here
)
# Header files
set(HEADERS
include/main.h
# Additional headers will be added here
)
# Create executable
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS})
# Include directories
target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_CURRENT_SOURCE_DIR}/src
)
# Compiler-specific options
if(MSVC)
target_compile_options(${PROJECT_NAME} PRIVATE
/W3 # Warning level 3
/O2 # Optimize for speed
/GL # Whole program optimization
/MD # Multithreaded DLL runtime
)
target_link_options(${PROJECT_NAME} PRIVATE
/LTCG # Link-time code generation
/OPT:REF # Remove unreferenced functions
/OPT:ICF # Identical COMDAT folding
)
endif()
# System libraries
if(WIN32)
target_link_libraries(${PROJECT_NAME}
kernel32
user32
gdi32
advapi32
shell32
ole32
oleaut32
)
endif()
# Resource compilation
if(WIN32 AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/resources/app.rc")
enable_language(RC)
target_sources(${PROJECT_NAME} PRIVATE resources/app.rc)
endif()
# Post-build information
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E echo "Build completed successfully"
COMMAND ${CMAKE_COMMAND} -E echo "Output: $<TARGET_FILE:${PROJECT_NAME}>"
)
def validate_compilation_result(self, original_binary: str, compiled_binary: str) -> ValidationResult:
"""Validate compilation results against original binary"""
metrics = {}
# Size comparison
original_size = Path(original_binary).stat().st_size
compiled_size = Path(compiled_binary).stat().st_size
size_accuracy = compiled_size / original_size
# Function count validation
original_functions = self._count_functions(original_binary)
compiled_functions = self._count_functions(compiled_binary)
function_accuracy = compiled_functions / original_functions
# Import table validation
original_imports = self._extract_imports(original_binary)
compiled_imports = self._extract_imports(compiled_binary)
import_accuracy = len(compiled_imports) / len(original_imports)
# Resource validation
original_resources = self._extract_resources(original_binary)
compiled_resources = self._extract_resources(compiled_binary)
resource_accuracy = len(compiled_resources) / len(original_resources)
overall_quality = (size_accuracy + function_accuracy + import_accuracy + resource_accuracy) / 4
return ValidationResult(
success=(overall_quality >= 0.75),
quality_score=overall_quality,
size_accuracy=size_accuracy,
function_accuracy=function_accuracy,
import_accuracy=import_accuracy,
resource_accuracy=resource_accuracy,
metrics=metrics
)
- Binary Size: 80-90% of original size (4.3MB for 5.1MB input)
- Function Recovery: 95%+ of original functions
- Import Resolution: 95%+ of import table functions
- Resource Extraction: 90%+ of resources successfully compiled
- Compilation Success: Clean compilation with minimal warnings
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<WholeProgramOptimization>true</WholeProgramOptimization>
<LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<EnablePREfast>true</EnablePREfast>
</ClCompile>
<Link>
<ProfileGuidedDatabase>$(TargetName).pgd</ProfileGuidedDatabase>
</Link>
</ItemDefinitionGroup>
# Linux-specific configuration
if(UNIX AND NOT APPLE)
find_package(PkgConfig REQUIRED)
# Use Wine for Windows tool emulation
set(WINE_PREFIX "$ENV{HOME}/.wine_openSourcefy")
# Alternative compiler settings
target_compile_options(${PROJECT_NAME} PRIVATE
-O2
-fPIC
-march=native
)
endif()
# Verify tool availability
where cl.exe
where rc.exe
where msbuild.exe
# Check paths in configuration
python main.py --validate-config --verbose
# Enable detailed build logging
export MATRIX_BUILD_VERBOSE=true
python main.py --debug --profile
# Check generated source code
cat output/binary/timestamp/compilation/src/main.c
# Validate project file
msbuild project.vcxproj /t:ValidateToolsVersions
# Test RC.EXE manually
rc.exe /r /fo test.res test.rc
# Check resource file syntax
type resources/app.rc
# Verify resource paths
dir resources/
Related: Configuration Guide - Build system configuration
Next: Developer Guide - Development and contribution guide