Browse Source

* Added nothreads unit for fake thread support. Currently only WASI

Michaël Van Canneyt 1 year ago
parent
commit
10d740298d

+ 7 - 0
rtl/aix/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2694,6 +2696,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/amiga/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2721,6 +2723,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/android/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2843,6 +2845,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/aros/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2736,6 +2738,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/atari/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2691,6 +2693,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/beos/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2700,6 +2702,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/darwin/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2814,6 +2816,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/dragonfly/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2708,6 +2710,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/embedded/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -3073,6 +3075,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/emx/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2700,6 +2702,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/freebsd/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2750,6 +2752,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/freertos/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2768,6 +2770,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/gba/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2689,6 +2691,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/go32v2/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2702,6 +2704,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/haiku/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2732,6 +2734,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/human68k/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2691,6 +2693,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 14 - 0
rtl/inc/Makefile.rtl

@@ -259,6 +259,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 #
 #
 #
 #
 #
 #
@@ -513,6 +514,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 #
 #
 #
 #
 #
 #
@@ -1492,6 +1494,18 @@ UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 
 
 #
 #
+# Nothreads
+#
+
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+
+
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+        $(COMPILER) $(NOTHREADS_OPT) $<
+
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+        $(COMPILER) $(NOTHREADS_OPT) $<
+#
 # CWString
 # CWString
 #
 #
 
 

+ 306 - 0
rtl/inc/nothreads.pp

