Skip to content

Commit 81c51d9

Browse files
Merge pull request #572 from marceltaeumel/marceltaeumel/actions
Fixes Windows builds
2 parents 67f0747 + 9d4e825 commit 81c51d9

File tree

10 files changed

+177
-137
lines changed

10 files changed

+177
-137
lines changed

.appveyor.yml

Lines changed: 40 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -19,56 +19,56 @@ environment:
1919
MINGW_ARCH: x86_64
2020

2121
# Main minheadless VM variants.
22-
- FLAVOR: squeak.cog.spur
22+
- FLAVOR: squeak.cog.spur.minheadless
2323
ARCH: win32x86
2424
CPU_ARCH: x86
2525
CYG_ROOT: C:\cygwin
2626
MINGW_ARCH: i686
2727
BUILD_WITH_CMAKE: yes
28-
- FLAVOR: squeak.cog.spur
29-
ARCH: win64x64
30-
CPU_ARCH: x64
31-
CYG_ROOT: C:\cygwin64
32-
MINGW_ARCH: x86_64
33-
BUILD_WITH_CMAKE: yes
34-
- FLAVOR: pharo.cog.spur
28+
# - FLAVOR: squeak.cog.spur
29+
# ARCH: win64x64
30+
# CPU_ARCH: x64
31+
# CYG_ROOT: C:\cygwin64
32+
# MINGW_ARCH: x86_64
33+
# BUILD_WITH_CMAKE: yes
34+
- FLAVOR: pharo.cog.spur.minheadless
3535
ARCH: win32x86
3636
CPU_ARCH: x86
3737
CYG_ROOT: C:\cygwin
3838
MINGW_ARCH: i686
3939
BUILD_WITH_CMAKE: yes
40-
- FLAVOR: pharo.cog.spur
41-
ARCH: win64x64
42-
CPU_ARCH: x64
43-
CYG_ROOT: C:\cygwin64
44-
MINGW_ARCH: x86_64
45-
BUILD_WITH_CMAKE: yes
40+
# - FLAVOR: pharo.cog.spur
41+
# ARCH: win64x64
42+
# CPU_ARCH: x64
43+
# CYG_ROOT: C:\cygwin64
44+
# MINGW_ARCH: x86_64
45+
# BUILD_WITH_CMAKE: yes
4646

4747
# Minheadless VM variants with SDL2 based support for traditional display.
48-
- FLAVOR: squeak.cog.spur+sdl2
49-
ARCH: win32x86
50-
CPU_ARCH: x86
51-
CYG_ROOT: C:\cygwin
52-
MINGW_ARCH: i686
53-
BUILD_WITH_CMAKE: yes
54-
- FLAVOR: squeak.cog.spur+sdl2
55-
ARCH: win64x64
56-
CPU_ARCH: x64
57-
CYG_ROOT: C:\cygwin64
58-
MINGW_ARCH: x86_64
59-
BUILD_WITH_CMAKE: yes
60-
- FLAVOR: pharo.cog.spur+sdl2
61-
ARCH: win32x86
62-
CPU_ARCH: x86
63-
CYG_ROOT: C:\cygwin
64-
MINGW_ARCH: i686
65-
BUILD_WITH_CMAKE: yes
66-
- FLAVOR: pharo.cog.spur+sdl2
67-
ARCH: win64x64
68-
CPU_ARCH: x64
69-
CYG_ROOT: C:\cygwin64
70-
MINGW_ARCH: x86_64
71-
BUILD_WITH_CMAKE: yes
48+
# - FLAVOR: squeak.cog.spur+sdl2
49+
# ARCH: win32x86
50+
# CPU_ARCH: x86
51+
# CYG_ROOT: C:\cygwin
52+
# MINGW_ARCH: i686
53+
# BUILD_WITH_CMAKE: yes
54+
# - FLAVOR: squeak.cog.spur+sdl2
55+
# ARCH: win64x64
56+
# CPU_ARCH: x64
57+
# CYG_ROOT: C:\cygwin64
58+
# MINGW_ARCH: x86_64
59+
# BUILD_WITH_CMAKE: yes
60+
# - FLAVOR: pharo.cog.spur+sdl2
61+
# ARCH: win32x86
62+
# CPU_ARCH: x86
63+
# CYG_ROOT: C:\cygwin
64+
# MINGW_ARCH: i686
65+
# BUILD_WITH_CMAKE: yes
66+
# - FLAVOR: pharo.cog.spur+sdl2
67+
# ARCH: win64x64
68+
# CPU_ARCH: x64
69+
# CYG_ROOT: C:\cygwin64
70+
# MINGW_ARCH: x86_64
71+
# BUILD_WITH_CMAKE: yes
7272

