aboutsummaryrefslogtreecommitdiff
path: root/build.bat
diff options
context:
space:
mode:
Diffstat (limited to 'build.bat')
-rw-r--r--build.bat134
1 files changed, 82 insertions, 52 deletions
diff --git a/build.bat b/build.bat
index 9f9f5f1..6ec82f6 100644
--- a/build.bat
+++ b/build.bat
@@ -1,49 +1,96 @@
1@echo off 1@echo off
2 2
3if [%1]==[/d] ( 3if "%1"=="/d" (
4 SET DEBUG=1 4 SET DEBUG=1
5 shift 5 shift
6) else ( 6) else (
7 SET DEBUG=0 7 SET DEBUG=0
8) 8)
9 9
10SET CC=clang 10:: Detect architecture, or use user-specified one
11SET CXX=clang++ 11if "%ARCH%"=="" goto :detect_arch
12if "%ARCH%"=="PORTABLE" goto :arch_done
13if "%ARCH%"=="AVX2" goto :arch_done
14if "%ARCH%"=="NEON" goto :arch_done
15
16echo Unsupported architecture '%ARCH%'
17exit /b 1
18
19:detect_arch
20 if "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
21 SET ARCH=AVX2
22 ) else if "%PROCESSOR_ARCHITECTURE%"=="ARM64" (
23 SET ARCH=NEON
24 ) else (
25 SET ARCH=PORTABLE
26 )
27:arch_done
28
29:: Default value for maximum number of threads
12SET THREADS=16 30SET THREADS=16
13SET SANITIZE=
14 31
15SET ARCH=PORTABLE 32:: Detect Python libraries path
16clang -march=native -dM -E - < NUL | findstr /C:"__AVX2__" >NUL 2>&1 33for /f "delims=" %%i in ('python -c "import sys; print(sys.base_prefix)"') do set PYPATH=%%i
17if %ERRORLEVEL% EQU 0 ( 34SET PYINCLUDE=%PYPATH%\include
18 SET ARCH=AVX2 35SET PYLIBS=%PYPATH%\libs
19 SET ARCHOPTS=-mavx2
20 goto :ArchDone
21)
22clang -march=native -dM -E - < NUL | findstr /C:"__ARM_NEON" >NUL 2>&1
23if %ERRORLEVEL% EQU 0 (
24 SET ARCH=NEON
25 goto :ArchDone
26)
27:ArchDone
28 36
37:: Select compiler from possibly user-set %CC% variable
38:: Currently we only support clang and MSVC
39if "%CC%"=="" goto :set_msvc
40if /I "%CC%"=="cl" goto :set_msvc
41if /I "%CC%"=="msvc" goto :set_msvc
42if /I "%CC%"=="clang" goto :set_clang
29 43
30SET DFLAGS=-g3 -DDEBUG 44echo Unsupported compiler '%CC%'
31SET WARNINGS=-Wno-deprecated-declarations 45exit /b 1
32SET VARIABLES=-DTHREADS=%THREADS% -D%ARCH%
33SET OFLAGS=-O3
34 46
35SET CFLAGS=-std=c11 %ARCHOPTS% %WARNINGS% %VARIABLES% 47:set_msvc
48 SET CC=cl
49 SET CXX=cl
36 50
37SET STACKSIZE=-Wl,-stack:16777216 51 SET DFLAGS=/Zi /DDEBUG
38SET LFLAGS=%STACKSIZE% 52 SET WARNINGS=/wd4996
53 SET VARIABLES=/DTHREADS=%THREADS% /D%ARCH%
54 SET OFLAGS=/O2
39 55
40:: Python libraries - change to match your local installation 56 if %DEBUG%==1 (SET ODFLAGS=%DFLAGS%) else (SET ODFLAGS=%OFLAGS%)
41for /f "delims=" %%i in ('python -c "import sys; print(sys.base_prefix)"') do set PYPATH=%%i 57 if "%ARCH%"=="AVX2" (SET ARCHOPTS=/arch:AVX2) else (SET ARCHOPTS=)
42::SET PYPATH=%userprofile%\AppData\Local\Programs\Python\Python313
43 58
44SET PYINCLUDE=%PYPATH%\include 59 SET CFLAGS=/std:c11 /experimental:c11atomics %ARCHOPTS% %WARNINGS% %VARIABLES%
45SET PYLIBS=%PYPATH%\libs 60 SET LFLAGS=/F 16777216
61
62 SET CC_NISSY=%CC% %CFLAGS% %ODFLAGS% /c src\nissy.c
63 SET CC_SHELL=%CC% %CFLAGS% %ODFALGS% %LFLAGS% nissy.o shell\shell.c /Fe:run.exe
64 SET CC_PYTHON=%CC% %CFLAGS% %LFLAGS% /I"%PYINCLUDE%" /LD /Fe:python\nissy.pyd python\nissy_module.c nissy.o /link /LIBPATH:"%PYLIBS%" python3.lib
65 SET CC_TEST=%CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o /Fe:runtest.exe
66 SET CC_TOOL=%CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o /Fe:runtool.exe
67 SET CC_CXX=%CXX% %ODFLAGS% /std:c++20 /Fe:runcpp.exe cpp\nissy.cpp nissy.o
68goto :compiler_done
69
70:set_clang
71 SET CC=clang
72 SET CXX=clang++
73
74 SET DFLAGS=-g3 -DDEBUG
75 SET WARNINGS=-Wno-deprecated-declarations
76 SET VARIABLES=-DTHREADS=%THREADS% -D%ARCH%
77 SET OFLAGS=-O3
78
79 if %DEBUG%==1 (SET ODFLAGS=%DFLAGS%) else (SET ODFLAGS=%OFLAGS%)
80 if "%ARCH%"=="AVX2" (SET ARCHOPTS=-mavx2) else (SET ARCHOPTS=)
81
82 SET CFLAGS=-std=c11 %ARCHOPTS% %WARNINGS% %VARIABLES%
83 SET LFLAGS=-Wl,-stack:16777216
46 84
85 SET CC_NISSY=%CC% %CFLAGS% %ODFLAGS% -c src\nissy.c
86 SET CC_SHELL=%CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o shell\shell.c -o run.exe
87 SET CC_PYTHON=%CC% %CFLAGS% %LFLAGS% -I%PYINCLUDE% -L%PYLIBS% -shared -lpython3 python\nissy_module.c nissy.o -o python\nissy.pyd
88 SET CC_TEST=%CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o -o runtest.exe
89 SET CC_TOOL=%CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o -o runtool.exe
90 SET CC_CXX=%CXX% %ODFLAGS% -std=c++20 -o runcpp.exe cpp\nissy.cpp nissy.o
91:compiler_done
92
93:: Select compilation target from command line argument
47SET TARGET=%1 94SET TARGET=%1
48if not defined TARGET SET TARGET=nissy 95if not defined TARGET SET TARGET=nissy
49SET EXPR=%2 96SET EXPR=%2
@@ -53,7 +100,6 @@ for %%a in (nissy python shell test config help clean tool cpp solvetest) do (
53 exit /b 100 exit /b
54 ) 101 )
55) 102)
56
57echo Target '%TARGET%' unavailable, run 'build help' for info 103echo Target '%TARGET%' unavailable, run 'build help' for info
58exit /b 1 104exit /b 1
59 105
@@ -98,27 +144,22 @@ exit /b
98exit /b 144exit /b
99 145
100:build_nissy 146:build_nissy
101 call:odflags
102 @echo on 147 @echo on
103 %CC% %CFLAGS% %ODFLAGS% -c src\nissy.c || exit /b 1 148 %CC_NISSY% || exit /b 1
104 @echo off 149 @echo off
105exit /b 150exit /b
106 151
107:build_shell 152:build_shell
108 call:build_nissy || exit /b 1 153 call:build_nissy || exit /b 1
109 call:odflags
110 @echo on 154 @echo on
111 %CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o shell\shell.c -o run.exe ^ 155 %CC_SHELL% || exit /b 1
112 || exit /b 1
113 @echo off 156 @echo off
114exit /b 157exit /b
115 158
116:build_python 159:build_python
117 call:build_nissy || exit /b 1 160 call:build_nissy || exit /b 1
118 call:odflags
119 @echo on 161 @echo on
120 %CC% %CFLAGS% %LFLAGS% -I%PYINCLUDE% -L%PYLIBS% -shared -lpython3 ^ 162 %CC_PYTHON% || exit /b 1
121 python\nissy_module.c nissy.o -o python\nissy.pyd || exit /b 1
122 @echo off 163 @echo off
123exit /b 164exit /b
124 165
@@ -174,8 +215,7 @@ exit /b
174 ) 215 )
175 call:build_nissy || exit /b 1 216 call:build_nissy || exit /b 1
176 @echo on 217 @echo on
177 %CXX% %ODFLAGS% -std=c++20 -o runcpp.exe cpp\nissy.cpp nissy.o %EXPR% ^ 218 %CC_CXX% %EXPR% || exit /b 1
178 || exit /b 1
179 runcpp 219 runcpp
180 @echo off 220 @echo off
181exit /b 221exit /b
@@ -189,8 +229,7 @@ exit /b
189exit /b 229exit /b
190 230
191:build_single_test 231:build_single_test
192 call:odflags 232 %CC_TEST% %1\*.c || exit /b 1
193 %CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o %1\*.c -o runtest.exe || exit /b 1
194 set error=0 233 set error=0
195 for %%c in ( %1\*.in ) do ( 234 for %%c in ( %1\*.in ) do (
196 if %error%==1 exit /b 1 235 if %error%==1 exit /b 1
@@ -213,21 +252,12 @@ exit /b
213 252
214:build_single_tool 253:build_single_tool
215 @echo on 254 @echo on
216 %CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o tools\%toolname%\*.c ^ 255 %CC_TOOL% tools\%toolname%\*.c || exit /b 1
217 -o runtool.exe || exit /b 1
218 @echo off 256 @echo off
219 runtool %3 %4 %5 %6 %7 %8 %9 || exit /b 1 257 runtool %3 %4 %5 %6 %7 %8 %9 || exit /b 1
220 @echo. 258 @echo.
221 @echo (On Windows, the output of a tool is not saved to any file.) 259 @echo (On Windows, the output of a tool is not saved to any file.)
222exit /b 260exit /b
223 261
224:odflags
225 if %DEBUG%==1 (
226 SET ODFLAGS=%DFLAGS%
227 ) else (
228 SET ODFLAGS=%OFLAGS%
229 )
230exit /b
231
232:error 262:error
233 exit /b 1 \ No newline at end of file 263 exit /b 1 \ No newline at end of file

Generated with cgit - Back to sebastiano.tronto.net