feature: wrong compiler friendly user error

This commit is contained in:
Dobin Rutishauser
2025-10-19 20:52:11 +02:00
parent d2c660a446
commit 03b4433620
+59
View File
@@ -2,6 +2,7 @@ import os
import pprint import pprint
import logging import logging
import shutil import shutil
import subprocess
from typing import List, Dict from typing import List, Dict
from helper import * from helper import *
@@ -16,6 +17,59 @@ from model.settings import Settings
logger = logging.getLogger("Compiler") logger = logging.getLogger("Compiler")
def check_compiler_architecture():
"""Check if the Visual C++ compiler is configured for x64 architecture."""
try:
# Run cl.exe without arguments to get version info
result = subprocess.run(
[config.get("path_cl")],
capture_output=True,
text=True,
timeout=5
)
output = result.stderr # cl.exe outputs version info to stderr
# Check if it's x64 or x86
if "x64" in output or "AMD64" in output:
logger.info(" ✓ Compiler architecture: x64 (64-bit)")
return True
elif "x86" in output or "80x86" in output:
logger.error(" ✗ Compiler architecture: x86 (32-bit) - INCORRECT!")
logger.error("")
logger.error("=" * 70)
logger.error("ERROR: You are using a 32-bit compiler, but this tool requires 64-bit!")
logger.error("=" * 70)
logger.error("")
logger.error("To fix this, you need to start the x64 Developer Command Prompt:")
logger.error("")
logger.error("Option 1 - Use the Start Menu:")
logger.error(" 1. Open Start Menu")
logger.error(" 2. Search for 'x64 Native Tools Command Prompt'")
logger.error(" 3. Run it and then execute your script from there")
logger.error("")
logger.error("Option 2 - Run vcvarsall.bat in your current terminal:")
logger.error(' "C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat" x64')
logger.error("")
logger.error("Option 3 - If using VS 2019 or different installation path:")
logger.error(' "C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\VC\\Auxiliary\\Build\\vcvarsall.bat" x64')
logger.error("")
logger.error("After running one of these, try again!")
logger.error("=" * 70)
return False
else:
logger.warning(" ? Could not determine compiler architecture")
logger.warning(" Compiler output: {}".format(output[:200]))
return True # Don't block if we can't determine
except FileNotFoundError:
logger.error(" ✗ Compiler (cl.exe) not found at: {}".format(config.get("path_cl")))
logger.error(" Make sure Visual Studio is installed and Developer Command Prompt is active")
return False
except Exception as e:
logger.warning(" ? Could not check compiler architecture: {}".format(e))
return True # Don't block on unexpected errors
# NOTE: Mostly copy-pasted from compiler.py::compile() # NOTE: Mostly copy-pasted from compiler.py::compile()
def compile_dev( def compile_dev(
c_in: FilePath, c_in: FilePath,
@@ -30,6 +84,7 @@ def compile_dev(
"/c", "/c",
"/FA", "/FA",
"/GS-", "/GS-",
"/favor:AMD64",
"/Fa{}/".format(os.path.dirname(c_in)), "/Fa{}/".format(os.path.dirname(c_in)),
c_in, c_in,
]) ])
@@ -59,6 +114,10 @@ def compile(
logger.info("-[ Carrier: Compile C to ASM".format()) logger.info("-[ Carrier: Compile C to ASM".format())
logger.info(" Carrier: {} -> {} ".format(c_in, asm_out)) logger.info(" Carrier: {} -> {} ".format(c_in, asm_out))
# Check if we're using the correct 64-bit compiler
if not check_compiler_architecture():
raise RuntimeError("Incorrect compiler architecture detected. Please use x64 Developer Command Prompt.")
# Compile C To Assembly (text) # Compile C To Assembly (text)
run_process_checkret([ run_process_checkret([
config.get("path_cl"), config.get("path_cl"),