7373
# Other VM variants
7474
- FLAVOR: squeak.sista.spur
@@ -132,6 +132,8 @@ environment:
132132
matrix:
133133
fast_finish: true
134134
allow_failures:
135+
- FLAVOR: squeak.cog.spur.minheadless
136+
- FLAVOR: pharo.cog.spur.minheadless
135137
- FLAVOR: squeak.sista.spur
136138
- FLAVOR: pharo.sista.spur
137139
- FLAVOR: squeak.cog.spur.lowcode

build.win32x86/common/Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,6 @@ $(OBJDIR)/%.lib: $(call plugin-makefile,$(*F))
279279
rm -f $(BUILD)/vm/$(*F).ignore
280280
$(MAKE) $(MFLAGS) BUILD=$(BUILD) \
281281
-f $(call plugin-makefile,$(*F)) \
282-
$(OBJDIR)/$(*F).lib
283282
LIBNAME=$(*F) INTERNAL_PLUGIN=1 VMSRCDIR=$(VMSRCDIR) \
284283
COGDEFS="$(COGDEFS) -DSQUEAK_BUILTIN_PLUGIN=$(*F)" $(OBJDIR)/$(*F).lib
285284

build.win32x86/common/Makefile.lib.extra

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,16 @@ THIRDPARTYDIR?=$(BUILD)/third-party
1010
THIRDPARTYLIBDIR?=$(THIRDPARTYOUTDIR)/bin
1111
THIRDPARTYINCLUDEDIR?=$(THIRDPARTYOUTDIR)/include
1212
THIRDPARTYCACHEDIR?=../../.thirdparty-cache
13-
THIRDPARTYOUTDIR?=$(abspath $(THIRDPARTYCACHEDIR)/windows/x86_64)
13+
THIRDPARTYOUTDIR?=$(abspath $(THIRDPARTYCACHEDIR)/windows/i386)
1414
export THIRDPARTYOUTDIR
1515
THIRDPARTYINSTALLDIR?=$(BUILD)/vm
16-
THIRDPARTY_CFLAGS?=-m64 -static-libgcc -static-libstdc++
17-
THIRDPARTY_LDFLAGS?=-m64 -static-libgcc -static-libstdc++
16+
THIRDPARTY_CFLAGS?=-m32 -static-libgcc -static-libstdc++
17+
THIRDPARTY_LDFLAGS?=-m32 -static-libgcc -static-libstdc++
1818
WGET?=wget -q --no-check-certificate
1919

