Inclusion récursive de fichiers en source OpenCL sous Xcode

Oct 15 2020

Je cherche à créer un programme hôte appelant du code OpenCL s'exécutant sur mon périphérique GPU. La source cl a la forme suivante:

#include "skip_mwc.cl"
typedef struct{ uint x; uint c; } mwc64x_state_t;
//blah...

Si je me débarrasse de la #includedirective et que je copie / colle le contenu de "skip_mwc.cl" directement dans cette source, je peux partiellement "construire" et au moins obtenir des erreurs, montrant que mon compilateur (compilateur clang9 cl) peut au moins reconnaître le code des noyaux. Avec l' #includeapproche, j'obtiens l'erreur suivante:

Build log::
<program source>:9:10: fatal error: 'skip_mwc.cl' file not found
#include "skip_mwc.cl"

J'ai vérifié et le fichier est là dans les chemins de recherche, donc j'ai tendance à croire que mon IDE Xcode n'indexe pas correctement les fichiers .cl pour effectuer l'inclusion automatique de fichiers (comme dans .c ou .cpp).

Je veux vraiment éviter d'avoir à copier / coller la source d'un fichier dans l'autre. Toutes les suggestions d'une personne familière avec Xcode, qui a rencontré ce problème et réussi à le résoudre, sont les bienvenues et nécessaires.

Merci

Réponses

1 ProjectPhysX Oct 16 2020 at 13:10

Deux solutions possibles:

  1. Définissez l' -I include_diroption du compilateur dans clBuildProgram(), voir également cette réponse .
  2. Lisez les deux fichiers à partir de C ++ avec fstreamleur contenu et concaténez-les.

Voir également l'option d'incorporer le code OpenCL dans l'exécutable via une macro de stringification .