Du x86 sur un système 64-bit avec Scons et MSVC

Comme mentionné précédemment, je suis en train de tenter de me mettre à DirectX 11. Histoire de varier, j’ai choisi la difficulté en n’utilisant pas Visual Studio, mais Sublime Text et Scons. Le tout avec le compilateur MSVC puisque les headers DX11 ne sont pas compatibles avec MinGW (du moins pas "out of the box").

Arrive le moment de linker avec d3d11.lib et autre. Et ... erreur. Impossible de trouver le symbole D3D11CreateDeviceAndSwapChain. Pourtant j’ai bien importé la librairie, bien set LIBPATH pour pointer sur le répertoire x86 ...

Certes. Mais par défaut, Scons utilise la version de MSVC correspondant au système hôte. Donc 64 bit dans mon cas. La solution est d’ajouter TARGET_ARCH='x86' dans l’appel au constructeur de Environment : l’ajouter ensuite par Append n’a pas d’effet.

Sublime Text 2 et SCons

Bon, autant poster ça quelque part au cas où ça aide quelqu'un, et histoire de ne pas l'oublier.

To the point. Un de mes amis (demoscener connu sous le pseudonyme d'xtrium, déjà mentionné sur ce site) travaille sur un moteur 3D, et puisque je vais donner un coup de main il faut bien compiler le projet. Il se sert de SConscript, je voulais tester Sublime Text sans utiliser la "superbe" console Windows. Donc, build personnalisé dans Sublime Text.

Pour ceux qui diront "Installe Linux" ?", je suis plus à l'aise sous Windows et j'aime mes logiciels habituels. Donc, pas de manchot ;)

Bref, voici le fichier sublime-build que j'ai ajouté dans le répertoire Packages/Users pour avoir un système de build SCons. Il se peut que l'encodage ne marche pas sur votre système, je me suis contenté de le faire fonctionner chez moi et n'ai pas cherché plus loin.

{
    "cmd": ["scons.bat"],
    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    "working_dir": "${project_path:${folder}}",
    "encoding": "cp1252"
}

La première ligne appelle l'exécutable SCons, et part de l'hypothèse que le dossier le contenant est dans le path.

La deuxième permet d'aller à la ligne coupable en double-cliquant sur un message d'erreur. Celle-ci ne fonctionne que pour GCC, j'en ai posté une pour Visual C++ ci-dessous.

La troisième paramètre le répertoire courant durant l'exécution de SCons, et part de l'hypothèse que les SConscripts sont dans le même dossier que le projet Sublime Text.

Quand à la quatrième ligne, elle supprime l'erreur [Decode error - output is not utf-8], du moins sur ma machine (Win7 64 bit, français). Je ne promets rien pour la vôtre.

En espérant que ça serve à quelqu'un !

Edit : Les headers DX11 refusant de compiler avec GCC, j'ai modifié mon environnement Scons pour utiliser Visual C++. Bien sûr, cela change le format du message d'erreur. Voilci donc la nouvelle expression régulière (pas de garantie sur la rigidité) que j'ai utilisée :

"file_regex": "^([^(]+)\\(([0-9]+)\\)() : (.*)$"