2020
#I need this toolchain to compile external libraries with appropriate gcc
21-
THIRDPARTY_TOOLCHAIN:=CC=x86_64-w64-mingw32-gcc AR=x86_64-w64-mingw32-ar LD=x86_64-w64-mingw32-clang NM=x86_64-w64-mingw32-nm RC=x86_64-w64-mingw32-windres DLLTOOL=x86_64-w64-mingw32-dlltool DLLWRAP=x86_64-w64-mingw32-dllwrap
21+
THIRDPARTY_TOOLCHAIN_PREFIX:=i686-w64-mingw32-
22+
THIRDPARTY_TOOLCHAIN:=CC=$(THIRDPARTY_TOOLCHAIN_PREFIX)gcc AR=$(THIRDPARTY_TOOLCHAIN_PREFIX)ar LD=$(THIRDPARTY_TOOLCHAIN_PREFIX)clang NM=$(THIRDPARTY_TOOLCHAIN_PREFIX)nm RC=$(THIRDPARTY_TOOLCHAIN_PREFIX)windres DLLTOOL=$(THIRDPARTY_TOOLCHAIN_PREFIX)dlltool DLLWRAP=$(THIRDPARTY_TOOLCHAIN_PREFIX)dllwrap
2223

2324

2425
$(THIRDPARTYDIR):

build.win32x86/common/Makefile.msvc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#############################################################################
2-
# Common Makefile for Win64 VM using MSVC, e.g. 2017 Community, and gnu make
2+
# Common Makefile for Win32 VM using MSVC, e.g. 2017 Community, and gnu make
33
# Copyright (c) 2020 3D Immersive Collaboration Consulting, LLC
44
#
55
# Do make init to allow make -n to function.
@@ -122,8 +122,8 @@ VMRES:= $(VM).res
122122
VMDEFIN:=$(VM).def.in
123123
BTOBJ:= $(OBJDIR)/btext.o
124124
ETOBJ:= $(OBJDIR)/etext.o
125-
JMPASM:=_setjmp-x64.asm
126-
JMPOBJ:=$(OBJDIR)/_setjmp-x64.o
125+
JMPASM:=_setjmp-x86.asm
126+
JMPOBJ:=$(OBJDIR)/_setjmp-x86.o
127127

128128
.PRECIOUS: mkNamedPrims.exe
129129

build.win64x64/common/Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,6 @@ $(OBJDIR)/%.lib: $(call plugin-makefile,$(*F))
279279
rm -f $(BUILD)/vm/$(*F).ignore
280280
$(MAKE) $(MFLAGS) BUILD=$(BUILD) \
281281
-f $(call plugin-makefile,$(*F)) \
282-
$(OBJDIR)/$(*F).lib
283282
LIBNAME=$(*F) INTERNAL_PLUGIN=1 VMSRCDIR=$(VMSRCDIR) \
284283
COGDEFS="$(COGDEFS) -DSQUEAK_BUILTIN_PLUGIN=$(*F)" $(OBJDIR)/$(*F).lib
285284

platforms/minheadless/windows/sqWin32Alloc.c

Lines changed: 46 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,22 @@ LONG CALLBACK sqExceptionFilter(LPEXCEPTION_POINTERS exp)
4545
return EXCEPTION_WRONG_ACCESS;
4646
}
4747

48+
# define roundDownToPage(v) ((sqIntptr_t)(v)&pageMask)
49+
# define roundUpToPage(v) (((sqIntptr_t)(v)+pageSize-1)&pageMask)
50+
51+
static void
52+
initPageSize()
53+
{
54+
SYSTEM_INFO sysInfo;
55+
56+
/* determine page boundaries & available address space */
57+
if (!pageSize) {
58+
GetSystemInfo(&sysInfo);
59+
pageSize = sysInfo.dwPageSize;
60+
pageMask = ~(pageSize - 1);
61+
}
62+
}
63+
4864
/************************************************************************/
4965
/* sqAllocateMemory: Initialize virtual memory */
5066
/************************************************************************/
@@ -59,10 +75,10 @@ sqAllocateMemory(usqInt minHeapSize, usqInt desiredHeapSize)
5975
pageMask = ~(pageSize - 1);
6076

6177
/* round the requested size up to the next page boundary */
62-
nowReserved = (desiredHeapSize + pageSize) & pageMask;
78+
nowReserved = roundUpToPage(desiredHeapSize);
6379

6480
/* round the initial commited size up to the next page boundary */
65-
initialCommit = (minHeapSize + pageSize) & pageMask;
81+
initialCommit = roundUpToPage(minHeapSize);
6682

