mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-04-30 02:02:38 -07:00
Support the MinGW build of MPS and tests, part 1
* mps/code/w3i6gc.gmk: * mps/code/w3i3gc.gmk: * mps/code/mingw.gmk: New files, for the MinGW build. * mps/code/ss.c (StackHot) [__MINGW32__ && __GNUC__ >= 12]: Ignore dangling-pointer warnings. * mps/code/global.c (ArenaFinalize): Avoid compiler warnings. * mps/code/thw3.c (ThreadScan): Avoid compilation errors due to prototype mismatch. * mps/code/testlib.h (alloca): Don't redefine for MinGW. (setenv): Don't redefine for mingw.org's MinGW. (ulongest_t, longest_t): Separate definitions for MinGW64. * mps/code/testlib.c (sizelog2) [__MINGW32__]: Fix comparison. (rnd_align): Avoid name clashes with 'min' and 'max'. * mps/code/spw3i3.c (StackProbe) [__GNUC__]: Implementation for MinGW. * mps/code/protw3.c: Avoid compiler warning. * mps/code/mpstd.h: Define MinGW (_X86_) and MinGW64 (__X86_64) configurations. * mps/code/mpsiw3.c (mps_SEH_filter, mps_SEH_handler): Add prototypes. * mps/code/mps.c [MPS_PF_W3I3GC]: Define 32-bit MinGW stuff. [MPS_PF_W3I6GC]: Define 64-bit MinGW64 stuff. * mps/code/lockw3.c (RTL_RUN_ONCE, PRTL_RUN_ONCE_INIT_FN) (RTL_RUN_ONCE_INIT, INIT_ONCE_STATIC_INIT, RTL_RUN_ONCE INIT_ONCE) (PRTL_RUN_ONCE PINIT_ONCE, PINIT_ONCE_FN, InitOnceExecuteOnce): Define for mingw.org's MinGW. * mps/code/comm.gmk (EVENT_TARGETS, EXTRA_TARGETS, TEST_TARGETS) (UNBUILDABLE_TARGETS): Add $(EXEEXT) to program names. (TESTTHR): Define correct test for MS-Windows. Don't fail the build if the *.d dependency files don't exist.
This commit is contained in:
parent
c6a6db0abb
commit
e722ec9cfe
15 changed files with 410 additions and 123 deletions
|
|
@ -75,7 +75,7 @@ endif
|
|||
|
||||
# TELEMETRY TARGETS
|
||||
|
||||
EVENT_TARGETS = mpseventcnv mpseventpy mpseventsql mpseventtxt
|
||||
EVENT_TARGETS = mpseventcnv$(EXEEXT) mpseventpy$(EXEEXT) mpseventsql$(EXEEXT) mpseventtxt$(EXEEXT)
|
||||
|
||||
|
||||
# EXTRA TARGETS
|
||||
|
|
@ -83,7 +83,7 @@ EVENT_TARGETS = mpseventcnv mpseventpy mpseventsql mpseventtxt
|
|||
# Don't build mpseventsql by default (might not have sqlite3 installed),
|
||||
# but do build the other event target.
|
||||
|
||||
EXTRA_TARGETS ?= $(filter-out mpseventsql,$(EVENT_TARGETS))
|
||||
EXTRA_TARGETS ?= $(filter-out mpseventsql$(EXEEXT),$(EVENT_TARGETS))
|
||||
|
||||
|
||||
#
|
||||
|
|
@ -164,7 +164,15 @@ POOLN = pooln.c
|
|||
MV2 = poolmv2.c
|
||||
MVFF = poolmvff.c
|
||||
TESTLIB = testlib.c
|
||||
# Windows and Posix need different multithreaded tests, so here we must
|
||||
# deviate from the "no variation between platforms" rule.
|
||||
ifeq ($(PFM),w3i3gc)
|
||||
TESTTHR = testthrw3.c
|
||||
else ifeq ($(PFM),w3i6gc)
|
||||
TESTTHR = testthrw3.c
|
||||
else
|
||||
TESTTHR = testthrix.c
|
||||
endif
|
||||
FMTDY = fmtdy.c fmtno.c
|
||||
FMTDYTST = fmtdy.c fmtno.c fmtdytst.c
|
||||
FMTHETST = fmthe.c fmtdy.c fmtno.c fmtdytst.c
|
||||
|
|
@ -256,57 +264,63 @@ LIB_TARGETS=mps.a mpsplan.a
|
|||
# Test executables go in TEST_TARGETS.
|
||||
|
||||
TEST_TARGETS=\
|
||||
abqtest \
|
||||
addrobj \
|
||||
airtest \
|
||||
amcss \
|
||||
amcsshe \
|
||||
amcssth \
|
||||
amsss \
|
||||
amssshe \
|
||||
apss \
|
||||
arenacv \
|
||||
awlut \
|
||||
awluthe \
|
||||
awlutth \
|
||||
btcv \
|
||||
bttest \
|
||||
djbench \
|
||||
extcon \
|
||||
finalcv \
|
||||
finaltest \
|
||||
forktest \
|
||||
fotest \
|
||||
gcbench \
|
||||
landtest \
|
||||
locbwcss \
|
||||
lockcov \
|
||||
lockut \
|
||||
locusss \
|
||||
locv \
|
||||
messtest \
|
||||
mpmss \
|
||||
mpsicv \
|
||||
mv2test \
|
||||
nailboardtest \
|
||||
poolncv \
|
||||
qs \
|
||||
sacss \
|
||||
segsmss \
|
||||
sncss \
|
||||
steptest \
|
||||
tagtest \
|
||||
teletest \
|
||||
walkt0 \
|
||||
zcoll \
|
||||
zmess \
|
||||
ztfm
|
||||
abqtest$(EXEEXT) \
|
||||
addrobj$(EXEEXT) \
|
||||
airtest$(EXEEXT) \
|
||||
amcss$(EXEEXT) \
|
||||
amcsshe$(EXEEXT) \
|
||||
amcssth$(EXEEXT) \
|
||||
amsss$(EXEEXT) \
|
||||
amssshe$(EXEEXT) \
|
||||
apss$(EXEEXT) \
|
||||
arenacv$(EXEEXT) \
|
||||
awlut$(EXEEXT) \
|
||||
awluthe$(EXEEXT) \
|
||||
awlutth$(EXEEXT) \
|
||||
btcv$(EXEEXT) \
|
||||
bttest$(EXEEXT) \
|
||||
djbench$(EXEEXT) \
|
||||
extcon$(EXEEXT) \
|
||||
finalcv$(EXEEXT) \
|
||||
finaltest$(EXEEXT) \
|
||||
fotest$(EXEEXT) \
|
||||
gcbench$(EXEEXT) \
|
||||
landtest$(EXEEXT) \
|
||||
locbwcss$(EXEEXT) \
|
||||
lockcov$(EXEEXT) \
|
||||
lockut$(EXEEXT) \
|
||||
locusss$(EXEEXT) \
|
||||
locv$(EXEEXT) \
|
||||
messtest$(EXEEXT) \
|
||||
mpmss$(EXEEXT) \
|
||||
mpsicv$(EXEEXT) \
|
||||
mv2test$(EXEEXT) \
|
||||
nailboardtest$(EXEEXT) \
|
||||
poolncv$(EXEEXT) \
|
||||
qs$(EXEEXT) \
|
||||
sacss$(EXEEXT) \
|
||||
segsmss$(EXEEXT) \
|
||||
sncss$(EXEEXT) \
|
||||
steptest$(EXEEXT) \
|
||||
tagtest$(EXEEXT) \
|
||||
teletest$(EXEEXT) \
|
||||
walkt0$(EXEEXT) \
|
||||
zcoll$(EXEEXT) \
|
||||
zmess$(EXEEXT) \
|
||||
ztfm$(EXEEXT)
|
||||
|
||||
# Another deviation: MS-Windows doesn't have 'fork'.
|
||||
ifneq ($(PFM),w3i3gc)
|
||||
ifneq ($(PFM),w3i6gc)
|
||||
TEST_TARGETS += forktest$(EXEEXT)
|
||||
endif
|
||||
endif
|
||||
|
||||
# This target records programs that we were once able to build but
|
||||
# can't at the moment:
|
||||
|
||||
UNBUILDABLE_TARGETS=\
|
||||
replay # depends on the EPVM pool
|
||||
replay$(EXEEXT) # depends on the EPVM pool
|
||||
|
||||
ALL_TARGETS=$(LIB_TARGETS) $(TEST_TARGETS) $(EXTRA_TARGETS)
|
||||
|
||||
|
|
@ -454,154 +468,154 @@ $(PFM)/cool/mps.a: $(MPMOBJ)
|
|||
|
||||
ifdef VARIETY
|
||||
|
||||
$(PFM)/$(VARIETY)/abqtest: $(PFM)/$(VARIETY)/abqtest.o \
|
||||
$(PFM)/$(VARIETY)/abqtest$(EXEEXT): $(PFM)/$(VARIETY)/abqtest.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/addrobj: $(PFM)/$(VARIETY)/addrobj.o \
|
||||
$(PFM)/$(VARIETY)/addrobj$(EXEEXT): $(PFM)/$(VARIETY)/addrobj.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/airtest: $(PFM)/$(VARIETY)/airtest.o \
|
||||
$(PFM)/$(VARIETY)/airtest$(EXEEXT): $(PFM)/$(VARIETY)/airtest.o \
|
||||
$(FMTSCMOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/amcss: $(PFM)/$(VARIETY)/amcss.o \
|
||||
$(PFM)/$(VARIETY)/amcss$(EXEEXT): $(PFM)/$(VARIETY)/amcss.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/amcsshe: $(PFM)/$(VARIETY)/amcsshe.o \
|
||||
$(PFM)/$(VARIETY)/amcsshe$(EXEEXT): $(PFM)/$(VARIETY)/amcsshe.o \
|
||||
$(FMTHETSTOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/amcssth: $(PFM)/$(VARIETY)/amcssth.o \
|
||||
$(PFM)/$(VARIETY)/amcssth$(EXEEXT): $(PFM)/$(VARIETY)/amcssth.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(TESTTHROBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/amsss: $(PFM)/$(VARIETY)/amsss.o \
|
||||
$(PFM)/$(VARIETY)/amsss$(EXEEXT): $(PFM)/$(VARIETY)/amsss.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/amssshe: $(PFM)/$(VARIETY)/amssshe.o \
|
||||
$(PFM)/$(VARIETY)/amssshe$(EXEEXT): $(PFM)/$(VARIETY)/amssshe.o \
|
||||
$(FMTHETSTOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/apss: $(PFM)/$(VARIETY)/apss.o \
|
||||
$(PFM)/$(VARIETY)/apss$(EXEEXT): $(PFM)/$(VARIETY)/apss.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/arenacv: $(PFM)/$(VARIETY)/arenacv.o \
|
||||
$(PFM)/$(VARIETY)/arenacv$(EXEEXT): $(PFM)/$(VARIETY)/arenacv.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/awlut: $(PFM)/$(VARIETY)/awlut.o \
|
||||
$(PFM)/$(VARIETY)/awlut$(EXEEXT): $(PFM)/$(VARIETY)/awlut.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(TESTTHROBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/awluthe: $(PFM)/$(VARIETY)/awluthe.o \
|
||||
$(PFM)/$(VARIETY)/awluthe$(EXEEXT): $(PFM)/$(VARIETY)/awluthe.o \
|
||||
$(FMTHETSTOBJ) $(TESTLIBOBJ) $(TESTTHROBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/awlutth: $(PFM)/$(VARIETY)/awlutth.o \
|
||||
$(PFM)/$(VARIETY)/awlutth$(EXEEXT): $(PFM)/$(VARIETY)/awlutth.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(TESTTHROBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/btcv: $(PFM)/$(VARIETY)/btcv.o \
|
||||
$(PFM)/$(VARIETY)/btcv$(EXEEXT): $(PFM)/$(VARIETY)/btcv.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/bttest: $(PFM)/$(VARIETY)/bttest.o \
|
||||
$(PFM)/$(VARIETY)/bttest$(EXEEXT): $(PFM)/$(VARIETY)/bttest.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/djbench: $(PFM)/$(VARIETY)/djbench.o \
|
||||
$(PFM)/$(VARIETY)/djbench$(EXEEXT): $(PFM)/$(VARIETY)/djbench.o \
|
||||
$(TESTLIBOBJ) $(TESTTHROBJ)
|
||||
|
||||
$(PFM)/$(VARIETY)/extcon: $(PFM)/$(VARIETY)/extcon.o \
|
||||
$(PFM)/$(VARIETY)/extcon$(EXEEXT): $(PFM)/$(VARIETY)/extcon.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/finalcv: $(PFM)/$(VARIETY)/finalcv.o \
|
||||
$(PFM)/$(VARIETY)/finalcv$(EXEEXT): $(PFM)/$(VARIETY)/finalcv.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/finaltest: $(PFM)/$(VARIETY)/finaltest.o \
|
||||
$(PFM)/$(VARIETY)/finaltest$(EXEEXT): $(PFM)/$(VARIETY)/finaltest.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/forktest: $(PFM)/$(VARIETY)/forktest.o \
|
||||
$(PFM)/$(VARIETY)/forktest$(EXEEXT): $(PFM)/$(VARIETY)/forktest.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/fotest: $(PFM)/$(VARIETY)/fotest.o \
|
||||
$(PFM)/$(VARIETY)/fotest$(EXEEXT): $(PFM)/$(VARIETY)/fotest.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/gcbench: $(PFM)/$(VARIETY)/gcbench.o \
|
||||
$(PFM)/$(VARIETY)/gcbench$(EXEEXT): $(PFM)/$(VARIETY)/gcbench.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(TESTTHROBJ)
|
||||
|
||||
$(PFM)/$(VARIETY)/landtest: $(PFM)/$(VARIETY)/landtest.o \
|
||||
$(PFM)/$(VARIETY)/landtest$(EXEEXT): $(PFM)/$(VARIETY)/landtest.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/locbwcss: $(PFM)/$(VARIETY)/locbwcss.o \
|
||||
$(PFM)/$(VARIETY)/locbwcss$(EXEEXT): $(PFM)/$(VARIETY)/locbwcss.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/lockcov: $(PFM)/$(VARIETY)/lockcov.o \
|
||||
$(PFM)/$(VARIETY)/lockcov$(EXEEXT): $(PFM)/$(VARIETY)/lockcov.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/lockut: $(PFM)/$(VARIETY)/lockut.o \
|
||||
$(PFM)/$(VARIETY)/lockut$(EXEEXT): $(PFM)/$(VARIETY)/lockut.o \
|
||||
$(TESTLIBOBJ) $(TESTTHROBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/locusss: $(PFM)/$(VARIETY)/locusss.o \
|
||||
$(PFM)/$(VARIETY)/locusss$(EXEEXT): $(PFM)/$(VARIETY)/locusss.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/locv: $(PFM)/$(VARIETY)/locv.o \
|
||||
$(PFM)/$(VARIETY)/locv$(EXEEXT): $(PFM)/$(VARIETY)/locv.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/messtest: $(PFM)/$(VARIETY)/messtest.o \
|
||||
$(PFM)/$(VARIETY)/messtest$(EXEEXT): $(PFM)/$(VARIETY)/messtest.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/mpmss: $(PFM)/$(VARIETY)/mpmss.o \
|
||||
$(PFM)/$(VARIETY)/mpmss$(EXEEXT): $(PFM)/$(VARIETY)/mpmss.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/mpsicv: $(PFM)/$(VARIETY)/mpsicv.o \
|
||||
$(PFM)/$(VARIETY)/mpsicv$(EXEEXT): $(PFM)/$(VARIETY)/mpsicv.o \
|
||||
$(FMTDYTSTOBJ) $(FMTHETSTOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/mv2test: $(PFM)/$(VARIETY)/mv2test.o \
|
||||
$(PFM)/$(VARIETY)/mv2test$(EXEEXT): $(PFM)/$(VARIETY)/mv2test.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/nailboardtest: $(PFM)/$(VARIETY)/nailboardtest.o \
|
||||
$(PFM)/$(VARIETY)/nailboardtest$(EXEEXT): $(PFM)/$(VARIETY)/nailboardtest.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/poolncv: $(PFM)/$(VARIETY)/poolncv.o \
|
||||
$(PFM)/$(VARIETY)/poolncv$(EXEEXT): $(PFM)/$(VARIETY)/poolncv.o \
|
||||
$(POOLNOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/qs: $(PFM)/$(VARIETY)/qs.o \
|
||||
$(PFM)/$(VARIETY)/qs$(EXEEXT): $(PFM)/$(VARIETY)/qs.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/sacss: $(PFM)/$(VARIETY)/sacss.o \
|
||||
$(PFM)/$(VARIETY)/sacss$(EXEEXT): $(PFM)/$(VARIETY)/sacss.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/segsmss: $(PFM)/$(VARIETY)/segsmss.o \
|
||||
$(PFM)/$(VARIETY)/segsmss$(EXEEXT): $(PFM)/$(VARIETY)/segsmss.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/sncss: $(PFM)/$(VARIETY)/sncss.o \
|
||||
$(PFM)/$(VARIETY)/sncss$(EXEEXT): $(PFM)/$(VARIETY)/sncss.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/steptest: $(PFM)/$(VARIETY)/steptest.o \
|
||||
$(PFM)/$(VARIETY)/steptest$(EXEEXT): $(PFM)/$(VARIETY)/steptest.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/tagtest: $(PFM)/$(VARIETY)/tagtest.o \
|
||||
$(PFM)/$(VARIETY)/tagtest$(EXEEXT): $(PFM)/$(VARIETY)/tagtest.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/teletest: $(PFM)/$(VARIETY)/teletest.o \
|
||||
$(PFM)/$(VARIETY)/teletest$(EXEEXT): $(PFM)/$(VARIETY)/teletest.o \
|
||||
$(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/walkt0: $(PFM)/$(VARIETY)/walkt0.o \
|
||||
$(PFM)/$(VARIETY)/walkt0$(EXEEXT): $(PFM)/$(VARIETY)/walkt0.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/zcoll: $(PFM)/$(VARIETY)/zcoll.o \
|
||||
$(PFM)/$(VARIETY)/zcoll$(EXEEXT): $(PFM)/$(VARIETY)/zcoll.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/zmess: $(PFM)/$(VARIETY)/zmess.o \
|
||||
$(PFM)/$(VARIETY)/zmess$(EXEEXT): $(PFM)/$(VARIETY)/zmess.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/ztfm: $(PFM)/$(VARIETY)/ztfm.o \
|
||||
$(PFM)/$(VARIETY)/ztfm$(EXEEXT): $(PFM)/$(VARIETY)/ztfm.o \
|
||||
$(FMTDYTSTOBJ) $(TESTLIBOBJ) $(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/mpseventcnv: $(PFM)/$(VARIETY)/eventcnv.o \
|
||||
$(PFM)/$(VARIETY)/mpseventcnv$(EXEEXT): $(PFM)/$(VARIETY)/eventcnv.o \
|
||||
$(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/mpseventpy: $(PFM)/$(VARIETY)/eventpy.o \
|
||||
$(PFM)/$(VARIETY)/mpseventpy$(EXEEXT): $(PFM)/$(VARIETY)/eventpy.o \
|
||||
$(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/mpseventtxt: $(PFM)/$(VARIETY)/eventtxt.o \
|
||||
$(PFM)/$(VARIETY)/mpseventtxt$(EXEEXT): $(PFM)/$(VARIETY)/eventtxt.o \
|
||||
$(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/mpseventsql: $(PFM)/$(VARIETY)/eventsql.o \
|
||||
$(PFM)/$(VARIETY)/mpseventsql$(EXEEXT): $(PFM)/$(VARIETY)/eventsql.o \
|
||||
$(PFM)/$(VARIETY)/mps.a
|
||||
|
||||
$(PFM)/$(VARIETY)/replay: $(PFM)/$(VARIETY)/replay.o \
|
||||
$(PFM)/$(VARIETY)/replay$(EXEEXT): $(PFM)/$(VARIETY)/replay.o \
|
||||
$(PFM)/$(VARIETY)/eventrep.o \
|
||||
$(PFM)/$(VARIETY)/table.o \
|
||||
$(PFM)/$(VARIETY)/mps.a
|
||||
|
|
@ -662,18 +676,18 @@ ifdef TARGET
|
|||
# %%VARIETY: When adding a new variety, add the dependencies files for it
|
||||
# here.
|
||||
ifeq ($(VARIETY),rash)
|
||||
include $(PFM)/$(VARIETY)/mps.d
|
||||
-include $(PFM)/$(VARIETY)/mps.d
|
||||
else
|
||||
ifeq ($(VARIETY),hot)
|
||||
include $(PFM)/$(VARIETY)/mps.d
|
||||
-include $(PFM)/$(VARIETY)/mps.d
|
||||
else
|
||||
include $(MPM:%.c=$(PFM)/$(VARIETY)/%.d)
|
||||
-include $(MPM:%.c=$(PFM)/$(VARIETY)/%.d)
|
||||
endif # VARIETY != hot
|
||||
endif # VARIETY != rash
|
||||
|
||||
# %%PART: When adding a new part, add the dependencies file for the
|
||||
# new part here.
|
||||
include \
|
||||
-include \
|
||||
$(FMTDY:%.c=$(PFM)/$(VARIETY)/%.d) \
|
||||
$(FMTDYTST:%.c=$(PFM)/$(VARIETY)/%.d) \
|
||||
$(FMTHETST:%.c=$(PFM)/$(VARIETY)/%.d) \
|
||||
|
|
@ -704,11 +718,11 @@ $(PFM)/$(VARIETY)/%.a:
|
|||
|
||||
# Executable
|
||||
|
||||
$(PFM)/$(VARIETY)/%:
|
||||
$(PFM)/$(VARIETY)/%$(EXEEXT):
|
||||
$(ECHO) "$(PFM): $@"
|
||||
$(CC) $(CFLAGSSTRICT) $(LINKFLAGS) -o $@ $^ $(LIBS)
|
||||
|
||||
$(PFM)/$(VARIETY)/mpseventsql:
|
||||
$(PFM)/$(VARIETY)/mpseventsql$(EXEEXT):
|
||||
$(ECHO) "$(PFM): $@"
|
||||
$(CC) $(CFLAGSLAX) $(LINKFLAGS) -o $@ $^ $(LIBS) -lsqlite3
|
||||
|
||||
|
|
|
|||
|
|
@ -826,7 +826,7 @@ Bool ArenaStep(Globals globals, double interval, double multiplier)
|
|||
Res ArenaFinalize(Arena arena, Ref obj)
|
||||
{
|
||||
Res res;
|
||||
Pool refpool;
|
||||
Pool refpool = NULL;
|
||||
|
||||
AVERT(Arena, arena);
|
||||
AVER(PoolOfAddr(&refpool, arena, (Addr)obj));
|
||||
|
|
|
|||
|
|
@ -33,6 +33,25 @@ SRCID(lockw3, "$Id$");
|
|||
|
||||
#if defined(LOCK)
|
||||
|
||||
#ifdef __MINGW32__
|
||||
# if defined __MINGW32_VERSION && __MINGW32_VERSION >= 5000000L
|
||||
|
||||
/* mingw.org's MinGW doesn't have this stuff in its headers. */
|
||||
typedef struct _RTL_RUN_ONCE { PVOID Ptr; } RTL_RUN_ONCE, *PRTL_RUN_ONCE;
|
||||
typedef DWORD (WINAPI *PRTL_RUN_ONCE_INIT_FN)(PRTL_RUN_ONCE, PVOID, PVOID *);
|
||||
|
||||
# define RTL_RUN_ONCE_INIT {0}
|
||||
# define INIT_ONCE_STATIC_INIT RTL_RUN_ONCE_INIT
|
||||
|
||||
typedef RTL_RUN_ONCE INIT_ONCE;
|
||||
typedef PRTL_RUN_ONCE PINIT_ONCE;
|
||||
typedef WINBOOL (WINAPI *PINIT_ONCE_FN) (PINIT_ONCE InitOnce, PVOID Parameter, PVOID *Context);
|
||||
|
||||
WINBASEAPI WINBOOL WINAPI InitOnceExecuteOnce (PINIT_ONCE InitOnce, PINIT_ONCE_FN InitFn, PVOID Parameter, LPVOID *Context);
|
||||
|
||||
# endif /* __MINGW32_VERSION >= 5000000L */
|
||||
#endif /* __MINGW32__ */
|
||||
|
||||
/* .lock.win32: Win32 lock structure; uses CRITICAL_SECTION */
|
||||
typedef struct LockStruct {
|
||||
Sig sig; /* design.mps.sig.field */
|
||||
|
|
|
|||
79
mps/code/mingw.gmk
Normal file
79
mps/code/mingw.gmk
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
# -*- makefile -*-
|
||||
#
|
||||
# mingw.gmk: GNUMAKEFILE FRAGMENT FOR MinGW GCC
|
||||
#
|
||||
# $Id$
|
||||
# Copyright (c) 2001-2020 Ravenbrook Limited. See end of file for license.
|
||||
#
|
||||
# This file is included by platform makefiles that use the GNU CC
|
||||
# compiler. It defines the compiler-specific variables that the
|
||||
# common makefile fragment (<code/comm.gmk>) requires.
|
||||
|
||||
CC = gcc
|
||||
CFLAGSDEBUG = -Og -g3
|
||||
CFLAGSOPT = -O2 -g3
|
||||
EXEEXT = .exe
|
||||
|
||||
# Warnings that might be enabled by clients <design/config/#.warning.impl>.
|
||||
CFLAGSCOMPILER := \
|
||||
-Waggregate-return \
|
||||
-Wall \
|
||||
-Wcast-qual \
|
||||
-Werror \
|
||||
-Wextra \
|
||||
-Winline \
|
||||
-Wmissing-prototypes \
|
||||
-Wnested-externs \
|
||||
-Wpointer-arith \
|
||||
-Wshadow \
|
||||
-Wstrict-aliasing=2 \
|
||||
-Wstrict-prototypes \
|
||||
-Wswitch-default \
|
||||
-Wwrite-strings
|
||||
CFLAGSCOMPILERSTRICT := -std=gnu89 -pedantic
|
||||
|
||||
# A different set of compiler flags for less strict compilation, for
|
||||
# instance when we need to #include a third-party header file that
|
||||
# won't fly with -ansi -pedantic. Use sparingly!
|
||||
CFLAGSCOMPILERLAX :=
|
||||
|
||||
# gcc -MM generates a dependency line of the form:
|
||||
# thing.o : thing.c ...
|
||||
# The sed line converts this into:
|
||||
# <pfm>/<variety>/thing.o <pfm>/<variety>/thing.d : thing.c ...
|
||||
# If interrupted, this is liable to leave a zero-length file behind.
|
||||
|
||||
define gendep
|
||||
$(SHELL) -ec "$(CC) $(CFLAGSSTRICT) -MM $< | \
|
||||
sed '/:/s!$*.o!$(@D)/& $(@D)/$*.d!' > $@"
|
||||
[ -s $@ ] || rm -f $@
|
||||
endef
|
||||
|
||||
|
||||
# C. COPYRIGHT AND LICENSE
|
||||
#
|
||||
# Copyright (C) 2001-2020 Ravenbrook Limited <https://www.ravenbrook.com/>.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
|
@ -228,9 +228,9 @@
|
|||
#include "prmclii6.c" /* x86-64 for Linux mutator context */
|
||||
#include "span.c" /* generic stack probe */
|
||||
|
||||
/* Windows on IA-32 with Microsoft Visual Studio or Pelles C */
|
||||
/* Windows on IA-32 with Microsoft Visual Studio or Pelles C or GCC */
|
||||
|
||||
#elif defined(MPS_PF_W3I3MV) || defined(MPS_PF_W3I3PC)
|
||||
#elif defined(MPS_PF_W3I3MV) || defined(MPS_PF_W3I3PC) || defined(MPS_PF_W3I3GC)
|
||||
|
||||
#include "lockw3.c" /* Windows locks */
|
||||
#include "thw3.c" /* Windows threading */
|
||||
|
|
@ -242,9 +242,9 @@
|
|||
#include "spw3i3.c" /* Windows on IA-32 stack probe */
|
||||
#include "mpsiw3.c" /* Windows interface layer extras */
|
||||
|
||||
/* Windows on x86-64 with Microsoft Visual Studio or Pelles C */
|
||||
/* Windows on x86-64 with Microsoft Visual Studio or Pelles C or GCC */
|
||||
|
||||
#elif defined(MPS_PF_W3I6MV) || defined(MPS_PF_W3I6PC)
|
||||
#elif defined(MPS_PF_W3I6MV) || defined(MPS_PF_W3I6PC) || defined(MPS_PF_W3I6GC)
|
||||
|
||||
#include "lockw3.c" /* Windows locks */
|
||||
#include "thw3.c" /* Windows threading */
|
||||
|
|
|
|||
|
|
@ -20,6 +20,11 @@ SRCID(mpsiw3, "$Id$");
|
|||
/* This is defined in protw3.c */
|
||||
extern LONG WINAPI ProtSEHfilter(LPEXCEPTION_POINTERS info);
|
||||
|
||||
/* These seem to be unused, but MinGW GCC complains about lack of
|
||||
previous prototype. */
|
||||
LONG mps_SEH_filter(LPEXCEPTION_POINTERS, void **, size_t *);
|
||||
void mps_SEH_handler(void *, size_t);
|
||||
|
||||
LONG mps_SEH_filter(LPEXCEPTION_POINTERS info,
|
||||
void **hp_o, size_t *hs_o)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -392,6 +392,38 @@
|
|||
#define MPS_PF_ALIGN 8
|
||||
|
||||
|
||||
#elif defined(__MINGW32__) && defined(_X86_) && defined(__GNUC__)
|
||||
#if defined(CONFIG_PF_STRING) && ! defined(CONFIG_PF_W3I3GC)
|
||||
#error "specified CONFIG_PF_... inconsistent with detected w3i3gc"
|
||||
#endif
|
||||
#define MPS_PF_W3I3GC
|
||||
#define MPS_PF_STRING "w3i3gc"
|
||||
#define MPS_OS_W3
|
||||
#define MPS_ARCH_I3
|
||||
#define MPS_BUILD_GC
|
||||
#define MPS_T_WORD unsigned long
|
||||
#define MPS_T_ULONGEST unsigned long
|
||||
#define MPS_WORD_WIDTH 32
|
||||
#define MPS_WORD_SHIFT 5
|
||||
#define MPS_PF_ALIGN 4
|
||||
|
||||
|
||||
#elif defined(__MINGW64__) && defined(__x86_64) && defined(__GNUC__)
|
||||
# if defined(CONFIG_PF_STRING) && ! defined(CONFIG_PF_W3I6GC)
|
||||
# error "specified CONFIG_PF_... inconsistent with detected w3i6gc"
|
||||
# endif
|
||||
#define MPS_PF_W3I6GC
|
||||
#define MPS_PF_STRING "w3i6gc"
|
||||
#define MPS_OS_W3
|
||||
#define MPS_ARCH_I6
|
||||
#define MPS_BUILD_GC
|
||||
#define MPS_T_WORD unsigned __int64
|
||||
#define MPS_T_ULONGEST unsigned __int64
|
||||
#define MPS_WORD_WIDTH 64
|
||||
#define MPS_WORD_SHIFT 6
|
||||
#define MPS_PF_ALIGN 16
|
||||
|
||||
|
||||
#else
|
||||
#error "The MPS Kit does not have a configuration for this platform out of the box; see manual/build.txt"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ void ProtSet(Addr base, Addr limit, AccessSet mode)
|
|||
NOTREACHED;
|
||||
}
|
||||
|
||||
LONG WINAPI ProtSEHfilter(LPEXCEPTION_POINTERS);
|
||||
|
||||
LONG WINAPI ProtSEHfilter(LPEXCEPTION_POINTERS info)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -27,11 +27,20 @@
|
|||
|
||||
void StackProbe(Size depth)
|
||||
{
|
||||
#ifdef __GNUC__
|
||||
__asm__ volatile ("mov %0, %%eax\n\t"
|
||||
"neg %%eax\n\t"
|
||||
"mov (%%esp,%%eax,4), %%eax" /* do the actual probe */
|
||||
: /* no outputs */
|
||||
: "r" (depth)
|
||||
: "eax");
|
||||
#else /* MSVC */
|
||||
__asm {
|
||||
mov eax, depth
|
||||
neg eax
|
||||
mov eax, [esp+eax*4] /* do the actual probe */
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@
|
|||
|
||||
SRCID(ss, "$Id$");
|
||||
|
||||
|
||||
/* StackHot -- capture a hot stack pointer
|
||||
*
|
||||
* On all supported platforms, the arguments are pushed on to the
|
||||
|
|
@ -32,12 +31,23 @@ SRCID(ss, "$Id$");
|
|||
* is a hot stack pointer. <design/ss#.sol.stack.hot>.
|
||||
*/
|
||||
|
||||
#ifdef __MINGW32__
|
||||
#pragma GCC diagnostic push
|
||||
|
||||
#if defined(MPS_BUILD_GC) && (__GNUC__ >= 12)
|
||||
#pragma GCC diagnostic ignored "-Wdangling-pointer"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
ATTRIBUTE_NOINLINE
|
||||
void StackHot(void **stackOut)
|
||||
{
|
||||
*stackOut = &stackOut;
|
||||
}
|
||||
|
||||
#ifdef __MINGW32__
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
/* StackScan -- scan the mutator's stack and registers */
|
||||
|
||||
|
|
|
|||
|
|
@ -221,7 +221,14 @@ double rnd_double(void)
|
|||
|
||||
static unsigned sizelog2(size_t size)
|
||||
{
|
||||
#ifdef __MINGW32__
|
||||
/* For some reason, MinGW sometimes produces a value slightly
|
||||
smaller than the expected one, so we round up to the next FP
|
||||
value. */
|
||||
return (unsigned)(log((double)size) / log(2.0) * (1.0 + __DBL_EPSILON__));
|
||||
#else
|
||||
return (unsigned)(log((double)size) / log(2.0));
|
||||
#endif
|
||||
}
|
||||
|
||||
size_t rnd_grain(size_t arena_size)
|
||||
|
|
@ -232,17 +239,17 @@ size_t rnd_grain(size_t arena_size)
|
|||
return rnd_align(sizeof(void *), (size_t)1 << sizelog2(arena_size >> MPS_WORD_SHIFT));
|
||||
}
|
||||
|
||||
size_t rnd_align(size_t min, size_t max)
|
||||
size_t rnd_align(size_t minv, size_t maxv)
|
||||
{
|
||||
unsigned log2min = sizelog2(min);
|
||||
unsigned log2max = sizelog2(max);
|
||||
Insist(min <= max);
|
||||
Insist((size_t)1 << log2min == min);
|
||||
Insist((size_t)1 << log2max == max);
|
||||
unsigned log2min = sizelog2(minv);
|
||||
unsigned log2max = sizelog2(maxv);
|
||||
Insist(minv <= maxv);
|
||||
Insist((size_t)1 << log2min == minv);
|
||||
Insist((size_t)1 << log2max == maxv);
|
||||
if (log2min < log2max)
|
||||
return min << (rnd() % (log2max - log2min + 1));
|
||||
return minv << (rnd() % (log2max - log2min + 1));
|
||||
else
|
||||
return min;
|
||||
return minv;
|
||||
}
|
||||
|
||||
double rnd_pause_time(void)
|
||||
|
|
|
|||
|
|
@ -67,11 +67,11 @@
|
|||
|
||||
/* alloca -- memory allocator
|
||||
*
|
||||
* Windows calls this function _alloca() instead of alloca().
|
||||
* Windows (but not MinGW) calls this function _alloca() instead of alloca().
|
||||
* <https://docs.microsoft.com/en-gb/cpp/c-runtime-library/reference/alloca>
|
||||
*/
|
||||
|
||||
#if defined(MPS_OS_W3)
|
||||
#if defined(MPS_OS_W3) && !defined(__GNUC__)
|
||||
|
||||
#define alloca _alloca
|
||||
|
||||
|
|
@ -82,11 +82,12 @@
|
|||
*
|
||||
* Windows lacks setenv(), but _putenv_s() has similar functionality.
|
||||
* <https://docs.microsoft.com/en-gb/cpp/c-runtime-library/reference/putenv-s-wputenv-s>
|
||||
* mingw.org's MinGW does have setenv, but MinGW64 doesn't.
|
||||
*
|
||||
* This macro version may evaluate the name argument twice.
|
||||
*/
|
||||
|
||||
#if defined(MPS_OS_W3)
|
||||
#if defined(MPS_OS_W3) && !defined(MPS_PF_W3I3GC)
|
||||
|
||||
#define setenv(name, value, overwrite) \
|
||||
(((overwrite) || !getenv(name)) ? _putenv_s(name, value) : 0)
|
||||
|
|
@ -118,8 +119,13 @@
|
|||
#define SCNuLONGEST "llu"
|
||||
#define SCNXLONGEST "llX"
|
||||
#define PRIXLONGEST "llX"
|
||||
#ifdef __GNUC__
|
||||
typedef unsigned __int64 ulongest_t;
|
||||
typedef __int64 longest_t;
|
||||
#else
|
||||
typedef unsigned long long ulongest_t;
|
||||
typedef long long longest_t;
|
||||
#endif
|
||||
#define MPS_WORD_CONST(n) (n##ull)
|
||||
#else
|
||||
#define PRIuLONGEST "lu"
|
||||
|
|
|
|||
|
|
@ -259,7 +259,7 @@ Res ThreadDescribe(Thread thread, mps_lib_FILE *stream, Count depth)
|
|||
}
|
||||
|
||||
|
||||
Res ThreadScan(ScanState ss, Thread thread, Word *stackCold,
|
||||
Res ThreadScan(ScanState ss, Thread thread, void *stackCold,
|
||||
mps_area_scan_t scan_area, void *closure)
|
||||
{
|
||||
DWORD id;
|
||||
|
|
@ -285,7 +285,7 @@ Res ThreadScan(ScanState ss, Thread thread, Word *stackCold,
|
|||
stackPtr = MutatorContextSP(&context);
|
||||
/* .stack.align */
|
||||
stackBase = (Word *)AddrAlignUp(stackPtr, sizeof(Word));
|
||||
stackLimit = stackCold;
|
||||
stackLimit = (Word *)stackCold;
|
||||
if (stackBase >= stackLimit)
|
||||
return ResOK; /* .stack.below-bottom */
|
||||
|
||||
|
|
|
|||
50
mps/code/w3i3gc.gmk
Normal file
50
mps/code/w3i3gc.gmk
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
# -*- makefile -*-
|
||||
#
|
||||
# w3i3gc.gmk: BUILD FOR Windows/x86/MinGW PLATFORM
|
||||
#
|
||||
# $Id$
|
||||
# Copyright (c) 2001-2020 Ravenbrook Limited. See end of file for license.
|
||||
|
||||
PFM = w3i3gc
|
||||
|
||||
MPMPF = \
|
||||
lockw3.c \
|
||||
mpsiw3.c \
|
||||
prmci3.c \
|
||||
prmcw3.c \
|
||||
prmcw3i3.c \
|
||||
protw3.c \
|
||||
spw3i3.c \
|
||||
thw3.c \
|
||||
vmw3.c
|
||||
|
||||
include mingw.gmk
|
||||
include comm.gmk
|
||||
|
||||
# C. COPYRIGHT AND LICENSE
|
||||
#
|
||||
# Copyright (C) 2001-2020 Ravenbrook Limited <https://www.ravenbrook.com/>.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
55
mps/code/w3i6gc.gmk
Normal file
55
mps/code/w3i6gc.gmk
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
# -*- makefile -*-
|
||||
#
|
||||
# w3i6gc.gmk: BUILD FOR Windows/x86_64/MinGW PLATFORM
|
||||
#
|
||||
# $Id$
|
||||
# Copyright (c) 2001-2020 Ravenbrook Limited. See end of file for license.
|
||||
|
||||
PFM = w3i6gc
|
||||
|
||||
MPMPF = \
|
||||
lockw3.c \
|
||||
mpsiw3.c \
|
||||
prmci6.c \
|
||||
prmcw3.c \
|
||||
prmcw3i6.c \
|
||||
protw3.c \
|
||||
spw3i6.c \
|
||||
thw3.c \
|
||||
vmw3.c
|
||||
|
||||
# Must be before including comm.gmk, since it uses CFLAGS
|
||||
CFLAGS = -Wno-pointer-to-int-cast -Wno-int-to-pointer-cast
|
||||
|
||||
include mingw.gmk
|
||||
include comm.gmk
|
||||
|
||||
CFLAGSCOMPILERSTRICT := -std=gnu99 -pedantic
|
||||
|
||||
# C. COPYRIGHT AND LICENSE
|
||||
#
|
||||
# Copyright (C) 2001-2020 Ravenbrook Limited <https://www.ravenbrook.com/>.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the
|
||||
# distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
Loading…
Add table
Add a link
Reference in a new issue