@@ -0,0 +1,306 @@
+{$IFNDEF FPC_DOTTEDUNITS}
+unit nothreads;
+{$ENDIF}
+
+{$mode objfpc}
+
+interface
+
+Procedure SetFakeThreadManager;
+
+implementation
+
+Const
+  wrSignaled = 0;
+  wrTimeout  = 1;
+  wrAbandoned= 2;
+  wrError    = 3;
+
+
+var
+  threadvarblocksize : dword = 0;
+  threadvarblock : array[1..64*10240] of byte;
+  threadcount : Integer;
+
+procedure FakeInitThreadvar(var offset : dword;size : dword);
+  begin
+    offset:=threadvarblocksize;
+    inc(threadvarblocksize,size);
+  end;
+
+
+
+procedure FakeAllocateThreadVars;
+begin
+end;
+
+
+procedure FakethreadCleanup(p: pointer); cdecl;
+
+begin
+end;
+
+procedure HookThread;
+begin
+  { Allocate local thread vars, this must be the first thing,
+    because the exception management and io depends on threadvars }
+  FakeAllocateThreadVars;
+  InitThread(1000000000);
+end;
+
+
+function FakeRelocateThreadvar(offset : dword) : pointer;
+begin
+  FakeRelocateThreadvar:=@ThreadVarBlock;
+end;
+
+
+procedure FakeReleaseThreadVars;
+begin
+end;
+
+
+
+Procedure InitCTLS;
+
+begin
+end;
+
+function FakeBeginThread(sa : Pointer;stacksize : PtrUInt;
+                     ThreadFunction : tthreadfunc;p : pointer;
+                     creationFlags : dword; var ThreadId : TThreadId) : TThreadID;
+begin
+  Inc(ThreadCount);
+  Result:=TThreadID(ThreadCount);
+  ThreadFunction(P);
+end;
+
+
+procedure FakeEndThread(ExitCode : DWord);
+
+begin
+end;
+
+function  FakeSuspendThread (threadHandle : TThreadID) : dword;
+begin
+  result:=dword(-1);
+end;
+
+
+function  FakeResumeThread  (threadHandle : TThreadID) : dword;
+begin
+  result:=dword(-1);
+end;
+
+
+procedure FakeThreadSwitch;  {give time to other threads}
+begin
+end;
+
+
+function  FakeKillThread (threadHandle : TThreadID) : dword;
+begin
+  Result:= dword(-1);
+end;
+
+function FakeCloseThread (threadHandle : TThreadID) : dword;
+begin
+  result:=0;
+end;
+
+function  FakeWaitForThreadTerminate (threadHandle : TThreadID; TimeoutMs : longint) : dword;  {0=no timeout}
+begin
+  Result:=0
+end;
+
+function  FakeThreadSetPriority (threadHandle : TThreadID; Prio: longint): boolean; {-15..+15, 0=normal}
+begin
+  result:=false;
+end;
+
+
+function  FakeThreadGetPriority (threadHandle : TThreadID): Integer;
+begin
+  result:=0;
+end;
+
+
+function  FakeGetCurrentThreadId : TThreadID;
+begin
+  Result:=TThreadID(0);
+end;
+
+
+procedure FakeSetThreadDebugNameA(threadHandle: TThreadID; const ThreadName: AnsiString);
+
+begin
+end;
+
+
+procedure FakeSetThreadDebugNameU(threadHandle: TThreadID; const ThreadName: UnicodeString);
+
+begin
+end;
+
+
+{*****************************************************************************
+                          Delphi/Win32 compatibility
+*****************************************************************************}
+
+procedure FakeInitCriticalSection(var CS);
+
+begin
+  PLongint(@cs)^:=0;
+end;
+ 
+procedure FakeEnterCriticalSection(var CS);
+begin
+end;
+
+function FakeTryEnterCriticalSection(var CS):longint;
+begin
+  Result:=0;
+end;
+
+procedure FakeLeaveCriticalSection(var CS);
+begin
+end;
+
+procedure FakeDoneCriticalSection(var CS);
+begin
+end;
+
+
+{*****************************************************************************
+                           Semaphore routines
+*****************************************************************************}
+
+var
+  Dummy : Integer;
+
+function FakeBasicEventCreate(EventAttributes : Pointer; AManualReset,InitialState : Boolean;const Name : ansistring):pEventState;
+begin
+  Result:=pEventState(@Dummy);
+end;
+
+procedure FakeBasiceventdestroy(state:peventstate);
+
+begin
+end;
+
+procedure FakeBasiceventResetEvent(state:peventstate);
+begin
+end;
+
+procedure FakeBasiceventSetEvent(state:peventstate);
+begin
+end;
+
+function FakeBasiceventWaitFor(Timeout : Cardinal;state:peventstate;FUseComWait : Boolean=False) : longint;
+begin
+  Result:=wrSignaled;
+end;
+
+function FakeRTLEventCreate: PRTLEvent;
+
+begin
+  result:=PRTLEVENT(@Dummy);
+end;
+
+procedure FakeRTLEventDestroy(AEvent: PRTLEvent);
+
+
+begin
+end;
+
+procedure FakeRTLEventSetEvent(AEvent: PRTLEvent);
+
+begin
+
+end;
+
+procedure FakeRTLEventResetEvent(AEvent: PRTLEvent);
+
+begin
+end;
+
+
+procedure FakeRTLEventWaitFor(AEvent: PRTLEvent);
+
+begin
+end;
+
+procedure FakeRTLEventWaitForTimeout(AEvent: PRTLEvent;timeout : longint);
+
+begin
+end;
+
+
+Function FakeInitThreads : Boolean;
+
+begin
+  Result:=True;
+end;
+
+Function FakeDoneThreads : Boolean;
+
+begin
+  Result:=True;
+end;
+
+
+Var
+  FakeThreadManager : TThreadManager;
+
+Procedure SetFakeThreadManager;
+
+begin
+  With FakeThreadManager do begin
+    InitManager            :=@FakeInitThreads;
+    DoneManager            :=@FakeDoneThreads;
+    BeginThread            :=@FakeBeginThread;
+    EndThread              :=@FakeEndThread;
+    SuspendThread          :=@FakeSuspendThread;
+    ResumeThread           :=@FakeResumeThread;
+    KillThread             :=@FakeKillThread;
+    ThreadSwitch           :=@FakeThreadSwitch;
+    CloseThread	           :=@FakeCloseThread;
+    WaitForThreadTerminate :=@FakeWaitForThreadTerminate;
+    ThreadSetPriority      :=@FakeThreadSetPriority;
+    ThreadGetPriority      :=@FakeThreadGetPriority;
+    GetCurrentThreadId     :=@FakeGetCurrentThreadId;
+    SetThreadDebugNameA    :=@FakeSetThreadDebugNameA;
+    SetThreadDebugNameU    :=@FakeSetThreadDebugNameU;
+    InitCriticalSection    :=@FakeInitCriticalSection;
+    DoneCriticalSection    :=@FakeDoneCriticalSection;
+    EnterCriticalSection   :=@FakeEnterCriticalSection;
+    TryEnterCriticalSection:=@FakeTryEnterCriticalSection;
+    LeaveCriticalSection   :=@FakeLeaveCriticalSection;
+    InitThreadVar          :=@FakeInitThreadVar;
+    RelocateThreadVar      :=@FakeRelocateThreadVar;
+    AllocateThreadVars     :=@FakeAllocateThreadVars;
+    ReleaseThreadVars      :=@FakeReleaseThreadVars;
+    BasicEventCreate       :=@FakeBasicEventCreate;
+    BasicEventDestroy      :=@FakeBasicEventDestroy;
+    BasicEventResetEvent   :=@FakeBasicEventResetEvent;
+    BasicEventSetEvent     :=@FakeBasicEventSetEvent;
+    BasiceventWaitFor      :=@FakeBasiceventWaitFor;
+    rtlEventCreate         :=@FakertlEventCreate;
+    rtlEventDestroy        :=@FakertlEventDestroy;
+    rtlEventSetEvent       :=@FakertlEventSetEvent;
+    rtlEventResetEvent     :=@FakertlEventResetEvent;
+    rtleventWaitForTimeout :=@FakertleventWaitForTimeout;
+    rtleventWaitFor        :=@FakertleventWaitFor;
+  end;
+  SetThreadManager(FakeThreadManager);
+end;
+
+
+initialization
+  Writeln('Initializing unit fakethreads');
+  SetFakeThreadManager;
+  Writeln('Done Initializing unit fakethreads');
+  
+finalization
+
+end.