6783
/* Here, we only reserve the maximum memory to be used
6884
It will later be committed during actual access */
@@ -78,15 +94,15 @@ sqAllocateMemory(usqInt minHeapSize, usqInt desiredHeapSize)
7894
} while(!pageBase);
7995
if(!pageBase) {
8096
sqMessageBox(MB_OK | MB_ICONSTOP, TEXT("VM Error:"),
81-
"Unable to allocate memory (%d bytes requested)",
97+
TEXT("Unable to allocate memory (%d bytes requested)"),
8298
maxReserved);
8399
return pageBase;
84100
}
85101
/* commit initial memory as requested */
86102
commit = nowReserved;
87103
if(!VirtualAlloc(pageBase, commit, MEM_COMMIT, PAGE_READWRITE)) {
88104
sqMessageBox(MB_OK | MB_ICONSTOP, TEXT("VM Error:"),
89-
"Unable to commit memory (%d bytes requested)",
105+
TEXT("Unable to commit memory (%d bytes requested)"),
90106
commit);
91107
return NULL;
92108
}
@@ -176,34 +192,40 @@ sqMemoryExtraBytesLeft(int includingSwap) {
176192
return bytesLeft;
177193
}
178194

179-
#define roundDownToPage(v) ((v)&pageMask)
180-
#define roundUpToPage(v) (((v)+pageSize-1)&pageMask)
181-
182195
# if COGVM
183196
void
184197
sqMakeMemoryExecutableFromToCodeToDataDelta(usqInt startAddr, usqInt endAddr, sqInt *codeToDataDelta)
185198
{
186-
DWORD previous;
187-
188-
if (!VirtualProtect((void *)startAddr,
189-
endAddr - startAddr + 1,
190-
PAGE_EXECUTE_READWRITE,
191-
&previous))
192-
sqWin32PrintLastError("VirtualProtect(x,y,PAGE_EXECUTE_READWRITE)");
193-
if(codeToDataDelta)
194-
*codeToDataDelta = 0;
199+
DWORD previous;
200+
SIZE_T size;
201+
202+
size = endAddr - startAddr;
203+
if (!VirtualProtect((void *)startAddr,
204+
size,
205+
PAGE_EXECUTE_READWRITE,
206+
&previous))
207+
sqWin32PrintLastError("VirtualProtect(x,y,PAGE_EXECUTE_READWRITE)");
208+
if (codeToDataDelta)
209+
*codeToDataDelta = 0;
195210
}
196211

197-
void
198-
sqMakeMemoryNotExecutableFromTo(usqInt startAddr, usqInt endAddr)
212+
void *
213+
allocateJITMemory(usqInt *desiredSize)
199214
{
200-
DWORD previous;
215+
initPageSize();
216+
217+
sqInt allocBytes = roundUpToPage(*desiredSize);
218+
219+
/* Allocate extra memory for the JIT. No need to make it executable (i.e., PAGE_EXECUTE_READWRITE) right away because there will be an extra call to sqMakeMemoryExecutableFromToCodeToDataDelta(..) anyway. */
220+
char *alloc = VirtualAlloc(NULL,allocBytes,MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);
221+
222+
if (!alloc) {
223+
sqWin32PrintLastError("Could not allocate JIT memory");
224+
exit(1);
225+
}
201226

202-
if (!VirtualProtect((void *)startAddr,
203-
endAddr - startAddr + 1,
204-
PAGE_READWRITE,
205-
&previous))
206-
sqWin32PrintLastError("VirtualProtect(x,y,PAGE_EXECUTE_READWRITE)");
227+
*desiredSize = allocBytes;
228+
return alloc;
207229
}
208230
# endif /* COGVM */
209231
#endif /* !defined(NO_VIRTUAL_MEMORY) && !SPURVM */

0 commit comments

Comments
 (0)