aboutsummaryrefslogtreecommitdiff
path: root/build.bat
diff options
context:
space:
mode:
Diffstat (limited to 'build.bat')
-rw-r--r--build.bat146
1 files changed, 89 insertions, 57 deletions
diff --git a/build.bat b/build.bat
index 9f9f5f1..3459f6e 100644
--- a/build.bat
+++ b/build.bat
@@ -1,49 +1,96 @@
1@echo off 1@echo off
2 2
3if [%1]==[/d] ( 3SET DEBUG=0
4if "%1"=="/d" (
4 SET DEBUG=1 5 SET DEBUG=1
5 shift 6 shift
6) else (
7 SET DEBUG=0
8) 7)
8if "%1"=="test" (SET DEBUG=1)
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=/W4 /wd4100 /wd4324 /wd4505 /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 /nologo %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.obj 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.obj /link /LIBPATH:"%PYLIBS%" python3.lib
65 SET CC_TEST=%CC% %CFLAGS% %ODFLAGS% %LFLAGS% /Fe:runtest.exe nissy.obj
66 SET CC_TOOL=%CC% %CFLAGS% %ODFLAGS% %LFLAGS% /Fe:runtool.exe nissy.obj
67 SET CC_CXX=%CXX% /EHsc /nologo %ARCHOPTS% %ODFLAGS% %LFLAGS% /std:c++20 /Fe:runcpp.exe nissy_c.obj cpp\nissy.cpp
68goto :compiler_done
69
70:set_clang
71 SET CC=clang
72 SET CXX=clang++
73
74 SET DFLAGS=-g3 -DDEBUG
75 SET WARNINGS=-Wall -Wextra -Wno-unused-function -Wno-unused-parameter -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
84
85 SET CC_NISSY=%CC% %CFLAGS% %ODFLAGS% -c src\nissy.c -o nissy.obj
86 SET CC_SHELL=%CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.obj shell\shell.c -o run.exe
87 SET CC_PYTHON=%CC% %CFLAGS% %LFLAGS% -I%PYINCLUDE% -L%PYLIBS% -shared -lpython3 python\nissy_module.c nissy.obj -o python\nissy.pyd
88 SET CC_TEST=%CC% %CFLAGS% %ODFLAGS% %LFLAGS% -o runtest.exe nissy.obj
89 SET CC_TOOL=%CC% %CFLAGS% %ODFLAGS% %LFLAGS% -o runtool.exe nissy.obj
90 SET CC_CXX=%CXX% %ARCHOPTS% %ODFLAGS% %LFLAGS% -std=c++20 -o runcpp.exe nissy_c.obj cpp\nissy.cpp
91:compiler_done
46 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
@@ -66,7 +112,7 @@ exit /b 1
66 echo. 112 echo.
67 echo Possible values for TARGET (defaults to 'nissy' if unspecified): 113 echo Possible values for TARGET (defaults to 'nissy' if unspecified):
68 echo. 114 echo.
69 echo nissy Build the nissy.o object file. 115 echo nissy Build the nissy.obj object file.
70 echo python Build the Python module for nissy. 116 echo python Build the Python module for nissy.
71 echo NOTE: Python development headers must be installed in 117 echo NOTE: Python development headers must be installed in
72 echo order to build the Python module. The path of these 118 echo order to build the Python module. The path of these
@@ -98,32 +144,26 @@ 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
125:build_test 166:build_test
126 SET DEBUG=1
127 call:build_nissy || exit /b 1 167 call:build_nissy || exit /b 1
128 if not defined EXPR ( 168 if not defined EXPR (
129 SET WILDCARD=* 169 SET WILDCARD=*
@@ -139,7 +179,7 @@ exit /b
139 179
140:build_clean 180:build_clean
141 @echo on 181 @echo on
142 del *.o *.so *.a *.ilk *.pdb *.exe 182 del *.o *.obj *.so *.a *.ilk *.pdb *.exe
143 @echo off 183 @echo off
144exit /b 184exit /b
145 185
@@ -173,9 +213,11 @@ exit /b
173 exit /b 1 213 exit /b 1
174 ) 214 )
175 call:build_nissy || exit /b 1 215 call:build_nissy || exit /b 1
216 copy nissy.obj nissy_c.obj
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 219 del nissy.obj
220 copy nissy_c.obj nissy.obj
179 runcpp 221 runcpp
180 @echo off 222 @echo off
181exit /b 223exit /b
@@ -189,8 +231,7 @@ exit /b
189exit /b 231exit /b
190 232
191:build_single_test 233:build_single_test
192 call:odflags 234 %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 235 set error=0
195 for %%c in ( %1\*.in ) do ( 236 for %%c in ( %1\*.in ) do (
196 if %error%==1 exit /b 1 237 if %error%==1 exit /b 1
@@ -213,21 +254,12 @@ exit /b
213 254
214:build_single_tool 255:build_single_tool
215 @echo on 256 @echo on
216 %CC% %CFLAGS% %ODFLAGS% %LFLAGS% nissy.o tools\%toolname%\*.c ^ 257 %CC_TOOL% tools\%toolname%\*.c || exit /b 1
217 -o runtool.exe || exit /b 1
218 @echo off 258 @echo off
219 runtool %3 %4 %5 %6 %7 %8 %9 || exit /b 1 259 runtool %3 %4 %5 %6 %7 %8 %9 || exit /b 1
220 @echo. 260 @echo.
221 @echo (On Windows, the output of a tool is not saved to any file.) 261 @echo (On Windows, the output of a tool is not saved to any file.)
222exit /b 262exit /b
223 263
224:odflags
225 if %DEBUG%==1 (
226 SET ODFLAGS=%DFLAGS%
227 ) else (
228 SET ODFLAGS=%OFLAGS%
229 )
230exit /b
231
232:error 264:error
233 exit /b 1 \ No newline at end of file 265 exit /b 1 \ No newline at end of file

Generated with cgit - Back to sebastiano.tronto.net