+ 7 - 0
rtl/java/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2662,6 +2664,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/linux/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -3309,6 +3311,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/macos/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2680,6 +2682,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/morphos/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2663,6 +2665,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/msdos/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2694,6 +2696,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/msxdos/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2664,6 +2666,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 3 - 0
rtl/namespaced/common/System.NoThreads.pp

@@ -0,0 +1,3 @@
+unit System.NoThreads;
+{$DEFINE FPC_DOTTEDUNITS}
+{$i nothreads.pp}

+ 7 - 0
rtl/nativent/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2670,6 +2672,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/nds/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2692,6 +2694,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/netbsd/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2802,6 +2804,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/netware/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2707,6 +2709,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/netwlibc/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2695,6 +2697,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/openbsd/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2735,6 +2737,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/os2/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2699,6 +2701,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/palmos/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2702,6 +2704,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/sinclairql/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2691,6 +2693,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/solaris/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2707,6 +2709,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/symbian/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2685,6 +2687,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 8 - 1
rtl/wasi/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -903,7 +905,7 @@ endif
 override FPC_SYSTEM_OPT += -Fiwasiinc
 override FPC_SYSTEM_OPT += -Fiwasiinc
 DOS_DEPS_OS=$(WASIAPIUNIT)$(PPUEXT) $(WASIUTILUNIT)$(PPUEXT)
 DOS_DEPS_OS=$(WASIAPIUNIT)$(PPUEXT) $(WASIUTILUNIT)$(PPUEXT)
 ifeq ($(CPU_OS_TARGET),wasm32-wasi)
 ifeq ($(CPU_OS_TARGET),wasm32-wasi)
-override TARGET_UNITS+=$(SYSTEMUNIT) $(SYSINIT_UNITS) $(OBJPASUNIT) $(EXTPASUNIT) $(MACPASUNIT) $(ISO7185UNIT) $(UUCHARUNIT) $(WASIAPIUNIT) $(CTYPESUNIT) $(STRINGSUNIT) $(SYSCONSTUNIT)  $(SYSUTILSUNIT) $(SORTBASEUNIT) $(MATHUNIT) $(RTLCONSTSUNIT) $(TYPESUNIT)  $(TYPINFOUNIT)  $(FGLUNIT) $(GETOPTSUNIT) $(CHARSETUNIT)  $(CPALLUNIT) $(CHARACTERUNIT) $(FPWIDESTRINGUNIT)  $(CLASSESUNIT) $(DOSUNIT) $(RESUNIT) $(HEAPTRCUNIT) $(WASIUTILUNIT)  $(WEBASSEMBLYUNIT)
+override TARGET_UNITS+=$(SYSTEMUNIT) $(SYSINIT_UNITS) $(OBJPASUNIT) $(EXTPASUNIT) $(MACPASUNIT) $(ISO7185UNIT) $(UUCHARUNIT) $(WASIAPIUNIT) $(CTYPESUNIT) $(STRINGSUNIT) $(SYSCONSTUNIT)  $(SYSUTILSUNIT) $(SORTBASEUNIT) $(MATHUNIT) $(RTLCONSTSUNIT) $(TYPESUNIT)  $(TYPINFOUNIT)  $(FGLUNIT) $(GETOPTSUNIT) $(CHARSETUNIT)  $(CPALLUNIT) $(CHARACTERUNIT) $(FPWIDESTRINGUNIT) $(NOTHREADSUNIT) $(CLASSESUNIT) $(DOSUNIT) $(RESUNIT) $(HEAPTRCUNIT) $(WASIUTILUNIT)  $(WEBASSEMBLYUNIT)
 endif
 endif
 ifeq ($(CPU_OS_TARGET),wasm32-wasi)
 ifeq ($(CPU_OS_TARGET),wasm32-wasi)
 override TARGET_IMPLICITUNITS+=$(CP_UNITS) $(UNICODEDATAUNIT)
 override TARGET_IMPLICITUNITS+=$(CP_UNITS) $(UNICODEDATAUNIT)
@@ -2668,6 +2670,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 1 - 1
rtl/wasi/Makefile.fpc

