From c9dca07b0389957238ce6177cc482e26561124dc Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Sun, 5 Apr 2026 12:22:16 +0100 Subject: Initial support for MSVC, build broken --- build.bat | 136 ++++++++++++++++++++++++++++++++++++++------------------------ 1 file changed, 83 insertions(+), 53 deletions(-) diff --git a/build.bat b/build.bat index 9f9f5f1..6ec82f6 100644 --- a/build.bat +++ b/build.bat @@ -1,49 +1,96 @@ @echo off -if [%1]==[/d] ( +if "%1"=="/d" ( SET DEBUG=1 shift ) else ( SET DEBUG=0 ) -SET CC=clang -SET CXX=clang++ -SET THREADS=16 -SET SANITIZE= - -SET ARCH=PORTABLE -clang -march=native -dM -E - < NUL | findstr /C:"__AVX2__" >NUL 2>&1 -if %ERRORLEVEL% EQU 0 ( - SET ARCH=AVX2 - SET ARCHOPTS=-mavx2 - goto :ArchDone -) -clang -march=native -dM -E - < NUL | findstr /C:"__ARM_NEON" >NUL 2>&1 -if %ERRORLEVEL% EQU 0 ( - SET ARCH=NEON - goto :ArchDone -) -:ArchDone - +:: Detect architecture, or use user-specified one +if "%ARCH%"=="" goto :detect_arch +if "%ARCH%"=="PORTABLE" goto :arch_done +if "%ARCH%"=="AVX2" goto :arch_done +if "%ARCH%"=="NEON" goto :arch_done -SET DFLAGS=-g3 -DDEBUG -SET WARNINGS=-Wno-deprecated-declarations -SET VARIABLES=-DTHREADS=%THREADS% -D%ARCH% -SET OFLAGS=-O3 +echo Unsupported architecture '%ARCH%' +exit /b 1 -SET CFLAGS=-std=c11 %ARCHOPTS% %WARNINGS% %VARIABLES% +:detect_arch + if "%PROCESSOR_ARCHITECTURE%"=="AMD64" ( + SET ARCH=AVX2 + ) else if "%PROCESSOR_ARCHITECTURE%"=="ARM64" ( + SET ARCH=NEON + ) else ( + SET ARCH=PORTABLE + ) +:arch_done -SET STACKSIZE=-Wl,-stack:16777216 -SET LFLAGS=%STACKSIZE% +:: Default value for maximum number of threads +SET THREADS=16 -:: Python libraries - change to match your local installation +:: Detect Python libraries path for /f "delims=" %%i in ('python -c "import sys; print(sys.base_prefix)"') do set PYPATH=%%i -::SET PYPATH=%userprofile%\AppData\Local\Programs\Python\Python313 - SET PYINCLUDE=%PYPATH%\include SET PYLIBS=%PYPATH%\libs +:: Select compiler from possibly user-set %CC% variable +:: Currently we only support clang and MSVC +if "%CC%"=="" goto :set_msvc +if /I "%CC%"=="cl" goto :set_msvc +if /I "%CC%"=="msvc" goto :set_msvc +if /I "%CC%"=="clang" goto :set_clang + +echo Unsupported compiler '%CC%' +exit /b 1 + +:set_msvc + SET CC=cl + SET CXX=cl + + SET DFLAGS=/Zi /DDEBUG + SET WARNINGS=/wd4996 + SET VARIABLES=/DTHREADS=%THREADS% /D%ARCH% + SET OFLAGS=/O2 + + if %DEBUG%==1 (SET ODFLAGS=%DFLAGS%) else (SET ODFLAGS=%OFLAGS%) + if "%ARCH%"=="AVX2" (SET ARCHOPTS=/arch:AVX2) else (SET ARCHOPTS=) + + SET CFLAGS=/std:c11 /experimental:c11atomics %ARCHOPTS% %WARNINGS% %VARIABLES% + SET LFLAGS=/F 16777216 + + SET CC_NISSY=%CC% %CFLAGS% %ODFLAGS% /c src\nissy.c + SET CC_SHELL=%CC% %CFLAGS% %ODFALGS% %LFLAGS% nissy.o shell\shell.c /Fe:run.exe + SET CC_PYTHON=%CC% %CFLAGS% %LFLAGS% /I"%PYINCLUDE%" /LD /Fe:python\nissy.pyd python\nissy_module.c nissy.o /link /LIBPATH:"%PYLIBS%" python3.lib + SET CC_TEST=%CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o /Fe:runtest.exe + SET CC_TOOL=%CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o /Fe:runtool.exe + SET CC_CXX=%CXX% %ODFLAGS% /std:c++20 /Fe:runcpp.exe cpp\nissy.cpp nissy.o +goto :compiler_done + +:set_clang + SET CC=clang + SET CXX=clang++ + + SET DFLAGS=-g3 -DDEBUG + SET WARNINGS=-Wno-deprecated-declarations + SET VARIABLES=-DTHREADS=%THREADS% -D%ARCH% + SET OFLAGS=-O3 + + if %DEBUG%==1 (SET ODFLAGS=%DFLAGS%) else (SET ODFLAGS=%OFLAGS%) + if "%ARCH%"=="AVX2" (SET ARCHOPTS=-mavx2) else (SET ARCHOPTS=) + + SET CFLAGS=-std=c11 %ARCHOPTS% %WARNINGS% %VARIABLES% + SET LFLAGS=-Wl,-stack:16777216 + + SET CC_NISSY=%CC% %CFLAGS% %ODFLAGS% -c src\nissy.c + SET CC_SHELL=%CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o shell\shell.c -o run.exe + SET CC_PYTHON=%CC% %CFLAGS% %LFLAGS% -I%PYINCLUDE% -L%PYLIBS% -shared -lpython3 python\nissy_module.c nissy.o -o python\nissy.pyd + SET CC_TEST=%CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o -o runtest.exe + SET CC_TOOL=%CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o -o runtool.exe + SET CC_CXX=%CXX% %ODFLAGS% -std=c++20 -o runcpp.exe cpp\nissy.cpp nissy.o +:compiler_done + +:: Select compilation target from command line argument SET TARGET=%1 if not defined TARGET SET TARGET=nissy SET EXPR=%2 @@ -53,7 +100,6 @@ for %%a in (nissy python shell test config help clean tool cpp solvetest) do ( exit /b ) ) - echo Target '%TARGET%' unavailable, run 'build help' for info exit /b 1 @@ -98,27 +144,22 @@ exit /b exit /b :build_nissy - call:odflags @echo on - %CC% %CFLAGS% %ODFLAGS% -c src\nissy.c || exit /b 1 + %CC_NISSY% || exit /b 1 @echo off exit /b :build_shell call:build_nissy || exit /b 1 - call:odflags @echo on - %CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o shell\shell.c -o run.exe ^ - || exit /b 1 + %CC_SHELL% || exit /b 1 @echo off exit /b :build_python call:build_nissy || exit /b 1 - call:odflags @echo on - %CC% %CFLAGS% %LFLAGS% -I%PYINCLUDE% -L%PYLIBS% -shared -lpython3 ^ - python\nissy_module.c nissy.o -o python\nissy.pyd || exit /b 1 + %CC_PYTHON% || exit /b 1 @echo off exit /b @@ -174,8 +215,7 @@ exit /b ) call:build_nissy || exit /b 1 @echo on - %CXX% %ODFLAGS% -std=c++20 -o runcpp.exe cpp\nissy.cpp nissy.o %EXPR% ^ - || exit /b 1 + %CC_CXX% %EXPR% || exit /b 1 runcpp @echo off exit /b @@ -189,8 +229,7 @@ exit /b exit /b :build_single_test - call:odflags - %CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o %1\*.c -o runtest.exe || exit /b 1 + %CC_TEST% %1\*.c || exit /b 1 set error=0 for %%c in ( %1\*.in ) do ( if %error%==1 exit /b 1 @@ -213,21 +252,12 @@ exit /b :build_single_tool @echo on - %CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o tools\%toolname%\*.c ^ - -o runtool.exe || exit /b 1 + %CC_TOOL% tools\%toolname%\*.c || exit /b 1 @echo off runtool %3 %4 %5 %6 %7 %8 %9 || exit /b 1 @echo. @echo (On Windows, the output of a tool is not saved to any file.) exit /b -:odflags - if %DEBUG%==1 ( - SET ODFLAGS=%DFLAGS% - ) else ( - SET ODFLAGS=%OFLAGS% - ) -exit /b - :error exit /b 1 \ No newline at end of file -- cgit v1.3