瀏覽代碼

+ OpenCL package by Dmitry Boyarintsev, fixed and tested on win32 and win64, enabled for i386-darwin because submitter tested on Mac OS X, resolves #15297

git-svn-id: trunk@14534 -
florian 15 年之前
父節點
當前提交
7e7f154f88

+ 6 - 0
.gitattributes

@@ -4491,6 +4491,12 @@ packages/openal/src/alch.inc svneol=native#text/plain
 packages/openal/src/alexth.inc svneol=native#text/plain
 packages/openal/src/alexth.inc svneol=native#text/plain
 packages/openal/src/alh.inc svneol=native#text/plain
 packages/openal/src/alh.inc svneol=native#text/plain
 packages/openal/src/openal.pas svneol=native#text/plain
 packages/openal/src/openal.pas svneol=native#text/plain
+packages/opencl/Makefile svneol=native#text/plain
+packages/opencl/Makefile.fpc svneol=native#text/plain
+packages/opencl/examples/basicsample.pas svneol=native#text/pascal
+packages/opencl/fpmake.pp svneol=native#text/pascal
+packages/opencl/src/cl.pp svneol=native#text/pascal
+packages/opencl/src/cl_gl.pp svneol=native#text/pascal
 packages/opengl/Makefile svneol=native#text/plain
 packages/opengl/Makefile svneol=native#text/plain
 packages/opengl/Makefile.fpc svneol=native#text/plain
 packages/opengl/Makefile.fpc svneol=native#text/plain
 packages/opengl/examples/Makefile svneol=native#text/plain
 packages/opengl/examples/Makefile svneol=native#text/plain

+ 52 - 4
packages/Makefile

@@ -1,5 +1,5 @@
 #
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2009/12/10]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/01/03]
 #
 #
 default: all
 default: all
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
@@ -271,7 +271,7 @@ ifeq ($(FULL_TARGET),i386-go32v2)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2  fv graph unzip gdbint
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2  fv graph unzip gdbint
 endif
 endif
 ifeq ($(FULL_TARGET),i386-win32)
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2  fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick gdbint libpng mad tcl opengl gtk1 gtk2 librsvg a52 cdrom fpgtk openal fftw lua fcl-extra zorba oggvorbis sdl openssl graph pcap httpd13 httpd20 httpd22 pxlib numlib winceunits cairo libxml gmp
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2  fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick gdbint libpng mad tcl opengl gtk1 gtk2 librsvg a52 cdrom fpgtk openal fftw lua fcl-extra zorba oggvorbis sdl openssl graph pcap httpd13 httpd20 httpd22 pxlib numlib winceunits cairo libxml gmp opencl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2  fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2  fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
@@ -304,7 +304,7 @@ ifeq ($(FULL_TARGET),i386-wdosx)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
 endif
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra univint graph sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms  gnome1 httpd13 httpd20 httpd22 imlib opengles objcrtl cocoaint
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra univint graph sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms  gnome1 httpd13 httpd20 httpd22 imlib opengles objcrtl cocoaint opencl
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2  fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2  fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
@@ -394,7 +394,7 @@ ifeq ($(FULL_TARGET),x86_64-darwin)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra univint opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib cocoaint
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2  fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra univint opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib cocoaint
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2  fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick tcl opengl gtk1 fpgtk fftw sdl openssl cdrom httpd13 httpd20 httpd22 numlib fcl-extra
+override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2  fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick tcl opengl gtk1 fpgtk fftw sdl openssl cdrom httpd13 httpd20 httpd22 numlib fcl-extra opencl
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
 override TARGET_DIRS+=hash pasjpeg paszlib fpmkunit fcl-xml fcl-base fcl-db fcl-image fcl-net fcl-passrc fcl-registry fcl-fpcunit fcl-json  fcl-process unzip regexpr chm fcl-res libgd symbolic bzip2
@@ -1727,6 +1727,7 @@ TARGET_DIRS_WINCEUNITS=1
 TARGET_DIRS_CAIRO=1
 TARGET_DIRS_CAIRO=1
 TARGET_DIRS_LIBXML=1
 TARGET_DIRS_LIBXML=1
 TARGET_DIRS_GMP=1
 TARGET_DIRS_GMP=1
+TARGET_DIRS_OPENCL=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 ifeq ($(FULL_TARGET),i386-os2)
 TARGET_DIRS_HASH=1
 TARGET_DIRS_HASH=1
@@ -2310,6 +2311,7 @@ TARGET_DIRS_IMLIB=1
 TARGET_DIRS_OPENGLES=1
 TARGET_DIRS_OPENGLES=1
 TARGET_DIRS_OBJCRTL=1
 TARGET_DIRS_OBJCRTL=1
 TARGET_DIRS_COCOAINT=1
 TARGET_DIRS_COCOAINT=1
+TARGET_DIRS_OPENCL=1
 endif
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 ifeq ($(FULL_TARGET),i386-emx)
 TARGET_DIRS_HASH=1
 TARGET_DIRS_HASH=1
@@ -3767,6 +3769,7 @@ TARGET_DIRS_HTTPD20=1
 TARGET_DIRS_HTTPD22=1
 TARGET_DIRS_HTTPD22=1
 TARGET_DIRS_NUMLIB=1
 TARGET_DIRS_NUMLIB=1
 TARGET_DIRS_FCL-EXTRA=1
 TARGET_DIRS_FCL-EXTRA=1
+TARGET_DIRS_OPENCL=1
 endif
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 ifeq ($(FULL_TARGET),x86_64-embedded)
 TARGET_DIRS_HASH=1
 TARGET_DIRS_HASH=1
@@ -8542,6 +8545,51 @@ winceunits:
 	$(MAKE) -C winceunits all
 	$(MAKE) -C winceunits all
 .PHONY: winceunits_all winceunits_debug winceunits_smart winceunits_release winceunits_units winceunits_examples winceunits_shared winceunits_install winceunits_sourceinstall winceunits_exampleinstall winceunits_distinstall winceunits_zipinstall winceunits_zipsourceinstall winceunits_zipexampleinstall winceunits_zipdistinstall winceunits_clean winceunits_distclean winceunits_cleanall winceunits_info winceunits_makefiles winceunits
 .PHONY: winceunits_all winceunits_debug winceunits_smart winceunits_release winceunits_units winceunits_examples winceunits_shared winceunits_install winceunits_sourceinstall winceunits_exampleinstall winceunits_distinstall winceunits_zipinstall winceunits_zipsourceinstall winceunits_zipexampleinstall winceunits_zipdistinstall winceunits_clean winceunits_distclean winceunits_cleanall winceunits_info winceunits_makefiles winceunits
 endif
 endif
+ifdef TARGET_DIRS_OPENCL
+opencl_all:
+	$(MAKE) -C opencl all
+opencl_debug:
+	$(MAKE) -C opencl debug
+opencl_smart:
+	$(MAKE) -C opencl smart
+opencl_release:
+	$(MAKE) -C opencl release
+opencl_units:
+	$(MAKE) -C opencl units
+opencl_examples:
+	$(MAKE) -C opencl examples
+opencl_shared:
+	$(MAKE) -C opencl shared
+opencl_install:
+	$(MAKE) -C opencl install
+opencl_sourceinstall:
+	$(MAKE) -C opencl sourceinstall
+opencl_exampleinstall:
+	$(MAKE) -C opencl exampleinstall
+opencl_distinstall:
+	$(MAKE) -C opencl distinstall
+opencl_zipinstall:
+	$(MAKE) -C opencl zipinstall
+opencl_zipsourceinstall:
+	$(MAKE) -C opencl zipsourceinstall
+opencl_zipexampleinstall:
+	$(MAKE) -C opencl zipexampleinstall
+opencl_zipdistinstall:
+	$(MAKE) -C opencl zipdistinstall
+opencl_clean:
+	$(MAKE) -C opencl clean
+opencl_distclean:
+	$(MAKE) -C opencl distclean
+opencl_cleanall:
+	$(MAKE) -C opencl cleanall
+opencl_info:
+	$(MAKE) -C opencl info
+opencl_makefiles:
+	$(MAKE) -C opencl makefiles
+opencl:
+	$(MAKE) -C opencl all
+.PHONY: opencl_all opencl_debug opencl_smart opencl_release opencl_units opencl_examples opencl_shared opencl_install opencl_sourceinstall opencl_exampleinstall opencl_distinstall opencl_zipinstall opencl_zipsourceinstall opencl_zipexampleinstall opencl_zipdistinstall opencl_clean opencl_distclean opencl_cleanall opencl_info opencl_makefiles opencl
+endif
 ifdef TARGET_DIRS_REXX
 ifdef TARGET_DIRS_REXX
 rexx_all:
 rexx_all:
 	$(MAKE) -C rexx all
 	$(MAKE) -C rexx all

+ 3 - 3
packages/Makefile.fpc

@@ -27,7 +27,7 @@ dirs_freebsd=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc p
                users iconvenc gmp fcl-extra libxml
                users iconvenc gmp fcl-extra libxml
 dirs_darwin=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
 dirs_darwin=fv fcl-web fastcgi fcl-async ibase mysql ncurses zlib oracle odbc postgres sqlite pthreads imagemagick \
                libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra univint
                libpng gdbm tcl syslog libcurl bfd aspell utmp fftw pcap openssl numlib iconvenc gmp fcl-extra univint
-dirs_i386_darwin=graph sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms  gnome1 httpd13 httpd20 httpd22 imlib opengles objcrtl cocoaint
+dirs_i386_darwin=graph sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms  gnome1 httpd13 httpd20 httpd22 imlib opengles objcrtl cocoaint opencl
 dirs_powerpc_darwin=graph sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib objcrtl cocoaint
 dirs_powerpc_darwin=graph sdl opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib objcrtl cocoaint
 dirs_x86_64_darwin=opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib cocoaint
 dirs_x86_64_darwin=opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib cocoaint
 dirs_powerpc64_darwin=opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib cocoaint
 dirs_powerpc64_darwin=opengl x11 cairo gtk1 gtk2 librsvg fpgtk xforms gnome1 httpd13 httpd20 httpd22 imlib cocoaint
@@ -47,9 +47,9 @@ dirs_linux=fv fcl-web fastcgi fcl-async ibase mysql ncurses unzip zlib oracle db
                imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp
                imlib utmp  fpgtk openal lua oggvorbis xforms fftw pcap ggi sdl openssl gnome1 httpd13 httpd20 httpd22 pxlib numlib gmp
 dirs_win32=fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick \
 dirs_win32=fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick \
                gdbint libpng mad tcl opengl gtk1 gtk2 librsvg a52 cdrom fpgtk openal fftw lua fcl-extra zorba \
                gdbint libpng mad tcl opengl gtk1 gtk2 librsvg a52 cdrom fpgtk openal fftw lua fcl-extra zorba \
-               oggvorbis sdl openssl graph pcap httpd13 httpd20 httpd22 pxlib numlib winceunits cairo libxml gmp
+               oggvorbis sdl openssl graph pcap httpd13 httpd20 httpd22 pxlib numlib winceunits cairo libxml gmp opencl
 dirs_win64=fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick \
 dirs_win64=fv winunits-base winunits-jedi fcl-web fastcgi ibase mysql zlib oracle odbc postgres sqlite imagemagick \
-                tcl opengl gtk1 fpgtk fftw sdl openssl cdrom httpd13 httpd20 httpd22 numlib fcl-extra
+                tcl opengl gtk1 fpgtk fftw sdl openssl cdrom httpd13 httpd20 httpd22 numlib fcl-extra opencl
 dirs_wince=winceunits httpd22 fcl-web fastcgi tcl fftw unzip zlib sqlite mysql ibase postgres oracle odbc sdl openssl oggvorbis numlib
 dirs_wince=winceunits httpd22 fcl-web fastcgi tcl fftw unzip zlib sqlite mysql ibase postgres oracle odbc sdl openssl oggvorbis numlib
 dirs_os2=fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
 dirs_os2=fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
 dirs_emx=fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib
 dirs_emx=fv zlib libpng x11 tcl fpgtk rexx os2units gtk1 imlib

+ 2551 - 0
packages/opencl/Makefile