@@ -8,7 +8,7 @@ loaders=
 units=$(SYSTEMUNIT) $(SYSINIT_UNITS) $(OBJPASUNIT) $(EXTPASUNIT) $(MACPASUNIT) $(ISO7185UNIT) $(UUCHARUNIT) \
 units=$(SYSTEMUNIT) $(SYSINIT_UNITS) $(OBJPASUNIT) $(EXTPASUNIT) $(MACPASUNIT) $(ISO7185UNIT) $(UUCHARUNIT) \
       $(WASIAPIUNIT) $(CTYPESUNIT) $(STRINGSUNIT) $(SYSCONSTUNIT)  $(SYSUTILSUNIT) \
       $(WASIAPIUNIT) $(CTYPESUNIT) $(STRINGSUNIT) $(SYSCONSTUNIT)  $(SYSUTILSUNIT) \
       $(SORTBASEUNIT) $(MATHUNIT) $(RTLCONSTSUNIT) $(TYPESUNIT)  $(TYPINFOUNIT)  $(FGLUNIT) $(GETOPTSUNIT) \
       $(SORTBASEUNIT) $(MATHUNIT) $(RTLCONSTSUNIT) $(TYPESUNIT)  $(TYPINFOUNIT)  $(FGLUNIT) $(GETOPTSUNIT) \
-      $(CHARSETUNIT)  $(CPALLUNIT) $(CHARACTERUNIT) $(FPWIDESTRINGUNIT)  \
+      $(CHARSETUNIT)  $(CPALLUNIT) $(CHARACTERUNIT) $(FPWIDESTRINGUNIT) $(NOTHREADSUNIT) \
       $(CLASSESUNIT) $(DOSUNIT) $(RESUNIT) $(HEAPTRCUNIT) $(WASIUTILUNIT)  $(WEBASSEMBLYUNIT)
       $(CLASSESUNIT) $(DOSUNIT) $(RESUNIT) $(HEAPTRCUNIT) $(WASIUTILUNIT)  $(WEBASSEMBLYUNIT)
 
 
 implicitunits= $(CP_UNITS) $(UNICODEDATAUNIT)
 implicitunits= $(CP_UNITS) $(UNICODEDATAUNIT)

+ 7 - 0
rtl/watcom/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2698,6 +2700,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/wii/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2661,6 +2663,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/win16/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2697,6 +2699,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/win32/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2708,6 +2710,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/win64/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2729,6 +2731,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/wince/Makefile

@@ -617,6 +617,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -865,6 +866,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2687,6 +2689,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc

+ 7 - 0
rtl/zxspectrum/Makefile

@@ -618,6 +618,7 @@ WINSYSUTUNIT=WinApi.WinSysUt
 WINTYPESUNIT=WinApi.WinTypes
 WINTYPESUNIT=WinApi.WinTypes
 X86UNIT=System.X86
 X86UNIT=System.X86
 XMC4500UNIT=EmbeddedApi.xmc4500
 XMC4500UNIT=EmbeddedApi.xmc4500
+NOTHREADSUNIT=System.NoThreads
 else
 else
 AIOUNIT=aio
 AIOUNIT=aio
 ALLWINNER_A20UNIT=allwinner_a20
 ALLWINNER_A20UNIT=allwinner_a20
@@ -866,6 +867,7 @@ WINSYSUTUNIT=winsysut
 WINTYPESUNIT=wintypes
 WINTYPESUNIT=wintypes
 X86UNIT=x86
 X86UNIT=x86
 XMC4500UNIT=xmc4500
 XMC4500UNIT=xmc4500
+NOTHREADSUNIT=nothreads
 endif
 endif
 ifdef FPC_DOTTEDUNITS
 ifdef FPC_DOTTEDUNITS
 NS_SYSTEM=System.
 NS_SYSTEM=System.
@@ -2660,6 +2662,11 @@ cthreads$(PPUEXT) : $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 UnixApi.CThreads$(PPUEXT) : $(NSINC)/UnixApi.CThreads.pp $(CTHREADS_DEPS)
 	$(COMPILER) $(CTHREADS_OPT) $<
 	$(COMPILER) $(CTHREADS_OPT) $<
+NOTHREADS_DEPS=$(SYSTEMUNIT)$(PPUEXT)
+nothreads$(PPUEXT) : $(INC)/nothreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
+System.NoThreads$(PPUEXT) :  $(NSINC)/System.NoThreads.pp $(NOTHREADS_DEPS)
+	$(COMPILER) $(NOTHREADS_OPT) $<
 ifndef CWSTRINGDIR
 ifndef CWSTRINGDIR
   CWSTRINGDIR=$(UNIXINC)
   CWSTRINGDIR=$(UNIXINC)
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc
   CWSSTRING_INC=$(RTLDEFSINCDIR)/rtldefs.inc