Die OpenCL-Specifikation enthält bei der Übergabe von Makros als Kommandozeilenparameter eine Falle für alle welche die Syntax des gcc gewohnt sind. Während bei GCC -DMACRO[=WERT] angesagt ist, ist der Parameter in OpenCL mit einem Leerzeichen spezifiziert, also -D MACRO[=WERT].

Die AMD und NVIDIA-Platformen kommen wunderbar mit der vom GCC gewohnten, allerdings nicht standardkonformen, Syntax zurecht. Apple ist hier wählerischer, und so bekommt man bei Verwendung der von GCC gewohnten Variante mitunter den Fehlercode CL_INVALID_BUILD_OPTIONS. In PyOpenCL wird daraus dann folgende Fehlermeldung: pyopencl.RuntimeError: clBuildProgram failed: invalid build options - Leider geht aus der Fehlermeldung nicht so exakt hervor, was den Compiler genau stört. Tatsächlich ist dies auch gar nicht so einfach zu beantworten, denn der Compiler scheint tatsächlich nur ein Problem zu haben, wenn die Kommandozeile nach einen -DFOO endet. Ein -DFOO -DBLA verarbeitet er völlig erwartungsgemäß.

Natürlich liegt der Fehler hier aber beim Anwender, eine standardkonforme Spezifikation der Macros funktioniert immer. Ungeschickt ist natürlich das etwas inkonsistente Handling der Parameter, welches es mitunter schwierig macht den Fehler zu finden.