@@ -0,0 +1,2551 @@
+#
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2010/01/03]
+#
+default: all
+MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-haiku i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince i386-embedded i386-symbian m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos m68k-embedded powerpc-linux powerpc-netbsd powerpc-amiga powerpc-macos powerpc-darwin powerpc-morphos powerpc-embedded sparc-linux sparc-netbsd sparc-solaris sparc-embedded x86_64-linux x86_64-freebsd x86_64-solaris x86_64-darwin x86_64-win64 x86_64-embedded arm-linux arm-palmos arm-darwin arm-wince arm-gba arm-nds arm-embedded arm-symbian powerpc64-linux powerpc64-darwin powerpc64-embedded avr-embedded armeb-linux armeb-embedded mipsel-linux
+BSDs = freebsd netbsd openbsd darwin
+UNIXs = linux $(BSDs) solaris qnx haiku
+LIMIT83fs = go32v2 os2 emx watcom
+OSNeedsComspecToRunBatch = go32v2 watcom
+FORCE:
+.PHONY: FORCE
+override PATH:=$(patsubst %/,%,$(subst \,/,$(PATH)))
+ifneq ($(findstring darwin,$(OSTYPE)),)
+inUnix=1 #darwin
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+ifeq ($(findstring ;,$(PATH)),)
+inUnix=1
+SEARCHPATH:=$(filter-out .,$(subst :, ,$(PATH)))
+else
+SEARCHPATH:=$(subst ;, ,$(PATH))
+endif
+endif
+SEARCHPATH+=$(patsubst %/,%,$(subst \,/,$(dir $(MAKE))))
+PWD:=$(strip $(wildcard $(addsuffix /pwd.exe,$(SEARCHPATH))))
+ifeq ($(PWD),)
+PWD:=$(strip $(wildcard $(addsuffix /pwd,$(SEARCHPATH))))
+ifeq ($(PWD),)
+$(error You need the GNU utils package to use this Makefile)
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=
+endif
+else
+PWD:=$(firstword $(PWD))
+SRCEXEEXT=.exe
+endif
+ifndef inUnix
+ifeq ($(OS),Windows_NT)
+inWinNT=1
+else
+ifdef OS2_SHELL
+inOS2=1
+endif
+endif
+else
+ifneq ($(findstring cygdrive,$(PATH)),)
+inCygWin=1
+endif
+endif
+ifdef inUnix
+SRCBATCHEXT=.sh
+else
+ifdef inOS2
+SRCBATCHEXT=.cmd
+else
+SRCBATCHEXT=.bat
+endif
+endif
+ifdef COMSPEC
+ifneq ($(findstring $(OS_SOURCE),$(OSNeedsComspecToRunBatch)),)
+ifndef RUNBATCH
+RUNBATCH=$(COMSPEC) /C
+endif
+endif
+endif
+ifdef inUnix
+PATHSEP=/
+else
+PATHSEP:=$(subst /,\,/)
+ifdef inCygWin
+PATHSEP=/
+endif
+endif
+ifdef PWD
+BASEDIR:=$(subst \,/,$(shell $(PWD)))
+ifdef inCygWin
+ifneq ($(findstring /cygdrive/,$(BASEDIR)),)
+BASENODIR:=$(patsubst /cygdrive%,%,$(BASEDIR))
+BASEDRIVE:=$(firstword $(subst /, ,$(BASENODIR)))
+BASEDIR:=$(subst /cygdrive/$(BASEDRIVE)/,$(BASEDRIVE):/,$(BASEDIR))
+endif
+endif
+else
+BASEDIR=.
+endif
+ifdef inOS2
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO=echo
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+endif
+override DEFAULT_FPCDIR=../..
+ifndef FPC
+ifdef PP
+FPC=$(PP)
+endif
+endif
+ifndef FPC
+FPCPROG:=$(strip $(wildcard $(addsuffix /fpc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(FPCPROG),)
+FPCPROG:=$(firstword $(FPCPROG))
+ifneq ($(CPU_TARGET),)
+FPC:=$(shell $(FPCPROG) -P$(CPU_TARGET) -PB)
+else
+FPC:=$(shell $(FPCPROG) -PB)
+endif
+ifneq ($(findstring Error,$(FPC)),)
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+else
+ifeq ($(strip $(wildcard $(FPC))),)
+FPC:=$(firstword $(FPCPROG))
+endif
+endif
+else
+override FPC=$(firstword $(strip $(wildcard $(addsuffix /ppc386$(SRCEXEEXT),$(SEARCHPATH)))))
+endif
+endif
+override FPC:=$(subst $(SRCEXEEXT),,$(FPC))
+override FPC:=$(subst \,/,$(FPC))$(SRCEXEEXT)
+FOUNDFPC:=$(strip $(wildcard $(FPC)))
+ifeq ($(FOUNDFPC),)
+FOUNDFPC=$(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))
+ifeq ($(FOUNDFPC),)
+$(error Compiler $(FPC) not found)
+endif
+endif
+ifndef FPC_COMPILERINFO
+FPC_COMPILERINFO:=$(shell $(FPC) -iVSPTPSOTO)
+endif
+ifndef FPC_VERSION
+FPC_VERSION:=$(word 1,$(FPC_COMPILERINFO))
+endif
+export FPC FPC_VERSION FPC_COMPILERINFO
+unexport CHECKDEPEND ALLDEPENDENCIES
+ifndef CPU_TARGET
+ifdef CPU_TARGET_DEFAULT
+CPU_TARGET=$(CPU_TARGET_DEFAULT)
+endif
+endif
+ifndef OS_TARGET
+ifdef OS_TARGET_DEFAULT
+OS_TARGET=$(OS_TARGET_DEFAULT)
+endif
+endif
+ifneq ($(words $(FPC_COMPILERINFO)),5)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTP)
+FPC_COMPILERINFO+=$(shell $(FPC) -iSO)
+FPC_COMPILERINFO+=$(shell $(FPC) -iTO)
+endif
+ifndef CPU_SOURCE
+CPU_SOURCE:=$(word 2,$(FPC_COMPILERINFO))
+endif
+ifndef CPU_TARGET
+CPU_TARGET:=$(word 3,$(FPC_COMPILERINFO))
+endif
+ifndef OS_SOURCE
+OS_SOURCE:=$(word 4,$(FPC_COMPILERINFO))
+endif
+ifndef OS_TARGET
+OS_TARGET:=$(word 5,$(FPC_COMPILERINFO))
+endif
+FULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+FULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifeq ($(CPU_TARGET),armeb)
+ARCH=arm
+override FPCOPT+=-Cb
+else
+ifeq ($(CPU_TARGET),armel)
+ARCH=arm
+override FPCOPT+=-CaEABI
+else
+ARCH=$(CPU_TARGET)
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+TARGETSUFFIX=$(OS_TARGET)
+SOURCESUFFIX=$(OS_SOURCE)
+else
+TARGETSUFFIX=$(FULL_TARGET)
+SOURCESUFFIX=$(FULL_SOURCE)
+endif
+ifneq ($(FULL_TARGET),$(FULL_SOURCE))
+CROSSCOMPILE=1
+endif
+ifeq ($(findstring makefile,$(MAKECMDGOALS)),)
+ifeq ($(findstring $(FULL_TARGET),$(MAKEFILETARGETS)),)
+$(error The Makefile doesn't support target $(FULL_TARGET), please run fpcmake first)
+endif
+endif
+ifneq ($(findstring $(OS_TARGET),$(BSDs)),)
+BSDhier=1
+endif
+ifeq ($(OS_TARGET),linux)
+linuxHier=1
+endif
+export OS_TARGET OS_SOURCE ARCH CPU_TARGET CPU_SOURCE FULL_TARGET FULL_SOURCE TARGETSUFFIX SOURCESUFFIX CROSSCOMPILE
+ifdef FPCDIR
+override FPCDIR:=$(subst \,/,$(FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+else
+override FPCDIR=wrong
+endif
+ifdef DEFAULT_FPCDIR
+ifeq ($(FPCDIR),wrong)
+override FPCDIR:=$(subst \,/,$(DEFAULT_FPCDIR))
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=wrong
+endif
+endif
+endif
+ifeq ($(FPCDIR),wrong)
+ifdef inUnix
+override FPCDIR=/usr/local/lib/fpc/$(FPC_VERSION)
+ifeq ($(wildcard $(FPCDIR)/units),)
+override FPCDIR=/usr/lib/fpc/$(FPC_VERSION)
+endif
+else
+override FPCDIR:=$(subst /$(FPC),,$(firstword $(strip $(wildcard $(addsuffix /$(FPC),$(SEARCHPATH))))))
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(FPCDIR)/..
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR:=$(BASEDIR)
+ifeq ($(wildcard $(addprefix $(FPCDIR)/,rtl units)),)
+override FPCDIR=c:/pp
+endif
+endif
+endif
+endif
+endif
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(FPCDIR)/bin/$(TARGETSUFFIX))
+endif
+ifeq ($(OS_TARGET),darwin)
+ifeq ($(OS_SOURCE),darwin)
+DARWIN2DARWIN=1
+endif
+endif
+ifndef BINUTILSPREFIX
+ifndef CROSSBINDIR
+ifdef CROSSCOMPILE
+ifndef DARWIN2DARWIN
+BINUTILSPREFIX=$(CPU_TARGET)-$(OS_TARGET)-
+endif
+endif
+endif
+endif
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(TARGETSUFFIX))
+ifeq ($(UNITSDIR),)
+UNITSDIR:=$(wildcard $(FPCDIR)/units/$(OS_TARGET))
+endif
+PACKAGESDIR:=$(wildcard $(FPCDIR) $(FPCDIR)/packages $(FPCDIR)/packages/base $(FPCDIR)/packages/extra)
+override PACKAGE_NAME=opencl
+override PACKAGE_VERSION=2.2.2
+ifeq ($(FULL_TARGET),i386-linux)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),x86_64-solaris)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override TARGET_UNITS+=cl cl_gl
+endif
+ifeq ($(FULL_TARGET),mipsel-linux)
+override TARGET_UNITS+=cl cl_gl
+endif
+override INSTALL_FPCPACKAGE=y
+override INSTALL_FPCSUBDIR=packages
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-solaris)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),mipsel-linux)
+override COMPILER_INCLUDEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-solaris)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+override COMPILER_SOURCEDIR+=src
+endif
+ifeq ($(FULL_TARGET),mipsel-linux)
+override COMPILER_SOURCEDIR+=src
+endif
+override SHARED_BUILD=n
+override SHARED_BUILD=n
+ifdef REQUIRE_UNITSDIR
+override UNITSDIR+=$(REQUIRE_UNITSDIR)
+endif
+ifdef REQUIRE_PACKAGESDIR
+override PACKAGESDIR+=$(REQUIRE_PACKAGESDIR)
+endif
+ifdef ZIPINSTALL
+ifneq ($(findstring $(OS_TARGET),$(UNIXs)),)
+UNIXHier=1
+endif
+else
+ifneq ($(findstring $(OS_SOURCE),$(UNIXs)),)
+UNIXHier=1
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef PREFIX
+INSTALL_PREFIX=$(PREFIX)
+endif
+endif
+ifndef INSTALL_PREFIX
+ifdef UNIXHier
+INSTALL_PREFIX=/usr/local
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=/pp
+else
+INSTALL_BASEDIR:=/$(PACKAGE_NAME)
+endif
+endif
+endif
+export INSTALL_PREFIX
+ifdef INSTALL_FPCSUBDIR
+export INSTALL_FPCSUBDIR
+endif
+ifndef DIST_DESTDIR
+DIST_DESTDIR:=$(BASEDIR)
+endif
+export DIST_DESTDIR
+ifndef COMPILER_UNITTARGETDIR
+ifdef PACKAGEDIR_MAIN
+COMPILER_UNITTARGETDIR=$(PACKAGEDIR_MAIN)/units/$(TARGETSUFFIX)
+else
+COMPILER_UNITTARGETDIR=units/$(TARGETSUFFIX)
+endif
+endif
+ifndef COMPILER_TARGETDIR
+COMPILER_TARGETDIR=.
+endif
+ifndef INSTALL_BASEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/fpc/$(FPC_VERSION)
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)/lib/$(PACKAGE_NAME)
+endif
+else
+INSTALL_BASEDIR:=$(INSTALL_PREFIX)
+endif
+endif
+ifndef INSTALL_BINDIR
+ifdef UNIXHier
+INSTALL_BINDIR:=$(INSTALL_PREFIX)/bin
+else
+INSTALL_BINDIR:=$(INSTALL_BASEDIR)/bin
+ifdef INSTALL_FPCPACKAGE
+ifdef CROSSCOMPILE
+ifdef CROSSINSTALL
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(SOURCESUFFIX)
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+else
+INSTALL_BINDIR:=$(INSTALL_BINDIR)/$(TARGETSUFFIX)
+endif
+endif
+endif
+endif
+ifndef INSTALL_UNITDIR
+INSTALL_UNITDIR:=$(INSTALL_BASEDIR)/units/$(TARGETSUFFIX)
+ifdef INSTALL_FPCPACKAGE
+ifdef PACKAGE_NAME
+INSTALL_UNITDIR:=$(INSTALL_UNITDIR)/$(PACKAGE_NAME)
+endif
+endif
+endif
+ifndef INSTALL_LIBDIR
+ifdef UNIXHier
+INSTALL_LIBDIR:=$(INSTALL_PREFIX)/lib
+else
+INSTALL_LIBDIR:=$(INSTALL_UNITDIR)
+endif
+endif
+ifndef INSTALL_SOURCEDIR
+ifdef UNIXHier
+ifdef BSDhier
+SRCPREFIXDIR=share/src
+else
+ifdef linuxHier
+SRCPREFIXDIR=share/src
+else
+SRCPREFIXDIR=src
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_PREFIX)/$(SRCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+ifdef INSTALL_FPCSUBDIR
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(INSTALL_FPCSUBDIR)/$(PACKAGE_NAME)
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source/$(PACKAGE_NAME)
+endif
+else
+INSTALL_SOURCEDIR:=$(INSTALL_BASEDIR)/source
+endif
+endif
+endif
+ifndef INSTALL_DOCDIR
+ifdef UNIXHier
+ifdef BSDhier
+DOCPREFIXDIR=share/doc
+else
+ifdef linuxHier
+DOCPREFIXDIR=share/doc
+else
+DOCPREFIXDIR=doc
+endif
+endif
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_PREFIX)/$(DOCPREFIXDIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc/$(PACKAGE_NAME)
+else
+INSTALL_DOCDIR:=$(INSTALL_BASEDIR)/doc
+endif
+endif
+endif
+ifndef INSTALL_EXAMPLEDIR
+ifdef UNIXHier
+ifdef INSTALL_FPCPACKAGE
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/fpc-$(FPC_VERSION)/$(PACKAGE_NAME)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/fpc-$(FPC_VERSION)/examples/$(PACKAGE_NAME)
+endif
+endif
+else
+ifdef BSDhier
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/share/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+ifdef linuxHier
+INSTALL_EXAMPLEDIR:=$(INSTALL_DOCDIR)/examples/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_PREFIX)/doc/$(PACKAGE_NAME)-$(PACKAGE_VERSION)
+endif
+endif
+endif
+else
+ifdef INSTALL_FPCPACKAGE
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples/$(PACKAGE_NAME)
+else
+INSTALL_EXAMPLEDIR:=$(INSTALL_BASEDIR)/examples
+endif
+endif
+endif
+ifndef INSTALL_DATADIR
+INSTALL_DATADIR=$(INSTALL_BASEDIR)
+endif
+ifndef INSTALL_SHAREDDIR
+INSTALL_SHAREDDIR=$(INSTALL_PREFIX)/lib
+endif
+ifdef CROSSCOMPILE
+ifndef CROSSBINDIR
+CROSSBINDIR:=$(wildcard $(CROSSTARGETDIR)/bin/$(SOURCESUFFIX))
+ifeq ($(CROSSBINDIR),)
+CROSSBINDIR:=$(wildcard $(INSTALL_BASEDIR)/cross/$(TARGETSUFFIX)/bin/$(FULL_SOURCE))
+endif
+endif
+else
+CROSSBINDIR=
+endif
+ifeq ($(OS_SOURCE),linux)
+ifndef GCCLIBDIR
+ifeq ($(CPU_TARGET),i386)
+ifneq ($(findstring x86_64,$(shell uname -a)),)
+ifeq ($(BINUTILSPREFIX),)
+GCCLIBDIR:=$(shell dirname `gcc -m32 -print-libgcc-file-name`)
+endif
+endif
+endif
+ifeq ($(CPU_TARGET),powerpc64)
+ifeq ($(BINUTILSPREFIX),)
+GCCLIBDIR:=$(shell dirname `gcc -m64 -print-libgcc-file-name`)
+endif
+endif
+endif
+ifndef GCCLIBDIR
+CROSSGCC=$(strip $(wildcard $(addsuffix /$(BINUTILSPREFIX)gcc$(SRCEXEEXT),$(SEARCHPATH))))
+ifneq ($(CROSSGCC),)
+GCCLIBDIR:=$(shell dirname `$(CROSSGCC) -print-libgcc-file-name`)
+endif
+endif
+ifndef OTHERLIBDIR
+OTHERLIBDIR:=$(shell grep -v "^\#" /etc/ld.so.conf | awk '{ ORS=" "; print $1 }')
+endif
+endif
+ifdef inUnix
+ifeq ($(OS_SOURCE),netbsd)
+OTHERLIBDIR+=/usr/pkg/lib
+endif
+export GCCLIBDIR OTHERLIB
+endif
+BATCHEXT=.bat
+LOADEREXT=.as
+EXEEXT=.exe
+PPLEXT=.ppl
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.so
+SHAREDLIBPREFIX=libfp
+STATICLIBPREFIX=libp
+IMPORTLIBPREFIX=libimp
+RSTEXT=.rst
+ifeq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),go32v1)
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+OEXT=.obj
+ASMEXT=.asm
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=wat
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),emx)
+BATCHEXT=.cmd
+AOUTEXT=.out
+STATICLIBPREFIX=
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=emx
+ECHO=echo
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),morphos)
+EXEEXT=
+SHAREDLIBEXT=.library
+SHORTSUFFIX=mos
+endif
+ifeq ($(OS_TARGET),atari)
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),haiku)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=hai
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nw
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),netwlibc)
+EXEEXT=.nlm
+STATICLIBPREFIX=
+SHORTSUFFIX=nwl
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),darwin)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=dwn
+endif
+ifeq ($(OS_TARGET),gba)
+EXEEXT=.gba
+SHAREDLIBEXT=.so
+SHORTSUFFIX=gba
+endif
+ifeq ($(OS_TARGET),symbian)
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=symbian
+endif
+else
+ifeq ($(OS_TARGET),go32v1)
+PPUEXT=.pp1
+OEXT=.o1
+ASMEXT=.s1
+SMARTEXT=.sl1
+STATICLIBEXT=.a1
+SHAREDLIBEXT=.so1
+STATICLIBPREFIX=
+SHORTSUFFIX=v1
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),go32v2)
+STATICLIBPREFIX=
+SHORTSUFFIX=dos
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),watcom)
+STATICLIBPREFIX=
+SHORTSUFFIX=wat
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),linux)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=lnx
+endif
+ifeq ($(OS_TARGET),freebsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=fbs
+endif
+ifeq ($(OS_TARGET),netbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=nbs
+endif
+ifeq ($(OS_TARGET),openbsd)
+BATCHEXT=.sh
+EXEEXT=
+HASSHAREDLIB=1
+SHORTSUFFIX=obs
+endif
+ifeq ($(OS_TARGET),win32)
+PPUEXT=.ppw
+OEXT=.ow
+ASMEXT=.sw
+SMARTEXT=.slw
+STATICLIBEXT=.aw
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=w32
+endif
+ifeq ($(OS_TARGET),os2)
+BATCHEXT=.cmd
+PPUEXT=.ppo
+ASMEXT=.so2
+OEXT=.oo2
+AOUTEXT=.out
+SMARTEXT=.sl2
+STATICLIBPREFIX=
+STATICLIBEXT=.ao2
+SHAREDLIBEXT=.dll
+SHORTSUFFIX=os2
+ECHO=echo
+IMPORTLIBPREFIX=
+endif
+ifeq ($(OS_TARGET),amiga)
+EXEEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.library
+SHORTSUFFIX=amg
+endif
+ifeq ($(OS_TARGET),atari)
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=.ttp
+SHORTSUFFIX=ata
+endif
+ifeq ($(OS_TARGET),beos)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=be
+endif
+ifeq ($(OS_TARGET),solaris)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=sun
+endif
+ifeq ($(OS_TARGET),qnx)
+BATCHEXT=.sh
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+SHORTSUFFIX=qnx
+endif
+ifeq ($(OS_TARGET),netware)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nw
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),netwlibc)
+STATICLIBPREFIX=
+PPUEXT=.ppu
+OEXT=.o
+ASMEXT=.s
+SMARTEXT=.sl
+STATICLIBEXT=.a
+SHAREDLIBEXT=.nlm
+EXEEXT=.nlm
+SHORTSUFFIX=nwl
+IMPORTLIBPREFIX=imp
+endif
+ifeq ($(OS_TARGET),macos)
+BATCHEXT=
+PPUEXT=.ppu
+ASMEXT=.s
+OEXT=.o
+SMARTEXT=.sl
+STATICLIBEXT=.a
+EXEEXT=
+DEBUGSYMEXT=.xcoff
+SHORTSUFFIX=mac
+IMPORTLIBPREFIX=imp
+endif
+endif
+ifneq ($(findstring $(OS_SOURCE),$(LIMIT83fs)),)
+FPCMADE=fpcmade.$(SHORTSUFFIX)
+ZIPSUFFIX=$(SHORTSUFFIX)
+ZIPCROSSPREFIX=
+ZIPSOURCESUFFIX=src
+ZIPEXAMPLESUFFIX=exm
+else
+FPCMADE=fpcmade.$(TARGETSUFFIX)
+ZIPSOURCESUFFIX=.source
+ZIPEXAMPLESUFFIX=.examples
+ifdef CROSSCOMPILE
+ZIPSUFFIX=.$(SOURCESUFFIX)
+ZIPCROSSPREFIX=$(TARGETSUFFIX)-
+else
+ZIPSUFFIX=.$(TARGETSUFFIX)
+ZIPCROSSPREFIX=
+endif
+endif
+ifndef ECHO
+ECHO:=$(strip $(wildcard $(addsuffix /gecho$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO:=$(strip $(wildcard $(addsuffix /echo$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ECHO),)
+ECHO= __missing_command_ECHO
+else
+ECHO:=$(firstword $(ECHO))
+endif
+else
+ECHO:=$(firstword $(ECHO))
+endif
+endif
+export ECHO
+ifndef DATE
+DATE:=$(strip $(wildcard $(addsuffix /gdate$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE:=$(strip $(wildcard $(addsuffix /date$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(DATE),)
+DATE= __missing_command_DATE
+else
+DATE:=$(firstword $(DATE))
+endif
+else
+DATE:=$(firstword $(DATE))
+endif
+endif
+export DATE
+ifndef GINSTALL
+GINSTALL:=$(strip $(wildcard $(addsuffix /ginstall$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL:=$(strip $(wildcard $(addsuffix /install$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(GINSTALL),)
+GINSTALL= __missing_command_GINSTALL
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+else
+GINSTALL:=$(firstword $(GINSTALL))
+endif
+endif
+export GINSTALL
+ifndef CPPROG
+CPPROG:=$(strip $(wildcard $(addsuffix /cp$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(CPPROG),)
+CPPROG= __missing_command_CPPROG
+else
+CPPROG:=$(firstword $(CPPROG))
+endif
+endif
+export CPPROG
+ifndef RMPROG
+RMPROG:=$(strip $(wildcard $(addsuffix /rm$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(RMPROG),)
+RMPROG= __missing_command_RMPROG
+else
+RMPROG:=$(firstword $(RMPROG))
+endif
+endif
+export RMPROG
+ifndef MVPROG
+MVPROG:=$(strip $(wildcard $(addsuffix /mv$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MVPROG),)
+MVPROG= __missing_command_MVPROG
+else
+MVPROG:=$(firstword $(MVPROG))
+endif
+endif
+export MVPROG
+ifndef MKDIRPROG
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /gmkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG:=$(strip $(wildcard $(addsuffix /mkdir$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(MKDIRPROG),)
+MKDIRPROG= __missing_command_MKDIRPROG
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+else
+MKDIRPROG:=$(firstword $(MKDIRPROG))
+endif
+endif
+export MKDIRPROG
+ifndef ECHOREDIR
+ifndef inUnix
+ECHOREDIR=echo
+else
+ECHOREDIR=$(ECHO)
+endif
+endif
+ifndef COPY
+COPY:=$(CPPROG) -fp
+endif
+ifndef COPYTREE
+COPYTREE:=$(CPPROG) -Rfp
+endif
+ifndef MKDIRTREE
+MKDIRTREE:=$(MKDIRPROG) -p
+endif
+ifndef MOVE
+MOVE:=$(MVPROG) -f
+endif
+ifndef DEL
+DEL:=$(RMPROG) -f
+endif
+ifndef DELTREE
+DELTREE:=$(RMPROG) -rf
+endif
+ifndef INSTALL
+ifdef inUnix
+INSTALL:=$(GINSTALL) -c -m 644
+else
+INSTALL:=$(COPY)
+endif
+endif
+ifndef INSTALLEXE
+ifdef inUnix
+INSTALLEXE:=$(GINSTALL) -c -m 755
+else
+INSTALLEXE:=$(COPY)
+endif
+endif
+ifndef MKDIR
+MKDIR:=$(GINSTALL) -m 755 -d
+endif
+export ECHOREDIR COPY COPYTREE MOVE DEL DELTREE INSTALL INSTALLEXE MKDIR
+ifndef PPUMOVE
+PPUMOVE:=$(strip $(wildcard $(addsuffix /ppumove$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(PPUMOVE),)
+PPUMOVE= __missing_command_PPUMOVE
+else
+PPUMOVE:=$(firstword $(PPUMOVE))
+endif
+endif
+export PPUMOVE
+ifndef FPCMAKE
+FPCMAKE:=$(strip $(wildcard $(addsuffix /fpcmake$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(FPCMAKE),)
+FPCMAKE= __missing_command_FPCMAKE
+else
+FPCMAKE:=$(firstword $(FPCMAKE))
+endif
+endif
+export FPCMAKE
+ifndef ZIPPROG
+ZIPPROG:=$(strip $(wildcard $(addsuffix /zip$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(ZIPPROG),)
+ZIPPROG= __missing_command_ZIPPROG
+else
+ZIPPROG:=$(firstword $(ZIPPROG))
+endif
+endif
+export ZIPPROG
+ifndef TARPROG
+TARPROG:=$(strip $(wildcard $(addsuffix /gtar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG:=$(strip $(wildcard $(addsuffix /tar$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(TARPROG),)
+TARPROG= __missing_command_TARPROG
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+else
+TARPROG:=$(firstword $(TARPROG))
+endif
+endif
+export TARPROG
+ASNAME=$(BINUTILSPREFIX)as
+LDNAME=$(BINUTILSPREFIX)ld
+ARNAME=$(BINUTILSPREFIX)ar
+RCNAME=$(BINUTILSPREFIX)rc
+ifneq ($(findstring 1.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),win32)
+ifeq ($(CROSSBINDIR),)
+ASNAME=asw
+LDNAME=ldw
+ARNAME=arw
+endif
+endif
+endif
+ifndef ASPROG
+ifdef CROSSBINDIR
+ASPROG=$(CROSSBINDIR)/$(ASNAME)$(SRCEXEEXT)
+else
+ASPROG=$(ASNAME)
+endif
+endif
+ifndef LDPROG
+ifdef CROSSBINDIR
+LDPROG=$(CROSSBINDIR)/$(LDNAME)$(SRCEXEEXT)
+else
+LDPROG=$(LDNAME)
+endif
+endif
+ifndef RCPROG
+ifdef CROSSBINDIR
+RCPROG=$(CROSSBINDIR)/$(RCNAME)$(SRCEXEEXT)
+else
+RCPROG=$(RCNAME)
+endif
+endif
+ifndef ARPROG
+ifdef CROSSBINDIR
+ARPROG=$(CROSSBINDIR)/$(ARNAME)$(SRCEXEEXT)
+else
+ARPROG=$(ARNAME)
+endif
+endif
+AS=$(ASPROG)
+LD=$(LDPROG)
+RC=$(RCPROG)
+AR=$(ARPROG)
+PPAS=ppas$(SRCBATCHEXT)
+ifdef inUnix
+LDCONFIG=ldconfig
+else
+LDCONFIG=
+endif
+ifdef DATE
+DATESTR:=$(shell $(DATE) +%Y%m%d)
+else
+DATESTR=
+endif
+ifndef UPXPROG
+ifeq ($(OS_TARGET),go32v2)
+UPXPROG:=1
+endif
+ifeq ($(OS_TARGET),win32)
+UPXPROG:=1
+endif
+ifdef UPXPROG
+UPXPROG:=$(strip $(wildcard $(addsuffix /upx$(SRCEXEEXT),$(SEARCHPATH))))
+ifeq ($(UPXPROG),)
+UPXPROG=
+else
+UPXPROG:=$(firstword $(UPXPROG))
+endif
+else
+UPXPROG=
+endif
+endif
+export UPXPROG
+ZIPOPT=-9
+ZIPEXT=.zip
+ifeq ($(USETAR),bz2)
+TAROPT=vj
+TAREXT=.tar.bz2
+else
+TAROPT=vz
+TAREXT=.tar.gz
+endif
+override REQUIRE_PACKAGES=rtl opengl
+ifeq ($(FULL_TARGET),i386-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-go32v2)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-win32)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-os2)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-freebsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-beos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-haiku)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-solaris)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-qnx)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-netware)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-openbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-wdosx)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-emx)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-watcom)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-netwlibc)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-wince)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),i386-symbian)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),m68k-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),m68k-freebsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),m68k-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),m68k-amiga)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),m68k-atari)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),m68k-openbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),m68k-palmos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),m68k-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-amiga)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-macos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-morphos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),powerpc-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),sparc-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),sparc-netbsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),sparc-solaris)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),sparc-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-freebsd)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-solaris)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-win64)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),x86_64-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),arm-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),arm-palmos)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),arm-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),arm-wince)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),arm-gba)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),arm-nds)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),arm-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),arm-symbian)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-darwin)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),powerpc64-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),avr-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),armeb-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),armeb-embedded)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifeq ($(FULL_TARGET),mipsel-linux)
+REQUIRE_PACKAGES_RTL=1
+REQUIRE_PACKAGES_X11=1
+REQUIRE_PACKAGES_OPENGL=1
+endif
+ifdef REQUIRE_PACKAGES_RTL
+PACKAGEDIR_RTL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /rtl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_RTL),)
+ifneq ($(wildcard $(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)),)
+UNITDIR_RTL=$(PACKAGEDIR_RTL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_RTL=$(PACKAGEDIR_RTL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_RTL)/$(OS_TARGET)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_RTL)/$(OS_TARGET) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_RTL)/$(OS_TARGET)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_RTL=
+UNITDIR_RTL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /rtl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_RTL),)
+UNITDIR_RTL:=$(firstword $(UNITDIR_RTL))
+else
+UNITDIR_RTL=
+endif
+endif
+ifdef UNITDIR_RTL
+override COMPILER_UNITDIR+=$(UNITDIR_RTL)
+endif
+endif
+ifdef REQUIRE_PACKAGES_X11
+PACKAGEDIR_X11:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /x11/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_X11),)
+ifneq ($(wildcard $(PACKAGEDIR_X11)/units/$(TARGETSUFFIX)),)
+UNITDIR_X11=$(PACKAGEDIR_X11)/units/$(TARGETSUFFIX)
+else
+UNITDIR_X11=$(PACKAGEDIR_X11)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_X11)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_X11) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_X11)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_X11=
+UNITDIR_X11:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /x11/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_X11),)
+UNITDIR_X11:=$(firstword $(UNITDIR_X11))
+else
+UNITDIR_X11=
+endif
+endif
+ifdef UNITDIR_X11
+override COMPILER_UNITDIR+=$(UNITDIR_X11)
+endif
+endif
+ifdef REQUIRE_PACKAGES_OPENGL
+PACKAGEDIR_OPENGL:=$(firstword $(subst /Makefile.fpc,,$(strip $(wildcard $(addsuffix /opengl/Makefile.fpc,$(PACKAGESDIR))))))
+ifneq ($(PACKAGEDIR_OPENGL),)
+ifneq ($(wildcard $(PACKAGEDIR_OPENGL)/units/$(TARGETSUFFIX)),)
+UNITDIR_OPENGL=$(PACKAGEDIR_OPENGL)/units/$(TARGETSUFFIX)
+else
+UNITDIR_OPENGL=$(PACKAGEDIR_OPENGL)
+endif
+ifdef CHECKDEPEND
+$(PACKAGEDIR_OPENGL)/$(FPCMADE):
+	$(MAKE) -C $(PACKAGEDIR_OPENGL) $(FPCMADE)
+override ALLDEPENDENCIES+=$(PACKAGEDIR_OPENGL)/$(FPCMADE)
+endif
+else
+PACKAGEDIR_OPENGL=
+UNITDIR_OPENGL:=$(subst /Package.fpc,,$(strip $(wildcard $(addsuffix /opengl/Package.fpc,$(UNITSDIR)))))
+ifneq ($(UNITDIR_OPENGL),)
+UNITDIR_OPENGL:=$(firstword $(UNITDIR_OPENGL))
+else
+UNITDIR_OPENGL=
+endif
+endif
+ifdef UNITDIR_OPENGL
+override COMPILER_UNITDIR+=$(UNITDIR_OPENGL)
+endif
+endif
+ifndef NOCPUDEF
+override FPCOPTDEF=$(ARCH)
+endif
+ifneq ($(OS_TARGET),$(OS_SOURCE))
+override FPCOPT+=-T$(OS_TARGET)
+endif
+ifneq ($(CPU_TARGET),$(CPU_SOURCE))
+override FPCOPT+=-P$(ARCH)
+endif
+ifeq ($(OS_SOURCE),openbsd)
+override FPCOPT+=-FD$(NEW_BINUTILS_PATH)
+endif
+ifndef CROSSBOOTSTRAP
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-XP$(BINUTILSPREFIX)
+endif
+ifneq ($(BINUTILSPREFIX),)
+override FPCOPT+=-Xr$(RLINKPATH)
+endif
+endif
+ifdef UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(UNITDIR))
+endif
+ifdef LIBDIR
+override FPCOPT+=$(addprefix -Fl,$(LIBDIR))
+endif
+ifdef OBJDIR
+override FPCOPT+=$(addprefix -Fo,$(OBJDIR))
+endif
+ifdef INCDIR
+override FPCOPT+=$(addprefix -Fi,$(INCDIR))
+endif
+ifdef LINKSMART
+override FPCOPT+=-XX
+endif
+ifdef CREATESMART
+override FPCOPT+=-CX
+endif
+ifdef DEBUG
+override FPCOPT+=-gl
+override FPCOPTDEF+=DEBUG
+endif
+ifdef RELEASE
+ifneq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(CPU_TARGET),i386)
+FPCCPUOPT:=-OG2p3
+endif
+ifeq ($(CPU_TARGET),powerpc)
+FPCCPUOPT:=-O1r
+endif
+else
+FPCCPUOPT:=-O2
+endif
+override FPCOPT+=-Ur -Xs $(FPCCPUOPT) -n
+override FPCOPTDEF+=RELEASE
+endif
+ifdef STRIP
+override FPCOPT+=-Xs
+endif
+ifdef OPTIMIZE
+override FPCOPT+=-O2
+endif
+ifdef VERBOSE
+override FPCOPT+=-vwni
+endif
+ifdef COMPILER_OPTIONS
+override FPCOPT+=$(COMPILER_OPTIONS)
+endif
+ifdef COMPILER_UNITDIR
+override FPCOPT+=$(addprefix -Fu,$(COMPILER_UNITDIR))
+endif
+ifdef COMPILER_LIBRARYDIR
+override FPCOPT+=$(addprefix -Fl,$(COMPILER_LIBRARYDIR))
+endif
+ifdef COMPILER_OBJECTDIR
+override FPCOPT+=$(addprefix -Fo,$(COMPILER_OBJECTDIR))
+endif
+ifdef COMPILER_INCLUDEDIR
+override FPCOPT+=$(addprefix -Fi,$(COMPILER_INCLUDEDIR))
+endif
+ifdef CROSSBINDIR
+override FPCOPT+=-FD$(CROSSBINDIR)
+endif
+ifdef COMPILER_TARGETDIR
+override FPCOPT+=-FE$(COMPILER_TARGETDIR)
+ifeq ($(COMPILER_TARGETDIR),.)
+override TARGETDIRPREFIX=
+else
+override TARGETDIRPREFIX=$(COMPILER_TARGETDIR)/
+endif
+endif
+ifdef COMPILER_UNITTARGETDIR
+override FPCOPT+=-FU$(COMPILER_UNITTARGETDIR)
+ifeq ($(COMPILER_UNITTARGETDIR),.)
+override UNITTARGETDIRPREFIX=
+else
+override UNITTARGETDIRPREFIX=$(COMPILER_UNITTARGETDIR)/
+endif
+else
+ifdef COMPILER_TARGETDIR
+override COMPILER_UNITTARGETDIR=$(COMPILER_TARGETDIR)
+override UNITTARGETDIRPREFIX=$(TARGETDIRPREFIX)
+endif
+endif
+ifdef CREATESHARED
+override FPCOPT+=-Cg
+ifeq ($(CPU_TARGET),i386)
+override FPCOPT+=-Aas
+endif
+endif
+ifeq ($(findstring 2.0.,$(FPC_VERSION)),)
+ifeq ($(OS_TARGET),linux)
+ifeq ($(CPU_TARGET),x86_64)
+override FPCOPT+=-Cg
+endif
+endif
+endif
+ifdef LINKSHARED
+endif
+ifdef GCCLIBDIR
+override FPCOPT+=-Fl$(GCCLIBDIR)
+endif
+ifdef OTHERLIBDIR
+override FPCOPT+=$(addprefix -Fl,$(OTHERLIBDIR))
+endif
+ifdef OPT
+override FPCOPT+=$(OPT)
+endif
+ifdef FPCOPTDEF
+override FPCOPT+=$(addprefix -d,$(FPCOPTDEF))
+endif
+ifdef CFGFILE
+override FPCOPT+=@$(CFGFILE)
+endif
+ifdef USEENV
+override FPCEXTCMD:=$(FPCOPT)
+override FPCOPT:=!FPCEXTCMD
+export FPCEXTCMD
+endif
+override AFULL_TARGET=$(CPU_TARGET)-$(OS_TARGET)
+override AFULL_SOURCE=$(CPU_SOURCE)-$(OS_SOURCE)
+ifneq ($(AFULL_TARGET),$(AFULL_SOURCE))
+override ACROSSCOMPILE=1
+endif
+ifdef ACROSSCOMPILE
+override FPCOPT+=$(CROSSOPT)
+endif
+override COMPILER:=$(FPC) $(FPCOPT)
+ifeq (,$(findstring -s ,$(COMPILER)))
+EXECPPAS=
+else
+ifeq ($(FULL_SOURCE),$(FULL_TARGET))
+ifdef RUNBATCH
+EXECPPAS:=@$(RUNBATCH) $(PPAS)
+else
+EXECPPAS:=@$(PPAS)
+endif
+endif
+endif
+.PHONY: fpc_units
+ifneq ($(TARGET_UNITS)$(TARGET_IMPLICITUNITS),)
+override ALLTARGET+=fpc_units
+override UNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_UNITS))
+override IMPLICITUNITPPUFILES=$(addsuffix $(PPUEXT),$(TARGET_IMPLICITUNITS))
+override INSTALLPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+override CLEANPPUFILES+=$(UNITPPUFILES) $(IMPLICITUNITPPUFILES)
+endif
+fpc_units: $(COMPILER_UNITTARGETDIR) $(UNITPPUFILES)
+ifdef TARGET_RSTS
+override RSTFILES=$(addsuffix $(RSTEXT),$(TARGET_RSTS))
+override CLEANRSTFILES+=$(RSTFILES)
+endif
+.PHONY: fpc_all fpc_smart fpc_debug fpc_release fpc_shared
+$(FPCMADE): $(ALLDEPENDENCIES) $(ALLTARGET)
+	@$(ECHOREDIR) Compiled > $(FPCMADE)
+fpc_all: $(FPCMADE)
+fpc_smart:
+	$(MAKE) all LINKSMART=1 CREATESMART=1
+fpc_debug:
+	$(MAKE) all DEBUG=1
+fpc_release:
+	$(MAKE) all RELEASE=1
+.SUFFIXES: $(EXEEXT) $(PPUEXT) $(OEXT) .pas .lpr .dpr .pp .rc .res
+$(COMPILER_UNITTARGETDIR):
+	$(MKDIRTREE) $(COMPILER_UNITTARGETDIR)
+$(COMPILER_TARGETDIR):
+	$(MKDIRTREE) $(COMPILER_TARGETDIR)
+%$(PPUEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(PPUEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pp
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.pas
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.lpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%$(EXEEXT): %.dpr
+	$(COMPILER) $<
+	$(EXECPPAS)
+%.res: %.rc
+	windres -i $< -o $@
+vpath %.pp $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.pas $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.lpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.dpr $(COMPILER_SOURCEDIR) $(COMPILER_INCLUDEDIR)
+vpath %.inc $(COMPILER_INCLUDEDIR)
+vpath %$(OEXT) $(COMPILER_UNITTARGETDIR)
+vpath %$(PPUEXT) $(COMPILER_UNITTARGETDIR)
+.PHONY: fpc_shared
+override INSTALLTARGET+=fpc_shared_install
+ifndef SHARED_LIBVERSION
+SHARED_LIBVERSION=$(FPC_VERSION)
+endif
+ifndef SHARED_LIBNAME
+SHARED_LIBNAME=$(PACKAGE_NAME)
+endif
+ifndef SHARED_FULLNAME
+SHARED_FULLNAME=$(SHAREDLIBPREFIX)$(SHARED_LIBNAME)-$(SHARED_LIBVERSION)$(SHAREDLIBEXT)
+endif
+ifndef SHARED_LIBUNITS
+SHARED_LIBUNITS:=$(TARGET_UNITS) $(TARGET_IMPLICITUNITS)
+override SHARED_LIBUNITS:=$(filter-out $(INSTALL_BUILDUNIT),$(SHARED_LIBUNITS))
+endif
+fpc_shared:
+ifdef HASSHAREDLIB
+	$(MAKE) all CREATESHARED=1 LINKSHARED=1 CREATESMART=1
+ifneq ($(SHARED_BUILD),n)
+	$(PPUMOVE) -q $(SHARED_LIBUNITS) -i$(COMPILER_UNITTARGETDIR) -o$(SHARED_FULLNAME) -d$(COMPILER_UNITTARGETDIR)
+endif
+else
+	@$(ECHO) Shared Libraries not supported
+endif
+fpc_shared_install:
+ifneq ($(SHARED_BUILD),n)
+ifneq ($(SHARED_LIBUNITS),)
+ifneq ($(wildcard $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME)),)
+	$(INSTALL) $(COMPILER_UNITTARGETDIR)/$(SHARED_FULLNAME) $(INSTALL_SHAREDDIR)
+endif
+endif
+endif
+.PHONY: fpc_install fpc_sourceinstall fpc_exampleinstall
+ifdef INSTALL_UNITS
+override INSTALLPPUFILES+=$(addsuffix $(PPUEXT),$(INSTALL_UNITS))
+endif
+ifdef INSTALL_BUILDUNIT
+override INSTALLPPUFILES:=$(filter-out $(INSTALL_BUILDUNIT)$(PPUEXT),$(INSTALLPPUFILES))
+endif
+ifdef INSTALLPPUFILES
+override INSTALLPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(INSTALLPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(INSTALLPPUFILES)))
+ifneq ($(UNITTARGETDIRPREFIX),)
+override INSTALLPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPUFILES)))
+override INSTALLPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(notdir $(INSTALLPPULINKFILES))))
+endif
+override INSTALL_CREATEPACKAGEFPC=1
+endif
+ifdef INSTALLEXEFILES
+ifneq ($(TARGETDIRPREFIX),)
+override INSTALLEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(notdir $(INSTALLEXEFILES)))
+endif
+endif
+fpc_install: all $(INSTALLTARGET)
+ifdef INSTALLEXEFILES
+	$(MKDIR) $(INSTALL_BINDIR)
+ifdef UPXPROG
+	-$(UPXPROG) $(INSTALLEXEFILES)
+endif
+	$(INSTALLEXE) $(INSTALLEXEFILES) $(INSTALL_BINDIR)
+endif
+ifdef INSTALL_CREATEPACKAGEFPC
+ifdef FPCMAKE
+ifdef PACKAGE_VERSION
+ifneq ($(wildcard Makefile.fpc),)
+	$(FPCMAKE) -p -T$(CPU_TARGET)-$(OS_TARGET) Makefile.fpc
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) Package.fpc $(INSTALL_UNITDIR)
+endif
+endif
+endif
+endif
+ifdef INSTALLPPUFILES
+	$(MKDIR) $(INSTALL_UNITDIR)
+	$(INSTALL) $(INSTALLPPUFILES) $(INSTALL_UNITDIR)
+ifneq ($(INSTALLPPULINKFILES),)
+	$(INSTALL) $(INSTALLPPULINKFILES) $(INSTALL_UNITDIR)
+endif
+ifneq ($(wildcard $(LIB_FULLNAME)),)
+	$(MKDIR) $(INSTALL_LIBDIR)
+	$(INSTALL) $(LIB_FULLNAME) $(INSTALL_LIBDIR)
+ifdef inUnix
+	ln -sf $(LIB_FULLNAME) $(INSTALL_LIBDIR)/$(LIB_NAME)
+endif
+endif
+endif
+ifdef INSTALL_FILES
+	$(MKDIR) $(INSTALL_DATADIR)
+	$(INSTALL) $(INSTALL_FILES) $(INSTALL_DATADIR)
+endif
+fpc_sourceinstall: distclean
+	$(MKDIR) $(INSTALL_SOURCEDIR)
+	$(COPYTREE) $(BASEDIR)/* $(INSTALL_SOURCEDIR)
+fpc_exampleinstall: $(addsuffix _distclean,$(TARGET_EXAMPLEDIRS))
+ifdef HASEXAMPLES
+	$(MKDIR) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef EXAMPLESOURCEFILES
+	$(COPY) $(EXAMPLESOURCEFILES) $(INSTALL_EXAMPLEDIR)
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(COPYTREE) $(addsuffix /*,$(TARGET_EXAMPLEDIRS)) $(INSTALL_EXAMPLEDIR)
+endif
+.PHONY: fpc_distinstall
+fpc_distinstall: install exampleinstall
+.PHONY: fpc_zipinstall fpc_zipsourceinstall fpc_zipexampleinstall
+ifndef PACKDIR
+ifndef inUnix
+PACKDIR=$(BASEDIR)/../fpc-pack
+else
+PACKDIR=/tmp/fpc-pack
+endif
+endif
+ifndef ZIPNAME
+ifdef DIST_ZIPNAME
+ZIPNAME=$(DIST_ZIPNAME)
+else
+ZIPNAME=$(PACKAGE_NAME)
+endif
+endif
+ifndef FULLZIPNAME
+FULLZIPNAME=$(ZIPCROSSPREFIX)$(ZIPPREFIX)$(ZIPNAME)$(ZIPSUFFIX)
+endif
+ifndef ZIPTARGET
+ifdef DIST_ZIPTARGET
+ZIPTARGET=DIST_ZIPTARGET
+else
+ZIPTARGET=install
+endif
+endif
+ifndef USEZIP
+ifdef inUnix
+USETAR=1
+endif
+endif
+ifndef inUnix
+USEZIPWRAPPER=1
+endif
+ifdef USEZIPWRAPPER
+ZIPPATHSEP=$(PATHSEP)
+ZIPWRAPPER=$(subst /,$(PATHSEP),$(DIST_DESTDIR)/fpczip$(SRCBATCHEXT))
+else
+ZIPPATHSEP=/
+endif
+ZIPCMD_CDPACK:=cd $(subst /,$(ZIPPATHSEP),$(PACKDIR))
+ZIPCMD_CDBASE:=cd $(subst /,$(ZIPPATHSEP),$(BASEDIR))
+ifdef USETAR
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(TAREXT)
+ZIPCMD_ZIP:=$(TARPROG) cf$(TAROPT) $(ZIPDESTFILE) *
+else
+ZIPDESTFILE:=$(DIST_DESTDIR)/$(FULLZIPNAME)$(ZIPEXT)
+ZIPCMD_ZIP:=$(subst /,$(ZIPPATHSEP),$(ZIPPROG)) -Dr $(ZIPOPT) $(ZIPDESTFILE) *
+endif
+fpc_zipinstall:
+	$(MAKE) $(ZIPTARGET) INSTALL_PREFIX=$(PACKDIR) ZIPINSTALL=1
+	$(MKDIR) $(DIST_DESTDIR)
+	$(DEL) $(ZIPDESTFILE)
+ifdef USEZIPWRAPPER
+ifneq ($(ECHOREDIR),echo)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDPACK))" > $(ZIPWRAPPER)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_ZIP))" >> $(ZIPWRAPPER)
+	$(ECHOREDIR) -e "$(subst \,\\,$(ZIPCMD_CDBASE))" >> $(ZIPWRAPPER)
+else
+	echo $(ZIPCMD_CDPACK) > $(ZIPWRAPPER)
+	echo $(ZIPCMD_ZIP) >> $(ZIPWRAPPER)
+	echo $(ZIPCMD_CDBASE) >> $(ZIPWRAPPER)
+endif
+ifdef inUnix
+	/bin/sh $(ZIPWRAPPER)
+else
+ifdef RUNBATCH
+	$(RUNBATCH) $(ZIPWRAPPER)
+else
+	$(ZIPWRAPPER)
+endif
+endif
+	$(DEL) $(ZIPWRAPPER)
+else
+	$(ZIPCMD_CDPACK) ; $(ZIPCMD_ZIP) ; $(ZIPCMD_CDBASE)
+endif
+	$(DELTREE) $(PACKDIR)
+fpc_zipsourceinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=sourceinstall ZIPSUFFIX=$(ZIPSOURCESUFFIX)
+fpc_zipexampleinstall:
+ifdef HASEXAMPLES
+	$(MAKE) fpc_zipinstall ZIPTARGET=exampleinstall ZIPSUFFIX=$(ZIPEXAMPLESUFFIX)
+endif
+fpc_zipdistinstall:
+	$(MAKE) fpc_zipinstall ZIPTARGET=distinstall
+.PHONY: fpc_clean fpc_cleanall fpc_distclean
+ifdef EXEFILES
+override CLEANEXEFILES:=$(addprefix $(TARGETDIRPREFIX),$(CLEANEXEFILES))
+endif
+ifdef CLEAN_UNITS
+override CLEANPPUFILES+=$(addsuffix $(PPUEXT),$(CLEAN_UNITS))
+endif
+ifdef CLEANPPUFILES
+override CLEANPPULINKFILES:=$(subst $(PPUEXT),$(OEXT),$(CLEANPPUFILES)) $(addprefix $(STATICLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES))) $(addprefix $(IMPORTLIBPREFIX),$(subst $(PPUEXT),$(STATICLIBEXT),$(CLEANPPUFILES)))
+ifdef DEBUGSYMEXT
+override CLEANPPULINKFILES+=$(subst $(PPUEXT),$(DEBUGSYMEXT),$(CLEANPPUFILES))
+endif
+override CLEANPPUFILES:=$(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPUFILES))
+override CLEANPPULINKFILES:=$(wildcard $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANPPULINKFILES)))
+endif
+fpc_clean: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+ifdef CLEAN_FILES
+	-$(DEL) $(CLEAN_FILES)
+endif
+ifdef LIB_NAME
+	-$(DEL) $(LIB_NAME) $(LIB_FULLNAME)
+endif
+	-$(DEL) $(FPCMADE) Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *$(ASMEXT) *_ppas$(BATCHEXT)
+fpc_cleanall: $(CLEANTARGET)
+ifdef CLEANEXEFILES
+	-$(DEL) $(CLEANEXEFILES)
+endif
+ifdef COMPILER_UNITTARGETDIR
+ifdef CLEANPPUFILES
+	-$(DEL) $(CLEANPPUFILES)
+endif
+ifneq ($(CLEANPPULINKFILES),)
+	-$(DEL) $(CLEANPPULINKFILES)
+endif
+ifdef CLEANRSTFILES
+	-$(DEL) $(addprefix $(UNITTARGETDIRPREFIX),$(CLEANRSTFILES))
+endif
+endif
+	-$(DELTREE) units
+	-$(DEL) *$(OEXT) *$(PPUEXT) *$(RSTEXT) *$(ASMEXT) *$(STATICLIBEXT) *$(SHAREDLIBEXT) *$(PPLEXT)
+ifneq ($(PPUEXT),.ppu)
+	-$(DEL) *.o *.ppu *.a
+endif
+	-$(DELTREE) *$(SMARTEXT)
+	-$(DEL) fpcmade.* Package.fpc $(PPAS) script.res link.res $(FPCEXTFILE) $(REDIRFILE)
+	-$(DEL) *_ppas$(BATCHEXT)
+ifdef AOUTEXT
+	-$(DEL) *$(AOUTEXT)
+endif
+ifdef DEBUGSYMEXT
+	-$(DEL) *$(DEBUGSYMEXT)
+endif
+fpc_distclean: cleanall
+.PHONY: fpc_baseinfo
+override INFORULES+=fpc_baseinfo
+fpc_baseinfo:
+	@$(ECHO)
+	@$(ECHO)  == Package info ==
+	@$(ECHO)  Package Name..... $(PACKAGE_NAME)
+	@$(ECHO)  Package Version.. $(PACKAGE_VERSION)
+	@$(ECHO)
+	@$(ECHO)  == Configuration info ==
+	@$(ECHO)
+	@$(ECHO)  FPC.......... $(FPC)
+	@$(ECHO)  FPC Version.. $(FPC_VERSION)
+	@$(ECHO)  Source CPU... $(CPU_SOURCE)
+	@$(ECHO)  Target CPU... $(CPU_TARGET)
+	@$(ECHO)  Source OS.... $(OS_SOURCE)
+	@$(ECHO)  Target OS.... $(OS_TARGET)
+	@$(ECHO)  Full Source.. $(FULL_SOURCE)
+	@$(ECHO)  Full Target.. $(FULL_TARGET)
+	@$(ECHO)  SourceSuffix. $(SOURCESUFFIX)
+	@$(ECHO)  TargetSuffix. $(TARGETSUFFIX)
+	@$(ECHO)
+	@$(ECHO)  == Directory info ==
+	@$(ECHO)
+	@$(ECHO)  Required pkgs... $(REQUIRE_PACKAGES)
+	@$(ECHO)
+	@$(ECHO)  Basedir......... $(BASEDIR)
+	@$(ECHO)  FPCDir.......... $(FPCDIR)
+	@$(ECHO)  CrossBinDir..... $(CROSSBINDIR)
+	@$(ECHO)  UnitsDir........ $(UNITSDIR)
+	@$(ECHO)  PackagesDir..... $(PACKAGESDIR)
+	@$(ECHO)
+	@$(ECHO)  GCC library..... $(GCCLIBDIR)
+	@$(ECHO)  Other library... $(OTHERLIBDIR)
+	@$(ECHO)
+	@$(ECHO)  == Tools info ==
+	@$(ECHO)
+	@$(ECHO)  As........ $(AS)
+	@$(ECHO)  Ld........ $(LD)
+	@$(ECHO)  Ar........ $(AR)
+	@$(ECHO)  Rc........ $(RC)
+	@$(ECHO)
+	@$(ECHO)  Mv........ $(MVPROG)
+	@$(ECHO)  Cp........ $(CPPROG)
+	@$(ECHO)  Rm........ $(RMPROG)
+	@$(ECHO)  GInstall.. $(GINSTALL)
+	@$(ECHO)  Echo...... $(ECHO)
+	@$(ECHO)  Shell..... $(SHELL)
+	@$(ECHO)  Date...... $(DATE)
+	@$(ECHO)  FPCMake... $(FPCMAKE)
+	@$(ECHO)  PPUMove... $(PPUMOVE)
+	@$(ECHO)  Upx....... $(UPXPROG)
+	@$(ECHO)  Zip....... $(ZIPPROG)
+	@$(ECHO)
+	@$(ECHO)  == Object info ==
+	@$(ECHO)
+	@$(ECHO)  Target Loaders........ $(TARGET_LOADERS)
+	@$(ECHO)  Target Units.......... $(TARGET_UNITS)
+	@$(ECHO)  Target Implicit Units. $(TARGET_IMPLICITUNITS)
+	@$(ECHO)  Target Programs....... $(TARGET_PROGRAMS)
+	@$(ECHO)  Target Dirs........... $(TARGET_DIRS)
+	@$(ECHO)  Target Examples....... $(TARGET_EXAMPLES)
+	@$(ECHO)  Target ExampleDirs.... $(TARGET_EXAMPLEDIRS)
+	@$(ECHO)
+	@$(ECHO)  Clean Units......... $(CLEAN_UNITS)
+	@$(ECHO)  Clean Files......... $(CLEAN_FILES)
+	@$(ECHO)
+	@$(ECHO)  Install Units....... $(INSTALL_UNITS)
+	@$(ECHO)  Install Files....... $(INSTALL_FILES)
+	@$(ECHO)
+	@$(ECHO)  == Install info ==
+	@$(ECHO)
+	@$(ECHO)  DateStr.............. $(DATESTR)
+	@$(ECHO)  ZipName.............. $(ZIPNAME)
+	@$(ECHO)  ZipPrefix............ $(ZIPPREFIX)
+	@$(ECHO)  ZipCrossPrefix....... $(ZIPCROSSPREFIX)
+	@$(ECHO)  ZipSuffix............ $(ZIPSUFFIX)
+	@$(ECHO)  FullZipName.......... $(FULLZIPNAME)
+	@$(ECHO)  Install FPC Package.. $(INSTALL_FPCPACKAGE)
+	@$(ECHO)
+	@$(ECHO)  Install base dir..... $(INSTALL_BASEDIR)
+	@$(ECHO)  Install binary dir... $(INSTALL_BINDIR)
+	@$(ECHO)  Install library dir.. $(INSTALL_LIBDIR)
+	@$(ECHO)  Install units dir.... $(INSTALL_UNITDIR)
+	@$(ECHO)  Install source dir... $(INSTALL_SOURCEDIR)
+	@$(ECHO)  Install doc dir...... $(INSTALL_DOCDIR)
+	@$(ECHO)  Install example dir.. $(INSTALL_EXAMPLEDIR)
+	@$(ECHO)  Install data dir..... $(INSTALL_DATADIR)
+	@$(ECHO)
+	@$(ECHO)  Dist destination dir. $(DIST_DESTDIR)
+	@$(ECHO)  Dist zip name........ $(DIST_ZIPNAME)
+	@$(ECHO)
+.PHONY: fpc_info
+fpc_info: $(INFORULES)
+.PHONY: fpc_makefile fpc_makefiles fpc_makefile_sub1 fpc_makefile_sub2 \
+	fpc_makefile_dirs
+fpc_makefile:
+	$(FPCMAKE) -w -T$(OS_TARGET) Makefile.fpc
+fpc_makefile_sub1:
+ifdef TARGET_DIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_DIRS))
+endif
+ifdef TARGET_EXAMPLEDIRS
+	$(FPCMAKE) -w -T$(OS_TARGET) $(addsuffix /Makefile.fpc,$(TARGET_EXAMPLEDIRS))
+endif
+fpc_makefile_sub2: $(addsuffix _makefile_dirs,$(TARGET_DIRS) $(TARGET_EXAMPLEDIRS))
+fpc_makefile_dirs: fpc_makefile_sub1 fpc_makefile_sub2
+fpc_makefiles: fpc_makefile fpc_makefile_dirs
+all: fpc_all
+debug: fpc_debug
+smart: fpc_smart
+release: fpc_release
+units: fpc_units
+examples:
+shared: fpc_shared
+install: fpc_install
+sourceinstall: fpc_sourceinstall
+exampleinstall: fpc_exampleinstall
+distinstall: fpc_distinstall
+zipinstall: fpc_zipinstall
+zipsourceinstall: fpc_zipsourceinstall
+zipexampleinstall: fpc_zipexampleinstall
+zipdistinstall: fpc_zipdistinstall
+clean: fpc_clean
+distclean: fpc_distclean
+cleanall: fpc_cleanall
+info: fpc_info
+makefiles: fpc_makefiles
+.PHONY: all debug smart release units examples shared install sourceinstall exampleinstall distinstall zipinstall zipsourceinstall zipexampleinstall zipdistinstall clean distclean cleanall info makefiles
+ifneq ($(wildcard fpcmake.loc),)
+include fpcmake.loc
+endif
+.NOTPARALLEL:

+ 31 - 0
packages/opencl/Makefile.fpc

@@ -0,0 +1,31 @@
+#
+#   Makefile.fpc for Free Pascal opencl Packages
+#
+
+[package]
+name=opencl
+version=2.2.2
+
+[target]
+units=cl cl_gl
+
+[require]
+libc=y
+packages=opengl
+
+[compiler]
+includedir=src
+sourcedir=src
+
+[install]
+fpcpackage=y
+fpcsubdir=packages
+
+[default]
+fpcdir=../..
+
+[shared]
+build=n
+
+[rules]
+.NOTPARALLEL:

+ 248 - 0
packages/opencl/examples/basicsample.pas

@@ -0,0 +1,248 @@
+{
+The sample is give at
+http://developer.apple.com/mac/library/samplecode/OpenCL_Hello_World_Example/index.html
+
+===========================================================================
+DESCRIPTION:
+
+A simple "Hello World" compute example showing basic usage of OpenCL which
+calculates the mathematical square (X[i] = pow(X[i],2)) for a buffer of
+floating point values.
+
+For simplicity, this example is intended to be run from the command line.
+If run from within XCode, open the Run Log (Command-Shift-R) to see the
+output.  Alternatively, run the applications from within a Terminal.app
+session to launch from the command line.
+
+===========================================================================
+BUILD REQUIREMENTS:
+
+Mac OS X v10.6 or later
+  or
+Windows with NVidia OpenCL SDK Installed
+
+===========================================================================
+RUNTIME REQUIREMENTS:
+
+Mac OS X v10.6 or later
+
+  To use the GPU as a compute device, use one of the following devices:
+  - MacBook Pro w/NVidia GeForce 8600M
+  - Mac Pro w/NVidia GeForce 8800GT
+  
+  If you don't have powerful GPU you can try to use CPU instead: 
+  by changing  
+    gpu := CL_DEVICE_TYPE_GPU; 
+    to
+    gpu := CL_DEVICE_TYPE_CPU; 
+
+Windows with NVidia OpenCL SDK Installed and libOpenCLXX.dll available
+
+CL_DEVICE_TYPE_CPU doesn't seem to work for windows
+
+===========================================================================
+}
+program testcl;
+
+{$mode objfpc}{$H+}
+
+uses
+  ctypes, cl;
+
+
+// Use a static data size for simplicity
+
+const
+  DATA_SIZE = 1024;
+
+// Simple compute kernel which computes the square of an input array
+const
+  KernelSource : PChar = 
+  '__kernel void square(                   '#10+
+  '   __global float* input,               '#10+
+  '   __global float* output,              '#10+
+  '   const unsigned int count)            '#10+
+  '{                                       '#10+
+  '   int i = get_global_id(0);            '#10+
+  '   if(i < count)                        '#10+
+  '       output[i] = input[i] * input[i]; '#10+
+  '} '#0;
+
+
+var
+  err     : Integer; // error code returned from api calls
+  data    : array [0..DATA_SIZE-1] of single; // original data set given to device
+  results : array [0..DATA_SIZE-1] of single; // results returned from device
+  correct : LongWord; // number of correct results returned
+
+  global  : csize_t; // global domain size for our calculation
+  local   : csize_t; // local domain size for our calculation
+
+  device_id : cl_device_id;      // compute device id
+  context   : cl_context;        // compute context
+  commands  : cl_command_queue;  // compute command queue
+  prog      : cl_program;        // compute program
+  kernel    : cl_kernel;         // compute kernel
+
+  input   : cl_mem; // device memory used for the input array
+  output  : cl_mem; // device memory used for the output array
+
+  i     : Integer;
+  count : Integer;
+  gpu   : cl_device_type;
+
+  tmpd  : single;
+begin
+  // Fill our data set with random float values
+  count := DATA_SIZE;
+  for i:=0 to count - 1 do
+    data[i]:= random;
+
+  // Connect to a compute device
+  // change CL_DEVICE_TYPE_CPU to CL_DEVICE_TYPE_GPU is you have powerful video (GeForce 8800/8600M or higher)
+  gpu := CL_DEVICE_TYPE_GPU;
+
+  device_id:=nil;
+  err := clGetDeviceIDs(nil, gpu, 1, @device_id, nil);
+  writeln('clGetDeviceIDs ', err);
+  if (err <> CL_SUCCESS) then begin
+    Writeln('Error: Failed to create a device group!');
+    Halt($FF);
+  end;
+
+  // Create a compute context
+  context := clCreateContext(nil, 1, @device_id, nil, nil, err);
+  writeln('clCreateContext ', err);
+  if context=nil then begin
+    Writeln('Error: Failed to create a compute context!');
+    Halt($FF);
+  end;
+
+  // Create a command commands
+  commands := clCreateCommandQueue(context, device_id, 0, err);
+  writeln('clCreateCommandQueue ', err);
+  if commands=nil then begin
+    Writeln('Error: Failed to create a command commands!');
+    Halt($FF);
+  end;
+
+  // Create the compute program from the source buffer
+  prog:= clCreateProgramWithSource(context, 1, PPChar(@KernelSource), nil, err);
+  writeln('clCreateProgramWithSource ', err);
+  if prog=nil then begin
+    writeln('Error: Failed to create compute program! ');
+    Halt($FF);
+  end;
+
+  // Build the program executable
+  err := clBuildProgram(prog, 0, nil, nil, nil, nil);
+  writeln('clBuildProgram ', err);
+  if (err <> CL_SUCCESS) then begin
+    writeln('Error: Failed to build program executable!');
+    Halt(1);
+  end;
+
+  // Create the compute kernel in the program we wish to run
+  kernel := clCreateKernel(prog, 'square', err);
+  writeln('clCreateKernel ', err);
+  if (kernel=nil) or (err <> CL_SUCCESS) then begin
+    writeln('Error: Failed to create compute kernel!');
+    Halt(1);
+  end;
+  
+  err := clGetKernelWorkGroupInfo(kernel, device_id,  CL_KERNEL_WORK_GROUP_SIZE, sizeof(local), @local, nil);
+  writeln('clGetKernelWorkGroupInfo ', err);
+  if (err<>CL_SUCCESS) then begin
+    writeln('Error: Failed to retrieve kernel work group info!');
+    Halt(1);
+  end;
+  
+  
+  // Create the input and output arrays in device memory for our calculation
+  input := clCreateBuffer(context,  CL_MEM_READ_ONLY,  sizeof(single) * count, nil, err);
+  writeln('clCreateBuffer ', err);
+  output := clCreateBuffer(context, CL_MEM_WRITE_ONLY, sizeof(single) * count, nil, err);
+  writeln('clCreateBuffer ', err);
+  if (input=nil) or (output=nil) then begin
+    writeln('Error: Failed to allocate device memory!');
+    Halt(1);
+  end;
+
+  // Write our data set into the input array in device memory
+  err := clEnqueueWriteBuffer(commands, input, CL_TRUE, 0, sizeof(single) * count, @data, 0, nil, nil);
+  writeln('clEnqueueWriteBuffer ', err);
+  if (err <> CL_SUCCESS) then begin
+    writeln('Error: Failed to write to source array!');
+    Halt(1);
+  end;
+
+  // Set the arguments to our compute kernel
+  err := 0;
+  err := clSetKernelArg(kernel, 0, sizeof(cl_mem), @input);
+  writeln('clSetKernelArg ', err);
+  err := err or clSetKernelArg(kernel, 1, sizeof(cl_mem), @output);
+  writeln('clSetKernelArg ', err);
+  err := err or clSetKernelArg(kernel, 2, sizeof(longword), @count);
+  writeln('clSetKernelArg ', err);
+  if (err <> CL_SUCCESS) then begin
+    writeln('Error: Failed to set kernel arguments! ');
+    Halt(1);
+  end;
+
+  // Get the maximum work group size for executing the kernel on the device
+  err := clGetKernelWorkGroupInfo(kernel, device_id,  CL_KERNEL_WORK_GROUP_SIZE, sizeof(local), @local, nil);
+  writeln('clGetKernelWorkGroupInfo ', err);
+  if (err<>CL_SUCCESS) then begin
+    writeln('Error: Failed to retrieve kernel work group info!');
+    Halt(1);
+  end;
+  
+  // Execute the kernel over the entire range of our 1d input data set
+  // using the maximum number of work group items for this device
+  global := count;
+  err := clEnqueueNDRangeKernel(commands, kernel, 1, nil, @global, @local, 0, nil, nil);
+  writeln('clEnqueueNDRangeKernel ',err);
+  if (err<>0) then begin
+    writeln('Error: Failed to execute kernel!');
+    Halt($FF);
+  end;
+
+  // Wait for the command commands to get serviced before reading back results
+  err:=clFinish(commands);
+  writeln('clFinish ',err);
+
+  // Read back the results from the device to verify the output
+  err := clEnqueueReadBuffer( commands, output, CL_TRUE, 0, sizeof(single) * count, @results, 0, nil, nil);
+  writeln('clEnqueueReadBuffer ',err);
+  if (err <> CL_SUCCESS) then begin
+    writeln('Error: Failed to read output array! ', err);
+    Halt(1);
+  end;
+
+  // Validate our results
+  correct := 0;
+  for i:= 0 to count - 1 do begin
+    // FPU warning:
+    //
+    // the following check (as in original C sample)
+    // if results[i] = data[i] * data[i] then
+    //
+    // return the incorrect result (FP accuracy?),
+    // must store the result to single type variable first,
+    // and then compare:
+    tmpd:=data[i] * data[i];
+    if results[i] = tmpd then inc(correct);
+  end;
+
+  // Print a brief summary detailing the results
+  writeln('Computed ', correct, '/', count,' correct values!');
+
+  // Shutdown and cleanup
+  clReleaseMemObject(input);
+  clReleaseMemObject(output);
+  clReleaseProgram(prog);
+  clReleaseKernel(kernel);
+  clReleaseCommandQueue(commands);
+  clReleaseContext(context);
+end.
+

+ 37 - 0
packages/opencl/fpmake.pp

@@ -0,0 +1,37 @@
+{$ifndef ALLPACKAGES}
+{$mode objfpc}{$H+}
+program fpmake;
+
+uses fpmkunit;
+
+Var
+  P : TPackage;
+  T : TTarget;
+begin
+  With Installer do
+    begin
+{$endif ALLPACKAGES}
+
+    P:=AddPackage('opencl');
+{$ifdef ALLPACKAGES}
+    P.Directory:='opencl';
+{$endif ALLPACKAGES}
+    P.Version:='2.2.2-0';
+    P.Author := ' Dmitry "skalogryz" Boyarintsev; Kronos group';
+    P.License := 'Library: modified BSD, header: LGPL with modification, ';
+    P.HomepageURL := 'www.freepascal.org';
+    P.Email := '';
+    P.Description := 'A OpenCL header';
+    P.NeedLibC:= true;
+
+    P.SourcePath.Add('src');
+    P.IncludePath.Add('src');
+
+    T:=P.Targets.AddUnit('cl.pp');
+    T:=P.Targets.AddUnit('cl_gl.pp');
+
+{$ifndef ALLPACKAGES}
+    Run;
+    end;
+end.
+{$endif ALLPACKAGES}

+ 1158 - 0
packages/opencl/src/cl.pp

@@ -0,0 +1,1158 @@
+(*******************************************************************************
+ * Copyright (c) 2008-2009 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and/or associated documentation files (the
+ * "Materials"), to deal in the Materials without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Materials, and to
+ * permit persons to whom the Materials are furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Materials.
+ *
+ * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+ ******************************************************************************)
+
+// ported to FPC by Dmitry 'skalogryz' Boyarintsev: 28th apr 2009
+// due to name conflict with type names, some constants have been renamed
+
+// Original C name           Ported_name
+// CL_DEVICE_TYPE            CL_DEVICE_TYPE_INFO
+// CL_DEVICE_LOCAL_MEM_TYPE  CL_DEVICE_LOCAL_MEM_TYPE_INFO
+// CL_CONTEXT_PROPERTIES     CL_CONTEXT_PROPERTIES_INFO
+// CL_CONTEXT_PLATFORM       CL_CONTEXT_PLATFORM_INFO
+// CL_FLOAT                  CL_FLOAT_TYPE
+// CL_MEM_FLAGS              CL_MEM_FLAGS_INFO
+// CL_IMAGE_FORMAT           CL_IMAGE_FORMAT_INFO
+
+unit cl;
+
+interface
+
+uses
+  ctypes;
+
+{$MACRO ON}
+
+{$IFDEF WINDOWS}
+  {$DEFINE DYNLINK}
+const
+  OpenCLlib = 'OpenCL.dll';
+  {$DEFINE extdecl := stdcall}
+{$ELSE}
+  //todo: LINUX
+  {$IFDEF DARWIN}
+  {$linkframework OpenCL}
+  {$ENDIF}
+  {$DEFINE extdecl := cdecl}
+{$ENDIF}
+
+{cl_platform.h}
+
+const
+  CL_PLATFORM_NVIDIA  = $3001; // NVidia specific platform value
+
+{* scalar types  *}
+
+type
+  intptr_t = PtrInt;
+
+  cl_char     = cint8;
+  cl_uchar    = cuint8;
+  cl_short    = cint16;
+  cl_ushort   = cuint16;
+  cl_int      = cint32;
+  cl_uint     = cuint32;
+  cl_long     = cint64;
+  cl_ulong    = cuint64;
+
+  cl_half     = cuint16;
+  cl_float    = cfloat;
+  cl_double   = cdouble;
+
+  Pcl_char     = ^cl_char;
+  Pcl_uchar    = ^cl_uchar;
+  Pcl_short    = ^cl_short;
+  Pcl_ushort   = ^cl_ushort;
+  Pcl_int      = ^cl_int;
+  Pcl_uint     = ^cl_uint;
+  Pcl_long     = ^cl_long;
+  Pcl_ulong    = ^cl_ulong;
+
+  Pcl_half     = ^cl_half;
+  Pcl_float    = ^cl_float;
+  Pcl_double   = ^cl_double;
+
+
+const
+  CL_CHAR_BIT         = 8;
+  CL_SCHAR_MAX        = 127;
+  CL_SCHAR_MIN        = (-127-1);
+  CL_CHAR_MAX         = CL_SCHAR_MAX;
+  CL_CHAR_MIN         = CL_SCHAR_MIN;
+  CL_UCHAR_MAX        = 255;
+  CL_SHRT_MAX         = 32767;
+  CL_SHRT_MIN         = (-32767-1);
+  CL_USHRT_MAX        = 65535;
+  CL_INT_MAX          = 2147483647;
+  CL_INT_MIN          = (-2147483647-1);
+  CL_UINT_MAX         = $ffffffff;
+  CL_LONG_MAX         = $7FFFFFFFFFFFFFFF;
+  CL_LONG_MIN         = -$7FFFFFFFFFFFFFFF - 1;
+  CL_ULONG_MAX        = $FFFFFFFFFFFFFFFF;
+
+  CL_FLT_DIG          = 6;
+  CL_FLT_MANT_DIG     = 24;
+  CL_FLT_MAX_10_EXP   = +38;
+  CL_FLT_MAX_EXP      = +128;
+  CL_FLT_MIN_10_EXP   = -37;
+  CL_FLT_MIN_EXP      = -125;
+  CL_FLT_RADIX        = 2;
+//  CL_FLT_MAX          = 0x1.fffffep127f;
+//  CL_FLT_MIN          = 0x1.0p-126f;
+//  CL_FLT_EPSILON      = 0x1.0p-23f;
+
+  CL_DBL_DIG          = 15;
+  CL_DBL_MANT_DIG     = 53;
+  CL_DBL_MAX_10_EXP   = +308;
+  CL_DBL_MAX_EXP      = +1024;
+  CL_DBL_MIN_10_EXP   = -307;
+  CL_DBL_MIN_EXP      = -1021;
+  CL_DBL_RADIX        = 2;
+// CL_DBL_MAX          0x1.fffffffffffffp1023
+// CL_DBL_MIN          0x1.0p-1022
+// CL_DBL_EPSILON      0x1.0p-52
+
+{*
+ * Vector types
+ *
+ *  Note:   OpenCL requires that all types be naturally aligned.
+ *          This means that vector types must be naturally aligned.
+ *          For example, a vector of four floats must be aligned to
+ *          a 16 byte boundary (calculated as 4 * the natural 4-byte
+ *          alignment of the float).  The alignment qualifiers here
+ *          will only function properly if your compiler supports them
+ *          and if you don't actively work to defeat them.  For example,
+ *          in order for a cl_float4 to be 16 byte aligned in a struct,
+ *          the start of the struct must itself be 16-byte aligned.
+ *
+ *          Maintaining proper alignment is the user's responsibility.
+ *}
+type
+  cl_char2  = array [0..1] of cint8;
+  cl_char4  = array [0..3] of cint8;
+  cl_char8  = array [0..7] of cint8;
+  cl_char16 = array [0..15] of cint8;
+
+  cl_uchar2 = array [0..1] of cuint8;
+  cl_uchar4 = array [0..3] of cuint8;
+  cl_uchar8 = array [0..7] of cuint8;
+  cl_uchar16 = array [0..15] of cuint8;
+
+  cl_short2  = array [0..1] of cint16;
+  cl_short4  = array [0..3] of cint16;
+  cl_short8  = array [0..7] of cint16;
+  cl_short16 = array [0..15] of cint16;
+
+  cl_ushort2  = array [0..1] of cuint16;
+  cl_ushort4  = array [0..3] of cuint16;
+  cl_ushort8  = array [0..7] of cuint16;
+  cl_ushort16 = array [0..15] of cuint16;
+
+  cl_int2  = array [0..1] of cint32;
+  cl_int4  = array [0..3] of cint32;
+  cl_int8  = array [0..7] of cint32;
+  cl_int16 = array [0..15] of cint32;
+
+  cl_uint2  = array [0..1] of cuint32;
+  cl_uint4  = array [0..3] of cuint32;
+  cl_uint8  = array [0..7] of cuint32;
+  cl_uint16 = array [0..15] of cuint32;
+
+  cl_long2  = array [0..1] of cint64;
+  cl_long4  = array [0..3] of cint64;
+  cl_long8  = array [0..7] of cint64;
+  cl_long16 = array [0..15] of cint64;
+
+  cl_ulong2  = array [0..1] of cuint64;
+  cl_ulong4  = array [0..3] of cuint64;
+  cl_ulong8  = array [0..7] of cuint64;
+  cl_ulong16 = array [0..15] of cuint64;
+
+  cl_float2  = array [0..1] of cfloat;
+  cl_float4  = array [0..3] of cfloat;
+  cl_float8  = array [0..7] of cfloat;
+  cl_float16 = array [0..15] of cfloat;
+
+  cl_double2  = array [0..1] of cdouble;
+  cl_double4  = array [0..3] of cdouble;
+  cl_double8  = array [0..7] of cdouble;
+  cl_double16 = array [0..15] of cdouble;
+
+{* There are no vector types for half *}
+
+// ****************************************************************************
+
+{cl.h}
+
+type
+  _cl_platform_id   = record end;
+  _cl_device_id     = record end;
+  _cl_context       = record end;
+  _cl_command_queue = record end;
+  _cl_mem           = record end;
+  _cl_program       = record end;
+  _cl_kernel        = record end;
+  _cl_event         = record end;
+  _cl_sampler       = record end;
+
+  cl_platform_id    = ^_cl_platform_id;
+  cl_device_id      = ^_cl_device_id;
+  cl_context        = ^_cl_context;
+  cl_command_queue  = ^_cl_command_queue;
+  cl_mem            = ^_cl_mem;
+  cl_program        = ^_cl_program;
+  cl_kernel         = ^_cl_kernel;
+  cl_event          = ^_cl_event;
+  cl_sampler        = ^_cl_sampler;
+
+  Pcl_platform_id    = ^cl_platform_id;
+  Pcl_device_id      = ^cl_device_id;
+  Pcl_context        = ^cl_context;
+  Pcl_command_queue  = ^cl_command_queue;
+  Pcl_mem            = ^cl_mem;
+  Pcl_program        = ^cl_program;
+  Pcl_kernel         = ^cl_kernel;
+  Pcl_event          = ^cl_event;
+  Pcl_sampler        = ^cl_sampler;
+
+
+  cl_bool = cl_uint; //  WARNING!  Unlike cl_ types in cl_platform.h, cl_bool is not guaranteed to be the same size as the bool in kernels.
+  cl_bitfield                 = cl_ulong;
+  cl_device_type              = cl_bitfield;
+  cl_platform_info            = cl_uint;
+  cl_device_info              = cl_uint;
+  cl_device_address_info      = cl_bitfield;
+  cl_device_fp_config         = cl_bitfield;
+  cl_device_mem_cache_type    = cl_uint;
+  cl_device_local_mem_type    = cl_uint;
+  cl_device_exec_capabilities = cl_bitfield;
+  cl_command_queue_properties = cl_bitfield;
+
+  cl_context_properties   = intptr_t;
+  cl_context_info         = cl_uint;
+  cl_command_queue_info   = cl_uint;
+  cl_channel_order        = cl_uint;
+  cl_channel_type         = cl_uint;
+  cl_mem_flags            = cl_bitfield;
+  cl_mem_object_type      = cl_uint;
+  cl_mem_info             = cl_uint;
+  cl_image_info           = cl_uint;
+  cl_addressing_mode      = cl_uint;
+  cl_filter_mode          = cl_uint;
+  cl_sampler_info         = cl_uint;
+  cl_map_flags            = cl_bitfield;
+  cl_program_info         = cl_uint;
+  cl_program_build_info   = cl_uint;
+  cl_build_status         = cl_int;
+  cl_kernel_info            = cl_uint;
+  cl_kernel_work_group_info = cl_uint;
+  cl_event_info             = cl_uint;
+  cl_command_type           = cl_uint;
+  cl_profiling_info         = cl_uint;
+
+  _cl_image_format = packed record
+    image_channel_order     : cl_channel_order;
+    image_channel_data_type : cl_channel_type;
+  end;
+  cl_image_format = _cl_image_format;
+
+  Pcl_context_properties  = ^cl_context_properties;
+  Pcl_image_format        = ^cl_image_format;
+
+const
+// Error Codes
+  CL_SUCCESS                                  = 0;
+  CL_DEVICE_NOT_FOUND                         = -1;
+  CL_DEVICE_NOT_AVAILABLE                     = -2;
+  CL_DEVICE_COMPILER_NOT_AVAILABLE            = -3;
+  CL_MEM_OBJECT_ALLOCATION_FAILURE            = -4;
+  CL_OUT_OF_RESOURCES                         = -5;
+  CL_OUT_OF_HOST_MEMORY                       = -6;
+  CL_PROFILING_INFO_NOT_AVAILABLE             = -7;
+  CL_MEM_COPY_OVERLAP                         = -8;
+  CL_IMAGE_FORMAT_MISMATCH                    = -9;
+  CL_IMAGE_FORMAT_NOT_SUPPORTED               = -10;
+  CL_BUILD_PROGRAM_FAILURE                    = -11;
+  CL_MAP_FAILURE                              = -12;
+
+  CL_INVALID_VALUE                            = -30;
+  CL_INVALID_DEVICE_TYPE                      = -31;
+  CL_INVALID_PLATFORM                         = -32;
+  CL_INVALID_DEVICE                           = -33;
+  CL_INVALID_CONTEXT                          = -34;
+  CL_INVALID_QUEUE_PROPERTIES                 = -35;
+  CL_INVALID_COMMAND_QUEUE                    = -36;
+  CL_INVALID_HOST_PTR                         = -37;
+  CL_INVALID_MEM_OBJECT                       = -38;
+  CL_INVALID_IMAGE_FORMAT_DESCRIPTOR          = -39;
+  CL_INVALID_IMAGE_SIZE                       = -40;
+  CL_INVALID_SAMPLER                          = -41;
+  CL_INVALID_BINARY                           = -42;
+  CL_INVALID_BUILD_OPTIONS                    = -43;
+  CL_INVALID_PROGRAM                          = -44;
+  CL_INVALID_PROGRAM_EXECUTABLE               = -45;
+  CL_INVALID_KERNEL_NAME                      = -46;
+  CL_INVALID_KERNEL_DEFINITION                = -47;
+  CL_INVALID_KERNEL                           = -48;
+  CL_INVALID_ARG_INDEX                        = -49;
+  CL_INVALID_ARG_VALUE                        = -50;
+  CL_INVALID_ARG_SIZE                         = -51;
+  CL_INVALID_KERNEL_ARGS                      = -52;
+  CL_INVALID_WORK_DIMENSION                   = -53;
+  CL_INVALID_WORK_GROUP_SIZE                  = -54;
+  CL_INVALID_WORK_ITEM_SIZE                   = -55;
+  CL_INVALID_GLOBAL_OFFSET                    = -56;
+  CL_INVALID_EVENT_WAIT_LIST                  = -57;
+  CL_INVALID_EVENT                            = -58;
+  CL_INVALID_OPERATION                        = -59;
+  CL_INVALID_GL_OBJECT                        = -60;
+  CL_INVALID_BUFFER_SIZE                      = -61;
+  CL_INVALID_MIP_LEVEL                        = -62;
+
+// OpenCL Version
+  CL_VERSION_1_0                              = 1;
+
+// cl_bool
+  CL_FALSE                                    = 0;
+  CL_TRUE                                     = 1;
+
+// cl_platform_info
+  CL_PLATFORM_PROFILE                         = $0900;
+  CL_PLATFORM_VERSION                         = $0901;
+  CL_PLATFORM_NAME                            = $0902;
+  CL_PLATFORM_VENDOR                          = $0903;
+
+// cl_device_type - bitfield
+  CL_DEVICE_TYPE_DEFAULT                      = (1 shl 0);
+  CL_DEVICE_TYPE_CPU                          = (1 shl 1);
+  CL_DEVICE_TYPE_GPU                          = (1 shl 2);
+  CL_DEVICE_TYPE_ACCELERATOR                  = (1 shl 3);
+  CL_DEVICE_TYPE_ALL                          = $FFFFFFFF;
+
+// cl_device_info
+  CL_DEVICE_TYPE_INFO                         = $1000; // CL_DEVICE_TYPE
+  CL_DEVICE_VENDOR_ID                         = $1001;
+  CL_DEVICE_MAX_COMPUTE_UNITS                 = $1002;
+  CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS          = $1003;
+  CL_DEVICE_MAX_WORK_GROUP_SIZE               = $1004;
+  CL_DEVICE_MAX_WORK_ITEM_SIZES               = $1005;
+  CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR       = $1006;
+  CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT      = $1007;
+  CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT        = $1008;
+  CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG       = $1009;
+  CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT      = $100A;
+  CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE     = $100B;
+  CL_DEVICE_MAX_CLOCK_FREQUENCY               = $100C;
+  CL_DEVICE_ADDRESS_BITS                      = $100D;
+  CL_DEVICE_MAX_READ_IMAGE_ARGS               = $100E;
+  CL_DEVICE_MAX_WRITE_IMAGE_ARGS              = $100F;
+  CL_DEVICE_MAX_MEM_ALLOC_SIZE                = $1010;
+  CL_DEVICE_IMAGE2D_MAX_WIDTH                 = $1011;
+  CL_DEVICE_IMAGE2D_MAX_HEIGHT                = $1012;
+  CL_DEVICE_IMAGE3D_MAX_WIDTH                 = $1013;
+  CL_DEVICE_IMAGE3D_MAX_HEIGHT                = $1014;
+  CL_DEVICE_IMAGE3D_MAX_DEPTH                 = $1015;
+  CL_DEVICE_IMAGE_SUPPORT                     = $1016;
+  CL_DEVICE_MAX_PARAMETER_SIZE                = $1017;
+  CL_DEVICE_MAX_SAMPLERS                      = $1018;
+  CL_DEVICE_MEM_BASE_ADDR_ALIGN               = $1019;
+  CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE          = $101A;
+  CL_DEVICE_SINGLE_FP_CONFIG                  = $101B;
+  CL_DEVICE_GLOBAL_MEM_CACHE_TYPE             = $101C;
+  CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE         = $101D;
+  CL_DEVICE_GLOBAL_MEM_CACHE_SIZE             = $101E;
+  CL_DEVICE_GLOBAL_MEM_SIZE                   = $101F;
+  CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE          = $1020;
+  CL_DEVICE_MAX_CONSTANT_ARGS                 = $1021;
+  CL_DEVICE_LOCAL_MEM_TYPE_INFO               = $1022; // CL_DEVICE_LOCAL_MEM_TYPE
+  CL_DEVICE_LOCAL_MEM_SIZE                    = $1023;
+  CL_DEVICE_ERROR_CORRECTION_SUPPORT          = $1024;
+  CL_DEVICE_PROFILING_TIMER_RESOLUTION        = $1025;
+  CL_DEVICE_ENDIAN_LITTLE                     = $1026;
+  CL_DEVICE_AVAILABLE                         = $1027;
+  CL_DEVICE_COMPILER_AVAILABLE                = $1028;
+  CL_DEVICE_EXECUTION_CAPABILITIES            = $1029;
+  CL_DEVICE_QUEUE_PROPERTIES                  = $102A;
+  CL_DEVICE_NAME                              = $102B;
+  CL_DEVICE_VENDOR                            = $102C;
+  CL_DRIVER_VERSION                           = $102D;
+  CL_DEVICE_PROFILE                           = $102E;
+  CL_DEVICE_VERSION                           = $102F;
+  CL_DEVICE_EXTENSIONS                        = $1030;
+  CL_DEVICE_PLATFORM                          = $1031;
+
+// cl_device_address_info - bitfield
+  CL_DEVICE_ADDRESS_32_BITS                   = (1 shl 0);
+  CL_DEVICE_ADDRESS_64_BITS                   = (1 shl 1);
+
+// cl_device_fp_config - bitfield
+  CL_FP_DENORM                                = (1 shl 0);
+  CL_FP_INF_NAN                               = (1 shl 1);
+  CL_FP_ROUND_TO_NEAREST                      = (1 shl 2);
+  CL_FP_ROUND_TO_ZERO                         = (1 shl 3);
+  CL_FP_ROUND_TO_INF                          = (1 shl 4);
+  CL_FP_FMA                                   = (1 shl 5);
+
+// cl_device_mem_cache_type
+  CL_NONE                                     = $0;
+  CL_READ_ONLY_CACHE                          = $1;
+  CL_READ_WRITE_CACHE                         = $2;
+
+// cl_device_local_mem_type
+  CL_LOCAL                                    = $1;
+  CL_GLOBAL                                   = $2;
+
+// cl_device_exec_capabilities - bitfield
+  CL_EXEC_KERNEL                              = (1 shl 0);
+  CL_EXEC_NATIVE_KERNEL                       = (1 shl 1);
+
+// cl_command_queue_properties - bitfield
+  CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE      = (1 shl 0);
+  CL_QUEUE_PROFILING_ENABLE                   = (1 shl 1);
+
+// cl_context_info
+  CL_CONTEXT_REFERENCE_COUNT                  = $1080;
+  CL_CONTEXT_NUM_DEVICES                      = $1081;
+  CL_CONTEXT_DEVICES                          = $1082;
+  CL_CONTEXT_PROPERTIES_INFO                  = $1083; // CL_CONTEXT_PROPERTIES
+  CL_CONTEXT_PLATFORM_INFO                    = $1084; // CL_CONTEXT_PLATFORM
+
+// cl_command_queue_info
+  CL_QUEUE_CONTEXT                            = $1090;
+  CL_QUEUE_DEVICE                             = $1091;
+  CL_QUEUE_REFERENCE_COUNT                    = $1092;
+  CL_QUEUE_PROPERTIES                         = $1093;
+
+// cl_mem_flags - bitfield
+  CL_MEM_READ_WRITE                           = (1 shl 0);
+  CL_MEM_WRITE_ONLY                           = (1 shl 1);
+  CL_MEM_READ_ONLY                            = (1 shl 2);
+  CL_MEM_USE_HOST_PTR                         = (1 shl 3);
+  CL_MEM_ALLOC_HOST_PTR                       = (1 shl 4);
+  CL_MEM_COPY_HOST_PTR                        = (1 shl 5);
+
+// cl_channel_order
+  CL_R                                        = $10B0;
+  CL_A                                        = $10B1;
+  CL_RG                                       = $10B2;
+  CL_RA                                       = $10B3;
+  CL_RGB                                      = $10B4;
+  CL_RGBA                                     = $10B5;
+  CL_BGRA                                     = $10B6;
+  CL_ARGB                                     = $10B7;
+  CL_INTENSITY                                = $10B8;
+  CL_LUMINANCE                                = $10B9;
+
+// cl_channel_type
+  CL_SNORM_INT8                               = $10D0;
+  CL_SNORM_INT16                              = $10D1;
+  CL_UNORM_INT8                               = $10D2;
+  CL_UNORM_INT16                              = $10D3;
+  CL_UNORM_SHORT_565                          = $10D4;
+  CL_UNORM_SHORT_555                          = $10D5;
+  CL_UNORM_INT_101010                         = $10D6;
+  CL_SIGNED_INT8                              = $10D7;
+  CL_SIGNED_INT16                             = $10D8;
+  CL_SIGNED_INT32                             = $10D9;
+  CL_UNSIGNED_INT8                            = $10DA;
+  CL_UNSIGNED_INT16                           = $10DB;
+  CL_UNSIGNED_INT32                           = $10DC;
+  CL_HALF_FLOAT                               = $10DD;
+  CL_FLOAT_TYPE                               = $10DE; // CL_FLOAT
+
+// cl_mem_object_type
+  CL_MEM_OBJECT_BUFFER                        = $10F0;
+  CL_MEM_OBJECT_IMAGE2D                       = $10F1;
+  CL_MEM_OBJECT_IMAGE3D                       = $10F2;
+
+// cl_mem_info
+  CL_MEM_TYPE                                 = $1100;
+  CL_MEM_FLAGS_INFO                           = $1101; // CL_MEM_FLAGS
+  CL_MEM_SIZE                                 = $1102;
+  CL_MEM_HOST_PTR                             = $1103;
+  CL_MEM_MAP_COUNT                            = $1104;
+  CL_MEM_REFERENCE_COUNT                      = $1105;
+  CL_MEM_CONTEXT                              = $1106;
+
+// cl_image_info
+  CL_IMAGE_FORMAT_INFO                        = $1110; // CL_IMAGE_FORMAT
+  CL_IMAGE_ELEMENT_SIZE                       = $1111;
+  CL_IMAGE_ROW_PITCH                          = $1112;
+  CL_IMAGE_SLICE_PITCH                        = $1113;
+  CL_IMAGE_WIDTH                              = $1114;
+  CL_IMAGE_HEIGHT                             = $1115;
+  CL_IMAGE_DEPTH                              = $1116;
+
+// cl_addressing_mode
+  CL_ADDRESS_NONE                             = $1130;
+  CL_ADDRESS_CLAMP_TO_EDGE                    = $1131;
+  CL_ADDRESS_CLAMP                            = $1132;
+  CL_ADDRESS_REPEAT                           = $1133;
+
+// cl_filter_mode
+  CL_FILTER_NEAREST                           = $1140;
+  CL_FILTER_LINEAR                            = $1141;
+
+// cl_sampler_info
+  CL_SAMPLER_REFERENCE_COUNT                  = $1150;
+  CL_SAMPLER_CONTEXT                          = $1151;
+  CL_SAMPLER_NORMALIZED_COORDS                = $1152;
+  CL_SAMPLER_ADDRESSING_MODE                  = $1153;
+  CL_SAMPLER_FILTER_MODE                      = $1154;
+
+// cl_map_flags - bitfield
+  CL_MAP_READ                                 = (1 shl 0);
+  CL_MAP_WRITE                                = (1 shl 1);
+
+// cl_program_info
+  CL_PROGRAM_REFERENCE_COUNT                  = $1160;
+  CL_PROGRAM_CONTEXT                          = $1161;
+  CL_PROGRAM_NUM_DEVICES                      = $1162;
+  CL_PROGRAM_DEVICES                          = $1163;
+  CL_PROGRAM_SOURCE                           = $1164;
+  CL_PROGRAM_BINARY_SIZES                     = $1165;
+  CL_PROGRAM_BINARIES                         = $1166;
+
+// cl_program_build_info
+  CL_PROGRAM_BUILD_STATUS                     = $1181;
+  CL_PROGRAM_BUILD_OPTIONS                    = $1182;
+  CL_PROGRAM_BUILD_LOG                        = $1183;
+
+// cl_build_status
+  CL_BUILD_SUCCESS                            = 0;
+  CL_BUILD_NONE                               = -1;
+  CL_BUILD_ERROR                              = -2;
+  CL_BUILD_IN_PROGRESS                        = -3;
+
+// cl_kernel_info
+  CL_KERNEL_FUNCTION_NAME                     = $1190;
+  CL_KERNEL_NUM_ARGS                          = $1191;
+  CL_KERNEL_REFERENCE_COUNT                   = $1192;
+  CL_KERNEL_CONTEXT                           = $1193;
+  CL_KERNEL_PROGRAM                           = $1194;
+
+// cl_kernel_work_group_info
+  CL_KERNEL_WORK_GROUP_SIZE                   = $11B0;
+  CL_KERNEL_COMPILE_WORK_GROUP_SIZE           = $11B1;
+  CL_KERNEL_LOCAL_MEM_SIZE                    = $11B2;
+
+// cl_event_info
+  CL_EVENT_COMMAND_QUEUE                      = $11D0;
+  CL_EVENT_COMMAND_TYPE                       = $11D1;
+  CL_EVENT_REFERENCE_COUNT                    = $11D2;
+  CL_EVENT_COMMAND_EXECUTION_STATUS           = $11D3;
+
+// cl_command_type
+  CL_COMMAND_NDRANGE_KERNEL                   = $11F0;
+  CL_COMMAND_TASK                             = $11F1;
+  CL_COMMAND_NATIVE_KERNEL                    = $11F2;
+  CL_COMMAND_READ_BUFFER                      = $11F3;
+  CL_COMMAND_WRITE_BUFFER                     = $11F4;
+  CL_COMMAND_COPY_BUFFER                      = $11F5;
+  CL_COMMAND_READ_IMAGE                       = $11F6;
+  CL_COMMAND_WRITE_IMAGE                      = $11F7;
+  CL_COMMAND_COPY_IMAGE                       = $11F8;
+  CL_COMMAND_COPY_IMAGE_TO_BUFFER             = $11F9;
+  CL_COMMAND_COPY_BUFFER_TO_IMAGE             = $11FA;
+  CL_COMMAND_MAP_BUFFER                       = $11FB;
+  CL_COMMAND_MAP_IMAGE                        = $11FC;
+  CL_COMMAND_UNMAP_MEM_OBJECT                 = $11FD;
+  CL_COMMAND_MARKER                           = $11FE;
+  CL_COMMAND_WAIT_FOR_EVENTS                  = $11FF;
+  CL_COMMAND_BARRIER                          = $1200;
+  CL_COMMAND_ACQUIRE_GL_OBJECTS               = $1201;
+  CL_COMMAND_RELEASE_GL_OBJECTS               = $1202;
+
+// command execution status
+  CL_COMPLETE                                 = $0;
+  CL_RUNNING                                  = $1;
+  CL_SUBMITTED                                = $2;
+  CL_QUEUED                                   = $3;
+
+// cl_profiling_info
+  CL_PROFILING_COMMAND_QUEUED                 = $1280;
+  CL_PROFILING_COMMAND_SUBMIT                 = $1281;
+  CL_PROFILING_COMMAND_START                  = $1282;
+  CL_PROFILING_COMMAND_END                    = $1283;
+
+// ****************************************************************************
+
+  // Platform APIs
+function clGetPlatformIDs(
+  num_entries   : cl_uint;
+  platforms     : Pcl_platform_id;
+  num_platforms : Pcl_uint
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetPlatformIDs';
+
+function clGetPlatformInfo(
+  _platform    : cl_platform_id;
+  param_name   : cl_platform_info;
+  value_size   : csize_t;
+  value        : Pointer;
+  var size_ret : csize_t
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetPlatformInfo';
+
+  //  Device APIs
+function clGetDeviceIDs(
+  _platform       : cl_platform_id;
+  device_type     : cl_device_type;
+  num_entries     : cl_uint;
+  devices         : Pcl_device_id;
+  num_devices     : pcl_uint
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetDeviceIDs';
+
+function clGetDeviceInfo(
+  device       : cl_device_id;
+  param_name   : cl_device_info;
+  value_size   : csize_t;
+  value        : Pointer;
+  var size_ret : csize_t
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetDeviceInfo';
+
+  //  Context APIs
+type
+  TContextNotify = procedure (name: Pchar; data: Pointer; size: csize_t; data2: Pointer); extdecl;
+
+
+function clCreateContext(
+  properties      : Pcl_context_properties;
+  num_devices     : cl_uint;
+  devices         : Pcl_device_id;
+  notify          : TContextNotify;
+  user_data       : Pointer;
+  var errcode_ret : cl_int
+  ): cl_context; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clCreateContext';
+
+function clCreateContextFromType(
+  properties      : Pcl_context_properties;
+  device_type     : cl_device_type;
+  notify          : TContextNotify;
+  user_data       : Pointer;
+  var errcode_ret : cl_int
+  ): cl_context; extdecl;
+  external name 'clCreateContextFromType';
+
+function clRetainContext(context: cl_context): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clRetainContext';
+
+function clReleaseContext(context: cl_context): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clReleaseContext';
+
+function clGetContextInfo(
+  context       : cl_context;
+  param_name    : cl_context_info;
+  value_size    : csize_t;
+  value         : Pointer;
+  var size_ret  : csize_t
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetContextInfo';
+
+  //  Command Queue APIs
+function clCreateCommandQueue(
+  context    : cl_context;
+  device     : cl_device_id;
+  properties : cl_command_queue_properties;
+  errcode_ret: cl_int
+  ): cl_command_queue; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clCreateCommandQueue';
+
+function clRetainCommandQueue(command_queue : cl_command_queue): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clRetainCommandQueue';
+
+function clReleaseCommandQueue(command_queue : cl_command_queue): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clReleaseCommandQueue';
+
+function clGetCommandQueueInfo(
+  command_queue: cl_command_queue;
+  param_name   : cl_command_queue_info;
+  value_size   : csize_t;
+  value        : Pointer;
+  var size_ret : csize_t
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetCommandQueueInfo';
+
+function clSetCommandQueueProperty(
+  command_queue       : cl_command_queue;
+  properties          : cl_command_queue_properties;
+  enable              : cl_bool;
+  var old_properties  : cl_command_queue_properties
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clSetCommandQueueProperty';
+
+  //  Memory Object APIs
+function clCreateBuffer(
+  context          : cl_context;
+  flags            : cl_mem_flags;
+  size             : csize_t;
+  host_ptr         : Pointer;
+  var errcode_ret  : cl_int
+  ): cl_mem; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clCreateBuffer';
+
+function clCreateImage2D(
+  context         : cl_context;
+  flags   	      : cl_mem_flags;
+  image_format    : Pcl_image_format;
+  image_width     : csize_t;
+  image_height    : csize_t;
+  image_row_pitch : csize_t;
+  host_ptr        : Pointer;
+  var errcode_ret : cl_int
+  ): cl_mem; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clCreateImage2D';
+
+function clCreateImage3D(
+  context 			    : cl_context;
+  flags 			      : cl_mem_flags;
+  image_format      : Pcl_image_format;
+  image_width 	    : csize_t;
+  image_height      : csize_t;
+  image_depth 	    : csize_t;
+  image_row_pitch 	: csize_t;
+  image_slice_pitch : csize_t;
+  host_ptr 		      : Pointer;
+  var errcode_ret		: cl_int
+  ): cl_mem; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clCreateImage3D';
+
+function clRetainMemObject(memobj: cl_mem): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clRetainMemObject';
+
+function clReleaseMemObject(memobj: cl_mem): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clReleaseMemObject';
+
+function clGetSupportedImageFormats(
+  context		    	: cl_context;
+  flags 			    : cl_mem_flags;
+  image_type 		  : cl_mem_object_type;
+  num_entries 		: cl_uint;
+  image_formats   : Pcl_image_format;
+  var num_formats : cl_uint
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetSupportedImageFormats';
+
+function clGetMemObjectInfo(
+  memobj      	: cl_mem;
+  param_name    : cl_mem_info;
+  value_size    : csize_t;
+  value     	  : Pointer;
+  var size_ret  : csize_t
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetMemObjectInfo';
+
+function clGetImageInfo(
+  image         : cl_mem;
+  param_name    : cl_image_info;
+  value_size    : csize_t;
+  value         : Pointer;
+  var size_ret  : csize_t
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetImageInfo';
+
+  //  Sampler APIs
+function clCreateSampler(
+  context         : cl_context;
+  is_norm_coords  : cl_bool;
+  addr_mode       : cl_addressing_mode;
+  filter_mode     : cl_filter_mode;
+  var errcode_ret : cl_int
+  ): cl_sampler; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clCreateSampler';
+
+function clRetainSampler(sampler: cl_sampler): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clRetainSampler';
+
+function clReleaseSampler(sampler: cl_sampler): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clReleaseSampler';
+
+function clGetSamplerInfo(
+  sampler      : cl_sampler;
+  param_name   : cl_sampler_info;
+  value_size   : csize_t;
+  value        : Pointer;
+  var size_ret : csize_t
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetSamplerInfo';
+
+  //  Program Object APIs
+function clCreateProgramWithSource(
+  context         : cl_context;
+  count           : cl_uint;
+  strings         : PPChar;
+  lengths         : Pcsize_t;
+  var errcode_ret : cl_int
+  ): cl_program; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clCreateProgramWithSource';
+
+type
+  PPByte = ^PByte;
+
+function clCreateProgramWithBinary(
+  context     : cl_context;
+  num_devices : cl_uint;
+  device_list : Pcl_device_id;
+  lengths     : Pcsize_t;
+  binaries    : PPByte;
+  var binary_status: cl_int;
+  var errcode_ret: cl_int
+  ): cl_program; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clCreateProgramWithBinary';
+
+function clRetainProgram(_program: cl_program): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clRetainProgram';
+
+function clReleaseProgram(_program: cl_program): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clReleaseProgram';
+
+type
+  TProgramNotify = procedure (_program: cl_program; user_data: Pointer); extdecl;
+
+//extern   cl_int
+
+function clBuildProgram(
+  _program     : cl_program;
+  num_devices  : cl_uint;
+  device_list  : Pcl_device_id;
+  options      : PChar;
+  notify       : TProgramNotify;
+  user_data    : Pointer
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clBuildProgram';
+
+function clUnloadCompiler: cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clUnloadCompiler';
+
+function clGetProgramInfo(
+  _program      : cl_program;
+  param_name    : cl_program_info;
+  value_size    : csize_t;
+  value         : Pointer;
+  var size_ret  : csize_t
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetProgramInfo';
+
+function clGetProgramBuildInfo(
+  _program      : cl_program;
+  device        : cl_device_id;
+  param_name    : cl_program_build_info;
+  value_size    : csize_t;
+  value         : Pointer;
+  var size_ret  : csize_t
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetProgramBuildInfo';
+
+  //  Kernel Object APIs
+function clCreateKernel(
+  _program        : cl_program;
+  kernel_name     : PChar;
+  var errcode_ret : cl_int
+  ): cl_kernel; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clCreateKernel';
+
+function clCreateKernelsInProgram(
+  _program      : cl_program;
+  num_kernels   : cl_uint;
+  kernels       : Pcl_kernel;
+  var num_ret   : cl_uint
+  ): cl_int; extdecl; external name 'clCreateKernelsInProgram';
+
+function clRetainKernel(kernel: cl_kernel): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clRetainKernel';
+
+function clReleaseKernel(kernel: cl_kernel): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clReleaseKernel';
+
+function clSetKernelArg(
+  kernel    : cl_kernel;
+  arg_index : cl_uint;
+  arg_size  : csize_t;
+  arg_value : Pointer
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clSetKernelArg';
+
+function clGetKernelInfo(
+  kernel        : cl_kernel;
+  param_name    : cl_kernel_info;
+  value_size    : csize_t;
+  value         : Pointer;
+  var size_ret  : csize_t
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetKernelInfo';
+
+function clGetKernelWorkGroupInfo(
+  kernel        : cl_kernel;
+  device        : cl_device_id;
+  param_name    : cl_kernel_work_group_info;
+  value_size    : csize_t;
+  value         : Pointer;
+  size_ret      : pcsize_t
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetKernelWorkGroupInfo';
+
+  //  Event Object APIs
+function clWaitForEvents(
+  num_events  : cl_uint;
+  event_list  : cl_event
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clWaitForEvents';
+
+function clGetEventInfo(
+  event         : cl_event;
+  param_name    : cl_event_info;
+  value_size    : csize_t;
+  value         : Pointer;
+  var size_ret  : csize_t
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetEventInfo';
+
+function clRetainEvent(event: cl_event): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clRetainEvent';
+
+function clReleaseEvent(event: cl_event): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clReleaseEvent';
+
+  //  Profiling APIs
+function clGetEventProfilingInfo(
+  event         : cl_event;
+  param_name    : cl_profiling_info;
+  value_size    : csize_t;
+  value         : Pointer;
+  var size_ret  : csize_t
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clGetEventProfilingInfo';
+
+  //  Flush and Finish APIs
+function clFlush(command_queue: cl_command_queue): cl_int; extdecl;
+  external  {$ifdef DYNLINK}opencllib{$endif} name 'clFlush';
+
+function clFinish(command_queue: cl_command_queue): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clFinish';
+
+  //  Enqueued Commands APIs
+function clEnqueueReadBuffer(
+  command_queue : cl_command_queue;
+  buffer        : cl_mem;
+  blocking_read : cl_bool;
+  offset        : csize_t;
+  cb            : csize_t;
+  ptr           : Pointer;
+  num_events    : cl_uint;
+  events_list   : Pcl_event;
+  event         : Pcl_event
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueReadBuffer';
+
+function clEnqueueWriteBuffer(
+  command_queue   : cl_command_queue;
+  buffer          : cl_mem;
+  blocking_write  : cl_bool;
+  offset          : csize_t;
+  cb              : csize_t;
+  ptr             : Pointer;
+  num_events      : cl_uint;
+  events_list     : Pcl_event;
+  event           : Pcl_event
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueWriteBuffer';
+
+function clEnqueueCopyBuffer(
+  command_queue : cl_command_queue;
+  src_buffer    : cl_mem;
+  dst_buffer    : cl_mem;
+  src_offset    : csize_t;
+  dst_offset    : csize_t;
+  cb            : csize_t;
+  num_events    : cl_uint;
+  events_list   : Pcl_event;
+  event         : Pcl_event
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueCopyBuffer';
+
+function clEnqueueReadImage(
+  command_queue : cl_command_queue;
+  image         : cl_mem;
+  blocking_read : cl_bool;
+  origin        : Pcsize_t;
+  region        : Pcsize_t;
+  row_pitch     : csize_t;
+  slice_pitch   : csize_t;
+  ptr           : Pointer;
+  num_events    : cl_uint;
+  events_list   : Pcl_event;
+  event         : Pcl_event
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueReadImage';
+
+function clEnqueueWriteImage(
+  command_queue   : cl_command_queue;
+  image           : cl_mem;
+  blocking_write  : cl_bool;
+  origin          : Pcsize_t;
+  region          : Pcsize_t;
+  row_pitch       : csize_t;
+  slice_pitch     : csize_t;
+  ptr             : Pointer;
+  num_events      : cl_uint;
+  events_list     : Pcl_event;
+  event           : Pcl_event
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueWriteImage';
+
+function clEnqueueCopyImage(
+  command_queue : cl_command_queue;
+  src_image     : cl_mem;
+  dst_image     : cl_mem;
+  src_origin    : Pcsize_t;
+  dst_origin    : Pcsize_t;
+  region        : Pcsize_t;
+  num_events    : cl_uint;
+  events_list   : Pcl_event;
+  event         : Pcl_event
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueCopyImage';
+
+function clEnqueueCopyImageToBuffer(
+  command_queue : cl_command_queue;
+  src_image     : cl_mem;
+  dst_buffre    : cl_mem;
+  src_origin    : Pcsize_t;
+  region        : Pcsize_t;
+  dst_offset    : csize_t;
+  num_events    : cl_uint;
+  events_list   : Pcl_event;
+  event         : Pcl_event
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueCopyImageToBuffer';
+
+function clEnqueueCopyBufferToImage(
+  command_queue : cl_command_queue;
+  src_buffer    : cl_mem;
+  dst_image     : cl_mem;
+  src_offset    : csize_t;
+  dst_origin    : Pcsize_t;
+  region        : Pcsize_t;
+  num_events    : cl_uint;
+  events_list   : Pcl_event;
+  event         : Pcl_event
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueCopyBufferToImage';
+
+function clEnqueueMapBuffer(
+  command_queue   : cl_command_queue;
+  buffer          : cl_mem;
+  blocking_map    : cl_bool;
+  map_flags       : cl_map_flags;
+  offset          : csize_t;
+  cb              : csize_t;
+  num_events      : cl_uint;
+  events_list     : Pcl_event;
+  event           : Pcl_event;
+  var errcode_ret : cl_int
+  ): Pointer; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueMapBuffer';
+
+function clEnqueueMapImage(
+  command_queue   : cl_command_queue;
+  image           : cl_mem;
+  blocking_map    : cl_bool;
+  map_flags       : cl_map_flags;
+  origin          : Pcsize_t;
+  region          : Pcsize_t;
+  row_pitch       : csize_t;
+  slice_pitch     : csize_t;
+  num_events      : cl_uint;
+  events_list     : Pcl_event;
+  event           : Pcl_event;
+  var errcode_ret : cl_int
+  ): Pointer; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueMapImage';
+
+function clEnqueueUnmapMemObject(
+  command_queue : cl_command_queue;
+  memobj        : cl_mem;
+  mapped_ptr    : Pointer;
+  num_events    : cl_uint;
+  events_list   : Pcl_event;
+  event         : Pcl_event
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueUnmapMemObject';
+
+function clEnqueueNDRangeKernel(
+  command_queue : cl_command_queue;
+  kernel        : cl_kernel;
+  work_dim      : cl_uint;
+  global_offset,
+  global_size,
+  local_size    : Pcsize_t;
+  num_events    : cl_uint;
+  events_list   : Pcl_event;
+  event         : Pcl_event
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueNDRangeKernel';
+
+function clEnqueueTask(
+  command_queue : cl_command_queue;
+  kernel        : cl_kernel;
+  num_events    : cl_uint;
+  events_list   : Pcl_event;
+  event         : Pcl_event
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueTask';
+
+type
+  TEnqueueUserProc = procedure (userdata: Pointer); extdecl;
+
+function clEnqueueNativeKernel(
+  command_queue   : cl_command_queue;
+  user_func       : TEnqueueUserProc;
+  args            : Pointer;
+  cb_args         : csize_t;
+  num_mem_objects : cl_uint;
+  mem_list        : Pcl_mem;
+  args_mem_loc    : PPointer;
+  num_events      : cl_uint;
+  event_wait_list : Pcl_event;
+  event           : Pcl_event
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueNativeKernel';
+
+function clEnqueueMarker(command_queue: cl_command_queue; event: Pcl_event
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueMarker';
+
+function clEnqueueWaitForEvents(command_queue: cl_command_queue;
+  num_events: cl_uint; event_list: Pcl_event
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueWaitForEvents';
+
+function clEnqueueBarrier(command_queue: cl_command_queue
+  ): cl_int; extdecl;
+  external {$ifdef DYNLINK}opencllib{$endif} name 'clEnqueueBarrier';
+
+implementation
+
+end.

+ 89 - 0
packages/opencl/src/cl_gl.pp

@@ -0,0 +1,89 @@
+(**********************************************************************************
+ * Copyright (c) 2008-2009 The Khronos Group Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and/or associated documentation files (the
+ * "Materials"), to deal in the Materials without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Materials, and to
+ * permit persons to whom the Materials are furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included
+ * in all copies or substantial portions of the Materials.
+ *
+ * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
+ **********************************************************************************)
+
+// ported to FPC by Dmitry 'skalogryz' Boyarintsev: 28th apr 2009
+
+unit cl_gl;
+
+interface
+
+uses
+  cl, gl, ctypes;
+
+ // NOTE:  Make sure that appropriate GL header file is included separately
+
+type
+  cl_gl_object_type   = cl_uint;
+  cl_gl_texture_info  = cl_uint;
+  cl_gl_platform_info = cl_uint;
+
+const
+// cl_gl_object_type
+  CL_GL_OBJECT_BUFFER       = $2000;
+  CL_GL_OBJECT_TEXTURE2D    = $2001;
+  CL_GL_OBJECT_TEXTURE3D    = $2002;
+  CL_GL_OBJECT_RENDERBUFFER = $2003;
+
+  // cl_gl_texture_info
+  CL_GL_TEXTURE_TARGET      = $2004;
+  CL_GL_MIPMAP_LEVEL        = $2005;
+
+function clCreateFromGLBuffer(context: cl_context; falgs: cl_mem_flags;
+  bufobj: GLuint; var errcode_ret: Integer
+  ): cl_mem; cdecl; external name 'clCreateFromGLBuffer';
+
+function clCreateFromGLTexture2D(context: cl_context;
+  flags: cl_mem_flags; target: GLenum; miplevel: GLint;
+  texture: GLuint; var errcode_ret: cl_int
+  ): cl_mem; cdecl; external name 'clCreateFromGLTexture2D';
+
+
+function clCreateFromGLTexture3D(context: cl_context; flags: cl_mem_flags;
+  target: GLenum; miplevel: GLint; texture: GLuint; var errorcode: cl_int
+  ): cl_mem; cdecl; external name 'clCreateFromGLTexture3D';
+
+function clCreateFromGLRenderbuffer(context: cl_context;
+  flags: cl_mem_flags; renderbuffer: GLuint; var errcode: cl_int
+  ): cl_mem; cdecl; external name 'clCreateFromGLRenderbuffer';
+
+function clGetGLObjectInfo(memobj: cl_mem; gl_object_type: cl_gl_object_type;
+  object_name: GLuint
+  ): cl_int; cdecl; external name 'clGetGLObjectInfo';
+
+function clGetGLTextureInfo(memobj: cl_mem; param_name: cl_gl_texture_info;
+  value_size: csize_t; value: Pointer; var size_ret: pcsize_t
+  ): cl_int; cdecl; external name 'clGetGLTextureInfo';
+
+function clEnqueueAcquireGLObjects(command_queue: cl_command_queue;
+  num_objects: cl_uint; mem_objects: Pcl_mem;
+  num_events: cl_uint; events_list : Pcl_event; event: Pcl_event
+  ): cl_int; cdecl; external name 'clEnqueueAcquireGLObjects';
+
+function clEnqueueReleaseGLObjects(command_queue: cl_command_queue;
+  num_objects: cl_uint; mem_objects: Pcl_mem;
+  num_events: cl_uint; events_list : Pcl_event; event: Pcl_event
+  ): cl_int; cdecl; external name 'clEnqueueReleaseGLObjects';
+
+implementation
+
+end.