Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Compilateur] CWC

Compilation intelligente du C++

    20 septembre 2016 à 4:44:47

    Bonjours, voici un projet qui s'adresse a tout amateur de C++,

     
    CWC est un ensemble d'outils pour faciliter la compilation sous Windows, c'est une surcouche aux compilateurs standards comme GCC/Clang.

    Le projet et son originalité

    On peut le voir comme un compilateur intelligent, il s'utilise de la même façon, mais avec de nombreux ajouts. Il peut donc être connecté à n'importe quel IDE et profiter de toutes ses fonctionnalités.

    Compilateur:

    CWC, n'est pas un compilateur en soi, tel un caméléon, il se connecte avec celui voulu et redirige ses entrées/sorties

    De base CWC offre 3 compilateur avec son module "LibRT":
    - LibRT_clang    : (Par defaut) Utilise Clang, compilateur servant entre autre pour la cross-compilation
    - LibRT_mingw  : Utilise MinGW, alternatif à Clang, support des exceptions
    - LibRT_mscv     : Utilise Clang, en compatibilité MSCV et son ABI

    Ligne de commande:

    La principal nouveauté est de pouvoir envoyer plusieurs commandes simultanément, avec les séparateurs suivant :

    | : Permet d'envoyer des commandes de façon simultané en multi-process, selon la puissance de votre processeur pour ne pas le surcharger. La sortie (output) est garanti de toujours être dans le même ordre, donc c'est toujours le même résultat qui est affiché

    : Permet de faire des séquences, il va attendre que les commandes précédentes soient terminer avant de continuer

    On peut donc faire quelque chose comme "buildObj | buildObj > Link"

    Exemple : "-c Src1.cpp -o Src1.o | -c Src2.cpp -o Src2.o > -o App.exe Src1.o Src2.o"

    Caractéristiques:

    GUI:
    Une gui conditionnel qui s'affiche si ce n'est pas une commande vannant d'un IDE. Parfait pour bien voir les erreurs, trié par fichier, avec Notepad++  pour éditer rapidement le tout.

    Fichier déjà à jour:
    Pour accélérer la compilation il est important de ne pas recompiler les fichiers objets déjà créé.
    Beaucoup d'IDE sont incapable de détecter correctement les modifications et résulte souvent en un exécutable erroné, dont certaine partie n'auront pas été à jour, causant de grave erreurs difficilement repérable.

    Cwc possède une détection béton, il vérifie toutes les dépendances de chaque fichier s'il y a modification, ainsi que tout changement de ligne de commande. Une commande comme "clean" est ainsi pratiquement obsolète.

    Compilation par dossier:
    Il est possible d’envoyé des dossier en ligne de commande, il va traiter tout les fichier à l'intérieur ce qui simplifier grandement les commandes.

    Compilation par dépendance (TODO):
    Avec un fichier .cpp en entré, il va détecter toute les headers en dépendances et compiler les fichier .cpp associer et ainsi de suite. L'avantage c'est que ça ne compile que les fichiers nécessaires et le binaire résultant est plus léger.

    Inclusion récursive de fichiers:
    Les compilateur peuvent normalement lire les fichier en ligne de commande avec le caractère '@', ici l'inclusion récursive de fichier est possible ce qui permet de faire des commandes très modulaire.

    Accepte les variables:
    On peut insérer des variables dans nos commandes, en utilisant les parenthèses ()
    Plusieurs variables importante sont prédéfinie pour simplifier la gestion des dossiers selon le type de build (x86, x64, Debug, O2, O3) qui requière des .o différents

    Sanitizer:
    Connecter à DrMemory, on peut passer au peigne fin toutes les erreurs de mémoire possibles

    En savoir plus sur le projet

    Genèse

    L'idée derrière CWC est de bien séparer le processus de compilation pour simplifier et maximiser les utilisations possibles. Initialement inclue à même l'IDE de mon second projet, c'était un gros morceau pas utilisé à son plein potentiel.
    Maintenant tout le monde peu en profité, on peut par exemple faire son propre IDE sans avoir à se soucier de la partie compilation en utilisant CWC.
    Les utilisation de CWC sont illimités, il gère pour vous, intelligemment, toutes les tâches embêtantes de la compilation.

     Exportation vers les plateformes supporté :

    Fonctionnel:

    • Windows
    • Web -> Emscriptem
    • CpcDos

    Todo:

    • Android
    • Linux
    • IOS
    • OSX

     Prochain Objectifs

    • Compilation pour  WebGL avec EMSC
    • Compilation pour Android avec le NDK
    • Compilation vers Linux
    • Compilation pour CpcDos



    Généralités et avancement

    C'est n'est que le tout début du logiciel, il se peut qu'il y ait des bogues et certaines choses ne sont pas géré.

    Téléchargement

    Portable Version:


    Cwc_x32_0005.zip

    -
    Edité par Maeiky 15 juin 2018 à 21:52:28

    • Partager sur Facebook
    • Partager sur Twitter

    GZE, un moteur multiplateforme, adapté pour de la 2D, 3D et création de logiciels.

      1 octobre 2016 à 7:21:37

      Nouvel Update: Le support de Web à été ajouté!
      Vous pouvez maintenant compiler en toute simplicité vers emscripten


      Téléchargement automatique des modules requis, configuration complète, sans même modifier les variables d’environnements, détection des navigateurs, lancement et connections avec emrun, etc.

      Pour l'instant un hello world, compatible toutes plateformes, est disponible. Vous pouvez compiler vers le web en un simple clique. :magicien:
      Beaucoup d'autres exemples d'utilisation sont à venir et bien d'autres features.

      Prochainement un gestionnaire de ressources virtuel sera inclue à CWC, pour une gestion optimale de ceux-ci, de façon multi-plateforme. Emscriptem étant un peu particulier pour les ressources, il faut un système béton pour permettre une transparence dans leur exportation et utilisation.
      • Partager sur Facebook
      • Partager sur Twitter

      GZE, un moteur multiplateforme, adapté pour de la 2D, 3D et création de logiciels.

        13 novembre 2016 à 16:22:46

        Salut Maeiky,

        Je vois que tu es toujours aussi prolifique en terme de logiciels, c'est hyper impressionnant!

        Du coup, cela veut-il dire que le moteur de jeu Nazara peut fonctionner sous CpcDOS grâce à ce nouveau logiciel?

        Si c'est le cas, avec ton moteur graphique GZE on pourrait faire des trucs énormes sous CpcDOS (jeux vidéos 3D, le rêve). Manque plus qu'un passionné et expert en prototypage de puces (connaissances en Verilog/VHDL) décident de créer un processeur massivement parallèle pour que CpcDOS, à l'aide d'un FPGA, devienne un système d'exploitation alternatif sérieux.

        Sinon, pour la compilation via emscripten, cela pourrait être très utile pour tous les Web OS qui souhaitent compiler des logiciels écrits en C++ de telle manière qu'ils soient natifs, ou bien même de créer plus facilement des versions online de certains logiciels déjà existants.

        En tout cas, je te souhaite une bonne continuation pour tous tes projets, et que celui-ci soit tout aussi utile à certains petits projets que l'a été et l'est encore GZE pour CpcDOS.

        Bonne soirée.

        • Partager sur Facebook
        • Partager sur Twitter
        Projet: cours "Histoire des OS" (titre provisoire). Stade: annulé
          14 décembre 2016 à 4:44:19

          Bonjours, j’ai été quelque peu absent, mais le projet reprend,

          colorguest a écrit:

          Du coup, cela veut-il dire que le moteur de jeu Nazara peut fonctionner sous CpcDOS grâce à ce nouveau logiciel?

          Non, pour diverses raisons. Surtout car Nazara utilise beaucoup trop de bibliothèques qu'il faudrait interfacer. Aussi c'est difficile à maintenir de mon coté, il faudrait que l'auteur maintienne l'interface Cwc, mais puisque que les sources changes aux 30 secondes, même si Cwc est très flexible (compilation par dossier et bientôt par arbre de dépendances) il y a souvent de petits détails a régler. C'est pour cette raison que je retire la compilation Nazara des démos.

          colorguest a écrit:

          Si c'est le cas, avec ton moteur graphique GZE on pourrait faire des trucs énormes sous CpcDOS (jeux vidéos 3D, le rêve).

          Oui c'est l'objectif de GZE, pour l'instant sous CpcDos ça fonctionne entièrement sur CPU, mais utiliser le GPU est une possibilité envisageable.

          colorguest a écrit:

          Manque plus qu'un passionné et expert en prototypage de puces (connaissances en Verilog/VHDL) décident de créer un processeur massivement parallèle pour que CpcDOS, à l'aide d'un FPGA, devienne un système d'exploitation alternatif sérieux.

          CpcDos utilise surtout l’architecture PC x86 basé sur le Dos, il reste optimal sur ce genre de système. D'un autre coté, GZE peut être utilisé sur n'importe quel hardware, comme je l'ai fait avec ma démo du Drum électronique.

          colorguest a écrit:

          Sinon, pour la compilation via emscripten, cela pourrait être très utile pour tous les Web OS qui souhaitent compiler des logiciels écrits en C++ de telle manière qu'ils soient natifs, ou bien même de créer plus facilement des versions online de certains logiciels déjà existants.

          Oui exactement, avis aux intéressé! :D

          À noté que GZE n'est pas obligé d'être utilisé, on peut compiler n'importe quels sources C++ ou C, avec Cwc, vers le Web.


          ----->  Pour ce qui est des nouveautés:

          J'ai changé le système d'update, du moteur GZE et des démos, sur Cwc, pour que le projet soit plus facile a suivre, celui-ci peu êtrefacilement mis-à-jour, a sa dernière version, avec le système de Git intégrer à Cwc

          Je repars sur des bases solides, pour que le tout soit aussi bien utilisable en C++ qu'en CW. Alors au lieu de commencer par la fin et tenter de présenter quelque chose de final, je vais y aller étape par étape pour qu'on puisse bien en comprendre l'utilisation et tout le potentiel.

          Je vais donc vous présenter des codes de démonstrations, étape par étape, avec les divers éléments pour faire des applications et jeux multi-plateformes.

          J'ai retravaillé les éléments de base, c'est à dire les conteneurs, ils se doivent d'être en béton car tout le reste repose sur ceux-ci,

          avec principalement comme critères:

          -Performance optimal, peu d'allocation, de-allocation
          -Ultra générique et simple d'utilisation, totalement dynamique
          -Gestion automatique de la mémoire, à l'aide du comptage par référence et pointeurs "weak", supporte la mémoire read-only de façon transparente
          -Très léger, à la compilation, binaire de faible taille, très important pour le Web

          ----> Aujourd'hui, je vous présente le conteneur "String" de GZE :

          -Suit le principe COW (Copy on Write)

          -Supporte l'UTF8 / UTF16 et UTF32 et toutes conversions possible entre eux

          -Directement compatible avec les autres conteneurs (Ressources & Arrays)

          -Emsc : Allocation de la mémoire directement coté Javascript, aucun besoin de recopie entre le C++ et JS


          On peu tester à l'instant ici:

          gzString example


          Plusieurs corrections ont été appliqué a Cwc, pour ceux qui le possède déjà, il vous suffit d'updater Cwc à partir de son menu, sinon il faut prendre la dernière version du post principal.


          • Partager sur Facebook
          • Partager sur Twitter

          GZE, un moteur multiplateforme, adapté pour de la 2D, 3D et création de logiciels.

            17 décembre 2016 à 14:14:21

            @Maeiky: Merci pour ta réponse.

            Dommage concernant le moteur Nazara, mais en y réfléchissant, cela ne me surprend pas. En effet, comme tu le dis, ce logiciel à besoin de beaucoup de bibliothèques pour fonctionner, et n'est pas pensé forcément pour s'en passer.

            Et comme tu le dis, l'auteur du logiciel n'est pas forcément intéressé par le support de ton compilateur, et encore moins pour le développement d'un portage de son moteur sous CpcDOS.

            Bref, pour un projet aussi dynamique, s'il n'y a pas une volonté de rendre de base le logiciel fonctionnel avec une certaine plateforme logicielle, c'est assez compliqué à maintenir et à développer.

            ____

            Concernant l'idée du processeur multi-cores, je pensais d'avantage à un coprocesseur comme les anciens modèles de Xeon Phi, qui serait accessible via une carte fille en PCIe, CpcDos tournant sur le processeur principal en x86.

            Je pensais à la solution FPGA, car la fabrication d'une telle puce en dur (ASIC) coûterait trop cher pour une utilisation aussi restreinte, mais aussi car il y a maintenant une architecture processeur qui pourrait être intéressante à modifier pour en faire une architecture massivement parallèle: le SuperH.

            En effet, les brevets du SH2 ont expirés il y a quelques années, permettant la création d'une puce "logique" en VHDL ou Verilog, le jCore J2, et les brevets concernant le SH4 ne vont pas tarder à l'être bientôt, permettant la création du J4.

            Personnellement, je verrais bien une puce avec plus de 500 coeurs J4, chacun avec leurs unités de calcul 128-bits. Quoique le J2 a également beaucoup de potentiel, surtout s'il reprend la particularité du SH-2 d'avoir des instructions 16-bits (donc, capacité à traiter des nombres int au format 16-bits, ce qui semble être utile dans le domaine du machine learning).

            Bon, après, il y a d'autres options:

            • Une puce ARM multi-coeurs pourrait également sortir et être commercialiser sous forme de carte PCIe qui sait.
            • Intel pourrait également sortir une version réduite de ses nouveaux Xeon Phi (architecture dérivée de celle des Atom) en tant que processeur principal (j'ai vu que Windows pouvait tourner dessus et exploiter tous les threads).

            Mais je crois plus à la solution home-made qu'à une solution d'une entreprise, car la rentabilité ne sera pas forcément là.

            _____

            En tout cas, merci encore pour ta réponse, et bonne continuation pour tes projets.

            -
            Edité par colorguest 17 décembre 2016 à 14:26:50

            • Partager sur Facebook
            • Partager sur Twitter
            Projet: cours "Histoire des OS" (titre provisoire). Stade: annulé
              20 janvier 2017 à 10:36:02

              Maeiky a écrit:

              Non, pour diverses raisons. Surtout car Nazara utilise beaucoup trop de bibliothèques qu'il faudrait interfacer. Aussi c'est difficile à maintenir de mon coté, il faudrait que l'auteur maintienne l'interface Cwc, mais puisque que les sources changes aux 30 secondes, même si Cwc est très flexible (compilation par dossier et bientôt par arbre de dépendances) il y a souvent de petits détails a régler. C'est pour cette raison que je retire la compilation Nazara des démos.

              colorguest a écrit:

              Dommage concernant le moteur Nazara, mais en y réfléchissant, cela ne me surprend pas. En effet, comme tu le dis, ce logiciel à besoin de beaucoup de bibliothèques pour fonctionner, et n'est pas pensé forcément pour s'en passer.

              Beuh ? :(

              Pour les bibliothèques, j'utilise "à peine" OpenAL, chipmunk, FreeType, OpenGL, Lua, Newton et sndfile, ces bibliothèques qui sont utilisées par d'autres projets, donc ça pourrait leur bénéficier aussi :)

              Après pour le coup des sources qui changent régulièrement, ça risque d'être le cas de beaucoup de logiciels aussi !

              colorguest a écrit:

              Et comme tu le dis, l'auteur du logiciel n'est pas forcément intéressé par le support de ton compilateur, et encore moins pour le développement d'un portage de son moteur sous CpcDOS.

              On m'a surtout jamais rien demandé :D

              • Partager sur Facebook
              • Partager sur Twitter
              Nazara Engine | Discord NaN ! (Chat dédié à la programmation) | Ma chaîne Twitch (développement)

              [Compilateur] CWC

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown