forked from factor/factor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.cmd
150 lines (132 loc) · 4 KB
/
build.cmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
@echo off
setlocal
goto start
:download
rem branch url filename
echo Fetching %1 boot image from %2
cscript /nologo misc\http-get.vbs %2 %3
exit /b
:start
: Check which branch we are on, or just assume master if we are not in a git repository
for /f %%z in ('git rev-parse --abbrev-ref HEAD') do set GIT_BRANCH=%%z
if not defined GIT_BRANCH (
set GIT_BRANCH=master
)
if "%1"=="/?" (
goto usage
) else if "%1"=="" (
set _git_pull=1
set _compile_vm=1
set _bootimage_type=download
set _bootstrap_factor=1
) else if "%1"=="latest" (
set _git_pull=1
set _compile_vm=1
set _bootimage_type=download
set _bootstrap_factor=1
) else if "%1"=="update" (
set _git_pull=1
set _compile_vm=1
set _bootimage_type=download
set _bootstrap_factor=1
) else if "%1"=="compile" (
set _git_pull=0
set _compile_vm=1
set _bootimage_type=current
set _bootstrap_factor=0
) else if "%1"=="self-bootstrap" (
set _git_pull=1
set _compile_vm=0
set _bootimage_type=make
set _bootstrap_factor=1
) else if "%1"=="bootstrap" (
set _git_pull=0
set _compile_vm=0
set _bootimage_type=current
set _bootstrap_factor=1
) else if "%1"=="net-bootstrap" (
set _git_pull=0
set _compile_vm=1
set _bootimage_type=download
set _bootstrap_factor=1
) else if "%1"=="update-boot-image" (
set _git_pull=0
set _compile_vm=0
set _bootimage_type=download
set _bootstrap_factor=0
) else goto usage
if not exist Nmakefile goto wrongdir
call cl 2>&1 | find "x86" >nul
if not errorlevel 1 (
echo x86-32 cl.exe detected.
set _target=x86-32
set _bootimage=boot.windows-x86.32.image
) else (
call cl 2>&1 | find "x64" >nul
if not errorlevel 1 (
echo x86-64 cl.exe detected.
set _target=x86-64
set _bootimage=boot.windows-x86.64.image
) else goto nocl
)
echo Deleting staging images from temp/...
del temp\staging.*.image
if "%_git_pull%"=="1" (
echo Updating working copy from %GIT_BRANCH%...
call git pull https://github.com/factor/factor %GIT_BRANCH%
if errorlevel 1 goto fail
)
if "%_compile_vm%"=="1" (
echo Building vm...
nmake /nologo /f Nmakefile clean
if errorlevel 1 goto fail
nmake /nologo /f Nmakefile LTO=1 %_target%
if errorlevel 1 goto fail
)
set _bootimage_url=https://downloads.factorcode.org/images/%GIT_BRANCH%/%_bootimage%
if "%_bootimage_type%"=="download" (
call :download %GIT_BRANCH% %_bootimage_url% %_bootimage%
if errorlevel 1 (
echo boot image for branch %GIT_BRANCH% is not on server, trying master instead
call :download master https://downloads.factorcode.org/images/master/%_bootimage% %_bootimage%
)
if errorlevel 1 goto fail
) else if "%_bootimage_type%"=="make" (
echo Making boot image...
.\factor.com -run=bootstrap.image %_bootimage%
if errorlevel 1 goto fail
)
if "%_bootstrap_factor%"=="1" (
echo Bootstrapping...
.\factor.com -i=%_bootimage%
if errorlevel 1 goto fail
echo Copying fresh factor.image to factor.image.fresh.
copy factor.image factor.image.fresh
if errorlevel 1 goto fail
)
echo Build complete.
goto :EOF
:fail
echo Build failed.
goto :EOF
:wrongdir
echo build.cmd must be run from the root of the Factor source tree.
goto :EOF
:nocl
echo Unable to detect cl.exe target platform.
echo Make sure you're running within the Visual Studio or Windows SDK environment.
goto :EOF
:usage
echo Usage: build.cmd [command]
echo Updates the working copy, cleans and builds the vm using nmake,
echo fetches a boot image, and bootstraps factor.
echo:
echo The branch that bootstraps is the one that is checked out locally.
echo:
echo compile - recompile vm
echo update - git pull, recompile vm, download a boot image, bootstrap
echo self-bootstrap - git pull, make a boot image, bootstrap
echo bootstrap - existing boot image, bootstrap
echo net-bootstrap - recompile vm, download a boot image, bootstrap
echo update-boot-image - get the boot image for the current branch
goto :EOF