Răsfoiți Sursa

+ 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 ani în urmă
părinte
comite
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/alh.inc 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.fpc 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
 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
 endif
 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
 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
@@ -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
 endif
 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
 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
@@ -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
 endif
 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
 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
@@ -1727,6 +1727,7 @@ TARGET_DIRS_WINCEUNITS=1
 TARGET_DIRS_CAIRO=1
 TARGET_DIRS_LIBXML=1
 TARGET_DIRS_GMP=1
+TARGET_DIRS_OPENCL=1
 endif
 ifeq ($(FULL_TARGET),i386-os2)
 TARGET_DIRS_HASH=1
@@ -2310,6 +2311,7 @@ TARGET_DIRS_IMLIB=1
 TARGET_DIRS_OPENGLES=1
 TARGET_DIRS_OBJCRTL=1
 TARGET_DIRS_COCOAINT=1
+TARGET_DIRS_OPENCL=1
 endif
 ifeq ($(FULL_TARGET),i386-emx)
 TARGET_DIRS_HASH=1
@@ -3767,6 +3769,7 @@ TARGET_DIRS_HTTPD20=1
 TARGET_DIRS_HTTPD22=1
 TARGET_DIRS_NUMLIB=1
 TARGET_DIRS_FCL-EXTRA=1
+TARGET_DIRS_OPENCL=1
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
 TARGET_DIRS_HASH=1
@@ -8542,6 +8545,51 @@ winceunits:
 	$(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
 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
 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
 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
-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_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
@@ -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
 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 \
-               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 \
-                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_os2=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.