From 20e736212de4c94bed733d254a2f3fb1c35a8a29 Mon Sep 17 00:00:00 2001 From: Yann Date: Mon, 17 Jun 2024 09:12:57 +0200 Subject: [PATCH 01/29] feat(graphic): add socket client class with some basic methods --- graphic/src/CMakeLists.txt | 1 + graphic/src/client/CMakeLists.txt | 3 + graphic/src/client/Client.cpp | 180 ++++++++++++++++++++++++++++++ graphic/src/client/Client.hpp | 105 +++++++++++++++++ graphic/src/main.cpp | 30 +++-- 5 files changed, 309 insertions(+), 10 deletions(-) create mode 100644 graphic/src/client/CMakeLists.txt create mode 100644 graphic/src/client/Client.cpp create mode 100644 graphic/src/client/Client.hpp diff --git a/graphic/src/CMakeLists.txt b/graphic/src/CMakeLists.txt index 1de6a065..37170a7c 100644 --- a/graphic/src/CMakeLists.txt +++ b/graphic/src/CMakeLists.txt @@ -13,3 +13,4 @@ target_link_libraries(zappy_gui zappy_gui_src) ## Add subdirectories add_subdirectory(app) +add_subdirectory(client) diff --git a/graphic/src/client/CMakeLists.txt b/graphic/src/client/CMakeLists.txt new file mode 100644 index 00000000..9f4e9b74 --- /dev/null +++ b/graphic/src/client/CMakeLists.txt @@ -0,0 +1,3 @@ +target_sources(zappy_gui_src PRIVATE + Client.cpp + Client.hpp) diff --git a/graphic/src/client/Client.cpp b/graphic/src/client/Client.cpp new file mode 100644 index 00000000..ea39e1b2 --- /dev/null +++ b/graphic/src/client/Client.cpp @@ -0,0 +1,180 @@ +/* +** EPITECH PROJECT, 2024 +** zappy +** File description: +** Client +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "Client.hpp" + +Client::Client(int port, std::string host) +{ + this->_socket = -1; + this->_connect(host, port); + + std::string command = this->getCommand(true); + + if (command != "WELCOME") { + throw Client::Exception("Invalid welcome message"); + } + + this->write("GRAPHIC\n"); +} + +Client::~Client() +{ + this->_disconnect(); +} + +Client::Exception::Exception(std::string message) : _message(message) {} + +const char *Client::Exception::what() const noexcept +{ + return this->_message.c_str(); +} + +void Client::_connect(const std::string& host, int port) +{ + this->_disconnect(); + + int sockfd = socket(AF_INET, SOCK_STREAM, 0); + if (sockfd == -1) { + throw Client::Exception("Socket creation failed"); + } + + struct sockaddr_in serverAddr; + memset(&serverAddr, 0, sizeof(serverAddr)); + serverAddr.sin_family = AF_INET; + serverAddr.sin_port = htons(port); + + if (inet_pton(AF_INET, host.c_str(), &serverAddr.sin_addr) <= 0) { + close(sockfd); + throw Client::Exception("Invalid address"); + } + + if (connect(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == -1) { + close(sockfd); + throw Client::Exception("Connection failed"); + } + + this->_socket = sockfd; + + this->_setNonBlocking(); +} + +void Client::_disconnect() +{ + if (this->_socket != -1) { + close(this->_socket); + this->_socket = -1; + } +} + +void Client::_setNonBlocking() +{ + if (this->_socket == -1) { + throw Client::Exception("Socket not connected"); + } + + int flags = fcntl(this->_socket, F_GETFL, 0); + if (flags == -1) { + throw Client::Exception("Error getting flags"); + } + + if (fcntl(this->_socket, F_SETFL, flags | O_NONBLOCK) == -1) { + throw Client::Exception("Error setting flags"); + } +} + +std::size_t Client::write(const std::string &buffer, std::size_t size) +{ + if (this->_socket == -1) { + throw Client::Exception("Socket not connected"); + } + + ssize_t bytesWritten = send(this->_socket, buffer.data(), size, 0); + if (bytesWritten < 0) { + if (errno == EAGAIN || errno == EWOULDBLOCK) { + return 0; + } else { + throw Client::Exception("Error writing to socket"); + } + } + + return bytesWritten; +} + +std::size_t Client::write(const std::string& buffer) +{ + return this->write(buffer, buffer.size()); +} + +std::size_t Client::read(std::string& buffer, std::size_t size) +{ + if (this->_socket == -1) { + throw Client::Exception("Socket not connected"); + } + + buffer.resize(size); + + ssize_t bytesRead = recv(this->_socket, buffer.data(), size, 0); + if (bytesRead < 0) { + if (errno == EAGAIN || errno == EWOULDBLOCK) { + return 0; + } else { + throw Client::Exception("Error reading from socket"); + } + } else if (bytesRead == 0) { + throw Client::Exception("Connection closed"); + } + + buffer.resize(bytesRead); + + return bytesRead; +} + +std::string Client::getCommand(bool block) +{ + std::string command; + std::size_t size = 1024; + std::size_t bytesRead = 0; + + bytesRead = this->read(command, size); + if (block) { + while (bytesRead == 0) { + bytesRead = this->read(command, size); + } + } + this->_pendingBuffer += command; + + if (bytesRead == 0) { + return ""; + } + + return this->_getCommandFromPendingBuffer(); +} + +std::string Client::_getCommandFromPendingBuffer() +{ + std::string command; + std::size_t pos = this->_pendingBuffer.find('\n'); + + if (pos == std::string::npos) { + return ""; + } + + command = this->_pendingBuffer.substr(0, pos); + this->_pendingBuffer = this->_pendingBuffer.substr(pos + 1); + + return command; +} diff --git a/graphic/src/client/Client.hpp b/graphic/src/client/Client.hpp new file mode 100644 index 00000000..4c117019 --- /dev/null +++ b/graphic/src/client/Client.hpp @@ -0,0 +1,105 @@ +/* +** EPITECH PROJECT, 2024 +** zappy +** File description: +** Client +*/ + +#include + +#pragma once + +class Client { +public: + + /** + * @brief Construct a new Client object. + * @details During the construction of the Client object, the connection to the server is established. + */ + Client(int port, std::string host = "127.0.0.1"); + + /** + * @brief Destroy the Client object. + * @details During the destruction of the Client object, the connection to the server is closed. + */ + ~Client(); + + /** + * @brief Write data to the server. + * @param buffer The data to write + * @param size The size of the data + * @return The number of bytes written + */ + std::size_t write(const std::string &buffer, std::size_t size); + + /** + * @brief Write data to the server. + * @param buffer The data to write + * @return The number of bytes written + */ + std::size_t write(const std::string &buffer); + + /** + * @brief Read data from the server. + * @param buffer The buffer to store the data + * @param size The size of the buffer + * @return The number of bytes read + */ + std::size_t read(std::string &buffer, std::size_t size); + + /** + * @brief Get the next command from the server or an empty string if no command is available. + * @param block If true, block until a complete command is received + * @return The command + */ + std::string getCommand(bool block = false); + + /** + * @brief Exception class for the Client class. + */ + class Exception : public std::exception { + public: + /** + * @brief Create a new message queue exception + * @param message The message + */ + explicit Exception(std::string message); + + /** + * @brief Get the exception message + * @return The exception message + */ + [[nodiscard]] + const char *what() const noexcept override; + + private: + /// @brief The exception message + std::string _message; + }; + +private: + /// @brief The socket used to communicate with the server. + int _socket; + std::string _pendingBuffer; + + /** + * @brief Connect to the server. + */ + void _connect(const std::string &host, int port); + + /** + * @brief Disconnect from the server. + */ + void _disconnect(); + + /** + * @brief Set the socket to non-blocking mode. + */ + void _setNonBlocking(); + + /** + * @brief Get the next command from the pending buffer. + * @return The command or an empty string if no command is available. + */ + std::string _getCommandFromPendingBuffer(); +}; diff --git a/graphic/src/main.cpp b/graphic/src/main.cpp index ccee7ea2..b69c8bdf 100644 --- a/graphic/src/main.cpp +++ b/graphic/src/main.cpp @@ -6,20 +6,30 @@ */ #include "app/App.hpp" +#include "client/Client.hpp" #include int main() { - try { - App app; - app.initApp(); - app.getRoot()->startRendering(); - app.closeApp(); + // try { + // App app; + // app.initApp(); + // app.getRoot()->startRendering(); + // app.closeApp(); + // } + // catch (const Ogre::Exception &e) { + // std::cerr << "An exception has occurred: " << e.getFullDescription().c_str() << std::endl; + // } + // catch (const std::exception &e) { + // std::cerr << "An exception has occurred: " << e.what() << std::endl; + // } + // return 0; + try + { + Client client(3001); } - catch (const Ogre::Exception &e) { - std::cerr << "An exception has occurred: " << e.getFullDescription().c_str() << std::endl; - } - catch (const std::exception &e) { + catch(const std::exception& e) + { std::cerr << "An exception has occurred: " << e.what() << std::endl; } - return 0; + } From d508d083b8a256422c17d76da442e4076ebc6a8c Mon Sep 17 00:00:00 2001 From: Yann Date: Mon, 17 Jun 2024 09:46:45 +0200 Subject: [PATCH 02/29] feat(graphic): add graphic types --- graphic/src/types/Map.hpp | 20 ++++++++++++++++++++ graphic/src/types/Player.hpp | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 graphic/src/types/Map.hpp create mode 100644 graphic/src/types/Player.hpp diff --git a/graphic/src/types/Map.hpp b/graphic/src/types/Map.hpp new file mode 100644 index 00000000..e41cf43b --- /dev/null +++ b/graphic/src/types/Map.hpp @@ -0,0 +1,20 @@ +/* +** EPITECH PROJECT, 2024 +** zappy +** File description: +** Map +*/ + +#pragma once + +#include +#include "Player.hpp" + +struct Tile { + Items items; +}; + +struct Map { + std::vector> tiles; + std::vector players; +}; diff --git a/graphic/src/types/Player.hpp b/graphic/src/types/Player.hpp new file mode 100644 index 00000000..72bcf083 --- /dev/null +++ b/graphic/src/types/Player.hpp @@ -0,0 +1,34 @@ +/* +** EPITECH PROJECT, 2024 +** zappy +** File description: +** Player +*/ + +#pragma once + +#include + +struct Position { + int x; + int y; +}; + +struct Items { + int food; + int linemate; + int deraumere; + int sibur; + int mendiane; + int phiras; + int thystame; +}; + +struct Player { + int id; + Position position; + Items inventory; + int level; + int orientation; + std::string team; +}; \ No newline at end of file From 78666e21ffceba7f00dc51e17fa1f54a24cedb4c Mon Sep 17 00:00:00 2001 From: Yann Date: Mon, 17 Jun 2024 13:10:48 +0200 Subject: [PATCH 03/29] feat(graphic): add Ogre listener and optimize client socket --- .gitignore | 1 + graphic/src/app/App.cpp | 13 +++++++++--- graphic/src/app/App.hpp | 13 ++++++++++-- graphic/src/client/Client.cpp | 34 +++++++++++++++----------------- graphic/src/client/Client.hpp | 22 ++++++++++----------- graphic/src/main.cpp | 29 ++++++++++----------------- graphic/src/types/CMakeLists.txt | 3 +++ graphic/src/types/Map.hpp | 4 ++++ 8 files changed, 66 insertions(+), 53 deletions(-) create mode 100644 graphic/src/types/CMakeLists.txt diff --git a/.gitignore b/.gitignore index e91413bb..ab6648e1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .idea +.vscode cmake-build-debug server/build zappy_server diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index 7a335756..8f19f8ec 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -12,15 +12,14 @@ using namespace Ogre; using namespace OgreBites; -App::App() : OgreBites::ApplicationContext("Zappy") { -} +App::App() : OgreBites::ApplicationContext("Zappy"), _client(3001) {} void App::setup() { ApplicationContext::setup(); addInputListener(this); Root *root = getRoot(); - SceneManager *scnMgr = root->createSceneManager(); + scnMgr = root->createSceneManager(); _loadResources(); @@ -61,6 +60,14 @@ void App::setup() { trayMgr->hideCursor(); } +bool App::frameRenderingQueued(const Ogre::FrameEvent& evt) { + if (_client.hasData()) { + std::string command = _client.getCommandFromPendingBuffer(); + std::cout << "|" << command << "|" << std::endl; + } + return true; +} + void App::_loadResources() { Ogre::ResourceGroupManager &rgm = Ogre::ResourceGroupManager::getSingleton(); diff --git a/graphic/src/app/App.hpp b/graphic/src/app/App.hpp index d13a59b0..5e5e3725 100644 --- a/graphic/src/app/App.hpp +++ b/graphic/src/app/App.hpp @@ -10,9 +10,14 @@ #include #include #include +#include "client/Client.hpp" class App : public OgreBites::ApplicationContext, public OgreBites::InputListener { public: + + /** + * @brief Construct a new App object + */ App(); /** @@ -27,11 +32,15 @@ class App : public OgreBites::ApplicationContext, public OgreBites::InputListene */ bool keyPressed(const OgreBites::KeyboardEvent &evt) override; + bool frameRenderingQueued(const Ogre::FrameEvent &evt) override; + private: + Client _client; + OgreBites::TrayManager *trayManager; + Ogre::SceneManager *scnMgr; + /** * @brief Load resources of the application */ static void _loadResources(); - - OgreBites::TrayManager *trayManager; }; diff --git a/graphic/src/client/Client.cpp b/graphic/src/client/Client.cpp index ea39e1b2..84c521b1 100644 --- a/graphic/src/client/Client.cpp +++ b/graphic/src/client/Client.cpp @@ -22,7 +22,9 @@ Client::Client(int port, std::string host) this->_socket = -1; this->_connect(host, port); - std::string command = this->getCommand(true); + this->hasData(true); + + std::string command = this->getCommandFromPendingBuffer(); if (command != "WELCOME") { throw Client::Exception("Invalid welcome message"); @@ -102,7 +104,7 @@ std::size_t Client::write(const std::string &buffer, std::size_t size) throw Client::Exception("Socket not connected"); } - ssize_t bytesWritten = send(this->_socket, buffer.data(), size, 0); + ssize_t bytesWritten = ::write(this->_socket, buffer.data(), size); if (bytesWritten < 0) { if (errno == EAGAIN || errno == EWOULDBLOCK) { return 0; @@ -119,15 +121,13 @@ std::size_t Client::write(const std::string& buffer) return this->write(buffer, buffer.size()); } -std::size_t Client::read(std::string& buffer, std::size_t size) +std::size_t Client::read(char *buffer, std::size_t size) { if (this->_socket == -1) { throw Client::Exception("Socket not connected"); } - buffer.resize(size); - - ssize_t bytesRead = recv(this->_socket, buffer.data(), size, 0); + ssize_t bytesRead = ::read(this->_socket, buffer, size); if (bytesRead < 0) { if (errno == EAGAIN || errno == EWOULDBLOCK) { return 0; @@ -138,40 +138,38 @@ std::size_t Client::read(std::string& buffer, std::size_t size) throw Client::Exception("Connection closed"); } - buffer.resize(bytesRead); - return bytesRead; } -std::string Client::getCommand(bool block) +bool Client::hasData(bool block) { - std::string command; - std::size_t size = 1024; + char buffer[1024] = {0}; std::size_t bytesRead = 0; - bytesRead = this->read(command, size); + bytesRead = this->read(buffer, 1024); if (block) { while (bytesRead == 0) { - bytesRead = this->read(command, size); + bytesRead = this->read(buffer, 1024); } } - this->_pendingBuffer += command; if (bytesRead == 0) { - return ""; + return false; } - return this->_getCommandFromPendingBuffer(); + this->_pendingBuffer.append(buffer, bytesRead); + + return true; } -std::string Client::_getCommandFromPendingBuffer() +std::string Client::getCommandFromPendingBuffer() { - std::string command; std::size_t pos = this->_pendingBuffer.find('\n'); if (pos == std::string::npos) { return ""; } + std::string command; command = this->_pendingBuffer.substr(0, pos); this->_pendingBuffer = this->_pendingBuffer.substr(pos + 1); diff --git a/graphic/src/client/Client.hpp b/graphic/src/client/Client.hpp index 4c117019..6a62f38d 100644 --- a/graphic/src/client/Client.hpp +++ b/graphic/src/client/Client.hpp @@ -45,14 +45,20 @@ class Client { * @param size The size of the buffer * @return The number of bytes read */ - std::size_t read(std::string &buffer, std::size_t size); + std::size_t read(char *buffer, std::size_t size); /** - * @brief Get the next command from the server or an empty string if no command is available. - * @param block If true, block until a complete command is received - * @return The command + * @brief Check if the server has data to read. + * @param block If true, the function will block until data is available. + * @return True if the server has data to read in the pending buffer, false otherwise. */ - std::string getCommand(bool block = false); + bool hasData(bool block = false); + + /** + * @brief Get the next command from the pending buffer. + * @return The command or an empty string if no command is available. + */ + std::string getCommandFromPendingBuffer(); /** * @brief Exception class for the Client class. @@ -96,10 +102,4 @@ class Client { * @brief Set the socket to non-blocking mode. */ void _setNonBlocking(); - - /** - * @brief Get the next command from the pending buffer. - * @return The command or an empty string if no command is available. - */ - std::string _getCommandFromPendingBuffer(); }; diff --git a/graphic/src/main.cpp b/graphic/src/main.cpp index b69c8bdf..a031913d 100644 --- a/graphic/src/main.cpp +++ b/graphic/src/main.cpp @@ -10,26 +10,17 @@ #include int main() { - // try { - // App app; - // app.initApp(); - // app.getRoot()->startRendering(); - // app.closeApp(); - // } - // catch (const Ogre::Exception &e) { - // std::cerr << "An exception has occurred: " << e.getFullDescription().c_str() << std::endl; - // } - // catch (const std::exception &e) { - // std::cerr << "An exception has occurred: " << e.what() << std::endl; - // } - // return 0; - try - { - Client client(3001); + try { + App app; + app.initApp(); + app.getRoot()->startRendering(); + app.closeApp(); } - catch(const std::exception& e) - { + catch (const Ogre::Exception &e) { + std::cerr << "An exception has occurred: " << e.getFullDescription().c_str() << std::endl; + } + catch (const std::exception &e) { std::cerr << "An exception has occurred: " << e.what() << std::endl; } - + return 0; } diff --git a/graphic/src/types/CMakeLists.txt b/graphic/src/types/CMakeLists.txt new file mode 100644 index 00000000..fd118cdf --- /dev/null +++ b/graphic/src/types/CMakeLists.txt @@ -0,0 +1,3 @@ +target_sources(zappy_gui_src PRIVATE + Map.hpp + Player.hpp) diff --git a/graphic/src/types/Map.hpp b/graphic/src/types/Map.hpp index e41cf43b..cdfe9161 100644 --- a/graphic/src/types/Map.hpp +++ b/graphic/src/types/Map.hpp @@ -17,4 +17,8 @@ struct Tile { struct Map { std::vector> tiles; std::vector players; + int width; + int height; + int timeUnit; + std::vector teams; }; From 342061902ccb274bab514f3fe3980b20f9ce0e3e Mon Sep 17 00:00:00 2001 From: Yann Date: Mon, 17 Jun 2024 13:35:38 +0200 Subject: [PATCH 04/29] refactor(graphic): update Player and Map types --- graphic/src/app/App.cpp | 6 +++++- graphic/src/types/Map.hpp | 2 ++ graphic/src/types/Player.hpp | 4 +++- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index 8f19f8ec..e6b9d649 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -63,7 +63,11 @@ void App::setup() { bool App::frameRenderingQueued(const Ogre::FrameEvent& evt) { if (_client.hasData()) { std::string command = _client.getCommandFromPendingBuffer(); - std::cout << "|" << command << "|" << std::endl; + if (command.empty()) { + return true; + } + std::cout << "Received command: " << command << std::endl; + } return true; } diff --git a/graphic/src/types/Map.hpp b/graphic/src/types/Map.hpp index cdfe9161..99227a00 100644 --- a/graphic/src/types/Map.hpp +++ b/graphic/src/types/Map.hpp @@ -8,10 +8,12 @@ #pragma once #include +#include #include "Player.hpp" struct Tile { Items items; + Ogre::SceneNode *node; }; struct Map { diff --git a/graphic/src/types/Player.hpp b/graphic/src/types/Player.hpp index 72bcf083..7892d86d 100644 --- a/graphic/src/types/Player.hpp +++ b/graphic/src/types/Player.hpp @@ -8,6 +8,7 @@ #pragma once #include +#include struct Position { int x; @@ -31,4 +32,5 @@ struct Player { int level; int orientation; std::string team; -}; \ No newline at end of file + Ogre::SceneNode *node; +}; From 909d7ca71e88ab809e155e10c2e6e42c9611efa0 Mon Sep 17 00:00:00 2001 From: Yann Date: Mon, 17 Jun 2024 14:22:43 +0200 Subject: [PATCH 05/29] feat(graphic): add map size command function --- graphic/src/CMakeLists.txt | 3 + graphic/src/app/App.cpp | 20 +- graphic/src/app/App.hpp | 9 + .../api/v1/query/client-vscode/query.json | 1 + graphic/src/app/build/CMakeCache.txt | 383 ++++++++ .../CMakeFiles/3.28.2/CMakeCCompiler.cmake | 74 ++ .../CMakeFiles/3.28.2/CMakeCXXCompiler.cmake | 85 ++ .../3.28.2/CMakeDetermineCompilerABI_C.bin | Bin 0 -> 16672 bytes .../3.28.2/CMakeDetermineCompilerABI_CXX.bin | Bin 0 -> 16688 bytes .../build/CMakeFiles/3.28.2/CMakeSystem.cmake | 15 + .../3.28.2/CompilerIdC/CMakeCCompilerId.c | 880 ++++++++++++++++++ .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 869 +++++++++++++++++ .../build/CMakeFiles/CMakeConfigureLog.yaml | 471 ++++++++++ .../app/build/CMakeFiles/cmake.check_cache | 1 + graphic/src/commands/CMakeLists.txt | 3 + graphic/src/commands/Commands.cpp | 21 + graphic/src/commands/Commands.hpp | 39 + graphic/src/types/Map.hpp | 12 +- graphic/src/utils/CMakeLists.txt | 3 + graphic/src/utils/String.cpp | 27 + graphic/src/utils/String.hpp | 30 + 21 files changed, 2935 insertions(+), 11 deletions(-) create mode 100644 graphic/src/app/build/.cmake/api/v1/query/client-vscode/query.json create mode 100644 graphic/src/app/build/CMakeCache.txt create mode 100644 graphic/src/app/build/CMakeFiles/3.28.2/CMakeCCompiler.cmake create mode 100644 graphic/src/app/build/CMakeFiles/3.28.2/CMakeCXXCompiler.cmake create mode 100755 graphic/src/app/build/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_C.bin create mode 100755 graphic/src/app/build/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_CXX.bin create mode 100644 graphic/src/app/build/CMakeFiles/3.28.2/CMakeSystem.cmake create mode 100644 graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdC/CMakeCCompilerId.c create mode 100644 graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100644 graphic/src/app/build/CMakeFiles/CMakeConfigureLog.yaml create mode 100644 graphic/src/app/build/CMakeFiles/cmake.check_cache create mode 100644 graphic/src/commands/CMakeLists.txt create mode 100644 graphic/src/commands/Commands.cpp create mode 100644 graphic/src/commands/Commands.hpp create mode 100644 graphic/src/utils/CMakeLists.txt create mode 100644 graphic/src/utils/String.cpp create mode 100644 graphic/src/utils/String.hpp diff --git a/graphic/src/CMakeLists.txt b/graphic/src/CMakeLists.txt index 37170a7c..62177cea 100644 --- a/graphic/src/CMakeLists.txt +++ b/graphic/src/CMakeLists.txt @@ -14,3 +14,6 @@ target_link_libraries(zappy_gui zappy_gui_src) ## Add subdirectories add_subdirectory(app) add_subdirectory(client) +add_subdirectory(commands) +add_subdirectory(types) +add_subdirectory(utils) diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index e6b9d649..c6664c5a 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -5,14 +5,17 @@ ** App class */ -#include "App.hpp" -#include #include +#include +#include "App.hpp" +#include "commands/Commands.hpp" using namespace Ogre; using namespace OgreBites; -App::App() : OgreBites::ApplicationContext("Zappy"), _client(3001) {} +App::App() : OgreBites::ApplicationContext("Zappy"), _client(3001) { + this->_commands["msz"] = &Commands::map_size; +} void App::setup() { ApplicationContext::setup(); @@ -66,8 +69,7 @@ bool App::frameRenderingQueued(const Ogre::FrameEvent& evt) { if (command.empty()) { return true; } - std::cout << "Received command: " << command << std::endl; - + _updateMap(command); } return true; } @@ -103,3 +105,11 @@ bool App::keyPressed(const KeyboardEvent &evt) { } return true; } + +void App::_updateMap(std::string &command) { + std::string commandName = command.substr(0, 3); + if (this->_commands.find(commandName) != this->_commands.end()) { + std::string params = command.substr(4); + this->_commands[commandName](params, this->_map); + } +} diff --git a/graphic/src/app/App.hpp b/graphic/src/app/App.hpp index 5e5e3725..e5f68fdc 100644 --- a/graphic/src/app/App.hpp +++ b/graphic/src/app/App.hpp @@ -11,6 +11,7 @@ #include #include #include "client/Client.hpp" +#include "types/Map.hpp" class App : public OgreBites::ApplicationContext, public OgreBites::InputListener { public: @@ -38,9 +39,17 @@ class App : public OgreBites::ApplicationContext, public OgreBites::InputListene Client _client; OgreBites::TrayManager *trayManager; Ogre::SceneManager *scnMgr; + Map _map; + std::map> _commands; /** * @brief Load resources of the application */ static void _loadResources(); + + /** + * @brief Update the map + * @param command Command received from the server + */ + void _updateMap(std::string &command); }; diff --git a/graphic/src/app/build/.cmake/api/v1/query/client-vscode/query.json b/graphic/src/app/build/.cmake/api/v1/query/client-vscode/query.json new file mode 100644 index 00000000..82bb9642 --- /dev/null +++ b/graphic/src/app/build/.cmake/api/v1/query/client-vscode/query.json @@ -0,0 +1 @@ +{"requests":[{"kind":"cache","version":2},{"kind":"codemodel","version":2},{"kind":"toolchains","version":1},{"kind":"cmakeFiles","version":1}]} \ No newline at end of file diff --git a/graphic/src/app/build/CMakeCache.txt b/graphic/src/app/build/CMakeCache.txt new file mode 100644 index 00000000..8dbe8271 --- /dev/null +++ b/graphic/src/app/build/CMakeCache.txt @@ -0,0 +1,383 @@ +# This is the CMakeCache file. +# For build in directory: /home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line + +//Path to a program. +CMAKE_AR:FILEPATH=/usr/bin/ar + +//For backwards compatibility, what version of CMake commands and +// syntax should this version of CMake try to support. +CMAKE_BACKWARDS_COMPATIBILITY:STRING=2.4 + +//No help, variable specified on the command line. +CMAKE_BUILD_TYPE:STRING=Debug + +//CXX compiler +CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib + +//Flags used by the CXX compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the CXX compiler during DEBUG builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the CXX compiler during RELEASE builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//C compiler +CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc + +//A wrapper around 'ar' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar + +//A wrapper around 'ranlib' adding the appropriate '--plugin' option +// for the GCC compiler +CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib + +//Flags used by the C compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the C compiler during DEBUG builds. +CMAKE_C_FLAGS_DEBUG:STRING=-g + +//Flags used by the C compiler during MINSIZEREL builds. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the C compiler during RELEASE builds. +CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the C compiler during RELWITHDEBINFO builds. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//No help, variable specified on the command line. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE + +//Value Computed by CMake. +CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/pkgRedirects + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/usr/local + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Program used to build from build.ninja files. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/ninja-build + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_NM:FILEPATH=/usr/bin/nm + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=Project + +//Path to a program. +CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib + +//Path to a program. +CMAKE_READELF:FILEPATH=/usr/bin/readelf + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//Path to a program. +CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Single output directory for building all executables. +EXECUTABLE_OUTPUT_PATH:PATH= + +//Single output directory for building all libraries. +LIBRARY_OUTPUT_PATH:PATH= + +//Value Computed by CMake +Project_BINARY_DIR:STATIC=/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build + +//Value Computed by CMake +Project_IS_TOP_LEVEL:STATIC=ON + +//Value Computed by CMake +Project_SOURCE_DIR:STATIC=/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_AR +CMAKE_AR-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=28 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=2 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_COMPILER +CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR +CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB +CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER +CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_AR +CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB +CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Path to cache edit program executable. +CMAKE_EDIT_COMMAND:INTERNAL=/usr/bin/ccmake +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Ninja +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app +//Install .so files without execute permission. +CMAKE_INSTALL_SO_NO_EXE:INTERNAL=0 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_NM +CMAKE_NM-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_RANLIB +CMAKE_RANLIB-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_TAPI +CMAKE_TAPI-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//linker supports push/pop state +_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE + diff --git a/graphic/src/app/build/CMakeFiles/3.28.2/CMakeCCompiler.cmake b/graphic/src/app/build/CMakeFiles/3.28.2/CMakeCCompiler.cmake new file mode 100644 index 00000000..f3be565f --- /dev/null +++ b/graphic/src/app/build/CMakeFiles/3.28.2/CMakeCCompiler.cmake @@ -0,0 +1,74 @@ +set(CMAKE_C_COMPILER "/usr/bin/cc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "GNU") +set(CMAKE_C_COMPILER_VERSION "14.1.1") +set(CMAKE_C_COMPILER_VERSION_INTERNAL "") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23") +set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") +set(CMAKE_C17_COMPILE_FEATURES "c_std_17") +set(CMAKE_C23_COMPILE_FEATURES "c_std_23") + +set(CMAKE_C_PLATFORM_ID "Linux") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_C_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCC 1) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) +set(CMAKE_C_LINKER_DEPFILE_SUPPORTED TRUE) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "8") +set(CMAKE_C_COMPILER_ABI "ELF") +set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_C_LIBRARY_ARCHITECTURE "") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/14/include;/usr/local/include;/usr/include") +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/14;/usr/lib64;/lib64;/usr/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/graphic/src/app/build/CMakeFiles/3.28.2/CMakeCXXCompiler.cmake b/graphic/src/app/build/CMakeFiles/3.28.2/CMakeCXXCompiler.cmake new file mode 100644 index 00000000..44c60a97 --- /dev/null +++ b/graphic/src/app/build/CMakeFiles/3.28.2/CMakeCXXCompiler.cmake @@ -0,0 +1,85 @@ +set(CMAKE_CXX_COMPILER "/usr/bin/c++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "GNU") +set(CMAKE_CXX_COMPILER_VERSION "14.1.1") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") +set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") + +set(CMAKE_CXX_PLATFORM_ID "Linux") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/usr/bin/ar") +set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar") +set(CMAKE_RANLIB "/usr/bin/ranlib") +set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCXX 1) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) +set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED TRUE) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "8") +set(CMAKE_CXX_COMPILER_ABI "ELF") +set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/14;/usr/include/c++/14/x86_64-redhat-linux;/usr/include/c++/14/backward;/usr/lib/gcc/x86_64-redhat-linux/14/include;/usr/local/include;/usr/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/14;/usr/lib64;/lib64;/usr/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/graphic/src/app/build/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_C.bin b/graphic/src/app/build/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_C.bin new file mode 100755 index 0000000000000000000000000000000000000000..f4a361182f277781e590328980f65983a2e5cd9d GIT binary patch literal 16672 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 A^#A|> literal 0 HcmV?d00001 diff --git a/graphic/src/app/build/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_CXX.bin b/graphic/src/app/build/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_CXX.bin new file mode 100755 index 0000000000000000000000000000000000000000..92c1577482be42f77cb0566338d0d82ab6ae46aa GIT binary patch literal 16688 zcmeHOU2GKB6+UYlSQ@|v%1=uYrY)*KsmHsUg#YDu7KTA>QDJ?GwY z*6Z;GRjHJRcJ6BD-1FV@-E-&6ou4~%@3H=&frdx~BsIV;AkAp86r{HRFW;k7#=2l7 zSa2uY0ZS2S!oQ_TNa~!(iw(L!WR&e1Q4((>Wt6lQ$lH|$AW~XLl6dpU;;fcYY7i!o z(4uwXEuk#y!22h1njMG~yQ)8f$e0XE36ZxmPh>5Rni4g&d32ZNiM+u);P?oSRN`%9 z-bUt$EHh7}#FJt||1OSaSEGd*>00V79Uq;7ycy=ru)WAWwiii0D2=@DXFiF)z08|4 zR5dWi@f5j5!yr=p-H$vzv}|!}A%}S%`}?@#aGm2Rl2vHSdg;!Nwrr*~>*c0rT4%aC zTRS_J=j;UQS{8OJA9NrHN$DvG^@FNgepf|9NCMuEbXYo&AC;oWsPp7-e&uyOg z?UC$DUuj#ne%BL^k`3(#)k!v#$X>dP=!B6C#pjv(jfmkkZ6!?N)zkm>m4}!2{{C0* zo_c&m;`!Tt@zrF*u-zOX=~9V-!J$-7uib8L@4$9q->LgcseRBp^vm!4 z5D#|)Jgrr@c%P+m)CZ_` zi6)<2a-j_%`R%gbPshf18h zmVEug`;xC;Z%jtsNM5+9zZlC*Qw(v{I?Ov19`xk;CT} z`6K(keuoTCe)CH5S96krtI9DS}UcwYcAdEm5fiMDL1i}b}5eOp?Mj(tp7=bVXVFW&%2t*cqOnTpzIVsJ?p!6 zzL;@~hlWz4qeK06|8QTbdl)TLxs&z|;XDK)L^d_<+=7z6U(Q{vR4kNbl%psgyH=@8 zqNGIMPANr>?t{ooOJviEWzjkO&_&-X>4RnxIqF+q-?A3MV))M>rse>!O&`joSf~0{ z*uARdsfON_OB)`-ny?^DVFbbmgb@fM5Jn)3Kp25A0$~Kg2!s*%UyT6In|zDsNy?nT zFY^A19uMd{13Jw~q_jc{9FSQmx03Zq_VYQ`Wj^#K(OG_;Wed-LmPx8IH2cTRN}f#0 zjh3>Mab3$2t<$_mO3@}u$Hm88_Nv?H#clvAd0}``nC? zbbKyojcnVj?Q+&G}}tErHorBwc)(%Hhg{1n#=pHIR+zp6Wd{=HxY;4fkf9W3%T z0+^~VfC2SGdY?g)dI!6=M7BHe>fGi5KG*8m?B_C(^=#x^U4M&uIoyujBRgA3N6tY?1*;thBe zlvuDiY-W6p+beiG<8u8KJc*e|%{+Cvp3wWS2&@6QK8iifYbU=D*w?3({c4cwt=Rtz zGxgekR@tutn*Tycu8+UNd<5s;(N5&ozi2(f4-~!*F5hQ~OC^7fc)j%!?;&1q{lhDW*IWNkM!eqo zhuy{89!ev+0OI~jOC{aS=VefDyn>Gu@e8DaHvo%n9+QTJUUWOq& zPOa3ZOfsKzN|Rt_W^?F5OTVZ~9&?K&FP~eW*jR>fbBF+@3YO`+Gd`Hqk+3YU!eP3T z+;t{1$Pi64bRW_T$zyfSlsAUH@>myc%t973x-wkw115ImDeR$O^7D_{VZ>=4)c%={ z?-#xFw2x=Qf1Btz8&6p}JyqJ+XtC6~JZEc7+e)6~m+-#~|HAKLzN|a6u&g%GeX}-o zqEgGBVZN+Cq;Eg9si{`MJdH1E`Eoygfj$^vGSqf{6XZXDMgPQSacO^<{g;_f--IYt z#}8VqZXL|g*g^O*zKF7;XhfS*8!0RMFXIFcF>)n*8LzbP4d)b=)h4d43O$NB8e0fo z#uG0xAFtdhN&Cf4^{%kQdLF|}b?f-)R84Kvxi+_23lJ(AIK7MrmP!gUT z$G;#(Cc>9>ju+d=n#V>utG2=yc@@!GzC4dzX1<)KQibqDUJvlA&q*=O2p%uq9jOj( zVvg#P_RDiq(|^cs#0sfSHm}wz{D-QD&WL}JD==8q*M^urUFeAr?Orl3D zW%+Vk3Fs3;t*UDUXO*C0>HD?#^>(eveSq#mbS;p$%W+wbn8Z#q^tM1Z7EH~7$^*^8 SXXpC-V_k|4@c<#9!oLBjdy1|A literal 0 HcmV?d00001 diff --git a/graphic/src/app/build/CMakeFiles/3.28.2/CMakeSystem.cmake b/graphic/src/app/build/CMakeFiles/3.28.2/CMakeSystem.cmake new file mode 100644 index 00000000..829e4afd --- /dev/null +++ b/graphic/src/app/build/CMakeFiles/3.28.2/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-6.8.11-300.fc40.x86_64") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "6.8.11-300.fc40.x86_64") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + + + +set(CMAKE_SYSTEM "Linux-6.8.11-300.fc40.x86_64") +set(CMAKE_SYSTEM_NAME "Linux") +set(CMAKE_SYSTEM_VERSION "6.8.11-300.fc40.x86_64") +set(CMAKE_SYSTEM_PROCESSOR "x86_64") + +set(CMAKE_CROSSCOMPILING "FALSE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdC/CMakeCCompilerId.c b/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 00000000..0a0ec9b1 --- /dev/null +++ b/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,880 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif +#if defined(__CLASSIC_C__) +/* cv-qualifiers did not exist in K&R C */ +# define const +# define volatile +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if !defined(__STDC__) && !defined(__clang__) +# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) +# define C_VERSION "90" +# else +# define C_VERSION +# endif +#elif __STDC_VERSION__ > 201710L +# define C_VERSION "23" +#elif __STDC_VERSION__ >= 201710L +# define C_VERSION "17" +#elif __STDC_VERSION__ >= 201000L +# define C_VERSION "11" +#elif __STDC_VERSION__ >= 199901L +# define C_VERSION "99" +#else +# define C_VERSION "90" +#endif +const char* info_language_standard_default = + "INFO" ":" "standard_default[" C_VERSION "]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdCXX/CMakeCXXCompilerId.cpp b/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 00000000..9c9c90ea --- /dev/null +++ b/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,869 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + /* __COMO_VERSION__ = VRR */ +# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) +# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L +# if defined(__INTEL_CXX11_MODE__) +# if defined(__cpp_aggregate_nsdmi) +# define CXX_STD 201402L +# else +# define CXX_STD 201103L +# endif +# else +# define CXX_STD 199711L +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# define CXX_STD _MSVC_LANG +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_standard_default = "INFO" ":" "standard_default[" +#if CXX_STD > 202002L + "23" +#elif CXX_STD > 201703L + "20" +#elif CXX_STD >= 201703L + "17" +#elif CXX_STD >= 201402L + "14" +#elif CXX_STD >= 201103L + "11" +#else + "98" +#endif +"]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} diff --git a/graphic/src/app/build/CMakeFiles/CMakeConfigureLog.yaml b/graphic/src/app/build/CMakeFiles/CMakeConfigureLog.yaml new file mode 100644 index 00000000..6117de43 --- /dev/null +++ b/graphic/src/app/build/CMakeFiles/CMakeConfigureLog.yaml @@ -0,0 +1,471 @@ + +--- +events: + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineSystem.cmake:233 (message)" + - "CMakeLists.txt" + message: | + The system is: Linux - 6.8.11-300.fc40.x86_64 - x86_64 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/share/cmake/Modules/CMakeDetermineCCompiler.cmake:123 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt" + message: | + Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. + Compiler: /usr/bin/cc + Build flags: + Id flags: + + The output was: + 0 + + + Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" + + The C compiler identification is GNU, found in: + /home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdC/a.out + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/share/cmake/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt" + message: | + Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. + Compiler: /usr/bin/c++ + Build flags: + Id flags: + + The output was: + 0 + + + Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" + + The CXX compiler identification is GNU, found in: + /home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdCXX/a.out + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)" + - "/usr/share/cmake/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt" + checks: + - "Detecting C compiler ABI info" + directories: + source: "/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-4UqsIb" + binary: "/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-4UqsIb" + cmakeVariables: + CMAKE_C_FLAGS: "" + buildResult: + variable: "CMAKE_C_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-4UqsIb' + + Run Build Command(s): /usr/bin/ninja-build -v cmTC_0e046 + [1/2] /usr/bin/cc -v -o CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake/Modules/CMakeCCompilerABI.c + Using built-in specs. + COLLECT_GCC=/usr/bin/cc + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-redhat-linux + Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e046.dir/' + /usr/libexec/gcc/x86_64-redhat-linux/14/cc1 -quiet -v /usr/share/cmake/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_0e046.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -o /tmp/ccBfcn4F.s + GNU C17 (GCC) version 14.1.1 20240607 (Red Hat 14.1.1-5) (x86_64-redhat-linux) + compiled by GNU C version 14.1.1 20240607 (Red Hat 14.1.1-5), GMP version 6.2.1, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.24-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/include-fixed" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/../../../../x86_64-redhat-linux/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/lib/gcc/x86_64-redhat-linux/14/include + /usr/local/include + /usr/include + End of search list. + Compiler executable checksum: 83ba4fd217edf86c2ed1e8811fa4ba77 + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e046.dir/' + as -v --64 -o CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o /tmp/ccBfcn4F.s + GNU assembler version 2.41 (x86_64-redhat-linux) using BFD version version 2.41-37.fc40 + COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.' + [2/2] : && /usr/bin/cc -v -rdynamic CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o -o cmTC_0e046 && : + Using built-in specs. + COLLECT_GCC=/usr/bin/cc + COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-redhat-linux + Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) + COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_0e046' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_0e046.' + /usr/libexec/gcc/x86_64-redhat-linux/14/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper -plugin-opt=-fresolution=/tmp/ccH43rhV.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_0e046 /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/14 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../.. CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-redhat-linux/14/crtend.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o + COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_0e046' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_0e046.' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:127 (message)" + - "/usr/share/cmake/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt" + message: | + Parsed C implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-redhat-linux/14/include] + add: [/usr/local/include] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/14/include] ==> [/usr/lib/gcc/x86_64-redhat-linux/14/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/lib/gcc/x86_64-redhat-linux/14/include;/usr/local/include;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:159 (message)" + - "/usr/share/cmake/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt" + message: | + Parsed C implicit link information: + link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + ignore line: [Change Dir: '/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-4UqsIb'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/ninja-build -v cmTC_0e046] + ignore line: [[1/2] /usr/bin/cc -v -o CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake/Modules/CMakeCCompilerABI.c] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-redhat-linux] + ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e046.dir/'] + ignore line: [ /usr/libexec/gcc/x86_64-redhat-linux/14/cc1 -quiet -v /usr/share/cmake/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_0e046.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -o /tmp/ccBfcn4F.s] + ignore line: [GNU C17 (GCC) version 14.1.1 20240607 (Red Hat 14.1.1-5) (x86_64-redhat-linux)] + ignore line: [ compiled by GNU C version 14.1.1 20240607 (Red Hat 14.1.1-5) GMP version 6.2.1 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/../../../../x86_64-redhat-linux/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/14/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [Compiler executable checksum: 83ba4fd217edf86c2ed1e8811fa4ba77] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e046.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o /tmp/ccBfcn4F.s] + ignore line: [GNU assembler version 2.41 (x86_64-redhat-linux) using BFD version version 2.41-37.fc40] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.'] + ignore line: [[2/2] : && /usr/bin/cc -v -rdynamic CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o -o cmTC_0e046 && :] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/cc] + ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-redhat-linux] + ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) ] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_0e046' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_0e046.'] + link line: [ /usr/libexec/gcc/x86_64-redhat-linux/14/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper -plugin-opt=-fresolution=/tmp/ccH43rhV.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_0e046 /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/14 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../.. CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-redhat-linux/14/crtend.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] + arg [/usr/libexec/gcc/x86_64-redhat-linux/14/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccH43rhV.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [--build-id] ==> ignore + arg [--no-add-needed] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-o] ==> ignore + arg [cmTC_0e046] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] + arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] + arg [/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/14] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] + arg [-L/lib/../lib64] ==> dir [/lib/../lib64] + arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/14/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../..] + arg [CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [-lc] ==> lib [c] + arg [-lgcc] ==> lib [gcc] + arg [--push-state] ==> ignore + arg [--as-needed] ==> ignore + arg [-lgcc_s] ==> lib [gcc_s] + arg [--pop-state] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o] + arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] + collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] ==> [/usr/lib64/crt1.o] + collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] ==> [/usr/lib64/crti.o] + collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] ==> [/usr/lib64/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14] ==> [/usr/lib/gcc/x86_64-redhat-linux/14] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] ==> [/usr/lib64] + collapse library dir [/lib/../lib64] ==> [/lib64] + collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../..] ==> [/usr/lib] + implicit libs: [gcc;gcc_s;c;gcc;gcc_s] + implicit objs: [/usr/lib64/crt1.o;/usr/lib64/crti.o;/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o;/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o;/usr/lib64/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/14;/usr/lib64;/lib64;/usr/lib] + implicit fwks: [] + + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt" + checks: + - "Detecting CXX compiler ABI info" + directories: + source: "/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-rI4PyW" + binary: "/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-rI4PyW" + cmakeVariables: + CMAKE_CXX_FLAGS: "" + buildResult: + variable: "CMAKE_CXX_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-rI4PyW' + + Run Build Command(s): /usr/bin/ninja-build -v cmTC_e2353 + [1/2] /usr/bin/c++ -v -o CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-redhat-linux + Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e2353.dir/' + /usr/libexec/gcc/x86_64-redhat-linux/14/cc1plus -quiet -v -D_GNU_SOURCE /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_e2353.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o /tmp/cc5Fn2u3.s + GNU C++17 (GCC) version 14.1.1 20240607 (Red Hat 14.1.1-5) (x86_64-redhat-linux) + compiled by GNU C version 14.1.1 20240607 (Red Hat 14.1.1-5), GMP version 6.2.1, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.24-GMP + + GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 + ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/include-fixed" + ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/../../../../x86_64-redhat-linux/include" + #include "..." search starts here: + #include <...> search starts here: + /usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14 + /usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux + /usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward + /usr/lib/gcc/x86_64-redhat-linux/14/include + /usr/local/include + /usr/include + End of search list. + Compiler executable checksum: b6dcf6f287a1c28b21e3a80997087968 + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e2353.dir/' + as -v --64 -o CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o /tmp/cc5Fn2u3.s + GNU assembler version 2.41 (x86_64-redhat-linux) using BFD version version 2.41-37.fc40 + COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.' + [2/2] : && /usr/bin/c++ -v -rdynamic CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_e2353 && : + Using built-in specs. + COLLECT_GCC=/usr/bin/c++ + COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper + OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa + OFFLOAD_TARGET_DEFAULT=1 + Target: x86_64-redhat-linux + Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 + Thread model: posix + Supported LTO compression algorithms: zlib zstd + gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) + COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/ + LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/ + COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_e2353' '-foffload-options=-l_GCC_m' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e2353.' + /usr/libexec/gcc/x86_64-redhat-linux/14/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper -plugin-opt=-fresolution=/tmp/ccZadUUG.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_e2353 /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/14 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../.. CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/14/crtend.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o + COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_e2353' '-foffload-options=-l_GCC_m' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e2353.' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:127 (message)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt" + message: | + Parsed CXX implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14] + add: [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux] + add: [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward] + add: [/usr/lib/gcc/x86_64-redhat-linux/14/include] + add: [/usr/local/include] + add: [/usr/include] + end of search list found + collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14] ==> [/usr/include/c++/14] + collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux] ==> [/usr/include/c++/14/x86_64-redhat-linux] + collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward] ==> [/usr/include/c++/14/backward] + collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/14/include] ==> [/usr/lib/gcc/x86_64-redhat-linux/14/include] + collapse include dir [/usr/local/include] ==> [/usr/local/include] + collapse include dir [/usr/include] ==> [/usr/include] + implicit include dirs: [/usr/include/c++/14;/usr/include/c++/14/x86_64-redhat-linux;/usr/include/c++/14/backward;/usr/lib/gcc/x86_64-redhat-linux/14/include;/usr/local/include;/usr/include] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:159 (message)" + - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt" + message: | + Parsed CXX implicit link information: + link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + ignore line: [Change Dir: '/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-rI4PyW'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/ninja-build -v cmTC_e2353] + ignore line: [[1/2] /usr/bin/c++ -v -o CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-redhat-linux] + ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e2353.dir/'] + ignore line: [ /usr/libexec/gcc/x86_64-redhat-linux/14/cc1plus -quiet -v -D_GNU_SOURCE /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_e2353.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o /tmp/cc5Fn2u3.s] + ignore line: [GNU C++17 (GCC) version 14.1.1 20240607 (Red Hat 14.1.1-5) (x86_64-redhat-linux)] + ignore line: [ compiled by GNU C version 14.1.1 20240607 (Red Hat 14.1.1-5) GMP version 6.2.1 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.24-GMP] + ignore line: [] + ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/include-fixed"] + ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/../../../../x86_64-redhat-linux/include"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14] + ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux] + ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward] + ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/14/include] + ignore line: [ /usr/local/include] + ignore line: [ /usr/include] + ignore line: [End of search list.] + ignore line: [Compiler executable checksum: b6dcf6f287a1c28b21e3a80997087968] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e2353.dir/'] + ignore line: [ as -v --64 -o CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o /tmp/cc5Fn2u3.s] + ignore line: [GNU assembler version 2.41 (x86_64-redhat-linux) using BFD version version 2.41-37.fc40] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.'] + ignore line: [[2/2] : && /usr/bin/c++ -v -rdynamic CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_e2353 && :] + ignore line: [Using built-in specs.] + ignore line: [COLLECT_GCC=/usr/bin/c++] + ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper] + ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] + ignore line: [OFFLOAD_TARGET_DEFAULT=1] + ignore line: [Target: x86_64-redhat-linux] + ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1] + ignore line: [Thread model: posix] + ignore line: [Supported LTO compression algorithms: zlib zstd] + ignore line: [gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) ] + ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/] + ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_e2353' '-foffload-options=-l_GCC_m' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e2353.'] + link line: [ /usr/libexec/gcc/x86_64-redhat-linux/14/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper -plugin-opt=-fresolution=/tmp/ccZadUUG.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_e2353 /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/14 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../.. CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/14/crtend.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] + arg [/usr/libexec/gcc/x86_64-redhat-linux/14/collect2] ==> ignore + arg [-plugin] ==> ignore + arg [/usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so] ==> ignore + arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccZadUUG.res] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [-plugin-opt=-pass-through=-lc] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore + arg [-plugin-opt=-pass-through=-lgcc] ==> ignore + arg [--build-id] ==> ignore + arg [--no-add-needed] ==> ignore + arg [--eh-frame-hdr] ==> ignore + arg [--hash-style=gnu] ==> ignore + arg [-m] ==> ignore + arg [elf_x86_64] ==> ignore + arg [-export-dynamic] ==> ignore + arg [-dynamic-linker] ==> ignore + arg [/lib64/ld-linux-x86-64.so.2] ==> ignore + arg [-o] ==> ignore + arg [cmTC_e2353] ==> ignore + arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] + arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] + arg [/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/14] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] + arg [-L/lib/../lib64] ==> dir [/lib/../lib64] + arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] + arg [-L/usr/lib/gcc/x86_64-redhat-linux/14/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../..] + arg [CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-lstdc++] ==> lib [stdc++] + arg [-lm] ==> lib [m] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [-lc] ==> lib [c] + arg [-lgcc_s] ==> lib [gcc_s] + arg [-lgcc] ==> lib [gcc] + arg [/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o] + arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] + collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] ==> [/usr/lib64/crt1.o] + collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] ==> [/usr/lib64/crti.o] + collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] ==> [/usr/lib64/crtn.o] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14] ==> [/usr/lib/gcc/x86_64-redhat-linux/14] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] ==> [/usr/lib64] + collapse library dir [/lib/../lib64] ==> [/lib64] + collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] + collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../..] ==> [/usr/lib] + implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] + implicit objs: [/usr/lib64/crt1.o;/usr/lib64/crti.o;/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o;/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o;/usr/lib64/crtn.o] + implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/14;/usr/lib64;/lib64;/usr/lib] + implicit fwks: [] + + +... diff --git a/graphic/src/app/build/CMakeFiles/cmake.check_cache b/graphic/src/app/build/CMakeFiles/cmake.check_cache new file mode 100644 index 00000000..3dccd731 --- /dev/null +++ b/graphic/src/app/build/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/graphic/src/commands/CMakeLists.txt b/graphic/src/commands/CMakeLists.txt new file mode 100644 index 00000000..e57a9ef1 --- /dev/null +++ b/graphic/src/commands/CMakeLists.txt @@ -0,0 +1,3 @@ +target_sources(zappy_gui_src PRIVATE + Commands.hpp + Commands.cpp) diff --git a/graphic/src/commands/Commands.cpp b/graphic/src/commands/Commands.cpp new file mode 100644 index 00000000..a0716332 --- /dev/null +++ b/graphic/src/commands/Commands.cpp @@ -0,0 +1,21 @@ +/* +** EPITECH PROJECT, 2024 +** zappy +** File description: +** Commands +*/ + +#include +#include "Commands.hpp" +#include "utils/String.hpp" + +void Commands::map_size(std::string &command, Map &map) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 2) + return; + map.width = std::stoi(args[0]); + map.height = std::stoi(args[1]); + std::cout << "Map size: " << map.width << "x" << map.height << std::endl; +} diff --git a/graphic/src/commands/Commands.hpp b/graphic/src/commands/Commands.hpp new file mode 100644 index 00000000..bdedbc2e --- /dev/null +++ b/graphic/src/commands/Commands.hpp @@ -0,0 +1,39 @@ +/* +** EPITECH PROJECT, 2024 +** zappy +** File description: +** Commands +*/ + +#pragma once + +#include "types/Map.hpp" + +class Commands { + public: + + static void map_size(std::string &command, Map &map); + static void tile_content(std::string &command, Map &map); + static void teams_names(std::string &command, Map &map); + static void player_connect(std::string &command, Map &map); + static void player_position(std::string &command, Map &map); + static void player_level(std::string &command, Map &map); + static void player_inventory(std::string &command, Map &map); + static void player_eject(std::string &command, Map &map); + static void broadcast(std::string &command, Map &map); + static void incantation_start(std::string &command, Map &map); + static void incantation_end(std::string &command, Map &map); + static void player_egg_laid(std::string &command, Map &map); + static void player_resource_drop(std::string &command, Map &map); + static void player_resource_take(std::string &command, Map &map); + static void player_death(std::string &command, Map &map); + static void player_laying_egg(std::string &command, Map &map); + static void egg_death(std::string &command, Map &map); + static void egg_hatching(std::string &command, Map &map); + static void time_unit_request(std::string &command, Map &map); + static void time_unit_modification(std::string &command, Map &map); + static void end_game(std::string &command, Map &map); + static void unknown_command(std::string &command, Map &map); + static void command_parameters(std::string &command, Map &map); + +}; diff --git a/graphic/src/types/Map.hpp b/graphic/src/types/Map.hpp index 99227a00..d625c82b 100644 --- a/graphic/src/types/Map.hpp +++ b/graphic/src/types/Map.hpp @@ -17,10 +17,10 @@ struct Tile { }; struct Map { - std::vector> tiles; - std::vector players; - int width; - int height; - int timeUnit; - std::vector teams; + std::vector> tiles = {}; + std::vector players = {}; + int width = 0; + int height = 0; + int timeUnit = 0; + std::vector teams = {}; }; diff --git a/graphic/src/utils/CMakeLists.txt b/graphic/src/utils/CMakeLists.txt new file mode 100644 index 00000000..33d0c5c6 --- /dev/null +++ b/graphic/src/utils/CMakeLists.txt @@ -0,0 +1,3 @@ +target_sources(zappy_gui_src PRIVATE + String.cpp + String.hpp) diff --git a/graphic/src/utils/String.cpp b/graphic/src/utils/String.cpp new file mode 100644 index 00000000..09451c40 --- /dev/null +++ b/graphic/src/utils/String.cpp @@ -0,0 +1,27 @@ +/* +** EPITECH PROJECT, 2024 +** zappy +** File description: +** String +*/ + +#include "String.hpp" + +using namespace Utils; + +std::vector StringUtils::split(const std::string &str, const char delim) +{ + std::vector result; + std::string tmp = ""; + + for (char c : str) { + if (c == delim) { + result.push_back(tmp); + tmp = ""; + } else { + tmp += c; + } + } + result.push_back(tmp); + return result; +} diff --git a/graphic/src/utils/String.hpp b/graphic/src/utils/String.hpp new file mode 100644 index 00000000..1a58c174 --- /dev/null +++ b/graphic/src/utils/String.hpp @@ -0,0 +1,30 @@ +/* +** EPITECH PROJECT, 2024 +** zappy +** File description: +** string +*/ + +#pragma once + +#include +#include + +namespace Utils { + + /** + * @brief A class to manipulate strings + */ + class StringUtils { + public: + + /** + * @brief Split a string into a vector of strings + * @param str The string to split + * @param delim The delimiter + * @return A vector of strings + */ + static std::vector split(const std::string &str, const char delim); + }; + +} From 3574c6c49a1e3b0cc8f54f6db60ac185481d79d7 Mon Sep 17 00:00:00 2001 From: Yann Date: Mon, 17 Jun 2024 14:50:59 +0200 Subject: [PATCH 06/29] feat(graphic): map is now automatically generated from map_size --- graphic/src/app/App.cpp | 24 ++++++++-------- graphic/src/app/App.hpp | 2 +- graphic/src/commands/Commands.cpp | 25 +++++++++++++++-- graphic/src/commands/Commands.hpp | 46 +++++++++++++++---------------- graphic/src/types/Map.hpp | 2 +- graphic/src/types/Player.hpp | 14 +++++----- 6 files changed, 67 insertions(+), 46 deletions(-) diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index c6664c5a..0e867610 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -40,17 +40,17 @@ void App::setup() { getRenderWindow()->addViewport(cam); - for (int i = -5; i <= 5; i++) { - for (int j = -5; j <= 5; j++) { - Entity *cubeEntity = scnMgr->createEntity("Cube.mesh"); - SceneNode *node = scnMgr->getRootSceneNode()->createChildSceneNode(); - node->attachObject(cubeEntity); - - AxisAlignedBox aab = cubeEntity->getBoundingBox(); - Vector3 size = aab.getSize(); - node->setPosition(i * size.x, 0, j * size.z); - } - } + // for (int i = -5; i <= 5; i++) { + // for (int j = -5; j <= 5; j++) { + // Entity *cubeEntity = scnMgr->createEntity("Cube.mesh"); + // SceneNode *node = scnMgr->getRootSceneNode()->createChildSceneNode(); + // node->attachObject(cubeEntity); + + // AxisAlignedBox aab = cubeEntity->getBoundingBox(); + // Vector3 size = aab.getSize(); + // node->setPosition(i * size.x, 0, j * size.z); + // } + // } CameraMan *camMan = new CameraMan(camNode); camMan->setStyle(CS_ORBIT); @@ -110,6 +110,6 @@ void App::_updateMap(std::string &command) { std::string commandName = command.substr(0, 3); if (this->_commands.find(commandName) != this->_commands.end()) { std::string params = command.substr(4); - this->_commands[commandName](params, this->_map); + this->_commands[commandName](params, this->_map, this->scnMgr); } } diff --git a/graphic/src/app/App.hpp b/graphic/src/app/App.hpp index e5f68fdc..e7c34c4a 100644 --- a/graphic/src/app/App.hpp +++ b/graphic/src/app/App.hpp @@ -40,7 +40,7 @@ class App : public OgreBites::ApplicationContext, public OgreBites::InputListene OgreBites::TrayManager *trayManager; Ogre::SceneManager *scnMgr; Map _map; - std::map> _commands; + std::map> _commands; /** * @brief Load resources of the application diff --git a/graphic/src/commands/Commands.cpp b/graphic/src/commands/Commands.cpp index a0716332..75f8caab 100644 --- a/graphic/src/commands/Commands.cpp +++ b/graphic/src/commands/Commands.cpp @@ -9,7 +9,7 @@ #include "Commands.hpp" #include "utils/String.hpp" -void Commands::map_size(std::string &command, Map &map) +void Commands::map_size(std::string &command, Map &map, Ogre::SceneManager *scnMgr) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -17,5 +17,26 @@ void Commands::map_size(std::string &command, Map &map) return; map.width = std::stoi(args[0]); map.height = std::stoi(args[1]); - std::cout << "Map size: " << map.width << "x" << map.height << std::endl; + int posx = map.width / 2; + int posy = map.height / 2; + for (int i = 0; i < map.width; i++) { + std::vector row; + posy = map.height / 2; + for (int j = 0; j < map.height; j++) { + Ogre::Entity *cubeEntity = scnMgr->createEntity("Cube.mesh"); + Ogre::SceneNode *node = scnMgr->getRootSceneNode()->createChildSceneNode(); + node->attachObject(cubeEntity); + + Ogre::AxisAlignedBox aab = cubeEntity->getBoundingBox(); + Ogre::Vector3 size = aab.getSize(); + node->setPosition(posx * size.x, 0, posy * size.z); + + Tile tile; + tile.node = node; + row.push_back(tile); + posy = posy - 1; + } + map.tiles.push_back(row); + posx = posx - 1; + } } diff --git a/graphic/src/commands/Commands.hpp b/graphic/src/commands/Commands.hpp index bdedbc2e..495aee78 100644 --- a/graphic/src/commands/Commands.hpp +++ b/graphic/src/commands/Commands.hpp @@ -12,28 +12,28 @@ class Commands { public: - static void map_size(std::string &command, Map &map); - static void tile_content(std::string &command, Map &map); - static void teams_names(std::string &command, Map &map); - static void player_connect(std::string &command, Map &map); - static void player_position(std::string &command, Map &map); - static void player_level(std::string &command, Map &map); - static void player_inventory(std::string &command, Map &map); - static void player_eject(std::string &command, Map &map); - static void broadcast(std::string &command, Map &map); - static void incantation_start(std::string &command, Map &map); - static void incantation_end(std::string &command, Map &map); - static void player_egg_laid(std::string &command, Map &map); - static void player_resource_drop(std::string &command, Map &map); - static void player_resource_take(std::string &command, Map &map); - static void player_death(std::string &command, Map &map); - static void player_laying_egg(std::string &command, Map &map); - static void egg_death(std::string &command, Map &map); - static void egg_hatching(std::string &command, Map &map); - static void time_unit_request(std::string &command, Map &map); - static void time_unit_modification(std::string &command, Map &map); - static void end_game(std::string &command, Map &map); - static void unknown_command(std::string &command, Map &map); - static void command_parameters(std::string &command, Map &map); + static void map_size(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void tile_content(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void teams_names(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_connect(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_position(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_level(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_inventory(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_eject(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void broadcast(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void incantation_start(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void incantation_end(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_egg_laid(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_resource_drop(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_resource_take(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_laying_egg(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void egg_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void egg_hatching(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void time_unit_request(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void time_unit_modification(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void end_game(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void unknown_command(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void command_parameters(std::string &command, Map &map, Ogre::SceneManager *scnMgr); }; diff --git a/graphic/src/types/Map.hpp b/graphic/src/types/Map.hpp index d625c82b..3f4798d9 100644 --- a/graphic/src/types/Map.hpp +++ b/graphic/src/types/Map.hpp @@ -13,7 +13,7 @@ struct Tile { Items items; - Ogre::SceneNode *node; + Ogre::SceneNode *node = nullptr; }; struct Map { diff --git a/graphic/src/types/Player.hpp b/graphic/src/types/Player.hpp index 7892d86d..81f381b3 100644 --- a/graphic/src/types/Player.hpp +++ b/graphic/src/types/Player.hpp @@ -16,13 +16,13 @@ struct Position { }; struct Items { - int food; - int linemate; - int deraumere; - int sibur; - int mendiane; - int phiras; - int thystame; + int food = 0; + int linemate = 0; + int deraumere = 0; + int sibur = 0; + int mendiane = 0; + int phiras = 0; + int thystame = 0; }; struct Player { From d796683955d618860e2952de43557f0bdc4d1a9c Mon Sep 17 00:00:00 2001 From: Yann Date: Mon, 17 Jun 2024 16:51:46 +0200 Subject: [PATCH 07/29] feat(graphic): display food and stone on the ground --- graphic/assets/food/food.material | 22 + graphic/assets/food/food.mesh | Bin 0 -> 86295 bytes graphic/assets/food/food.png | Bin 0 -> 3972 bytes graphic/resources.cfg | 1 + graphic/src/app/App.cpp | 1 + .../api/v1/query/client-vscode/query.json | 1 - graphic/src/app/build/CMakeCache.txt | 383 -------- .../CMakeFiles/3.28.2/CMakeCCompiler.cmake | 74 -- .../CMakeFiles/3.28.2/CMakeCXXCompiler.cmake | 85 -- .../3.28.2/CMakeDetermineCompilerABI_C.bin | Bin 16672 -> 0 bytes .../3.28.2/CMakeDetermineCompilerABI_CXX.bin | Bin 16688 -> 0 bytes .../build/CMakeFiles/3.28.2/CMakeSystem.cmake | 15 - .../3.28.2/CompilerIdC/CMakeCCompilerId.c | 880 ------------------ .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 869 ----------------- .../build/CMakeFiles/CMakeConfigureLog.yaml | 471 ---------- .../app/build/CMakeFiles/cmake.check_cache | 1 - graphic/src/commands/Commands.cpp | 47 +- 17 files changed, 70 insertions(+), 2780 deletions(-) create mode 100644 graphic/assets/food/food.material create mode 100644 graphic/assets/food/food.mesh create mode 100644 graphic/assets/food/food.png delete mode 100644 graphic/src/app/build/.cmake/api/v1/query/client-vscode/query.json delete mode 100644 graphic/src/app/build/CMakeCache.txt delete mode 100644 graphic/src/app/build/CMakeFiles/3.28.2/CMakeCCompiler.cmake delete mode 100644 graphic/src/app/build/CMakeFiles/3.28.2/CMakeCXXCompiler.cmake delete mode 100755 graphic/src/app/build/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_C.bin delete mode 100755 graphic/src/app/build/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_CXX.bin delete mode 100644 graphic/src/app/build/CMakeFiles/3.28.2/CMakeSystem.cmake delete mode 100644 graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdC/CMakeCCompilerId.c delete mode 100644 graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdCXX/CMakeCXXCompilerId.cpp delete mode 100644 graphic/src/app/build/CMakeFiles/CMakeConfigureLog.yaml delete mode 100644 graphic/src/app/build/CMakeFiles/cmake.check_cache diff --git a/graphic/assets/food/food.material b/graphic/assets/food/food.material new file mode 100644 index 00000000..96af751f --- /dev/null +++ b/graphic/assets/food/food.material @@ -0,0 +1,22 @@ +// generated by blender2ogre 0.9.0 on 2024-06-10 17:02:03 +material Material.002 { + receive_shadows on + technique { + pass { + diffuse 0.8 0.8 0.8 1.0 + specular 0.5 0.0 0 0 0 + + // additional maps - requires RTSS + rtshader_system { + lighting_stage metal_roughness + } + + // - base_color_texture + texture_unit { + texture food.png + tex_address_mode wrap + colour_op modulate + } + } + } +} diff --git a/graphic/assets/food/food.mesh b/graphic/assets/food/food.mesh new file mode 100644 index 0000000000000000000000000000000000000000..84a1934a9eb8d0086ba6bf6d63c1a89db542c7a9 GIT binary patch literal 86295 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¾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 literal 0 HcmV?d00001 diff --git a/graphic/assets/food/food.png b/graphic/assets/food/food.png new file mode 100644 index 0000000000000000000000000000000000000000..471bbbadeec07ac1d2b1906b711148a91b8d4818 GIT binary patch literal 3972 zcmeAS@N?(olHy`uVBq!ia0y~y-~ci?7#Nv>R7a*`F_2;`4sv&5ym?Zm9?0P=@Q4Ho zatnhnBg3pY5EQXpAO?(Y!EP6pWUHqb1>JNjO>(j+TU@CE;jEI9d{p gmW0EwBz(*8ZZQWV!}OVkz)mxRr>mdKI;Vst0Eo?SJpcdz literal 0 HcmV?d00001 diff --git a/graphic/resources.cfg b/graphic/resources.cfg index 67447436..387c2ff6 100644 --- a/graphic/resources.cfg +++ b/graphic/resources.cfg @@ -1,3 +1,4 @@ [Main] FileSystem=assets/cube +FileSystem=assets/food Zip=assets/ui/SdkTrays.zip \ No newline at end of file diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index 0e867610..c1a4c50f 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -15,6 +15,7 @@ using namespace OgreBites; App::App() : OgreBites::ApplicationContext("Zappy"), _client(3001) { this->_commands["msz"] = &Commands::map_size; + this->_commands["bct"] = &Commands::tile_content; } void App::setup() { diff --git a/graphic/src/app/build/.cmake/api/v1/query/client-vscode/query.json b/graphic/src/app/build/.cmake/api/v1/query/client-vscode/query.json deleted file mode 100644 index 82bb9642..00000000 --- a/graphic/src/app/build/.cmake/api/v1/query/client-vscode/query.json +++ /dev/null @@ -1 +0,0 @@ -{"requests":[{"kind":"cache","version":2},{"kind":"codemodel","version":2},{"kind":"toolchains","version":1},{"kind":"cmakeFiles","version":1}]} \ No newline at end of file diff --git a/graphic/src/app/build/CMakeCache.txt b/graphic/src/app/build/CMakeCache.txt deleted file mode 100644 index 8dbe8271..00000000 --- a/graphic/src/app/build/CMakeCache.txt +++ /dev/null @@ -1,383 +0,0 @@ -# This is the CMakeCache file. -# For build in directory: /home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build -# It was generated by CMake: /usr/bin/cmake -# You can edit this file to change values found and used by cmake. -# If you do not want to change any of the values, simply exit the editor. -# If you do want to change a value, simply edit, save, and exit the editor. -# The syntax for the file is as follows: -# KEY:TYPE=VALUE -# KEY is the name of a variable in the cache. -# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. -# VALUE is the current value for the KEY. - -######################## -# EXTERNAL cache entries -######################## - -//Path to a program. -CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line - -//Path to a program. -CMAKE_AR:FILEPATH=/usr/bin/ar - -//For backwards compatibility, what version of CMake commands and -// syntax should this version of CMake try to support. -CMAKE_BACKWARDS_COMPATIBILITY:STRING=2.4 - -//No help, variable specified on the command line. -CMAKE_BUILD_TYPE:STRING=Debug - -//CXX compiler -CMAKE_CXX_COMPILER:FILEPATH=/usr/bin/c++ - -//A wrapper around 'ar' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_CXX_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar - -//A wrapper around 'ranlib' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_CXX_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib - -//Flags used by the CXX compiler during all build types. -CMAKE_CXX_FLAGS:STRING= - -//Flags used by the CXX compiler during DEBUG builds. -CMAKE_CXX_FLAGS_DEBUG:STRING=-g - -//Flags used by the CXX compiler during MINSIZEREL builds. -CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG - -//Flags used by the CXX compiler during RELEASE builds. -CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG - -//Flags used by the CXX compiler during RELWITHDEBINFO builds. -CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG - -//C compiler -CMAKE_C_COMPILER:FILEPATH=/usr/bin/cc - -//A wrapper around 'ar' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_C_COMPILER_AR:FILEPATH=/usr/bin/gcc-ar - -//A wrapper around 'ranlib' adding the appropriate '--plugin' option -// for the GCC compiler -CMAKE_C_COMPILER_RANLIB:FILEPATH=/usr/bin/gcc-ranlib - -//Flags used by the C compiler during all build types. -CMAKE_C_FLAGS:STRING= - -//Flags used by the C compiler during DEBUG builds. -CMAKE_C_FLAGS_DEBUG:STRING=-g - -//Flags used by the C compiler during MINSIZEREL builds. -CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG - -//Flags used by the C compiler during RELEASE builds. -CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG - -//Flags used by the C compiler during RELWITHDEBINFO builds. -CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG - -//Path to a program. -CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND - -//Flags used by the linker during all build types. -CMAKE_EXE_LINKER_FLAGS:STRING= - -//Flags used by the linker during DEBUG builds. -CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during MINSIZEREL builds. -CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during RELEASE builds. -CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during RELWITHDEBINFO builds. -CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//No help, variable specified on the command line. -CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE - -//Value Computed by CMake. -CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/pkgRedirects - -//Install path prefix, prepended onto install directories. -CMAKE_INSTALL_PREFIX:PATH=/usr/local - -//Path to a program. -CMAKE_LINKER:FILEPATH=/usr/bin/ld - -//Program used to build from build.ninja files. -CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/ninja-build - -//Flags used by the linker during the creation of modules during -// all build types. -CMAKE_MODULE_LINKER_FLAGS:STRING= - -//Flags used by the linker during the creation of modules during -// DEBUG builds. -CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during the creation of modules during -// MINSIZEREL builds. -CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during the creation of modules during -// RELEASE builds. -CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during the creation of modules during -// RELWITHDEBINFO builds. -CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//Path to a program. -CMAKE_NM:FILEPATH=/usr/bin/nm - -//Path to a program. -CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy - -//Path to a program. -CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump - -//Value Computed by CMake -CMAKE_PROJECT_DESCRIPTION:STATIC= - -//Value Computed by CMake -CMAKE_PROJECT_HOMEPAGE_URL:STATIC= - -//Value Computed by CMake -CMAKE_PROJECT_NAME:STATIC=Project - -//Path to a program. -CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib - -//Path to a program. -CMAKE_READELF:FILEPATH=/usr/bin/readelf - -//Flags used by the linker during the creation of shared libraries -// during all build types. -CMAKE_SHARED_LINKER_FLAGS:STRING= - -//Flags used by the linker during the creation of shared libraries -// during DEBUG builds. -CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during the creation of shared libraries -// during MINSIZEREL builds. -CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during the creation of shared libraries -// during RELEASE builds. -CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during the creation of shared libraries -// during RELWITHDEBINFO builds. -CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//If set, runtime paths are not added when installing shared libraries, -// but are added when building. -CMAKE_SKIP_INSTALL_RPATH:BOOL=NO - -//If set, runtime paths are not added when using shared libraries. -CMAKE_SKIP_RPATH:BOOL=NO - -//Flags used by the linker during the creation of static libraries -// during all build types. -CMAKE_STATIC_LINKER_FLAGS:STRING= - -//Flags used by the linker during the creation of static libraries -// during DEBUG builds. -CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= - -//Flags used by the linker during the creation of static libraries -// during MINSIZEREL builds. -CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= - -//Flags used by the linker during the creation of static libraries -// during RELEASE builds. -CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= - -//Flags used by the linker during the creation of static libraries -// during RELWITHDEBINFO builds. -CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= - -//Path to a program. -CMAKE_STRIP:FILEPATH=/usr/bin/strip - -//Path to a program. -CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND - -//If this value is on, makefiles will be generated without the -// .SILENT directive, and all commands will be echoed to the console -// during the make. This is useful for debugging only. With Visual -// Studio IDE projects all commands are done without /nologo. -CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE - -//Single output directory for building all executables. -EXECUTABLE_OUTPUT_PATH:PATH= - -//Single output directory for building all libraries. -LIBRARY_OUTPUT_PATH:PATH= - -//Value Computed by CMake -Project_BINARY_DIR:STATIC=/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build - -//Value Computed by CMake -Project_IS_TOP_LEVEL:STATIC=ON - -//Value Computed by CMake -Project_SOURCE_DIR:STATIC=/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app - - -######################## -# INTERNAL cache entries -######################## - -//ADVANCED property for variable: CMAKE_ADDR2LINE -CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_AR -CMAKE_AR-ADVANCED:INTERNAL=1 -//This is the directory where this CMakeCache.txt was created -CMAKE_CACHEFILE_DIR:INTERNAL=/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build -//Major version of cmake used to create the current loaded cache -CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 -//Minor version of cmake used to create the current loaded cache -CMAKE_CACHE_MINOR_VERSION:INTERNAL=28 -//Patch version of cmake used to create the current loaded cache -CMAKE_CACHE_PATCH_VERSION:INTERNAL=2 -//Path to CMake executable. -CMAKE_COMMAND:INTERNAL=/usr/bin/cmake -//Path to cpack program executable. -CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack -//Path to ctest program executable. -CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest -//ADVANCED property for variable: CMAKE_CXX_COMPILER -CMAKE_CXX_COMPILER-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_COMPILER_AR -CMAKE_CXX_COMPILER_AR-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_COMPILER_RANLIB -CMAKE_CXX_COMPILER_RANLIB-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_FLAGS -CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG -CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL -CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE -CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO -CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_COMPILER -CMAKE_C_COMPILER-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_COMPILER_AR -CMAKE_C_COMPILER_AR-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_COMPILER_RANLIB -CMAKE_C_COMPILER_RANLIB-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS -CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG -CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL -CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE -CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO -CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_DLLTOOL -CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 -//Path to cache edit program executable. -CMAKE_EDIT_COMMAND:INTERNAL=/usr/bin/ccmake -//Executable file format -CMAKE_EXECUTABLE_FORMAT:INTERNAL=ELF -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS -CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG -CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL -CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE -CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//Name of external makefile project generator. -CMAKE_EXTRA_GENERATOR:INTERNAL= -//Name of generator. -CMAKE_GENERATOR:INTERNAL=Ninja -//Generator instance identifier. -CMAKE_GENERATOR_INSTANCE:INTERNAL= -//Name of generator platform. -CMAKE_GENERATOR_PLATFORM:INTERNAL= -//Name of generator toolset. -CMAKE_GENERATOR_TOOLSET:INTERNAL= -//Source directory with the top level CMakeLists.txt file for this -// project -CMAKE_HOME_DIRECTORY:INTERNAL=/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app -//Install .so files without execute permission. -CMAKE_INSTALL_SO_NO_EXE:INTERNAL=0 -//ADVANCED property for variable: CMAKE_LINKER -CMAKE_LINKER-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MAKE_PROGRAM -CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS -CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG -CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL -CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE -CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_NM -CMAKE_NM-ADVANCED:INTERNAL=1 -//number of local generators -CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 -//ADVANCED property for variable: CMAKE_OBJCOPY -CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_OBJDUMP -CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 -//Platform information initialized -CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_RANLIB -CMAKE_RANLIB-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_READELF -CMAKE_READELF-ADVANCED:INTERNAL=1 -//Path to CMake installation. -CMAKE_ROOT:INTERNAL=/usr/share/cmake -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS -CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG -CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL -CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE -CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH -CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_SKIP_RPATH -CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS -CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG -CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL -CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE -CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO -CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_STRIP -CMAKE_STRIP-ADVANCED:INTERNAL=1 -//ADVANCED property for variable: CMAKE_TAPI -CMAKE_TAPI-ADVANCED:INTERNAL=1 -//uname command -CMAKE_UNAME:INTERNAL=/usr/bin/uname -//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE -CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 -//linker supports push/pop state -_CMAKE_LINKER_PUSHPOP_STATE_SUPPORTED:INTERNAL=TRUE - diff --git a/graphic/src/app/build/CMakeFiles/3.28.2/CMakeCCompiler.cmake b/graphic/src/app/build/CMakeFiles/3.28.2/CMakeCCompiler.cmake deleted file mode 100644 index f3be565f..00000000 --- a/graphic/src/app/build/CMakeFiles/3.28.2/CMakeCCompiler.cmake +++ /dev/null @@ -1,74 +0,0 @@ -set(CMAKE_C_COMPILER "/usr/bin/cc") -set(CMAKE_C_COMPILER_ARG1 "") -set(CMAKE_C_COMPILER_ID "GNU") -set(CMAKE_C_COMPILER_VERSION "14.1.1") -set(CMAKE_C_COMPILER_VERSION_INTERNAL "") -set(CMAKE_C_COMPILER_WRAPPER "") -set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17") -set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON") -set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23") -set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") -set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") -set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") -set(CMAKE_C17_COMPILE_FEATURES "c_std_17") -set(CMAKE_C23_COMPILE_FEATURES "c_std_23") - -set(CMAKE_C_PLATFORM_ID "Linux") -set(CMAKE_C_SIMULATE_ID "") -set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU") -set(CMAKE_C_SIMULATE_VERSION "") - - - - -set(CMAKE_AR "/usr/bin/ar") -set(CMAKE_C_COMPILER_AR "/usr/bin/gcc-ar") -set(CMAKE_RANLIB "/usr/bin/ranlib") -set(CMAKE_C_COMPILER_RANLIB "/usr/bin/gcc-ranlib") -set(CMAKE_LINKER "/usr/bin/ld") -set(CMAKE_MT "") -set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") -set(CMAKE_COMPILER_IS_GNUCC 1) -set(CMAKE_C_COMPILER_LOADED 1) -set(CMAKE_C_COMPILER_WORKS TRUE) -set(CMAKE_C_ABI_COMPILED TRUE) - -set(CMAKE_C_COMPILER_ENV_VAR "CC") - -set(CMAKE_C_COMPILER_ID_RUN 1) -set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) -set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) -set(CMAKE_C_LINKER_PREFERENCE 10) -set(CMAKE_C_LINKER_DEPFILE_SUPPORTED TRUE) - -# Save compiler ABI information. -set(CMAKE_C_SIZEOF_DATA_PTR "8") -set(CMAKE_C_COMPILER_ABI "ELF") -set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN") -set(CMAKE_C_LIBRARY_ARCHITECTURE "") - -if(CMAKE_C_SIZEOF_DATA_PTR) - set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") -endif() - -if(CMAKE_C_COMPILER_ABI) - set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") -endif() - -if(CMAKE_C_LIBRARY_ARCHITECTURE) - set(CMAKE_LIBRARY_ARCHITECTURE "") -endif() - -set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") -if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) - set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") -endif() - - - - - -set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/14/include;/usr/local/include;/usr/include") -set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "gcc;gcc_s;c;gcc;gcc_s") -set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/14;/usr/lib64;/lib64;/usr/lib") -set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/graphic/src/app/build/CMakeFiles/3.28.2/CMakeCXXCompiler.cmake b/graphic/src/app/build/CMakeFiles/3.28.2/CMakeCXXCompiler.cmake deleted file mode 100644 index 44c60a97..00000000 --- a/graphic/src/app/build/CMakeFiles/3.28.2/CMakeCXXCompiler.cmake +++ /dev/null @@ -1,85 +0,0 @@ -set(CMAKE_CXX_COMPILER "/usr/bin/c++") -set(CMAKE_CXX_COMPILER_ARG1 "") -set(CMAKE_CXX_COMPILER_ID "GNU") -set(CMAKE_CXX_COMPILER_VERSION "14.1.1") -set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") -set(CMAKE_CXX_COMPILER_WRAPPER "") -set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") -set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") -set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23") -set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") -set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") -set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") -set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") -set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") -set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") - -set(CMAKE_CXX_PLATFORM_ID "Linux") -set(CMAKE_CXX_SIMULATE_ID "") -set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU") -set(CMAKE_CXX_SIMULATE_VERSION "") - - - - -set(CMAKE_AR "/usr/bin/ar") -set(CMAKE_CXX_COMPILER_AR "/usr/bin/gcc-ar") -set(CMAKE_RANLIB "/usr/bin/ranlib") -set(CMAKE_CXX_COMPILER_RANLIB "/usr/bin/gcc-ranlib") -set(CMAKE_LINKER "/usr/bin/ld") -set(CMAKE_MT "") -set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") -set(CMAKE_COMPILER_IS_GNUCXX 1) -set(CMAKE_CXX_COMPILER_LOADED 1) -set(CMAKE_CXX_COMPILER_WORKS TRUE) -set(CMAKE_CXX_ABI_COMPILED TRUE) - -set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") - -set(CMAKE_CXX_COMPILER_ID_RUN 1) -set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m) -set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) - -foreach (lang C OBJC OBJCXX) - if (CMAKE_${lang}_COMPILER_ID_RUN) - foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) - list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) - endforeach() - endif() -endforeach() - -set(CMAKE_CXX_LINKER_PREFERENCE 30) -set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) -set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED TRUE) - -# Save compiler ABI information. -set(CMAKE_CXX_SIZEOF_DATA_PTR "8") -set(CMAKE_CXX_COMPILER_ABI "ELF") -set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") -set(CMAKE_CXX_LIBRARY_ARCHITECTURE "") - -if(CMAKE_CXX_SIZEOF_DATA_PTR) - set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") -endif() - -if(CMAKE_CXX_COMPILER_ABI) - set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") -endif() - -if(CMAKE_CXX_LIBRARY_ARCHITECTURE) - set(CMAKE_LIBRARY_ARCHITECTURE "") -endif() - -set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") -if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) - set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") -endif() - - - - - -set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/usr/include/c++/14;/usr/include/c++/14/x86_64-redhat-linux;/usr/include/c++/14/backward;/usr/lib/gcc/x86_64-redhat-linux/14/include;/usr/local/include;/usr/include") -set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "stdc++;m;gcc_s;gcc;c;gcc_s;gcc") -set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/usr/lib/gcc/x86_64-redhat-linux/14;/usr/lib64;/lib64;/usr/lib") -set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/graphic/src/app/build/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_C.bin b/graphic/src/app/build/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_C.bin deleted file mode 100755 index f4a361182f277781e590328980f65983a2e5cd9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16672 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 A^#A|> diff --git a/graphic/src/app/build/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_CXX.bin b/graphic/src/app/build/CMakeFiles/3.28.2/CMakeDetermineCompilerABI_CXX.bin deleted file mode 100755 index 92c1577482be42f77cb0566338d0d82ab6ae46aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16688 zcmeHOU2GKB6+UYlSQ@|v%1=uYrY)*KsmHsUg#YDu7KTA>QDJ?GwY z*6Z;GRjHJRcJ6BD-1FV@-E-&6ou4~%@3H=&frdx~BsIV;AkAp86r{HRFW;k7#=2l7 zSa2uY0ZS2S!oQ_TNa~!(iw(L!WR&e1Q4((>Wt6lQ$lH|$AW~XLl6dpU;;fcYY7i!o z(4uwXEuk#y!22h1njMG~yQ)8f$e0XE36ZxmPh>5Rni4g&d32ZNiM+u);P?oSRN`%9 z-bUt$EHh7}#FJt||1OSaSEGd*>00V79Uq;7ycy=ru)WAWwiii0D2=@DXFiF)z08|4 zR5dWi@f5j5!yr=p-H$vzv}|!}A%}S%`}?@#aGm2Rl2vHSdg;!Nwrr*~>*c0rT4%aC zTRS_J=j;UQS{8OJA9NrHN$DvG^@FNgepf|9NCMuEbXYo&AC;oWsPp7-e&uyOg z?UC$DUuj#ne%BL^k`3(#)k!v#$X>dP=!B6C#pjv(jfmkkZ6!?N)zkm>m4}!2{{C0* zo_c&m;`!Tt@zrF*u-zOX=~9V-!J$-7uib8L@4$9q->LgcseRBp^vm!4 z5D#|)Jgrr@c%P+m)CZ_` zi6)<2a-j_%`R%gbPshf18h zmVEug`;xC;Z%jtsNM5+9zZlC*Qw(v{I?Ov19`xk;CT} z`6K(keuoTCe)CH5S96krtI9DS}UcwYcAdEm5fiMDL1i}b}5eOp?Mj(tp7=bVXVFW&%2t*cqOnTpzIVsJ?p!6 zzL;@~hlWz4qeK06|8QTbdl)TLxs&z|;XDK)L^d_<+=7z6U(Q{vR4kNbl%psgyH=@8 zqNGIMPANr>?t{ooOJviEWzjkO&_&-X>4RnxIqF+q-?A3MV))M>rse>!O&`joSf~0{ z*uARdsfON_OB)`-ny?^DVFbbmgb@fM5Jn)3Kp25A0$~Kg2!s*%UyT6In|zDsNy?nT zFY^A19uMd{13Jw~q_jc{9FSQmx03Zq_VYQ`Wj^#K(OG_;Wed-LmPx8IH2cTRN}f#0 zjh3>Mab3$2t<$_mO3@}u$Hm88_Nv?H#clvAd0}``nC? zbbKyojcnVj?Q+&G}}tErHorBwc)(%Hhg{1n#=pHIR+zp6Wd{=HxY;4fkf9W3%T z0+^~VfC2SGdY?g)dI!6=M7BHe>fGi5KG*8m?B_C(^=#x^U4M&uIoyujBRgA3N6tY?1*;thBe zlvuDiY-W6p+beiG<8u8KJc*e|%{+Cvp3wWS2&@6QK8iifYbU=D*w?3({c4cwt=Rtz zGxgekR@tutn*Tycu8+UNd<5s;(N5&ozi2(f4-~!*F5hQ~OC^7fc)j%!?;&1q{lhDW*IWNkM!eqo zhuy{89!ev+0OI~jOC{aS=VefDyn>Gu@e8DaHvo%n9+QTJUUWOq& zPOa3ZOfsKzN|Rt_W^?F5OTVZ~9&?K&FP~eW*jR>fbBF+@3YO`+Gd`Hqk+3YU!eP3T z+;t{1$Pi64bRW_T$zyfSlsAUH@>myc%t973x-wkw115ImDeR$O^7D_{VZ>=4)c%={ z?-#xFw2x=Qf1Btz8&6p}JyqJ+XtC6~JZEc7+e)6~m+-#~|HAKLzN|a6u&g%GeX}-o zqEgGBVZN+Cq;Eg9si{`MJdH1E`Eoygfj$^vGSqf{6XZXDMgPQSacO^<{g;_f--IYt z#}8VqZXL|g*g^O*zKF7;XhfS*8!0RMFXIFcF>)n*8LzbP4d)b=)h4d43O$NB8e0fo z#uG0xAFtdhN&Cf4^{%kQdLF|}b?f-)R84Kvxi+_23lJ(AIK7MrmP!gUT z$G;#(Cc>9>ju+d=n#V>utG2=yc@@!GzC4dzX1<)KQibqDUJvlA&q*=O2p%uq9jOj( zVvg#P_RDiq(|^cs#0sfSHm}wz{D-QD&WL}JD==8q*M^urUFeAr?Orl3D zW%+Vk3Fs3;t*UDUXO*C0>HD?#^>(eveSq#mbS;p$%W+wbn8Z#q^tM1Z7EH~7$^*^8 SXXpC-V_k|4@c<#9!oLBjdy1|A diff --git a/graphic/src/app/build/CMakeFiles/3.28.2/CMakeSystem.cmake b/graphic/src/app/build/CMakeFiles/3.28.2/CMakeSystem.cmake deleted file mode 100644 index 829e4afd..00000000 --- a/graphic/src/app/build/CMakeFiles/3.28.2/CMakeSystem.cmake +++ /dev/null @@ -1,15 +0,0 @@ -set(CMAKE_HOST_SYSTEM "Linux-6.8.11-300.fc40.x86_64") -set(CMAKE_HOST_SYSTEM_NAME "Linux") -set(CMAKE_HOST_SYSTEM_VERSION "6.8.11-300.fc40.x86_64") -set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") - - - -set(CMAKE_SYSTEM "Linux-6.8.11-300.fc40.x86_64") -set(CMAKE_SYSTEM_NAME "Linux") -set(CMAKE_SYSTEM_VERSION "6.8.11-300.fc40.x86_64") -set(CMAKE_SYSTEM_PROCESSOR "x86_64") - -set(CMAKE_CROSSCOMPILING "FALSE") - -set(CMAKE_SYSTEM_LOADED 1) diff --git a/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdC/CMakeCCompilerId.c b/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdC/CMakeCCompilerId.c deleted file mode 100644 index 0a0ec9b1..00000000 --- a/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdC/CMakeCCompilerId.c +++ /dev/null @@ -1,880 +0,0 @@ -#ifdef __cplusplus -# error "A C++ compiler has been selected for C." -#endif - -#if defined(__18CXX) -# define ID_VOID_MAIN -#endif -#if defined(__CLASSIC_C__) -/* cv-qualifiers did not exist in K&R C */ -# define const -# define volatile -#endif - -#if !defined(__has_include) -/* If the compiler does not have __has_include, pretend the answer is - always no. */ -# define __has_include(x) 0 -#endif - - -/* Version number components: V=Version, R=Revision, P=Patch - Version date components: YYYY=Year, MM=Month, DD=Day */ - -#if defined(__INTEL_COMPILER) || defined(__ICC) -# define COMPILER_ID "Intel" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# if defined(__GNUC__) -# define SIMULATE_ID "GNU" -# endif - /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, - except that a few beta releases use the old format with V=2021. */ -# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) -# if defined(__INTEL_COMPILER_UPDATE) -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) -# else -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) -# endif -# else -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) - /* The third version component from --version is an update index, - but no macro is provided for it. */ -# define COMPILER_VERSION_PATCH DEC(0) -# endif -# if defined(__INTEL_COMPILER_BUILD_DATE) - /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ -# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) -# endif -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# if defined(__GNUC__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -# elif defined(__GNUG__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) -# endif -# if defined(__GNUC_MINOR__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -# endif -# if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) -# define COMPILER_ID "IntelLLVM" -#if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -#endif -#if defined(__GNUC__) -# define SIMULATE_ID "GNU" -#endif -/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and - * later. Look for 6 digit vs. 8 digit version number to decide encoding. - * VVVV is no smaller than the current year when a version is released. - */ -#if __INTEL_LLVM_COMPILER < 1000000L -# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) -#else -# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) -# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) -#endif -#if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -#endif -#if defined(__GNUC__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -#elif defined(__GNUG__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) -#endif -#if defined(__GNUC_MINOR__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -#endif -#if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -#endif - -#elif defined(__PATHCC__) -# define COMPILER_ID "PathScale" -# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) -# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) -# if defined(__PATHCC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) -# endif - -#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) -# define COMPILER_ID "Embarcadero" -# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) -# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) -# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) - -#elif defined(__BORLANDC__) -# define COMPILER_ID "Borland" - /* __BORLANDC__ = 0xVRR */ -# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) -# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) - -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# define COMPILER_ID "Watcom" - /* __WATCOMC__ = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__WATCOMC__) -# define COMPILER_ID "OpenWatcom" - /* __WATCOMC__ = VVRP + 1100 */ -# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__SUNPRO_C) -# define COMPILER_ID "SunPro" -# if __SUNPRO_C >= 0x5100 - /* __SUNPRO_C = 0xVRRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) -# else - /* __SUNPRO_CC = 0xVRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) -# endif - -#elif defined(__HP_cc) -# define COMPILER_ID "HP" - /* __HP_cc = VVRRPP */ -# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) -# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) - -#elif defined(__DECC) -# define COMPILER_ID "Compaq" - /* __DECC_VER = VVRRTPPPP */ -# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) -# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) -# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) - -#elif defined(__IBMC__) && defined(__COMPILER_VER__) -# define COMPILER_ID "zOS" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__open_xl__) && defined(__clang__) -# define COMPILER_ID "IBMClang" -# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) -# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) -# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) - - -#elif defined(__ibmxl__) && defined(__clang__) -# define COMPILER_ID "XLClang" -# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) -# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) -# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) - - -#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 -# define COMPILER_ID "XL" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 -# define COMPILER_ID "VisualAge" - /* __IBMC__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) - -#elif defined(__NVCOMPILER) -# define COMPILER_ID "NVHPC" -# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) -# if defined(__NVCOMPILER_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) -# endif - -#elif defined(__PGI) -# define COMPILER_ID "PGI" -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif - -#elif defined(__clang__) && defined(__cray__) -# define COMPILER_ID "CrayClang" -# define COMPILER_VERSION_MAJOR DEC(__cray_major__) -# define COMPILER_VERSION_MINOR DEC(__cray_minor__) -# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(_CRAYC) -# define COMPILER_ID "Cray" -# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) - -#elif defined(__TI_COMPILER_VERSION__) -# define COMPILER_ID "TI" - /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ -# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) -# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) -# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) - -#elif defined(__CLANG_FUJITSU) -# define COMPILER_ID "FujitsuClang" -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(__FUJITSU) -# define COMPILER_ID "Fujitsu" -# if defined(__FCC_version__) -# define COMPILER_VERSION __FCC_version__ -# elif defined(__FCC_major__) -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# endif -# if defined(__fcc_version) -# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) -# elif defined(__FCC_VERSION) -# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) -# endif - - -#elif defined(__ghs__) -# define COMPILER_ID "GHS" -/* __GHS_VERSION_NUMBER = VVVVRP */ -# ifdef __GHS_VERSION_NUMBER -# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) -# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) -# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) -# endif - -#elif defined(__TASKING__) -# define COMPILER_ID "Tasking" - # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) - # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) -# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) - -#elif defined(__ORANGEC__) -# define COMPILER_ID "OrangeC" -# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) - -#elif defined(__TINYC__) -# define COMPILER_ID "TinyCC" - -#elif defined(__BCC__) -# define COMPILER_ID "Bruce" - -#elif defined(__SCO_VERSION__) -# define COMPILER_ID "SCO" - -#elif defined(__ARMCC_VERSION) && !defined(__clang__) -# define COMPILER_ID "ARMCC" -#if __ARMCC_VERSION >= 1000000 - /* __ARMCC_VERSION = VRRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#else - /* __ARMCC_VERSION = VRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#endif - - -#elif defined(__clang__) && defined(__apple_build_version__) -# define COMPILER_ID "AppleClang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) - -#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) -# define COMPILER_ID "ARMClang" - # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) -# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) - -#elif defined(__clang__) -# define COMPILER_ID "Clang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) -# define COMPILER_ID "LCC" -# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) -# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) -# if defined(__LCC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) -# endif -# if defined(__GNUC__) && defined(__GNUC_MINOR__) -# define SIMULATE_ID "GNU" -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif -# endif - -#elif defined(__GNUC__) -# define COMPILER_ID "GNU" -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# if defined(__GNUC_MINOR__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# endif -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif defined(_MSC_VER) -# define COMPILER_ID "MSVC" - /* _MSC_VER = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) -# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) -# if defined(_MSC_FULL_VER) -# if _MSC_VER >= 1400 - /* _MSC_FULL_VER = VVRRPPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) -# else - /* _MSC_FULL_VER = VVRRPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) -# endif -# endif -# if defined(_MSC_BUILD) -# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) -# endif - -#elif defined(_ADI_COMPILER) -# define COMPILER_ID "ADSP" -#if defined(__VERSIONNUM__) - /* __VERSIONNUM__ = 0xVVRRPPTT */ -# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) -# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) -# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) -# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) -#endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# define COMPILER_ID "IAR" -# if defined(__VER__) && defined(__ICCARM__) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) -# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) -# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) -# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) -# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# endif - -#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) -# define COMPILER_ID "SDCC" -# if defined(__SDCC_VERSION_MAJOR) -# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) -# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) -# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) -# else - /* SDCC = VRP */ -# define COMPILER_VERSION_MAJOR DEC(SDCC/100) -# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) -# define COMPILER_VERSION_PATCH DEC(SDCC % 10) -# endif - - -/* These compilers are either not known or too old to define an - identification macro. Try to identify the platform and guess that - it is the native compiler. */ -#elif defined(__hpux) || defined(__hpua) -# define COMPILER_ID "HP" - -#else /* unknown compiler */ -# define COMPILER_ID "" -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; -#ifdef SIMULATE_ID -char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; -#endif - -#ifdef __QNXNTO__ -char const* qnxnto = "INFO" ":" "qnxnto[]"; -#endif - -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) -char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; -#endif - -#define STRINGIFY_HELPER(X) #X -#define STRINGIFY(X) STRINGIFY_HELPER(X) - -/* Identify known platforms by name. */ -#if defined(__linux) || defined(__linux__) || defined(linux) -# define PLATFORM_ID "Linux" - -#elif defined(__MSYS__) -# define PLATFORM_ID "MSYS" - -#elif defined(__CYGWIN__) -# define PLATFORM_ID "Cygwin" - -#elif defined(__MINGW32__) -# define PLATFORM_ID "MinGW" - -#elif defined(__APPLE__) -# define PLATFORM_ID "Darwin" - -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -# define PLATFORM_ID "Windows" - -#elif defined(__FreeBSD__) || defined(__FreeBSD) -# define PLATFORM_ID "FreeBSD" - -#elif defined(__NetBSD__) || defined(__NetBSD) -# define PLATFORM_ID "NetBSD" - -#elif defined(__OpenBSD__) || defined(__OPENBSD) -# define PLATFORM_ID "OpenBSD" - -#elif defined(__sun) || defined(sun) -# define PLATFORM_ID "SunOS" - -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) -# define PLATFORM_ID "AIX" - -#elif defined(__hpux) || defined(__hpux__) -# define PLATFORM_ID "HP-UX" - -#elif defined(__HAIKU__) -# define PLATFORM_ID "Haiku" - -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) -# define PLATFORM_ID "BeOS" - -#elif defined(__QNX__) || defined(__QNXNTO__) -# define PLATFORM_ID "QNX" - -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) -# define PLATFORM_ID "Tru64" - -#elif defined(__riscos) || defined(__riscos__) -# define PLATFORM_ID "RISCos" - -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) -# define PLATFORM_ID "SINIX" - -#elif defined(__UNIX_SV__) -# define PLATFORM_ID "UNIX_SV" - -#elif defined(__bsdos__) -# define PLATFORM_ID "BSDOS" - -#elif defined(_MPRAS) || defined(MPRAS) -# define PLATFORM_ID "MP-RAS" - -#elif defined(__osf) || defined(__osf__) -# define PLATFORM_ID "OSF1" - -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) -# define PLATFORM_ID "SCO_SV" - -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) -# define PLATFORM_ID "ULTRIX" - -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) -# define PLATFORM_ID "Xenix" - -#elif defined(__WATCOMC__) -# if defined(__LINUX__) -# define PLATFORM_ID "Linux" - -# elif defined(__DOS__) -# define PLATFORM_ID "DOS" - -# elif defined(__OS2__) -# define PLATFORM_ID "OS2" - -# elif defined(__WINDOWS__) -# define PLATFORM_ID "Windows3x" - -# elif defined(__VXWORKS__) -# define PLATFORM_ID "VxWorks" - -# else /* unknown platform */ -# define PLATFORM_ID -# endif - -#elif defined(__INTEGRITY) -# if defined(INT_178B) -# define PLATFORM_ID "Integrity178" - -# else /* regular Integrity */ -# define PLATFORM_ID "Integrity" -# endif - -# elif defined(_ADI_COMPILER) -# define PLATFORM_ID "ADSP" - -#else /* unknown platform */ -# define PLATFORM_ID - -#endif - -/* For windows compilers MSVC and Intel we can determine - the architecture of the compiler being used. This is because - the compilers do not have flags that can change the architecture, - but rather depend on which compiler is being used -*/ -#if defined(_WIN32) && defined(_MSC_VER) -# if defined(_M_IA64) -# define ARCHITECTURE_ID "IA64" - -# elif defined(_M_ARM64EC) -# define ARCHITECTURE_ID "ARM64EC" - -# elif defined(_M_X64) || defined(_M_AMD64) -# define ARCHITECTURE_ID "x64" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# elif defined(_M_ARM64) -# define ARCHITECTURE_ID "ARM64" - -# elif defined(_M_ARM) -# if _M_ARM == 4 -# define ARCHITECTURE_ID "ARMV4I" -# elif _M_ARM == 5 -# define ARCHITECTURE_ID "ARMV5I" -# else -# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) -# endif - -# elif defined(_M_MIPS) -# define ARCHITECTURE_ID "MIPS" - -# elif defined(_M_SH) -# define ARCHITECTURE_ID "SHx" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__WATCOMC__) -# if defined(_M_I86) -# define ARCHITECTURE_ID "I86" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# if defined(__ICCARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__ICCRX__) -# define ARCHITECTURE_ID "RX" - -# elif defined(__ICCRH850__) -# define ARCHITECTURE_ID "RH850" - -# elif defined(__ICCRL78__) -# define ARCHITECTURE_ID "RL78" - -# elif defined(__ICCRISCV__) -# define ARCHITECTURE_ID "RISCV" - -# elif defined(__ICCAVR__) -# define ARCHITECTURE_ID "AVR" - -# elif defined(__ICC430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__ICCV850__) -# define ARCHITECTURE_ID "V850" - -# elif defined(__ICC8051__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__ICCSTM8__) -# define ARCHITECTURE_ID "STM8" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__ghs__) -# if defined(__PPC64__) -# define ARCHITECTURE_ID "PPC64" - -# elif defined(__ppc__) -# define ARCHITECTURE_ID "PPC" - -# elif defined(__ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__x86_64__) -# define ARCHITECTURE_ID "x64" - -# elif defined(__i386__) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__TI_COMPILER_VERSION__) -# if defined(__TI_ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__MSP430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__TMS320C28XX__) -# define ARCHITECTURE_ID "TMS320C28x" - -# elif defined(__TMS320C6X__) || defined(_TMS320C6X) -# define ARCHITECTURE_ID "TMS320C6x" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -# elif defined(__ADSPSHARC__) -# define ARCHITECTURE_ID "SHARC" - -# elif defined(__ADSPBLACKFIN__) -# define ARCHITECTURE_ID "Blackfin" - -#elif defined(__TASKING__) - -# if defined(__CTC__) || defined(__CPTC__) -# define ARCHITECTURE_ID "TriCore" - -# elif defined(__CMCS__) -# define ARCHITECTURE_ID "MCS" - -# elif defined(__CARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__CARC__) -# define ARCHITECTURE_ID "ARC" - -# elif defined(__C51__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__CPCP__) -# define ARCHITECTURE_ID "PCP" - -# else -# define ARCHITECTURE_ID "" -# endif - -#else -# define ARCHITECTURE_ID -#endif - -/* Convert integer to decimal digit literals. */ -#define DEC(n) \ - ('0' + (((n) / 10000000)%10)), \ - ('0' + (((n) / 1000000)%10)), \ - ('0' + (((n) / 100000)%10)), \ - ('0' + (((n) / 10000)%10)), \ - ('0' + (((n) / 1000)%10)), \ - ('0' + (((n) / 100)%10)), \ - ('0' + (((n) / 10)%10)), \ - ('0' + ((n) % 10)) - -/* Convert integer to hex digit literals. */ -#define HEX(n) \ - ('0' + ((n)>>28 & 0xF)), \ - ('0' + ((n)>>24 & 0xF)), \ - ('0' + ((n)>>20 & 0xF)), \ - ('0' + ((n)>>16 & 0xF)), \ - ('0' + ((n)>>12 & 0xF)), \ - ('0' + ((n)>>8 & 0xF)), \ - ('0' + ((n)>>4 & 0xF)), \ - ('0' + ((n) & 0xF)) - -/* Construct a string literal encoding the version number. */ -#ifdef COMPILER_VERSION -char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; - -/* Construct a string literal encoding the version number components. */ -#elif defined(COMPILER_VERSION_MAJOR) -char const info_version[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', - COMPILER_VERSION_MAJOR, -# ifdef COMPILER_VERSION_MINOR - '.', COMPILER_VERSION_MINOR, -# ifdef COMPILER_VERSION_PATCH - '.', COMPILER_VERSION_PATCH, -# ifdef COMPILER_VERSION_TWEAK - '.', COMPILER_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct a string literal encoding the internal version number. */ -#ifdef COMPILER_VERSION_INTERNAL -char const info_version_internal[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', - 'i','n','t','e','r','n','a','l','[', - COMPILER_VERSION_INTERNAL,']','\0'}; -#elif defined(COMPILER_VERSION_INTERNAL_STR) -char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; -#endif - -/* Construct a string literal encoding the version number components. */ -#ifdef SIMULATE_VERSION_MAJOR -char const info_simulate_version[] = { - 'I', 'N', 'F', 'O', ':', - 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', - SIMULATE_VERSION_MAJOR, -# ifdef SIMULATE_VERSION_MINOR - '.', SIMULATE_VERSION_MINOR, -# ifdef SIMULATE_VERSION_PATCH - '.', SIMULATE_VERSION_PATCH, -# ifdef SIMULATE_VERSION_TWEAK - '.', SIMULATE_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; -char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; - - - -#if !defined(__STDC__) && !defined(__clang__) -# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) -# define C_VERSION "90" -# else -# define C_VERSION -# endif -#elif __STDC_VERSION__ > 201710L -# define C_VERSION "23" -#elif __STDC_VERSION__ >= 201710L -# define C_VERSION "17" -#elif __STDC_VERSION__ >= 201000L -# define C_VERSION "11" -#elif __STDC_VERSION__ >= 199901L -# define C_VERSION "99" -#else -# define C_VERSION "90" -#endif -const char* info_language_standard_default = - "INFO" ":" "standard_default[" C_VERSION "]"; - -const char* info_language_extensions_default = "INFO" ":" "extensions_default[" -#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ - defined(__TI_COMPILER_VERSION__)) && \ - !defined(__STRICT_ANSI__) - "ON" -#else - "OFF" -#endif -"]"; - -/*--------------------------------------------------------------------------*/ - -#ifdef ID_VOID_MAIN -void main() {} -#else -# if defined(__CLASSIC_C__) -int main(argc, argv) int argc; char *argv[]; -# else -int main(int argc, char* argv[]) -# endif -{ - int require = 0; - require += info_compiler[argc]; - require += info_platform[argc]; - require += info_arch[argc]; -#ifdef COMPILER_VERSION_MAJOR - require += info_version[argc]; -#endif -#ifdef COMPILER_VERSION_INTERNAL - require += info_version_internal[argc]; -#endif -#ifdef SIMULATE_ID - require += info_simulate[argc]; -#endif -#ifdef SIMULATE_VERSION_MAJOR - require += info_simulate_version[argc]; -#endif -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) - require += info_cray[argc]; -#endif - require += info_language_standard_default[argc]; - require += info_language_extensions_default[argc]; - (void)argv; - return require; -} -#endif diff --git a/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdCXX/CMakeCXXCompilerId.cpp b/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdCXX/CMakeCXXCompilerId.cpp deleted file mode 100644 index 9c9c90ea..00000000 --- a/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdCXX/CMakeCXXCompilerId.cpp +++ /dev/null @@ -1,869 +0,0 @@ -/* This source file must have a .cpp extension so that all C++ compilers - recognize the extension without flags. Borland does not know .cxx for - example. */ -#ifndef __cplusplus -# error "A C compiler has been selected for C++." -#endif - -#if !defined(__has_include) -/* If the compiler does not have __has_include, pretend the answer is - always no. */ -# define __has_include(x) 0 -#endif - - -/* Version number components: V=Version, R=Revision, P=Patch - Version date components: YYYY=Year, MM=Month, DD=Day */ - -#if defined(__COMO__) -# define COMPILER_ID "Comeau" - /* __COMO_VERSION__ = VRR */ -# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) -# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) - -#elif defined(__INTEL_COMPILER) || defined(__ICC) -# define COMPILER_ID "Intel" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# if defined(__GNUC__) -# define SIMULATE_ID "GNU" -# endif - /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, - except that a few beta releases use the old format with V=2021. */ -# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) -# if defined(__INTEL_COMPILER_UPDATE) -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) -# else -# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) -# endif -# else -# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) -# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) - /* The third version component from --version is an update index, - but no macro is provided for it. */ -# define COMPILER_VERSION_PATCH DEC(0) -# endif -# if defined(__INTEL_COMPILER_BUILD_DATE) - /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ -# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) -# endif -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# if defined(__GNUC__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -# elif defined(__GNUG__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) -# endif -# if defined(__GNUC_MINOR__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -# endif -# if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) -# define COMPILER_ID "IntelLLVM" -#if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -#endif -#if defined(__GNUC__) -# define SIMULATE_ID "GNU" -#endif -/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and - * later. Look for 6 digit vs. 8 digit version number to decide encoding. - * VVVV is no smaller than the current year when a version is released. - */ -#if __INTEL_LLVM_COMPILER < 1000000L -# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) -# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) -#else -# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) -# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) -#endif -#if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -#endif -#if defined(__GNUC__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -#elif defined(__GNUG__) -# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) -#endif -#if defined(__GNUC_MINOR__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -#endif -#if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -#endif - -#elif defined(__PATHCC__) -# define COMPILER_ID "PathScale" -# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) -# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) -# if defined(__PATHCC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) -# endif - -#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) -# define COMPILER_ID "Embarcadero" -# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) -# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) -# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) - -#elif defined(__BORLANDC__) -# define COMPILER_ID "Borland" - /* __BORLANDC__ = 0xVRR */ -# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) -# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) - -#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 -# define COMPILER_ID "Watcom" - /* __WATCOMC__ = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__WATCOMC__) -# define COMPILER_ID "OpenWatcom" - /* __WATCOMC__ = VVRP + 1100 */ -# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) -# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) -# if (__WATCOMC__ % 10) > 0 -# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) -# endif - -#elif defined(__SUNPRO_CC) -# define COMPILER_ID "SunPro" -# if __SUNPRO_CC >= 0x5100 - /* __SUNPRO_CC = 0xVRRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# else - /* __SUNPRO_CC = 0xVRP */ -# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) -# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) -# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) -# endif - -#elif defined(__HP_aCC) -# define COMPILER_ID "HP" - /* __HP_aCC = VVRRPP */ -# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) -# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) -# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) - -#elif defined(__DECCXX) -# define COMPILER_ID "Compaq" - /* __DECCXX_VER = VVRRTPPPP */ -# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) -# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) -# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) - -#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) -# define COMPILER_ID "zOS" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__open_xl__) && defined(__clang__) -# define COMPILER_ID "IBMClang" -# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) -# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) -# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) - - -#elif defined(__ibmxl__) && defined(__clang__) -# define COMPILER_ID "XLClang" -# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) -# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) -# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) -# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) - - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 -# define COMPILER_ID "XL" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 -# define COMPILER_ID "VisualAge" - /* __IBMCPP__ = VRP */ -# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) -# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) -# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) - -#elif defined(__NVCOMPILER) -# define COMPILER_ID "NVHPC" -# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) -# if defined(__NVCOMPILER_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) -# endif - -#elif defined(__PGI) -# define COMPILER_ID "PGI" -# define COMPILER_VERSION_MAJOR DEC(__PGIC__) -# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) -# if defined(__PGIC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) -# endif - -#elif defined(__clang__) && defined(__cray__) -# define COMPILER_ID "CrayClang" -# define COMPILER_VERSION_MAJOR DEC(__cray_major__) -# define COMPILER_VERSION_MINOR DEC(__cray_minor__) -# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(_CRAYC) -# define COMPILER_ID "Cray" -# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) -# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) - -#elif defined(__TI_COMPILER_VERSION__) -# define COMPILER_ID "TI" - /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ -# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) -# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) -# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) - -#elif defined(__CLANG_FUJITSU) -# define COMPILER_ID "FujitsuClang" -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# define COMPILER_VERSION_INTERNAL_STR __clang_version__ - - -#elif defined(__FUJITSU) -# define COMPILER_ID "Fujitsu" -# if defined(__FCC_version__) -# define COMPILER_VERSION __FCC_version__ -# elif defined(__FCC_major__) -# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) -# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) -# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) -# endif -# if defined(__fcc_version) -# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) -# elif defined(__FCC_VERSION) -# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) -# endif - - -#elif defined(__ghs__) -# define COMPILER_ID "GHS" -/* __GHS_VERSION_NUMBER = VVVVRP */ -# ifdef __GHS_VERSION_NUMBER -# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) -# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) -# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) -# endif - -#elif defined(__TASKING__) -# define COMPILER_ID "Tasking" - # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) - # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) -# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) - -#elif defined(__ORANGEC__) -# define COMPILER_ID "OrangeC" -# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) -# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) - -#elif defined(__SCO_VERSION__) -# define COMPILER_ID "SCO" - -#elif defined(__ARMCC_VERSION) && !defined(__clang__) -# define COMPILER_ID "ARMCC" -#if __ARMCC_VERSION >= 1000000 - /* __ARMCC_VERSION = VRRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#else - /* __ARMCC_VERSION = VRPPPP */ - # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) - # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) - # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) -#endif - - -#elif defined(__clang__) && defined(__apple_build_version__) -# define COMPILER_ID "AppleClang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif -# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) - -#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) -# define COMPILER_ID "ARMClang" - # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) - # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) - # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) -# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) - -#elif defined(__clang__) -# define COMPILER_ID "Clang" -# if defined(_MSC_VER) -# define SIMULATE_ID "MSVC" -# endif -# define COMPILER_VERSION_MAJOR DEC(__clang_major__) -# define COMPILER_VERSION_MINOR DEC(__clang_minor__) -# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) -# if defined(_MSC_VER) - /* _MSC_VER = VVRR */ -# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) -# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) -# endif - -#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) -# define COMPILER_ID "LCC" -# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) -# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) -# if defined(__LCC_MINOR__) -# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) -# endif -# if defined(__GNUC__) && defined(__GNUC_MINOR__) -# define SIMULATE_ID "GNU" -# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) -# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) -# if defined(__GNUC_PATCHLEVEL__) -# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif -# endif - -#elif defined(__GNUC__) || defined(__GNUG__) -# define COMPILER_ID "GNU" -# if defined(__GNUC__) -# define COMPILER_VERSION_MAJOR DEC(__GNUC__) -# else -# define COMPILER_VERSION_MAJOR DEC(__GNUG__) -# endif -# if defined(__GNUC_MINOR__) -# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) -# endif -# if defined(__GNUC_PATCHLEVEL__) -# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) -# endif - -#elif defined(_MSC_VER) -# define COMPILER_ID "MSVC" - /* _MSC_VER = VVRR */ -# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) -# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) -# if defined(_MSC_FULL_VER) -# if _MSC_VER >= 1400 - /* _MSC_FULL_VER = VVRRPPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) -# else - /* _MSC_FULL_VER = VVRRPPPP */ -# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) -# endif -# endif -# if defined(_MSC_BUILD) -# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) -# endif - -#elif defined(_ADI_COMPILER) -# define COMPILER_ID "ADSP" -#if defined(__VERSIONNUM__) - /* __VERSIONNUM__ = 0xVVRRPPTT */ -# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) -# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) -# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) -# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) -#endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# define COMPILER_ID "IAR" -# if defined(__VER__) && defined(__ICCARM__) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) -# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) -# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) -# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) -# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) -# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) -# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) -# endif - - -/* These compilers are either not known or too old to define an - identification macro. Try to identify the platform and guess that - it is the native compiler. */ -#elif defined(__hpux) || defined(__hpua) -# define COMPILER_ID "HP" - -#else /* unknown compiler */ -# define COMPILER_ID "" -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; -#ifdef SIMULATE_ID -char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; -#endif - -#ifdef __QNXNTO__ -char const* qnxnto = "INFO" ":" "qnxnto[]"; -#endif - -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) -char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; -#endif - -#define STRINGIFY_HELPER(X) #X -#define STRINGIFY(X) STRINGIFY_HELPER(X) - -/* Identify known platforms by name. */ -#if defined(__linux) || defined(__linux__) || defined(linux) -# define PLATFORM_ID "Linux" - -#elif defined(__MSYS__) -# define PLATFORM_ID "MSYS" - -#elif defined(__CYGWIN__) -# define PLATFORM_ID "Cygwin" - -#elif defined(__MINGW32__) -# define PLATFORM_ID "MinGW" - -#elif defined(__APPLE__) -# define PLATFORM_ID "Darwin" - -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) -# define PLATFORM_ID "Windows" - -#elif defined(__FreeBSD__) || defined(__FreeBSD) -# define PLATFORM_ID "FreeBSD" - -#elif defined(__NetBSD__) || defined(__NetBSD) -# define PLATFORM_ID "NetBSD" - -#elif defined(__OpenBSD__) || defined(__OPENBSD) -# define PLATFORM_ID "OpenBSD" - -#elif defined(__sun) || defined(sun) -# define PLATFORM_ID "SunOS" - -#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) -# define PLATFORM_ID "AIX" - -#elif defined(__hpux) || defined(__hpux__) -# define PLATFORM_ID "HP-UX" - -#elif defined(__HAIKU__) -# define PLATFORM_ID "Haiku" - -#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) -# define PLATFORM_ID "BeOS" - -#elif defined(__QNX__) || defined(__QNXNTO__) -# define PLATFORM_ID "QNX" - -#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) -# define PLATFORM_ID "Tru64" - -#elif defined(__riscos) || defined(__riscos__) -# define PLATFORM_ID "RISCos" - -#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) -# define PLATFORM_ID "SINIX" - -#elif defined(__UNIX_SV__) -# define PLATFORM_ID "UNIX_SV" - -#elif defined(__bsdos__) -# define PLATFORM_ID "BSDOS" - -#elif defined(_MPRAS) || defined(MPRAS) -# define PLATFORM_ID "MP-RAS" - -#elif defined(__osf) || defined(__osf__) -# define PLATFORM_ID "OSF1" - -#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) -# define PLATFORM_ID "SCO_SV" - -#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) -# define PLATFORM_ID "ULTRIX" - -#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) -# define PLATFORM_ID "Xenix" - -#elif defined(__WATCOMC__) -# if defined(__LINUX__) -# define PLATFORM_ID "Linux" - -# elif defined(__DOS__) -# define PLATFORM_ID "DOS" - -# elif defined(__OS2__) -# define PLATFORM_ID "OS2" - -# elif defined(__WINDOWS__) -# define PLATFORM_ID "Windows3x" - -# elif defined(__VXWORKS__) -# define PLATFORM_ID "VxWorks" - -# else /* unknown platform */ -# define PLATFORM_ID -# endif - -#elif defined(__INTEGRITY) -# if defined(INT_178B) -# define PLATFORM_ID "Integrity178" - -# else /* regular Integrity */ -# define PLATFORM_ID "Integrity" -# endif - -# elif defined(_ADI_COMPILER) -# define PLATFORM_ID "ADSP" - -#else /* unknown platform */ -# define PLATFORM_ID - -#endif - -/* For windows compilers MSVC and Intel we can determine - the architecture of the compiler being used. This is because - the compilers do not have flags that can change the architecture, - but rather depend on which compiler is being used -*/ -#if defined(_WIN32) && defined(_MSC_VER) -# if defined(_M_IA64) -# define ARCHITECTURE_ID "IA64" - -# elif defined(_M_ARM64EC) -# define ARCHITECTURE_ID "ARM64EC" - -# elif defined(_M_X64) || defined(_M_AMD64) -# define ARCHITECTURE_ID "x64" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# elif defined(_M_ARM64) -# define ARCHITECTURE_ID "ARM64" - -# elif defined(_M_ARM) -# if _M_ARM == 4 -# define ARCHITECTURE_ID "ARMV4I" -# elif _M_ARM == 5 -# define ARCHITECTURE_ID "ARMV5I" -# else -# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) -# endif - -# elif defined(_M_MIPS) -# define ARCHITECTURE_ID "MIPS" - -# elif defined(_M_SH) -# define ARCHITECTURE_ID "SHx" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__WATCOMC__) -# if defined(_M_I86) -# define ARCHITECTURE_ID "I86" - -# elif defined(_M_IX86) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) -# if defined(__ICCARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__ICCRX__) -# define ARCHITECTURE_ID "RX" - -# elif defined(__ICCRH850__) -# define ARCHITECTURE_ID "RH850" - -# elif defined(__ICCRL78__) -# define ARCHITECTURE_ID "RL78" - -# elif defined(__ICCRISCV__) -# define ARCHITECTURE_ID "RISCV" - -# elif defined(__ICCAVR__) -# define ARCHITECTURE_ID "AVR" - -# elif defined(__ICC430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__ICCV850__) -# define ARCHITECTURE_ID "V850" - -# elif defined(__ICC8051__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__ICCSTM8__) -# define ARCHITECTURE_ID "STM8" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__ghs__) -# if defined(__PPC64__) -# define ARCHITECTURE_ID "PPC64" - -# elif defined(__ppc__) -# define ARCHITECTURE_ID "PPC" - -# elif defined(__ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__x86_64__) -# define ARCHITECTURE_ID "x64" - -# elif defined(__i386__) -# define ARCHITECTURE_ID "X86" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -#elif defined(__TI_COMPILER_VERSION__) -# if defined(__TI_ARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__MSP430__) -# define ARCHITECTURE_ID "MSP430" - -# elif defined(__TMS320C28XX__) -# define ARCHITECTURE_ID "TMS320C28x" - -# elif defined(__TMS320C6X__) || defined(_TMS320C6X) -# define ARCHITECTURE_ID "TMS320C6x" - -# else /* unknown architecture */ -# define ARCHITECTURE_ID "" -# endif - -# elif defined(__ADSPSHARC__) -# define ARCHITECTURE_ID "SHARC" - -# elif defined(__ADSPBLACKFIN__) -# define ARCHITECTURE_ID "Blackfin" - -#elif defined(__TASKING__) - -# if defined(__CTC__) || defined(__CPTC__) -# define ARCHITECTURE_ID "TriCore" - -# elif defined(__CMCS__) -# define ARCHITECTURE_ID "MCS" - -# elif defined(__CARM__) -# define ARCHITECTURE_ID "ARM" - -# elif defined(__CARC__) -# define ARCHITECTURE_ID "ARC" - -# elif defined(__C51__) -# define ARCHITECTURE_ID "8051" - -# elif defined(__CPCP__) -# define ARCHITECTURE_ID "PCP" - -# else -# define ARCHITECTURE_ID "" -# endif - -#else -# define ARCHITECTURE_ID -#endif - -/* Convert integer to decimal digit literals. */ -#define DEC(n) \ - ('0' + (((n) / 10000000)%10)), \ - ('0' + (((n) / 1000000)%10)), \ - ('0' + (((n) / 100000)%10)), \ - ('0' + (((n) / 10000)%10)), \ - ('0' + (((n) / 1000)%10)), \ - ('0' + (((n) / 100)%10)), \ - ('0' + (((n) / 10)%10)), \ - ('0' + ((n) % 10)) - -/* Convert integer to hex digit literals. */ -#define HEX(n) \ - ('0' + ((n)>>28 & 0xF)), \ - ('0' + ((n)>>24 & 0xF)), \ - ('0' + ((n)>>20 & 0xF)), \ - ('0' + ((n)>>16 & 0xF)), \ - ('0' + ((n)>>12 & 0xF)), \ - ('0' + ((n)>>8 & 0xF)), \ - ('0' + ((n)>>4 & 0xF)), \ - ('0' + ((n) & 0xF)) - -/* Construct a string literal encoding the version number. */ -#ifdef COMPILER_VERSION -char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; - -/* Construct a string literal encoding the version number components. */ -#elif defined(COMPILER_VERSION_MAJOR) -char const info_version[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', - COMPILER_VERSION_MAJOR, -# ifdef COMPILER_VERSION_MINOR - '.', COMPILER_VERSION_MINOR, -# ifdef COMPILER_VERSION_PATCH - '.', COMPILER_VERSION_PATCH, -# ifdef COMPILER_VERSION_TWEAK - '.', COMPILER_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct a string literal encoding the internal version number. */ -#ifdef COMPILER_VERSION_INTERNAL -char const info_version_internal[] = { - 'I', 'N', 'F', 'O', ':', - 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', - 'i','n','t','e','r','n','a','l','[', - COMPILER_VERSION_INTERNAL,']','\0'}; -#elif defined(COMPILER_VERSION_INTERNAL_STR) -char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; -#endif - -/* Construct a string literal encoding the version number components. */ -#ifdef SIMULATE_VERSION_MAJOR -char const info_simulate_version[] = { - 'I', 'N', 'F', 'O', ':', - 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', - SIMULATE_VERSION_MAJOR, -# ifdef SIMULATE_VERSION_MINOR - '.', SIMULATE_VERSION_MINOR, -# ifdef SIMULATE_VERSION_PATCH - '.', SIMULATE_VERSION_PATCH, -# ifdef SIMULATE_VERSION_TWEAK - '.', SIMULATE_VERSION_TWEAK, -# endif -# endif -# endif - ']','\0'}; -#endif - -/* Construct the string literal in pieces to prevent the source from - getting matched. Store it in a pointer rather than an array - because some compilers will just produce instructions to fill the - array rather than assigning a pointer to a static array. */ -char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; -char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; - - - -#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L -# if defined(__INTEL_CXX11_MODE__) -# if defined(__cpp_aggregate_nsdmi) -# define CXX_STD 201402L -# else -# define CXX_STD 201103L -# endif -# else -# define CXX_STD 199711L -# endif -#elif defined(_MSC_VER) && defined(_MSVC_LANG) -# define CXX_STD _MSVC_LANG -#else -# define CXX_STD __cplusplus -#endif - -const char* info_language_standard_default = "INFO" ":" "standard_default[" -#if CXX_STD > 202002L - "23" -#elif CXX_STD > 201703L - "20" -#elif CXX_STD >= 201703L - "17" -#elif CXX_STD >= 201402L - "14" -#elif CXX_STD >= 201103L - "11" -#else - "98" -#endif -"]"; - -const char* info_language_extensions_default = "INFO" ":" "extensions_default[" -#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ - defined(__TI_COMPILER_VERSION__)) && \ - !defined(__STRICT_ANSI__) - "ON" -#else - "OFF" -#endif -"]"; - -/*--------------------------------------------------------------------------*/ - -int main(int argc, char* argv[]) -{ - int require = 0; - require += info_compiler[argc]; - require += info_platform[argc]; - require += info_arch[argc]; -#ifdef COMPILER_VERSION_MAJOR - require += info_version[argc]; -#endif -#ifdef COMPILER_VERSION_INTERNAL - require += info_version_internal[argc]; -#endif -#ifdef SIMULATE_ID - require += info_simulate[argc]; -#endif -#ifdef SIMULATE_VERSION_MAJOR - require += info_simulate_version[argc]; -#endif -#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) - require += info_cray[argc]; -#endif - require += info_language_standard_default[argc]; - require += info_language_extensions_default[argc]; - (void)argv; - return require; -} diff --git a/graphic/src/app/build/CMakeFiles/CMakeConfigureLog.yaml b/graphic/src/app/build/CMakeFiles/CMakeConfigureLog.yaml deleted file mode 100644 index 6117de43..00000000 --- a/graphic/src/app/build/CMakeFiles/CMakeConfigureLog.yaml +++ /dev/null @@ -1,471 +0,0 @@ - ---- -events: - - - kind: "message-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineSystem.cmake:233 (message)" - - "CMakeLists.txt" - message: | - The system is: Linux - 6.8.11-300.fc40.x86_64 - x86_64 - - - kind: "message-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:17 (message)" - - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" - - "/usr/share/cmake/Modules/CMakeDetermineCCompiler.cmake:123 (CMAKE_DETERMINE_COMPILER_ID)" - - "CMakeLists.txt" - message: | - Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. - Compiler: /usr/bin/cc - Build flags: - Id flags: - - The output was: - 0 - - - Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out" - - The C compiler identification is GNU, found in: - /home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdC/a.out - - - - kind: "message-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:17 (message)" - - "/usr/share/cmake/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" - - "/usr/share/cmake/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" - - "CMakeLists.txt" - message: | - Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. - Compiler: /usr/bin/c++ - Build flags: - Id flags: - - The output was: - 0 - - - Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out" - - The CXX compiler identification is GNU, found in: - /home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/3.28.2/CompilerIdCXX/a.out - - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)" - - "/usr/share/cmake/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt" - checks: - - "Detecting C compiler ABI info" - directories: - source: "/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-4UqsIb" - binary: "/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-4UqsIb" - cmakeVariables: - CMAKE_C_FLAGS: "" - buildResult: - variable: "CMAKE_C_ABI_COMPILED" - cached: true - stdout: | - Change Dir: '/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-4UqsIb' - - Run Build Command(s): /usr/bin/ninja-build -v cmTC_0e046 - [1/2] /usr/bin/cc -v -o CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake/Modules/CMakeCCompilerABI.c - Using built-in specs. - COLLECT_GCC=/usr/bin/cc - OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-redhat-linux - Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e046.dir/' - /usr/libexec/gcc/x86_64-redhat-linux/14/cc1 -quiet -v /usr/share/cmake/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_0e046.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -o /tmp/ccBfcn4F.s - GNU C17 (GCC) version 14.1.1 20240607 (Red Hat 14.1.1-5) (x86_64-redhat-linux) - compiled by GNU C version 14.1.1 20240607 (Red Hat 14.1.1-5), GMP version 6.2.1, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.24-GMP - - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/include-fixed" - ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/../../../../x86_64-redhat-linux/include" - #include "..." search starts here: - #include <...> search starts here: - /usr/lib/gcc/x86_64-redhat-linux/14/include - /usr/local/include - /usr/include - End of search list. - Compiler executable checksum: 83ba4fd217edf86c2ed1e8811fa4ba77 - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e046.dir/' - as -v --64 -o CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o /tmp/ccBfcn4F.s - GNU assembler version 2.41 (x86_64-redhat-linux) using BFD version version 2.41-37.fc40 - COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.' - [2/2] : && /usr/bin/cc -v -rdynamic CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o -o cmTC_0e046 && : - Using built-in specs. - COLLECT_GCC=/usr/bin/cc - COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper - OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-redhat-linux - Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) - COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_0e046' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_0e046.' - /usr/libexec/gcc/x86_64-redhat-linux/14/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper -plugin-opt=-fresolution=/tmp/ccH43rhV.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_0e046 /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/14 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../.. CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-redhat-linux/14/crtend.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o - COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_0e046' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_0e046.' - - exitCode: 0 - - - kind: "message-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:127 (message)" - - "/usr/share/cmake/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt" - message: | - Parsed C implicit include dir info: rv=done - found start of include info - found start of implicit include info - add: [/usr/lib/gcc/x86_64-redhat-linux/14/include] - add: [/usr/local/include] - add: [/usr/include] - end of search list found - collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/14/include] ==> [/usr/lib/gcc/x86_64-redhat-linux/14/include] - collapse include dir [/usr/local/include] ==> [/usr/local/include] - collapse include dir [/usr/include] ==> [/usr/include] - implicit include dirs: [/usr/lib/gcc/x86_64-redhat-linux/14/include;/usr/local/include;/usr/include] - - - - - kind: "message-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:159 (message)" - - "/usr/share/cmake/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt" - message: | - Parsed C implicit link information: - link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] - ignore line: [Change Dir: '/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-4UqsIb'] - ignore line: [] - ignore line: [Run Build Command(s): /usr/bin/ninja-build -v cmTC_0e046] - ignore line: [[1/2] /usr/bin/cc -v -o CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake/Modules/CMakeCCompilerABI.c] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/cc] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-redhat-linux] - ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) ] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e046.dir/'] - ignore line: [ /usr/libexec/gcc/x86_64-redhat-linux/14/cc1 -quiet -v /usr/share/cmake/Modules/CMakeCCompilerABI.c -quiet -dumpdir CMakeFiles/cmTC_0e046.dir/ -dumpbase CMakeCCompilerABI.c.c -dumpbase-ext .c -mtune=generic -march=x86-64 -version -o /tmp/ccBfcn4F.s] - ignore line: [GNU C17 (GCC) version 14.1.1 20240607 (Red Hat 14.1.1-5) (x86_64-redhat-linux)] - ignore line: [ compiled by GNU C version 14.1.1 20240607 (Red Hat 14.1.1-5) GMP version 6.2.1 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.24-GMP] - ignore line: [] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/include-fixed"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/../../../../x86_64-redhat-linux/include"] - ignore line: [#include "..." search starts here:] - ignore line: [#include <...> search starts here:] - ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/14/include] - ignore line: [ /usr/local/include] - ignore line: [ /usr/include] - ignore line: [End of search list.] - ignore line: [Compiler executable checksum: 83ba4fd217edf86c2ed1e8811fa4ba77] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e046.dir/'] - ignore line: [ as -v --64 -o CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o /tmp/ccBfcn4F.s] - ignore line: [GNU assembler version 2.41 (x86_64-redhat-linux) using BFD version version 2.41-37.fc40] - ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o' '-c' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.'] - ignore line: [[2/2] : && /usr/bin/cc -v -rdynamic CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o -o cmTC_0e046 && :] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/cc] - ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-redhat-linux] - ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) ] - ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_0e046' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_0e046.'] - link line: [ /usr/libexec/gcc/x86_64-redhat-linux/14/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper -plugin-opt=-fresolution=/tmp/ccH43rhV.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lgcc_s --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_0e046 /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/14 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../.. CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o -lgcc --push-state --as-needed -lgcc_s --pop-state -lc -lgcc --push-state --as-needed -lgcc_s --pop-state /usr/lib/gcc/x86_64-redhat-linux/14/crtend.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] - arg [/usr/libexec/gcc/x86_64-redhat-linux/14/collect2] ==> ignore - arg [-plugin] ==> ignore - arg [/usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccH43rhV.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [--build-id] ==> ignore - arg [--no-add-needed] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [-export-dynamic] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-o] ==> ignore - arg [cmTC_0e046] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] - arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] - arg [/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/14] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] - arg [-L/lib/../lib64] ==> dir [/lib/../lib64] - arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/14/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../..] - arg [CMakeFiles/cmTC_0e046.dir/CMakeCCompilerABI.c.o] ==> ignore - arg [-lgcc] ==> lib [gcc] - arg [--push-state] ==> ignore - arg [--as-needed] ==> ignore - arg [-lgcc_s] ==> lib [gcc_s] - arg [--pop-state] ==> ignore - arg [-lc] ==> lib [c] - arg [-lgcc] ==> lib [gcc] - arg [--push-state] ==> ignore - arg [--as-needed] ==> ignore - arg [-lgcc_s] ==> lib [gcc_s] - arg [--pop-state] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o] - arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] - collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] ==> [/usr/lib64/crt1.o] - collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] ==> [/usr/lib64/crti.o] - collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] ==> [/usr/lib64/crtn.o] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14] ==> [/usr/lib/gcc/x86_64-redhat-linux/14] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] ==> [/usr/lib64] - collapse library dir [/lib/../lib64] ==> [/lib64] - collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../..] ==> [/usr/lib] - implicit libs: [gcc;gcc_s;c;gcc;gcc_s] - implicit objs: [/usr/lib64/crt1.o;/usr/lib64/crti.o;/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o;/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o;/usr/lib64/crtn.o] - implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/14;/usr/lib64;/lib64;/usr/lib] - implicit fwks: [] - - - - - kind: "try_compile-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)" - - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt" - checks: - - "Detecting CXX compiler ABI info" - directories: - source: "/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-rI4PyW" - binary: "/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-rI4PyW" - cmakeVariables: - CMAKE_CXX_FLAGS: "" - buildResult: - variable: "CMAKE_CXX_ABI_COMPILED" - cached: true - stdout: | - Change Dir: '/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-rI4PyW' - - Run Build Command(s): /usr/bin/ninja-build -v cmTC_e2353 - [1/2] /usr/bin/c++ -v -o CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp - Using built-in specs. - COLLECT_GCC=/usr/bin/c++ - OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-redhat-linux - Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e2353.dir/' - /usr/libexec/gcc/x86_64-redhat-linux/14/cc1plus -quiet -v -D_GNU_SOURCE /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_e2353.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o /tmp/cc5Fn2u3.s - GNU C++17 (GCC) version 14.1.1 20240607 (Red Hat 14.1.1-5) (x86_64-redhat-linux) - compiled by GNU C version 14.1.1 20240607 (Red Hat 14.1.1-5), GMP version 6.2.1, MPFR version 4.2.1, MPC version 1.3.1, isl version isl-0.24-GMP - - GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 - ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/include-fixed" - ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/../../../../x86_64-redhat-linux/include" - #include "..." search starts here: - #include <...> search starts here: - /usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14 - /usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux - /usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward - /usr/lib/gcc/x86_64-redhat-linux/14/include - /usr/local/include - /usr/include - End of search list. - Compiler executable checksum: b6dcf6f287a1c28b21e3a80997087968 - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e2353.dir/' - as -v --64 -o CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o /tmp/cc5Fn2u3.s - GNU assembler version 2.41 (x86_64-redhat-linux) using BFD version version 2.41-37.fc40 - COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.' - [2/2] : && /usr/bin/c++ -v -rdynamic CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_e2353 && : - Using built-in specs. - COLLECT_GCC=/usr/bin/c++ - COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper - OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa - OFFLOAD_TARGET_DEFAULT=1 - Target: x86_64-redhat-linux - Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none,amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1 - Thread model: posix - Supported LTO compression algorithms: zlib zstd - gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) - COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/ - LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/ - COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_e2353' '-foffload-options=-l_GCC_m' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e2353.' - /usr/libexec/gcc/x86_64-redhat-linux/14/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper -plugin-opt=-fresolution=/tmp/ccZadUUG.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_e2353 /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/14 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../.. CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/14/crtend.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o - COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_e2353' '-foffload-options=-l_GCC_m' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e2353.' - - exitCode: 0 - - - kind: "message-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:127 (message)" - - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt" - message: | - Parsed CXX implicit include dir info: rv=done - found start of include info - found start of implicit include info - add: [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14] - add: [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux] - add: [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward] - add: [/usr/lib/gcc/x86_64-redhat-linux/14/include] - add: [/usr/local/include] - add: [/usr/include] - end of search list found - collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14] ==> [/usr/include/c++/14] - collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux] ==> [/usr/include/c++/14/x86_64-redhat-linux] - collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward] ==> [/usr/include/c++/14/backward] - collapse include dir [/usr/lib/gcc/x86_64-redhat-linux/14/include] ==> [/usr/lib/gcc/x86_64-redhat-linux/14/include] - collapse include dir [/usr/local/include] ==> [/usr/local/include] - collapse include dir [/usr/include] ==> [/usr/include] - implicit include dirs: [/usr/include/c++/14;/usr/include/c++/14/x86_64-redhat-linux;/usr/include/c++/14/backward;/usr/lib/gcc/x86_64-redhat-linux/14/include;/usr/local/include;/usr/include] - - - - - kind: "message-v1" - backtrace: - - "/usr/share/cmake/Modules/CMakeDetermineCompilerABI.cmake:159 (message)" - - "/usr/share/cmake/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" - - "CMakeLists.txt" - message: | - Parsed CXX implicit link information: - link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] - ignore line: [Change Dir: '/home/yannmasson/Delivery/Tek2/YEP/zappy/graphic/src/app/build/CMakeFiles/CMakeScratch/TryCompile-rI4PyW'] - ignore line: [] - ignore line: [Run Build Command(s): /usr/bin/ninja-build -v cmTC_e2353] - ignore line: [[1/2] /usr/bin/c++ -v -o CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/c++] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-redhat-linux] - ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) ] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e2353.dir/'] - ignore line: [ /usr/libexec/gcc/x86_64-redhat-linux/14/cc1plus -quiet -v -D_GNU_SOURCE /usr/share/cmake/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpdir CMakeFiles/cmTC_e2353.dir/ -dumpbase CMakeCXXCompilerABI.cpp.cpp -dumpbase-ext .cpp -mtune=generic -march=x86-64 -version -o /tmp/cc5Fn2u3.s] - ignore line: [GNU C++17 (GCC) version 14.1.1 20240607 (Red Hat 14.1.1-5) (x86_64-redhat-linux)] - ignore line: [ compiled by GNU C version 14.1.1 20240607 (Red Hat 14.1.1-5) GMP version 6.2.1 MPFR version 4.2.1 MPC version 1.3.1 isl version isl-0.24-GMP] - ignore line: [] - ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/include-fixed"] - ignore line: [ignoring nonexistent directory "/usr/lib/gcc/x86_64-redhat-linux/14/../../../../x86_64-redhat-linux/include"] - ignore line: [#include "..." search starts here:] - ignore line: [#include <...> search starts here:] - ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14] - ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/x86_64-redhat-linux] - ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/14/../../../../include/c++/14/backward] - ignore line: [ /usr/lib/gcc/x86_64-redhat-linux/14/include] - ignore line: [ /usr/local/include] - ignore line: [ /usr/include] - ignore line: [End of search list.] - ignore line: [Compiler executable checksum: b6dcf6f287a1c28b21e3a80997087968] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e2353.dir/'] - ignore line: [ as -v --64 -o CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o /tmp/cc5Fn2u3.s] - ignore line: [GNU assembler version 2.41 (x86_64-redhat-linux) using BFD version version 2.41-37.fc40] - ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o' '-c' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.'] - ignore line: [[2/2] : && /usr/bin/c++ -v -rdynamic CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o -o cmTC_e2353 && :] - ignore line: [Using built-in specs.] - ignore line: [COLLECT_GCC=/usr/bin/c++] - ignore line: [COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper] - ignore line: [OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa] - ignore line: [OFFLOAD_TARGET_DEFAULT=1] - ignore line: [Target: x86_64-redhat-linux] - ignore line: [Configured with: ../configure --enable-bootstrap --enable-languages=c c++ fortran objc obj-c++ ada go d m2 lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-14.1.1-20240607/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none amdgcn-amdhsa --enable-offload-defaulted --without-cuda-driver --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1] - ignore line: [Thread model: posix] - ignore line: [Supported LTO compression algorithms: zlib zstd] - ignore line: [gcc version 14.1.1 20240607 (Red Hat 14.1.1-5) (GCC) ] - ignore line: [COMPILER_PATH=/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/14/:/usr/libexec/gcc/x86_64-redhat-linux/:/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/] - ignore line: [LIBRARY_PATH=/usr/lib/gcc/x86_64-redhat-linux/14/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-redhat-linux/14/../../../:/lib/:/usr/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-rdynamic' '-o' 'cmTC_e2353' '-foffload-options=-l_GCC_m' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-dumpdir' 'cmTC_e2353.'] - link line: [ /usr/libexec/gcc/x86_64-redhat-linux/14/collect2 -plugin /usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so -plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper -plugin-opt=-fresolution=/tmp/ccZadUUG.res -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lgcc_s -plugin-opt=-pass-through=-lgcc --build-id --no-add-needed --eh-frame-hdr --hash-style=gnu -m elf_x86_64 -export-dynamic -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o cmTC_e2353 /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o /usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o -L/usr/lib/gcc/x86_64-redhat-linux/14 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-redhat-linux/14/../../.. CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-redhat-linux/14/crtend.o /usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] - arg [/usr/libexec/gcc/x86_64-redhat-linux/14/collect2] ==> ignore - arg [-plugin] ==> ignore - arg [/usr/libexec/gcc/x86_64-redhat-linux/14/liblto_plugin.so] ==> ignore - arg [-plugin-opt=/usr/libexec/gcc/x86_64-redhat-linux/14/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccZadUUG.res] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [-plugin-opt=-pass-through=-lc] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc_s] ==> ignore - arg [-plugin-opt=-pass-through=-lgcc] ==> ignore - arg [--build-id] ==> ignore - arg [--no-add-needed] ==> ignore - arg [--eh-frame-hdr] ==> ignore - arg [--hash-style=gnu] ==> ignore - arg [-m] ==> ignore - arg [elf_x86_64] ==> ignore - arg [-export-dynamic] ==> ignore - arg [-dynamic-linker] ==> ignore - arg [/lib64/ld-linux-x86-64.so.2] ==> ignore - arg [-o] ==> ignore - arg [cmTC_e2353] ==> ignore - arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] - arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] - arg [/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/14] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] - arg [-L/lib/../lib64] ==> dir [/lib/../lib64] - arg [-L/usr/lib/../lib64] ==> dir [/usr/lib/../lib64] - arg [-L/usr/lib/gcc/x86_64-redhat-linux/14/../../..] ==> dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../..] - arg [CMakeFiles/cmTC_e2353.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore - arg [-lstdc++] ==> lib [stdc++] - arg [-lm] ==> lib [m] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [-lc] ==> lib [c] - arg [-lgcc_s] ==> lib [gcc_s] - arg [-lgcc] ==> lib [gcc] - arg [/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o] - arg [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] ==> obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] - collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crt1.o] ==> [/usr/lib64/crt1.o] - collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crti.o] ==> [/usr/lib64/crti.o] - collapse obj [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64/crtn.o] ==> [/usr/lib64/crtn.o] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14] ==> [/usr/lib/gcc/x86_64-redhat-linux/14] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../../../lib64] ==> [/usr/lib64] - collapse library dir [/lib/../lib64] ==> [/lib64] - collapse library dir [/usr/lib/../lib64] ==> [/usr/lib64] - collapse library dir [/usr/lib/gcc/x86_64-redhat-linux/14/../../..] ==> [/usr/lib] - implicit libs: [stdc++;m;gcc_s;gcc;c;gcc_s;gcc] - implicit objs: [/usr/lib64/crt1.o;/usr/lib64/crti.o;/usr/lib/gcc/x86_64-redhat-linux/14/crtbegin.o;/usr/lib/gcc/x86_64-redhat-linux/14/crtend.o;/usr/lib64/crtn.o] - implicit dirs: [/usr/lib/gcc/x86_64-redhat-linux/14;/usr/lib64;/lib64;/usr/lib] - implicit fwks: [] - - -... diff --git a/graphic/src/app/build/CMakeFiles/cmake.check_cache b/graphic/src/app/build/CMakeFiles/cmake.check_cache deleted file mode 100644 index 3dccd731..00000000 --- a/graphic/src/app/build/CMakeFiles/cmake.check_cache +++ /dev/null @@ -1 +0,0 @@ -# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/graphic/src/commands/Commands.cpp b/graphic/src/commands/Commands.cpp index 75f8caab..a8967749 100644 --- a/graphic/src/commands/Commands.cpp +++ b/graphic/src/commands/Commands.cpp @@ -29,7 +29,7 @@ void Commands::map_size(std::string &command, Map &map, Ogre::SceneManager *scnM Ogre::AxisAlignedBox aab = cubeEntity->getBoundingBox(); Ogre::Vector3 size = aab.getSize(); - node->setPosition(posx * size.x, 0, posy * size.z); + node->setPosition(posx * size.x, -size.y / 2.0, posy * size.z); Tile tile; tile.node = node; @@ -40,3 +40,48 @@ void Commands::map_size(std::string &command, Map &map, Ogre::SceneManager *scnM posx = posx - 1; } } + +void Commands::tile_content(std::string &command, Map &map, Ogre::SceneManager *scnMgr) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 9) + return; + int x = std::stoi(args[0]); + int y = std::stoi(args[1]); + if (x < 0 || x >= map.width || y < 0 || y >= map.height) + return; + int food = std::stoi(args[2]); + int linemate = std::stoi(args[3]); + int deraumere = std::stoi(args[4]); + int sibur = std::stoi(args[5]); + int mendiane = std::stoi(args[6]); + int phiras = std::stoi(args[7]); + int thystame = std::stoi(args[8]); + + Tile &tile = map.tiles[x][y]; + + tile.items.food = food; + tile.items.linemate = linemate; + tile.items.deraumere = deraumere; + tile.items.sibur = sibur; + tile.items.mendiane = mendiane; + tile.items.phiras = phiras; + tile.items.thystame = thystame; + + Ogre::SceneNode *node = tile.node; + if (!node || node->numAttachedObjects() == 0) + return; + auto tileSize = node->getAttachedObject(0)->getBoundingBox().getSize(); + Ogre::Vector3 pos = node->getPosition(); + Ogre::Vector3 size = node->getAttachedObject(0)->getBoundingBox().getSize(); + + for (int i = 0; i < food; i++) { + Ogre::Entity *cubeEntity = scnMgr->createEntity("food.mesh"); + Ogre::SceneNode *foodNode = scnMgr->getRootSceneNode()->createChildSceneNode(); + auto foodSize = cubeEntity->getBoundingBox().getSize(); + foodNode->attachObject(cubeEntity); + foodNode->setPosition(pos.x + (rand() % 10) * size.x / 10, foodSize.y / 2 * 0.1, pos.z + (rand() % 10) * size.z / 10); + foodNode->setScale(0.1, 0.1, 0.1); + } +} From 075827809a13b822edf38ea7634cb5f8fc9e61d7 Mon Sep 17 00:00:00 2001 From: Yann Date: Mon, 17 Jun 2024 18:25:22 +0200 Subject: [PATCH 08/29] feat(graphic): add several assets and custom stones --- graphic/assets/deraumere/deraumere.material | 22 +++++ graphic/assets/deraumere/deraumere.mesh | Bin 0 -> 86295 bytes graphic/assets/deraumere/deraumere.png | Bin 0 -> 3972 bytes graphic/assets/linemate/linemate.material | 22 +++++ graphic/assets/linemate/linemate.mesh | Bin 0 -> 86295 bytes graphic/assets/linemate/linemate.png | Bin 0 -> 3972 bytes graphic/assets/mendiane/mendiane.material | 22 +++++ graphic/assets/mendiane/mendiane.mesh | Bin 0 -> 86295 bytes graphic/assets/mendiane/mendiane.png | Bin 0 -> 3972 bytes graphic/assets/phiras/phiras.material | 22 +++++ graphic/assets/phiras/phiras.mesh | Bin 0 -> 86295 bytes graphic/assets/phiras/phiras.png | Bin 0 -> 3972 bytes graphic/assets/sibur/sibur.material | 22 +++++ graphic/assets/sibur/sibur.mesh | Bin 0 -> 86295 bytes graphic/assets/sibur/sibur.png | Bin 0 -> 3972 bytes graphic/assets/thystame/thystame.material | 22 +++++ graphic/assets/thystame/thystame.mesh | Bin 0 -> 86295 bytes graphic/assets/thystame/thystame.png | Bin 0 -> 3972 bytes graphic/resources.cfg | 6 ++ graphic/src/commands/Commands.cpp | 87 +++++++++++++------- graphic/src/commands/Commands.hpp | 51 ++++++------ graphic/src/types/Map.hpp | 2 +- graphic/src/types/Player.hpp | 4 +- 23 files changed, 224 insertions(+), 58 deletions(-) create mode 100644 graphic/assets/deraumere/deraumere.material create mode 100644 graphic/assets/deraumere/deraumere.mesh create mode 100644 graphic/assets/deraumere/deraumere.png create mode 100644 graphic/assets/linemate/linemate.material create mode 100644 graphic/assets/linemate/linemate.mesh create mode 100644 graphic/assets/linemate/linemate.png create mode 100644 graphic/assets/mendiane/mendiane.material create mode 100644 graphic/assets/mendiane/mendiane.mesh create mode 100644 graphic/assets/mendiane/mendiane.png create mode 100644 graphic/assets/phiras/phiras.material create mode 100644 graphic/assets/phiras/phiras.mesh create mode 100644 graphic/assets/phiras/phiras.png create mode 100644 graphic/assets/sibur/sibur.material create mode 100644 graphic/assets/sibur/sibur.mesh create mode 100644 graphic/assets/sibur/sibur.png create mode 100644 graphic/assets/thystame/thystame.material create mode 100644 graphic/assets/thystame/thystame.mesh create mode 100644 graphic/assets/thystame/thystame.png diff --git a/graphic/assets/deraumere/deraumere.material b/graphic/assets/deraumere/deraumere.material new file mode 100644 index 00000000..43281671 --- /dev/null +++ b/graphic/assets/deraumere/deraumere.material @@ -0,0 +1,22 @@ +// generated by blender2ogre 0.9.0 on 2024-06-10 17:02:03 +material Material.004 { + receive_shadows on + technique { + pass { + diffuse 0.8 0.8 0.8 1.0 + specular 0.5 0.0 0 0 0 + + // additional maps - requires RTSS + rtshader_system { + lighting_stage metal_roughness + } + + // - base_color_texture + texture_unit { + texture deraumere.png + tex_address_mode wrap + colour_op modulate + } + } + } +} diff --git a/graphic/assets/deraumere/deraumere.mesh b/graphic/assets/deraumere/deraumere.mesh new file mode 100644 index 0000000000000000000000000000000000000000..3bc66cc3fe4e56083bfcf17c97ca1a2215fc4aac GIT binary patch literal 86295 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 literal 0 HcmV?d00001 diff --git a/graphic/assets/deraumere/deraumere.png b/graphic/assets/deraumere/deraumere.png new file mode 100644 index 0000000000000000000000000000000000000000..7b9cd8bad454e5f1918896303a1176fe7855bf07 GIT binary patch literal 3972 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 literal 0 HcmV?d00001 diff --git a/graphic/assets/linemate/linemate.png b/graphic/assets/linemate/linemate.png new file mode 100644 index 0000000000000000000000000000000000000000..8f39048a69e906f99b4244bf04b1f6dc821829be GIT binary patch literal 3972 zcmeAS@N?(olHy`uVBq!ia0y~y-~ci?7#Nv>R7a*`F_2;`4sv&5ym?Zm9?0P=@Q4Ho zatnhnBg3pY5EQXpAO?(Y!EP6pWUHqb1>JNjO>(j+TU@CE;jEI9d{p gmW0EwBz(*8ZZQWV!}OVkz)mxRr>mdKI;Vst0J0WvlmGw# literal 0 HcmV?d00001 diff --git a/graphic/assets/mendiane/mendiane.material b/graphic/assets/mendiane/mendiane.material new file mode 100644 index 00000000..dfdb119d --- /dev/null +++ b/graphic/assets/mendiane/mendiane.material @@ -0,0 +1,22 @@ +// generated by blender2ogre 0.9.0 on 2024-06-10 17:02:03 +material Material.005 { + receive_shadows on + technique { + pass { + diffuse 0.8 0.8 0.8 1.0 + specular 0.5 0.0 0 0 0 + + // additional maps - requires RTSS + rtshader_system { + lighting_stage metal_roughness + } + + // - base_color_texture + texture_unit { + texture mendiane.png + tex_address_mode wrap + colour_op modulate + } + } + } +} diff --git a/graphic/assets/mendiane/mendiane.mesh b/graphic/assets/mendiane/mendiane.mesh new file mode 100644 index 0000000000000000000000000000000000000000..e77bd7df7e003bb77cdd88400725cfdef8497b26 GIT binary patch literal 86295 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 literal 0 HcmV?d00001 diff --git a/graphic/assets/phiras/phiras.material b/graphic/assets/phiras/phiras.material new file mode 100644 index 00000000..2bbb37be --- /dev/null +++ b/graphic/assets/phiras/phiras.material @@ -0,0 +1,22 @@ +// generated by blender2ogre 0.9.0 on 2024-06-10 17:02:03 +material Material.006 { + receive_shadows on + technique { + pass { + diffuse 0.8 0.8 0.8 1.0 + specular 0.5 0.0 0 0 0 + + // additional maps - requires RTSS + rtshader_system { + lighting_stage metal_roughness + } + + // - base_color_texture + texture_unit { + texture phiras.png + tex_address_mode wrap + colour_op modulate + } + } + } +} diff --git a/graphic/assets/phiras/phiras.mesh b/graphic/assets/phiras/phiras.mesh new file mode 100644 index 0000000000000000000000000000000000000000..a61f95df7de251adc02a1f12ac87543addca3839 GIT binary patch literal 86295 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 vE>aR7a*`F_2;`4sv&5ym?Zm9?0P=@Q4Ho zatnhnBg3pY5z`!r%>EaktG3V_CM?s)j4F+%HZ%I_25Gr_M zv)#%eyMgb5)B@%$Y%dtrGLCXbLt`{CjOK;WqF}Tn94!e)OTy8TaI_>GEeS_U!qJj& hv?LscCE;6!cZ)d~8K%!P1a_JkJYD@<);T3K0RRJVa-#qM literal 0 HcmV?d00001 diff --git a/graphic/assets/sibur/sibur.material b/graphic/assets/sibur/sibur.material new file mode 100644 index 00000000..a85d889d --- /dev/null +++ b/graphic/assets/sibur/sibur.material @@ -0,0 +1,22 @@ +// generated by blender2ogre 0.9.0 on 2024-06-10 17:02:03 +material Material.007 { + receive_shadows on + technique { + pass { + diffuse 0.8 0.8 0.8 1.0 + specular 0.5 0.0 0 0 0 + + // additional maps - requires RTSS + rtshader_system { + lighting_stage metal_roughness + } + + // - base_color_texture + texture_unit { + texture sibur.png + tex_address_mode wrap + colour_op modulate + } + } + } +} diff --git a/graphic/assets/sibur/sibur.mesh b/graphic/assets/sibur/sibur.mesh new file mode 100644 index 0000000000000000000000000000000000000000..60ae8da92f0b6ef6b5fca279a10d3e4c5c9ed236 GIT binary patch literal 86295 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 literal 0 HcmV?d00001 diff --git a/graphic/assets/sibur/sibur.png b/graphic/assets/sibur/sibur.png new file mode 100644 index 0000000000000000000000000000000000000000..64a88eed21fed553492db1b38488d858108ec011 GIT binary patch literal 3972 zcmeAS@N?(olHy`uVBq!ia0y~y-~ci?7#Nv>R7a*`F_2;`4sv&5ym?Zm9?0P=@Q4Ho zatnhnBg3pY5SjXM@z!dl5n&n94!e)OTy8TaI_>G gEeVHVN%)rG-C_<#hUqg6ft_XsPgg&ebxsLQ00V__4*&oF literal 0 HcmV?d00001 diff --git a/graphic/assets/thystame/thystame.material b/graphic/assets/thystame/thystame.material new file mode 100644 index 00000000..ca990e02 --- /dev/null +++ b/graphic/assets/thystame/thystame.material @@ -0,0 +1,22 @@ +// generated by blender2ogre 0.9.0 on 2024-06-10 17:02:03 +material Material.008 { + receive_shadows on + technique { + pass { + diffuse 0.8 0.8 0.8 1.0 + specular 0.5 0.0 0 0 0 + + // additional maps - requires RTSS + rtshader_system { + lighting_stage metal_roughness + } + + // - base_color_texture + texture_unit { + texture thystame.png + tex_address_mode wrap + colour_op modulate + } + } + } +} diff --git a/graphic/assets/thystame/thystame.mesh b/graphic/assets/thystame/thystame.mesh new file mode 100644 index 0000000000000000000000000000000000000000..b8907e98185db9d9f1d509f8df615e4b69c1d6a3 GIT binary patch literal 86295 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 literal 0 HcmV?d00001 diff --git a/graphic/assets/thystame/thystame.png b/graphic/assets/thystame/thystame.png new file mode 100644 index 0000000000000000000000000000000000000000..cecbc4170b48115dc1c6f316fc09deab810b8cf4 GIT binary patch literal 3972 zcmeAS@N?(olHy`uVBq!ia0y~y-~ci?7#Nv>R7a*`F_2;`4sv&5ym?Zm9?0P=@Q4Ho zatnhnBg3pY52^K-N1K2Y60^WwigU*8ArLJp)r~mM)SgGQ7~E(j+TU@CE;jEI9d{pmV~1v;b=)X gS`rS!lJG6VyTu%g4AW;C0z1tNp00i_>zopr0I3ObH~;_u literal 0 HcmV?d00001 diff --git a/graphic/resources.cfg b/graphic/resources.cfg index 387c2ff6..53e7b7b9 100644 --- a/graphic/resources.cfg +++ b/graphic/resources.cfg @@ -1,4 +1,10 @@ [Main] FileSystem=assets/cube FileSystem=assets/food +FileSystem=assets/linemate +FileSystem=assets/deraumere +FileSystem=assets/sibur +FileSystem=assets/mendiane +FileSystem=assets/phiras +FileSystem=assets/thystame Zip=assets/ui/SdkTrays.zip \ No newline at end of file diff --git a/graphic/src/commands/Commands.cpp b/graphic/src/commands/Commands.cpp index a8967749..f2d9c48f 100644 --- a/graphic/src/commands/Commands.cpp +++ b/graphic/src/commands/Commands.cpp @@ -9,6 +9,44 @@ #include "Commands.hpp" #include "utils/String.hpp" +std::vector stonesNames = {"linemate", "deraumere", "sibur", "mendiane", "phiras", "thystame"}; + +void Commands::_addItemsToTile(Tile &tile, Ogre::SceneManager *scnMgr, const std::string &meshName, int quantity, std::vector &items) +{ + Ogre::SceneNode *node = tile.node; + if (!node || node->numAttachedObjects() == 0) + return; + auto tileSize = node->getAttachedObject(0)->getBoundingBox().getSize(); + Ogre::Vector3 pos = node->getPosition(); + Ogre::Vector3 size = node->getAttachedObject(0)->getBoundingBox().getSize(); + + for (int i = 0; i < quantity; i++) { + Ogre::Entity* cubeEntity = scnMgr->createEntity(meshName); + Ogre::SceneNode* itemNode = scnMgr->getRootSceneNode()->createChildSceneNode(); + auto itemSize = cubeEntity->getBoundingBox().getSize(); + itemNode->attachObject(cubeEntity); + + float randX = pos.x + static_cast(std::rand()) / RAND_MAX * tileSize.x - tileSize.x / 2.0f; + float randZ = pos.z + static_cast(std::rand()) / RAND_MAX * tileSize.z - tileSize.z / 2.0f; + float itemY = itemSize.y / 2 * 0.1; + + itemNode->setPosition(randX, itemY, randZ); + itemNode->setScale(0.1f, 0.1f, 0.1f); + items.push_back(itemNode); + } +} + +void Commands::_removeItemsFromTile(Ogre::SceneManager *scnMgr, int quantity, std::vector &items) +{ + for (int i = 0; i < quantity; i++) { + if (items.size() == 0) + return; + Ogre::SceneNode *node = items.back(); + items.pop_back(); + scnMgr->destroySceneNode(node); + } +} + void Commands::map_size(std::string &command, Map &map, Ogre::SceneManager *scnMgr) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -32,6 +70,10 @@ void Commands::map_size(std::string &command, Map &map, Ogre::SceneManager *scnM node->setPosition(posx * size.x, -size.y / 2.0, posy * size.z); Tile tile; + + for (int i = 0; i < stonesNames.size(); i++) { + tile.items[stonesNames[i]] = {}; + } tile.node = node; row.push_back(tile); posy = posy - 1; @@ -51,37 +93,20 @@ void Commands::tile_content(std::string &command, Map &map, Ogre::SceneManager * int y = std::stoi(args[1]); if (x < 0 || x >= map.width || y < 0 || y >= map.height) return; - int food = std::stoi(args[2]); - int linemate = std::stoi(args[3]); - int deraumere = std::stoi(args[4]); - int sibur = std::stoi(args[5]); - int mendiane = std::stoi(args[6]); - int phiras = std::stoi(args[7]); - int thystame = std::stoi(args[8]); - - Tile &tile = map.tiles[x][y]; - - tile.items.food = food; - tile.items.linemate = linemate; - tile.items.deraumere = deraumere; - tile.items.sibur = sibur; - tile.items.mendiane = mendiane; - tile.items.phiras = phiras; - tile.items.thystame = thystame; - - Ogre::SceneNode *node = tile.node; - if (!node || node->numAttachedObjects() == 0) - return; - auto tileSize = node->getAttachedObject(0)->getBoundingBox().getSize(); - Ogre::Vector3 pos = node->getPosition(); - Ogre::Vector3 size = node->getAttachedObject(0)->getBoundingBox().getSize(); + int food = std::stoi(args[2]) - map.tiles[x][y].items["food"].size(); + std::vector stones; + for (int i = 0; i < stonesNames.size(); i++) { + stones.push_back(std::stoi(args[3 + i]) - map.tiles[x][y].items[stonesNames[i]].size()); + } - for (int i = 0; i < food; i++) { - Ogre::Entity *cubeEntity = scnMgr->createEntity("food.mesh"); - Ogre::SceneNode *foodNode = scnMgr->getRootSceneNode()->createChildSceneNode(); - auto foodSize = cubeEntity->getBoundingBox().getSize(); - foodNode->attachObject(cubeEntity); - foodNode->setPosition(pos.x + (rand() % 10) * size.x / 10, foodSize.y / 2 * 0.1, pos.z + (rand() % 10) * size.z / 10); - foodNode->setScale(0.1, 0.1, 0.1); + if (food > 0) + _addItemsToTile(map.tiles[x][y], scnMgr, "food.mesh", food, map.tiles[x][y].items["food"]); + else if (food < 0) + _removeItemsFromTile(scnMgr, -food, map.tiles[x][y].items["food"]); + for (int i = 0; i < stonesNames.size(); i++) { + if (stones[i] > 0) + _addItemsToTile(map.tiles[x][y], scnMgr, stonesNames[i] + ".mesh", stones[i], map.tiles[x][y].items[stonesNames[i]]); + else if (stones[i] < 0) + _removeItemsFromTile(scnMgr, -stones[i], map.tiles[x][y].items[stonesNames[i]]); } } diff --git a/graphic/src/commands/Commands.hpp b/graphic/src/commands/Commands.hpp index 495aee78..a3b6be62 100644 --- a/graphic/src/commands/Commands.hpp +++ b/graphic/src/commands/Commands.hpp @@ -10,30 +10,33 @@ #include "types/Map.hpp" class Commands { - public: +public: - static void map_size(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void tile_content(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void teams_names(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_connect(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_position(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_level(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_inventory(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_eject(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void broadcast(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void incantation_start(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void incantation_end(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_egg_laid(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_resource_drop(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_resource_take(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_laying_egg(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void egg_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void egg_hatching(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void time_unit_request(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void time_unit_modification(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void end_game(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void unknown_command(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void command_parameters(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void map_size(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void tile_content(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void teams_names(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_connect(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_position(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_level(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_inventory(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_eject(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void broadcast(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void incantation_start(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void incantation_end(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_egg_laid(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_resource_drop(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_resource_take(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void player_laying_egg(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void egg_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void egg_hatching(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void time_unit_request(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void time_unit_modification(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void end_game(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void unknown_command(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void command_parameters(std::string &command, Map &map, Ogre::SceneManager *scnMgr); +private: + static void _addItemsToTile(Tile &tile, Ogre::SceneManager *scnMgr, const std::string &meshName, int quantity, std::vector &items); + static void _removeItemsFromTile(Ogre::SceneManager *scnMgr, int quantity, std::vector &items); }; diff --git a/graphic/src/types/Map.hpp b/graphic/src/types/Map.hpp index 3f4798d9..9162d898 100644 --- a/graphic/src/types/Map.hpp +++ b/graphic/src/types/Map.hpp @@ -12,7 +12,7 @@ #include "Player.hpp" struct Tile { - Items items; + std::map> items = {}; Ogre::SceneNode *node = nullptr; }; diff --git a/graphic/src/types/Player.hpp b/graphic/src/types/Player.hpp index 81f381b3..2f17ea39 100644 --- a/graphic/src/types/Player.hpp +++ b/graphic/src/types/Player.hpp @@ -15,7 +15,7 @@ struct Position { int y; }; -struct Items { +struct Inventory { int food = 0; int linemate = 0; int deraumere = 0; @@ -28,7 +28,7 @@ struct Items { struct Player { int id; Position position; - Items inventory; + Inventory inventory; int level; int orientation; std::string team; From 1d62b0a796ef95a2ff47bb2e19ef1080975f03ad Mon Sep 17 00:00:00 2001 From: Yann Date: Mon, 17 Jun 2024 19:13:06 +0200 Subject: [PATCH 09/29] refactor(graphic): update commands utils --- graphic/src/commands/Commands.cpp | 24 ++++++++++++------------ graphic/src/commands/Commands.hpp | 4 ++-- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/graphic/src/commands/Commands.cpp b/graphic/src/commands/Commands.cpp index f2d9c48f..6c972aca 100644 --- a/graphic/src/commands/Commands.cpp +++ b/graphic/src/commands/Commands.cpp @@ -11,7 +11,7 @@ std::vector stonesNames = {"linemate", "deraumere", "sibur", "mendiane", "phiras", "thystame"}; -void Commands::_addItemsToTile(Tile &tile, Ogre::SceneManager *scnMgr, const std::string &meshName, int quantity, std::vector &items) +void Commands::_addItemsToTile(Tile &tile, Ogre::SceneManager *scnMgr, const std::string &itemName, int quantity) { Ogre::SceneNode *node = tile.node; if (!node || node->numAttachedObjects() == 0) @@ -21,28 +21,28 @@ void Commands::_addItemsToTile(Tile &tile, Ogre::SceneManager *scnMgr, const std Ogre::Vector3 size = node->getAttachedObject(0)->getBoundingBox().getSize(); for (int i = 0; i < quantity; i++) { - Ogre::Entity* cubeEntity = scnMgr->createEntity(meshName); + Ogre::Entity* cubeEntity = scnMgr->createEntity(itemName + ".mesh"); Ogre::SceneNode* itemNode = scnMgr->getRootSceneNode()->createChildSceneNode(); auto itemSize = cubeEntity->getBoundingBox().getSize(); itemNode->attachObject(cubeEntity); float randX = pos.x + static_cast(std::rand()) / RAND_MAX * tileSize.x - tileSize.x / 2.0f; float randZ = pos.z + static_cast(std::rand()) / RAND_MAX * tileSize.z - tileSize.z / 2.0f; - float itemY = itemSize.y / 2 * 0.1; + float itemY = itemSize.y / 2.0f * 0.1; itemNode->setPosition(randX, itemY, randZ); itemNode->setScale(0.1f, 0.1f, 0.1f); - items.push_back(itemNode); + tile.items[itemName].push_back(itemNode); } } -void Commands::_removeItemsFromTile(Ogre::SceneManager *scnMgr, int quantity, std::vector &items) +void Commands::_removeItemsFromTile(Tile &tile, Ogre::SceneManager *scnMgr, const std::string &itemName, int quantity) { for (int i = 0; i < quantity; i++) { - if (items.size() == 0) + if (tile.items[itemName].empty()) return; - Ogre::SceneNode *node = items.back(); - items.pop_back(); + Ogre::SceneNode *node = tile.items[itemName].back(); + tile.items[itemName].pop_back(); scnMgr->destroySceneNode(node); } } @@ -100,13 +100,13 @@ void Commands::tile_content(std::string &command, Map &map, Ogre::SceneManager * } if (food > 0) - _addItemsToTile(map.tiles[x][y], scnMgr, "food.mesh", food, map.tiles[x][y].items["food"]); + _addItemsToTile(map.tiles[x][y], scnMgr, "food", food); else if (food < 0) - _removeItemsFromTile(scnMgr, -food, map.tiles[x][y].items["food"]); + _removeItemsFromTile(map.tiles[x][y], scnMgr, "food", -food); for (int i = 0; i < stonesNames.size(); i++) { if (stones[i] > 0) - _addItemsToTile(map.tiles[x][y], scnMgr, stonesNames[i] + ".mesh", stones[i], map.tiles[x][y].items[stonesNames[i]]); + _addItemsToTile(map.tiles[x][y], scnMgr, stonesNames[i], stones[i]); else if (stones[i] < 0) - _removeItemsFromTile(scnMgr, -stones[i], map.tiles[x][y].items[stonesNames[i]]); + _removeItemsFromTile(map.tiles[x][y], scnMgr, stonesNames[i], -stones[i]); } } diff --git a/graphic/src/commands/Commands.hpp b/graphic/src/commands/Commands.hpp index a3b6be62..33bde388 100644 --- a/graphic/src/commands/Commands.hpp +++ b/graphic/src/commands/Commands.hpp @@ -37,6 +37,6 @@ class Commands { static void command_parameters(std::string &command, Map &map, Ogre::SceneManager *scnMgr); private: - static void _addItemsToTile(Tile &tile, Ogre::SceneManager *scnMgr, const std::string &meshName, int quantity, std::vector &items); - static void _removeItemsFromTile(Ogre::SceneManager *scnMgr, int quantity, std::vector &items); + static void _addItemsToTile(Tile &tile, Ogre::SceneManager *scnMgr, const std::string &itemName, int quantity); + static void _removeItemsFromTile(Tile &tile, Ogre::SceneManager *scnMgr, const std::string &itemName, int quantity); }; From d15a017849f9fe658a4e7d2c8b11b93f4df8a046 Mon Sep 17 00:00:00 2001 From: Yann Date: Mon, 17 Jun 2024 23:01:53 +0200 Subject: [PATCH 10/29] feat(graphic): add player connection, movement, and inventory --- graphic/src/app/App.cpp | 19 ++- graphic/src/app/App.hpp | 2 +- graphic/src/commands/Commands.cpp | 186 +++++++++++++++++++++++++++++- graphic/src/commands/Commands.hpp | 50 ++++---- 4 files changed, 227 insertions(+), 30 deletions(-) diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index c1a4c50f..e8c366b7 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -14,8 +14,16 @@ using namespace Ogre; using namespace OgreBites; App::App() : OgreBites::ApplicationContext("Zappy"), _client(3001) { + _client.write("mct\n"); this->_commands["msz"] = &Commands::map_size; this->_commands["bct"] = &Commands::tile_content; + this->_commands["tna"] = &Commands::teams_names; + this->_commands["pnw"] = &Commands::player_connect; + this->_commands["ppo"] = &Commands::player_position; + this->_commands["plv"] = &Commands::player_level; + this->_commands["pin"] = &Commands::player_inventory; + this->_commands["pex"] = &Commands::player_eject; + this->_commands["pbc"] = &Commands::broadcast; } void App::setup() { @@ -67,10 +75,11 @@ void App::setup() { bool App::frameRenderingQueued(const Ogre::FrameEvent& evt) { if (_client.hasData()) { std::string command = _client.getCommandFromPendingBuffer(); - if (command.empty()) { - return true; + + while (!command.empty()) { + _updateMap(command); + command = _client.getCommandFromPendingBuffer(); } - _updateMap(command); } return true; } @@ -111,6 +120,8 @@ void App::_updateMap(std::string &command) { std::string commandName = command.substr(0, 3); if (this->_commands.find(commandName) != this->_commands.end()) { std::string params = command.substr(4); - this->_commands[commandName](params, this->_map, this->scnMgr); + this->_commands[commandName](params, this->_map, this->scnMgr, this->_client); + } else { + std::cerr << "Unknown command: " << commandName << std::endl; } } diff --git a/graphic/src/app/App.hpp b/graphic/src/app/App.hpp index e7c34c4a..6bd51b4e 100644 --- a/graphic/src/app/App.hpp +++ b/graphic/src/app/App.hpp @@ -40,7 +40,7 @@ class App : public OgreBites::ApplicationContext, public OgreBites::InputListene OgreBites::TrayManager *trayManager; Ogre::SceneManager *scnMgr; Map _map; - std::map> _commands; + std::map> _commands; /** * @brief Load resources of the application diff --git a/graphic/src/commands/Commands.cpp b/graphic/src/commands/Commands.cpp index 6c972aca..b73f3ff4 100644 --- a/graphic/src/commands/Commands.cpp +++ b/graphic/src/commands/Commands.cpp @@ -47,7 +47,26 @@ void Commands::_removeItemsFromTile(Tile &tile, Ogre::SceneManager *scnMgr, cons } } -void Commands::map_size(std::string &command, Map &map, Ogre::SceneManager *scnMgr) +Ogre::SceneNode *Commands::_createPlayerItem(Ogre::SceneManager *scnMgr, Tile &tile) +{ + Ogre::Entity *cubeEntity = scnMgr->createEntity("food.mesh"); + Ogre::SceneNode *node = scnMgr->getRootSceneNode()->createChildSceneNode(); + node->attachObject(cubeEntity); + + Ogre::AxisAlignedBox aab = cubeEntity->getBoundingBox(); + Ogre::Vector3 size = aab.getSize(); + + float randX = tile.node->getPosition().x + static_cast(std::rand()) / RAND_MAX * size.x - size.x / 2.0f; + float randZ = tile.node->getPosition().z + static_cast(std::rand()) / RAND_MAX * size.z - size.z / 2.0f; + float itemY = size.y; + + node->setPosition(randX, itemY, randZ); + node->setScale(PLAYER_SCALE, PLAYER_SCALE, PLAYER_SCALE); + + return node; +} + +void Commands::map_size(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -83,7 +102,7 @@ void Commands::map_size(std::string &command, Map &map, Ogre::SceneManager *scnM } } -void Commands::tile_content(std::string &command, Map &map, Ogre::SceneManager *scnMgr) +void Commands::tile_content(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -110,3 +129,166 @@ void Commands::tile_content(std::string &command, Map &map, Ogre::SceneManager * _removeItemsFromTile(map.tiles[x][y], scnMgr, stonesNames[i], -stones[i]); } } + +void Commands::teams_names(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 1) + return; + map.teams.push_back(args[0]); +} + +void Commands::player_connect(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 6) + return; + int id = std::stoi(args[0]); + int x = std::stoi(args[1]); + int y = std::stoi(args[2]); + int orientation = std::stoi(args[3]); + int level = std::stoi(args[4]); + std::string team = args[5]; + + if (x < 0 || x >= map.width || y < 0 || y >= map.height) + return; + + for (const auto& player : map.players) { + if (player.id == id) { + return; + } + } + + Player player; + player.id = id; + player.node = _createPlayerItem(scnMgr, map.tiles[x][y]); + player.orientation = orientation; + player.level = level; + player.team = team; + player.position = {x, y}; + map.players.push_back(player); +} + +void Commands::player_position(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 4) + return; + int id = std::stoi(args[0]); + int x = std::stoi(args[1]); + int y = std::stoi(args[2]); + if (x < 0 || x >= map.width || y < 0 || y >= map.height) + return; + + for (auto &player : map.players) { + if (player.id == id) { + player.position.x = x; + player.position.y = y; + if (!player.node) + player.node = _createPlayerItem(scnMgr, map.tiles[x][y]); + player.node->setPosition(map.tiles[x][y].node->getPosition().x, player.node->getPosition().y, map.tiles[x][y].node->getPosition().z); + return; + } + } + + Player player; + player.id = id; + player.node = _createPlayerItem(scnMgr, map.tiles[x][y]); + player.position.x = x; + player.position.y = y; + map.players.push_back(player); + + client.write("pin " + std::to_string(id) + "\n"); + client.write("plv " + std::to_string(id) + "\n"); +} + +void Commands::player_level(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 2) + return; + int id = std::stoi(args[0]); + int level = std::stoi(args[1]); + + for (auto &player : map.players) { + if (player.id == id) { + player.level = level; + return; + } + } + + Player player; + player.id = id; + player.level = level; + map.players.push_back(player); + + client.write("pin " + std::to_string(id) + "\n"); + client.write("ppo " + std::to_string(id) + "\n"); +} + +void Commands::player_inventory(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 10) + return; + int id = std::stoi(args[0]); + int x = std::stoi(args[1]); + int y = std::stoi(args[2]); + + if (x < 0 || x >= map.width || y < 0 || y >= map.height) + return; + + Inventory inventory; + inventory.food = std::stoi(args[3]); + inventory.linemate = std::stoi(args[4]); + inventory.deraumere = std::stoi(args[5]); + inventory.sibur = std::stoi(args[6]); + inventory.mendiane = std::stoi(args[7]); + inventory.phiras = std::stoi(args[8]); + inventory.thystame = std::stoi(args[9]); + + for (auto &player : map.players) { + if (player.id == id) { + player.inventory = inventory; + return; + } + } + + Player player; + player.id = id; + player.inventory = inventory; + map.players.push_back(player); + + client.write("pin " + std::to_string(id) + "\n"); + client.write("plv " + std::to_string(id) + "\n"); +} + +void Commands::player_eject(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 1) + return; + int id = std::stoi(args[0]); + + // TODO: Implement player ejection + std::cout << "Player " << id << " have been ejected or eject others?" << std::endl; +} + +void Commands::broadcast(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() < 2) + return; + int id = std::stoi(args[0]); + std::string message = args[1]; + + // TODO: Implement broadcast animation + std::cout << "Player " << id << " broadcasted: " << message << std::endl; +} diff --git a/graphic/src/commands/Commands.hpp b/graphic/src/commands/Commands.hpp index 33bde388..795beea3 100644 --- a/graphic/src/commands/Commands.hpp +++ b/graphic/src/commands/Commands.hpp @@ -8,35 +8,39 @@ #pragma once #include "types/Map.hpp" +#include "client/Client.hpp" + +#define PLAYER_SCALE 0.6f class Commands { public: - static void map_size(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void tile_content(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void teams_names(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_connect(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_position(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_level(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_inventory(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_eject(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void broadcast(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void incantation_start(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void incantation_end(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_egg_laid(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_resource_drop(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_resource_take(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void player_laying_egg(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void egg_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void egg_hatching(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void time_unit_request(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void time_unit_modification(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void end_game(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void unknown_command(std::string &command, Map &map, Ogre::SceneManager *scnMgr); - static void command_parameters(std::string &command, Map &map, Ogre::SceneManager *scnMgr); + static void map_size(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void tile_content(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void teams_names(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void player_connect(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void player_position(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void player_level(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void player_inventory(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void player_eject(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void broadcast(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void incantation_start(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void incantation_end(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void player_egg_laid(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void player_resource_drop(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void player_resource_take(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void player_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void player_laying_egg(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void egg_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void egg_hatching(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void time_unit_request(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void time_unit_modification(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void end_game(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void unknown_command(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void command_parameters(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); private: static void _addItemsToTile(Tile &tile, Ogre::SceneManager *scnMgr, const std::string &itemName, int quantity); static void _removeItemsFromTile(Tile &tile, Ogre::SceneManager *scnMgr, const std::string &itemName, int quantity); + static Ogre::SceneNode *_createPlayerItem(Ogre::SceneManager *scnMgr, Tile &tile); }; From b2c896cd3b97627601ab984d55c36e3c449326e3 Mon Sep 17 00:00:00 2001 From: Yann Date: Tue, 18 Jun 2024 10:04:46 +0200 Subject: [PATCH 11/29] feat(graphic): add incantation, fork and death functions --- graphic/src/app/App.cpp | 6 ++ graphic/src/commands/Commands.cpp | 115 +++++++++++++++++++++++++++++- graphic/src/types/CMakeLists.txt | 5 +- graphic/src/types/Egg.hpp | 17 +++++ graphic/src/types/Map.hpp | 2 + graphic/src/types/Player.cpp | 12 ++++ graphic/src/types/Player.hpp | 8 +-- graphic/src/types/Utils.hpp | 13 ++++ 8 files changed, 171 insertions(+), 7 deletions(-) create mode 100644 graphic/src/types/Egg.hpp create mode 100644 graphic/src/types/Player.cpp create mode 100644 graphic/src/types/Utils.hpp diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index e8c366b7..2754e017 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -24,6 +24,12 @@ App::App() : OgreBites::ApplicationContext("Zappy"), _client(3001) { this->_commands["pin"] = &Commands::player_inventory; this->_commands["pex"] = &Commands::player_eject; this->_commands["pbc"] = &Commands::broadcast; + this->_commands["pic"] = &Commands::incantation_start; + this->_commands["pie"] = &Commands::incantation_end; + this->_commands["pfk"] = &Commands::player_egg_laid; + this->_commands["pdr"] = &Commands::player_resource_drop; + this->_commands["pgt"] = &Commands::player_resource_take; + this->_commands["pdi"] = &Commands::player_death; } void App::setup() { diff --git a/graphic/src/commands/Commands.cpp b/graphic/src/commands/Commands.cpp index b73f3ff4..aa3c96ec 100644 --- a/graphic/src/commands/Commands.cpp +++ b/graphic/src/commands/Commands.cpp @@ -58,7 +58,7 @@ Ogre::SceneNode *Commands::_createPlayerItem(Ogre::SceneManager *scnMgr, Tile &t float randX = tile.node->getPosition().x + static_cast(std::rand()) / RAND_MAX * size.x - size.x / 2.0f; float randZ = tile.node->getPosition().z + static_cast(std::rand()) / RAND_MAX * size.z - size.z / 2.0f; - float itemY = size.y; + float itemY = size.y / 2.0f * PLAYER_SCALE; node->setPosition(randX, itemY, randZ); node->setScale(PLAYER_SCALE, PLAYER_SCALE, PLAYER_SCALE); @@ -180,6 +180,7 @@ void Commands::player_position(std::string &command, Map &map, Ogre::SceneManage int id = std::stoi(args[0]); int x = std::stoi(args[1]); int y = std::stoi(args[2]); + int orientation = std::stoi(args[3]); if (x < 0 || x >= map.width || y < 0 || y >= map.height) return; @@ -187,6 +188,7 @@ void Commands::player_position(std::string &command, Map &map, Ogre::SceneManage if (player.id == id) { player.position.x = x; player.position.y = y; + player.orientation = orientation; if (!player.node) player.node = _createPlayerItem(scnMgr, map.tiles[x][y]); player.node->setPosition(map.tiles[x][y].node->getPosition().x, player.node->getPosition().y, map.tiles[x][y].node->getPosition().z); @@ -199,8 +201,10 @@ void Commands::player_position(std::string &command, Map &map, Ogre::SceneManage player.node = _createPlayerItem(scnMgr, map.tiles[x][y]); player.position.x = x; player.position.y = y; + player.orientation = orientation; map.players.push_back(player); + // Because it's a new player, we need to get its level and inventory client.write("pin " + std::to_string(id) + "\n"); client.write("plv " + std::to_string(id) + "\n"); } @@ -292,3 +296,112 @@ void Commands::broadcast(std::string &command, Map &map, Ogre::SceneManager *scn // TODO: Implement broadcast animation std::cout << "Player " << id << " broadcasted: " << message << std::endl; } + +void Commands::incantation_start(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() < 3) + return; + int x = std::stoi(args[0]); + int y = std::stoi(args[1]); + int level = std::stoi(args[2]); + + // TODO: Implement incantation animation + std::cout << "Incantation started at " << x << ", " << y << " for level " << level << std::endl; +} + +void Commands::incantation_end(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() < 3) + return; + int x = std::stoi(args[0]); + int y = std::stoi(args[1]); + int level = std::stoi(args[2]); + + // TODO: Implement incantation animation + std::cout << "Incantation ended at " << x << ", " << y << " for level " << level << std::endl; +} + +void Commands::player_egg_laid(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 1) + return; + int player_id = std::stoi(args[0]); + + // TODO: Implement egg laying animation +} + +void Commands::player_resource_drop(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 3) + return; + int player_id = std::stoi(args[0]); + std::string resource = args[1]; + int quantity = std::stoi(args[2]); + + for (auto &player : map.players) { + if (player.id == player_id) { + _addItemsToTile(map.tiles[player.position.x][player.position.y], scnMgr, resource, quantity); + return; + } + } + + Player player; + player.id = player_id; + map.players.push_back(player); + + client.write("ppo " + std::to_string(player_id) + "\n"); + client.write("pin " + std::to_string(player_id) + "\n"); + client.write("plv " + std::to_string(player_id) + "\n"); +} + +void Commands::player_resource_take(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 3) + return; + int player_id = std::stoi(args[0]); + std::string resource = args[1]; + int quantity = std::stoi(args[2]); + + for (auto &player : map.players) { + if (player.id == player_id) { + _removeItemsFromTile(map.tiles[player.position.x][player.position.y], scnMgr, resource, quantity); + return; + } + } + + Player player; + player.id = player_id; + map.players.push_back(player); + + client.write("ppo " + std::to_string(player_id) + "\n"); + client.write("pin " + std::to_string(player_id) + "\n"); + client.write("plv " + std::to_string(player_id) + "\n"); +} + +void Commands::player_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 1) + return; + int player_id = std::stoi(args[0]); + + for (auto &player : map.players) { + if (player.id == player_id) { + if (player.node) + scnMgr->destroySceneNode(player.node); + map.players.erase(std::remove(map.players.begin(), map.players.end(), player), map.players.end()); + return; + } + } +} diff --git a/graphic/src/types/CMakeLists.txt b/graphic/src/types/CMakeLists.txt index fd118cdf..c5882e77 100644 --- a/graphic/src/types/CMakeLists.txt +++ b/graphic/src/types/CMakeLists.txt @@ -1,3 +1,6 @@ target_sources(zappy_gui_src PRIVATE Map.hpp - Player.hpp) + Player.hpp + Player.cpp + Utils.hpp + Egg.hpp) diff --git a/graphic/src/types/Egg.hpp b/graphic/src/types/Egg.hpp new file mode 100644 index 00000000..de6f5b2d --- /dev/null +++ b/graphic/src/types/Egg.hpp @@ -0,0 +1,17 @@ +/* +** EPITECH PROJECT, 2024 +** zappy +** File description: +** Egg +*/ + +#pragma once + +#include +#include "Utils.hpp" + +struct Egg { + int id; + Position position; + Ogre::SceneNode *node; +}; diff --git a/graphic/src/types/Map.hpp b/graphic/src/types/Map.hpp index 9162d898..13eeb27d 100644 --- a/graphic/src/types/Map.hpp +++ b/graphic/src/types/Map.hpp @@ -9,6 +9,7 @@ #include #include +#include "Egg.hpp" #include "Player.hpp" struct Tile { @@ -23,4 +24,5 @@ struct Map { int height = 0; int timeUnit = 0; std::vector teams = {}; + std::vector eggs = {}; }; diff --git a/graphic/src/types/Player.cpp b/graphic/src/types/Player.cpp new file mode 100644 index 00000000..c4a4dd59 --- /dev/null +++ b/graphic/src/types/Player.cpp @@ -0,0 +1,12 @@ +/* +** EPITECH PROJECT, 2024 +** zappy +** File description: +** Player +*/ + +#include "Player.hpp" + +bool operator==(const Player& lhs, const Player& rhs) { + return lhs.id == rhs.id; +} diff --git a/graphic/src/types/Player.hpp b/graphic/src/types/Player.hpp index 2f17ea39..81c6c945 100644 --- a/graphic/src/types/Player.hpp +++ b/graphic/src/types/Player.hpp @@ -9,11 +9,7 @@ #include #include - -struct Position { - int x; - int y; -}; +#include "Utils.hpp" struct Inventory { int food = 0; @@ -34,3 +30,5 @@ struct Player { std::string team; Ogre::SceneNode *node; }; + +bool operator==(const Player& lhs, const Player& rhs); diff --git a/graphic/src/types/Utils.hpp b/graphic/src/types/Utils.hpp new file mode 100644 index 00000000..c6f7fac1 --- /dev/null +++ b/graphic/src/types/Utils.hpp @@ -0,0 +1,13 @@ +/* +** EPITECH PROJECT, 2024 +** zappy +** File description: +** Utils +*/ + +#pragma once + +struct Position { + int x; + int y; +}; From eea6a0c6fea9df97b184405726800477bb0552b5 Mon Sep 17 00:00:00 2001 From: Yann Date: Tue, 18 Jun 2024 10:26:28 +0200 Subject: [PATCH 12/29] feat(graphic): complete all command functions --- graphic/src/app/App.cpp | 10 +- graphic/src/commands/Commands.cpp | 148 +++++++++++++++++++++++++----- graphic/src/commands/Commands.hpp | 4 +- 3 files changed, 135 insertions(+), 27 deletions(-) diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index 2754e017..17b4f85b 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -26,10 +26,18 @@ App::App() : OgreBites::ApplicationContext("Zappy"), _client(3001) { this->_commands["pbc"] = &Commands::broadcast; this->_commands["pic"] = &Commands::incantation_start; this->_commands["pie"] = &Commands::incantation_end; - this->_commands["pfk"] = &Commands::player_egg_laid; + this->_commands["pfk"] = &Commands::player_laying_egg; this->_commands["pdr"] = &Commands::player_resource_drop; this->_commands["pgt"] = &Commands::player_resource_take; this->_commands["pdi"] = &Commands::player_death; + this->_commands["enw"] = &Commands::player_egg_laid; + this->_commands["edi"] = &Commands::egg_death; + this->_commands["eht"] = &Commands::egg_hatching; + this->_commands["sgt"] = &Commands::time_unit_request; + this->_commands["sst"] = &Commands::time_unit_modification; + this->_commands["seg"] = &Commands::end_game; + this->_commands["suc"] = &Commands::unknown_command; + this->_commands["sbp"] = &Commands::command_parameters; } void App::setup() { diff --git a/graphic/src/commands/Commands.cpp b/graphic/src/commands/Commands.cpp index aa3c96ec..19a05153 100644 --- a/graphic/src/commands/Commands.cpp +++ b/graphic/src/commands/Commands.cpp @@ -20,9 +20,10 @@ void Commands::_addItemsToTile(Tile &tile, Ogre::SceneManager *scnMgr, const std Ogre::Vector3 pos = node->getPosition(); Ogre::Vector3 size = node->getAttachedObject(0)->getBoundingBox().getSize(); - for (int i = 0; i < quantity; i++) { - Ogre::Entity* cubeEntity = scnMgr->createEntity(itemName + ".mesh"); - Ogre::SceneNode* itemNode = scnMgr->getRootSceneNode()->createChildSceneNode(); + for (int i = 0; i < quantity; i++) + { + Ogre::Entity *cubeEntity = scnMgr->createEntity(itemName + ".mesh"); + Ogre::SceneNode *itemNode = scnMgr->getRootSceneNode()->createChildSceneNode(); auto itemSize = cubeEntity->getBoundingBox().getSize(); itemNode->attachObject(cubeEntity); @@ -38,7 +39,8 @@ void Commands::_addItemsToTile(Tile &tile, Ogre::SceneManager *scnMgr, const std void Commands::_removeItemsFromTile(Tile &tile, Ogre::SceneManager *scnMgr, const std::string &itemName, int quantity) { - for (int i = 0; i < quantity; i++) { + for (int i = 0; i < quantity; i++) + { if (tile.items[itemName].empty()) return; Ogre::SceneNode *node = tile.items[itemName].back(); @@ -76,10 +78,12 @@ void Commands::map_size(std::string &command, Map &map, Ogre::SceneManager *scnM map.height = std::stoi(args[1]); int posx = map.width / 2; int posy = map.height / 2; - for (int i = 0; i < map.width; i++) { + for (int i = 0; i < map.width; i++) + { std::vector row; posy = map.height / 2; - for (int j = 0; j < map.height; j++) { + for (int j = 0; j < map.height; j++) + { Ogre::Entity *cubeEntity = scnMgr->createEntity("Cube.mesh"); Ogre::SceneNode *node = scnMgr->getRootSceneNode()->createChildSceneNode(); node->attachObject(cubeEntity); @@ -90,7 +94,8 @@ void Commands::map_size(std::string &command, Map &map, Ogre::SceneManager *scnM Tile tile; - for (int i = 0; i < stonesNames.size(); i++) { + for (int i = 0; i < stonesNames.size(); i++) + { tile.items[stonesNames[i]] = {}; } tile.node = node; @@ -114,7 +119,8 @@ void Commands::tile_content(std::string &command, Map &map, Ogre::SceneManager * return; int food = std::stoi(args[2]) - map.tiles[x][y].items["food"].size(); std::vector stones; - for (int i = 0; i < stonesNames.size(); i++) { + for (int i = 0; i < stonesNames.size(); i++) + { stones.push_back(std::stoi(args[3 + i]) - map.tiles[x][y].items[stonesNames[i]].size()); } @@ -122,7 +128,8 @@ void Commands::tile_content(std::string &command, Map &map, Ogre::SceneManager * _addItemsToTile(map.tiles[x][y], scnMgr, "food", food); else if (food < 0) _removeItemsFromTile(map.tiles[x][y], scnMgr, "food", -food); - for (int i = 0; i < stonesNames.size(); i++) { + for (int i = 0; i < stonesNames.size(); i++) + { if (stones[i] > 0) _addItemsToTile(map.tiles[x][y], scnMgr, stonesNames[i], stones[i]); else if (stones[i] < 0) @@ -155,8 +162,10 @@ void Commands::player_connect(std::string &command, Map &map, Ogre::SceneManager if (x < 0 || x >= map.width || y < 0 || y >= map.height) return; - for (const auto& player : map.players) { - if (player.id == id) { + for (const auto &player : map.players) + { + if (player.id == id) + { return; } } @@ -184,8 +193,10 @@ void Commands::player_position(std::string &command, Map &map, Ogre::SceneManage if (x < 0 || x >= map.width || y < 0 || y >= map.height) return; - for (auto &player : map.players) { - if (player.id == id) { + for (auto &player : map.players) + { + if (player.id == id) + { player.position.x = x; player.position.y = y; player.orientation = orientation; @@ -218,8 +229,10 @@ void Commands::player_level(std::string &command, Map &map, Ogre::SceneManager * int id = std::stoi(args[0]); int level = std::stoi(args[1]); - for (auto &player : map.players) { - if (player.id == id) { + for (auto &player : map.players) + { + if (player.id == id) + { player.level = level; return; } @@ -256,8 +269,10 @@ void Commands::player_inventory(std::string &command, Map &map, Ogre::SceneManag inventory.phiras = std::stoi(args[8]); inventory.thystame = std::stoi(args[9]); - for (auto &player : map.players) { - if (player.id == id) { + for (auto &player : map.players) + { + if (player.id == id) + { player.inventory = inventory; return; } @@ -325,7 +340,7 @@ void Commands::incantation_end(std::string &command, Map &map, Ogre::SceneManage std::cout << "Incantation ended at " << x << ", " << y << " for level " << level << std::endl; } -void Commands::player_egg_laid(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::player_laying_egg(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -346,8 +361,10 @@ void Commands::player_resource_drop(std::string &command, Map &map, Ogre::SceneM std::string resource = args[1]; int quantity = std::stoi(args[2]); - for (auto &player : map.players) { - if (player.id == player_id) { + for (auto &player : map.players) + { + if (player.id == player_id) + { _addItemsToTile(map.tiles[player.position.x][player.position.y], scnMgr, resource, quantity); return; } @@ -372,8 +389,10 @@ void Commands::player_resource_take(std::string &command, Map &map, Ogre::SceneM std::string resource = args[1]; int quantity = std::stoi(args[2]); - for (auto &player : map.players) { - if (player.id == player_id) { + for (auto &player : map.players) + { + if (player.id == player_id) + { _removeItemsFromTile(map.tiles[player.position.x][player.position.y], scnMgr, resource, quantity); return; } @@ -396,8 +415,10 @@ void Commands::player_death(std::string &command, Map &map, Ogre::SceneManager * return; int player_id = std::stoi(args[0]); - for (auto &player : map.players) { - if (player.id == player_id) { + for (auto &player : map.players) + { + if (player.id == player_id) + { if (player.node) scnMgr->destroySceneNode(player.node); map.players.erase(std::remove(map.players.begin(), map.players.end(), player), map.players.end()); @@ -405,3 +426,82 @@ void Commands::player_death(std::string &command, Map &map, Ogre::SceneManager * } } } + +void Commands::player_egg_laid(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 4) + return; + int player_id = std::stoi(args[0]); + int egg_id = std::stoi(args[1]); + int x = std::stoi(args[2]); + int y = std::stoi(args[3]); + + // TODO: Implement egg laying animation +} + +void Commands::egg_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 1) + return; + int egg_id = std::stoi(args[1]); + + // TODO: Implement egg death animation +} + +void Commands::egg_hatching(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 1) + return; + int egg_id = std::stoi(args[1]); + + // TODO: Implement egg hatching animation +} + +void Commands::time_unit_request(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 1) + return; + int time_unit = std::stoi(args[0]); + + // TODO: Implement time unit request +} + +void Commands::time_unit_modification(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 1) + return; + int time_unit = std::stoi(args[0]); + + // TODO: Implement time unit modification +} + +void Commands::end_game(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::vector args = Utils::StringUtils::split(command, ' '); + + if (args.size() != 1) + return; + std::string winner = args[0]; + + std::cout << "Game ended, team " << winner << " won!" << std::endl; +} + +void Commands::unknown_command(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::cout << "Unknown command: " << command << std::endl; +} + +void Commands::command_parameters(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +{ + std::cout << "Command parameters: " << command << std::endl; +} diff --git a/graphic/src/commands/Commands.hpp b/graphic/src/commands/Commands.hpp index 795beea3..6b2e94d6 100644 --- a/graphic/src/commands/Commands.hpp +++ b/graphic/src/commands/Commands.hpp @@ -26,11 +26,11 @@ class Commands { static void broadcast(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); static void incantation_start(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); static void incantation_end(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void player_egg_laid(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void player_laying_egg(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); static void player_resource_drop(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); static void player_resource_take(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); static void player_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void player_laying_egg(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void player_egg_laid(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); static void egg_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); static void egg_hatching(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); static void time_unit_request(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); From 015ea903c0631134a0af1fcffbed958609dcacbc Mon Sep 17 00:00:00 2001 From: Yann Date: Tue, 18 Jun 2024 11:03:54 +0200 Subject: [PATCH 13/29] feat(graphic): add broadcast animation --- graphic/src/CMakeLists.txt | 1 + graphic/src/app/App.cpp | 20 ++++++++++++++++- graphic/src/app/App.hpp | 3 +++ graphic/src/commands/Commands.cpp | 33 +++++++++++++++++++++++++--- graphic/src/commands/Commands.hpp | 2 ++ graphic/src/constants/Broadcast.hpp | 12 ++++++++++ graphic/src/constants/CMakeLists.txt | 2 ++ graphic/src/types/CMakeLists.txt | 1 + graphic/src/types/Map.cpp | 13 +++++++++++ graphic/src/types/Map.hpp | 10 +++++++++ 10 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 graphic/src/constants/Broadcast.hpp create mode 100644 graphic/src/constants/CMakeLists.txt create mode 100644 graphic/src/types/Map.cpp diff --git a/graphic/src/CMakeLists.txt b/graphic/src/CMakeLists.txt index 62177cea..56f47b07 100644 --- a/graphic/src/CMakeLists.txt +++ b/graphic/src/CMakeLists.txt @@ -17,3 +17,4 @@ add_subdirectory(client) add_subdirectory(commands) add_subdirectory(types) add_subdirectory(utils) +add_subdirectory(constants) diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index 17b4f85b..9f3b4c1a 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -32,7 +32,7 @@ App::App() : OgreBites::ApplicationContext("Zappy"), _client(3001) { this->_commands["pdi"] = &Commands::player_death; this->_commands["enw"] = &Commands::player_egg_laid; this->_commands["edi"] = &Commands::egg_death; - this->_commands["eht"] = &Commands::egg_hatching; + this->_commands["ebo"] = &Commands::egg_hatching; this->_commands["sgt"] = &Commands::time_unit_request; this->_commands["sst"] = &Commands::time_unit_modification; this->_commands["seg"] = &Commands::end_game; @@ -87,6 +87,24 @@ void App::setup() { } bool App::frameRenderingQueued(const Ogre::FrameEvent& evt) { + for (auto &circle : _map.broadcastCircles) { + if (circle.radius >= BROADCAST_CIRCLE_MAX_RADIUS) { + if (circle.circle) { + scnMgr->destroyManualObject(circle.circle); + circle.circle = nullptr; + } + _map.broadcastCircles.erase(std::remove(_map.broadcastCircles.begin(), _map.broadcastCircles.end(), circle), _map.broadcastCircles.end()); + continue; + } + circle.radius += evt.timeSinceLastFrame * 3.0f; // Adjust the speed as needed + circle.circle->beginUpdate(0); + for (int i = 0; i <= BROADCAST_CIRCLE_SEGMENTS; ++i) + { + float angle = Ogre::Math::TWO_PI * i / BROADCAST_CIRCLE_SEGMENTS; + circle.circle->position(Ogre::Math::Cos(angle) * circle.radius, 0, Ogre::Math::Sin(angle) * circle.radius); + } + circle.circle->end(); + } if (_client.hasData()) { std::string command = _client.getCommandFromPendingBuffer(); diff --git a/graphic/src/app/App.hpp b/graphic/src/app/App.hpp index 6bd51b4e..952227cc 100644 --- a/graphic/src/app/App.hpp +++ b/graphic/src/app/App.hpp @@ -13,6 +13,9 @@ #include "client/Client.hpp" #include "types/Map.hpp" +#define BROADCAST_CIRCLE_MAX_RADIUS 5.0f +#define BROADCAST_CIRCLE_SEGMENTS 100 + class App : public OgreBites::ApplicationContext, public OgreBites::InputListener { public: diff --git a/graphic/src/commands/Commands.cpp b/graphic/src/commands/Commands.cpp index 19a05153..f4b44440 100644 --- a/graphic/src/commands/Commands.cpp +++ b/graphic/src/commands/Commands.cpp @@ -68,6 +68,26 @@ Ogre::SceneNode *Commands::_createPlayerItem(Ogre::SceneManager *scnMgr, Tile &t return node; } +Circle Commands::_createBroadcastCircle(Ogre::SceneManager *scnMgr, const Ogre::Vector3 &position) +{ + Circle circle; + circle.circle = scnMgr->createManualObject(); + circle.node = scnMgr->getRootSceneNode()->createChildSceneNode(); + circle.node->attachObject(circle.circle); + circle.node->setPosition(position); + circle.radius = 0; + + circle.circle->begin("BaseWhiteNoLighting", Ogre::RenderOperation::OT_LINE_STRIP); + for (int i = 0; i <= BROADCAST_CIRCLE_SEGMENTS; ++i) + { + float angle = Ogre::Math::TWO_PI * i / BROADCAST_CIRCLE_SEGMENTS; + circle.circle->position(Ogre::Math::Cos(angle) * circle.radius, 0, Ogre::Math::Sin(angle) * circle.radius); + } + circle.circle->end(); + + return circle; +} + void Commands::map_size(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -308,8 +328,15 @@ void Commands::broadcast(std::string &command, Map &map, Ogre::SceneManager *scn int id = std::stoi(args[0]); std::string message = args[1]; - // TODO: Implement broadcast animation - std::cout << "Player " << id << " broadcasted: " << message << std::endl; + for (auto &player : map.players) + { + if (player.id == id) + { + Circle circle = _createBroadcastCircle(scnMgr, player.node->getPosition()); + map.broadcastCircles.push_back(circle); + return; + } + } } void Commands::incantation_start(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) @@ -458,7 +485,7 @@ void Commands::egg_hatching(std::string &command, Map &map, Ogre::SceneManager * if (args.size() != 1) return; - int egg_id = std::stoi(args[1]); + int egg_id = std::stoi(args[0]); // TODO: Implement egg hatching animation } diff --git a/graphic/src/commands/Commands.hpp b/graphic/src/commands/Commands.hpp index 6b2e94d6..2e41b0d5 100644 --- a/graphic/src/commands/Commands.hpp +++ b/graphic/src/commands/Commands.hpp @@ -9,6 +9,7 @@ #include "types/Map.hpp" #include "client/Client.hpp" +#include "constants/Broadcast.hpp" #define PLAYER_SCALE 0.6f @@ -43,4 +44,5 @@ class Commands { static void _addItemsToTile(Tile &tile, Ogre::SceneManager *scnMgr, const std::string &itemName, int quantity); static void _removeItemsFromTile(Tile &tile, Ogre::SceneManager *scnMgr, const std::string &itemName, int quantity); static Ogre::SceneNode *_createPlayerItem(Ogre::SceneManager *scnMgr, Tile &tile); + static Circle _createBroadcastCircle(Ogre::SceneManager *scnMgr, const Ogre::Vector3 &position); }; diff --git a/graphic/src/constants/Broadcast.hpp b/graphic/src/constants/Broadcast.hpp new file mode 100644 index 00000000..60446870 --- /dev/null +++ b/graphic/src/constants/Broadcast.hpp @@ -0,0 +1,12 @@ +/* +** EPITECH PROJECT, 2024 +** zappy +** File description: +** Broadcast +*/ + +#pragma once + +#define BROADCAST_CIRCLE_RADIUS 1.0f +#define BROADCAST_CIRCLE_MAX_RADIUS 5.0f +#define BROADCAST_CIRCLE_SEGMENTS 100 diff --git a/graphic/src/constants/CMakeLists.txt b/graphic/src/constants/CMakeLists.txt new file mode 100644 index 00000000..6e88e0c3 --- /dev/null +++ b/graphic/src/constants/CMakeLists.txt @@ -0,0 +1,2 @@ +target_sources(zappy_gui_src PRIVATE + Broadcast.hpp) diff --git a/graphic/src/types/CMakeLists.txt b/graphic/src/types/CMakeLists.txt index c5882e77..484e6602 100644 --- a/graphic/src/types/CMakeLists.txt +++ b/graphic/src/types/CMakeLists.txt @@ -1,5 +1,6 @@ target_sources(zappy_gui_src PRIVATE Map.hpp + Map.cpp Player.hpp Player.cpp Utils.hpp diff --git a/graphic/src/types/Map.cpp b/graphic/src/types/Map.cpp new file mode 100644 index 00000000..b46eb0aa --- /dev/null +++ b/graphic/src/types/Map.cpp @@ -0,0 +1,13 @@ +/* +** EPITECH PROJECT, 2024 +** zappy +** File description: +** Map +*/ + +#include "Map.hpp" + +bool operator==(const Circle &lhs, const Circle &rhs) +{ + return lhs.node == rhs.node; +} diff --git a/graphic/src/types/Map.hpp b/graphic/src/types/Map.hpp index 13eeb27d..874acbb5 100644 --- a/graphic/src/types/Map.hpp +++ b/graphic/src/types/Map.hpp @@ -11,12 +11,19 @@ #include #include "Egg.hpp" #include "Player.hpp" +#include "constants/Broadcast.hpp" struct Tile { std::map> items = {}; Ogre::SceneNode *node = nullptr; }; +struct Circle { + Ogre::ManualObject *circle = nullptr; + Ogre::SceneNode *node = nullptr; + float radius = BROADCAST_CIRCLE_RADIUS; +}; + struct Map { std::vector> tiles = {}; std::vector players = {}; @@ -25,4 +32,7 @@ struct Map { int timeUnit = 0; std::vector teams = {}; std::vector eggs = {}; + std::vector broadcastCircles = {}; }; + +bool operator==(const Circle &lhs, const Circle &rhs); From 29f504d12e5058ecfb7f710fc580beb390f2d706 Mon Sep 17 00:00:00 2001 From: Yann Date: Tue, 18 Jun 2024 12:43:30 +0200 Subject: [PATCH 14/29] refactor(graphic): add player constants file --- graphic/src/app/App.cpp | 2 +- graphic/src/app/App.hpp | 3 --- graphic/src/commands/Commands.hpp | 3 +-- graphic/src/constants/Broadcast.hpp | 1 + graphic/src/constants/CMakeLists.txt | 3 ++- graphic/src/constants/Player.hpp | 10 ++++++++++ 6 files changed, 15 insertions(+), 7 deletions(-) create mode 100644 graphic/src/constants/Player.hpp diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index 9f3b4c1a..d7051b7e 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -96,7 +96,7 @@ bool App::frameRenderingQueued(const Ogre::FrameEvent& evt) { _map.broadcastCircles.erase(std::remove(_map.broadcastCircles.begin(), _map.broadcastCircles.end(), circle), _map.broadcastCircles.end()); continue; } - circle.radius += evt.timeSinceLastFrame * 3.0f; // Adjust the speed as needed + circle.radius += evt.timeSinceLastFrame * BROADCAST_SPEED; circle.circle->beginUpdate(0); for (int i = 0; i <= BROADCAST_CIRCLE_SEGMENTS; ++i) { diff --git a/graphic/src/app/App.hpp b/graphic/src/app/App.hpp index 952227cc..6bd51b4e 100644 --- a/graphic/src/app/App.hpp +++ b/graphic/src/app/App.hpp @@ -13,9 +13,6 @@ #include "client/Client.hpp" #include "types/Map.hpp" -#define BROADCAST_CIRCLE_MAX_RADIUS 5.0f -#define BROADCAST_CIRCLE_SEGMENTS 100 - class App : public OgreBites::ApplicationContext, public OgreBites::InputListener { public: diff --git a/graphic/src/commands/Commands.hpp b/graphic/src/commands/Commands.hpp index 2e41b0d5..21a4d3ac 100644 --- a/graphic/src/commands/Commands.hpp +++ b/graphic/src/commands/Commands.hpp @@ -10,8 +10,7 @@ #include "types/Map.hpp" #include "client/Client.hpp" #include "constants/Broadcast.hpp" - -#define PLAYER_SCALE 0.6f +#include "constants/Player.hpp" class Commands { public: diff --git a/graphic/src/constants/Broadcast.hpp b/graphic/src/constants/Broadcast.hpp index 60446870..4a678ecb 100644 --- a/graphic/src/constants/Broadcast.hpp +++ b/graphic/src/constants/Broadcast.hpp @@ -10,3 +10,4 @@ #define BROADCAST_CIRCLE_RADIUS 1.0f #define BROADCAST_CIRCLE_MAX_RADIUS 5.0f #define BROADCAST_CIRCLE_SEGMENTS 100 +#define BROADCAST_SPEED 3.0f diff --git a/graphic/src/constants/CMakeLists.txt b/graphic/src/constants/CMakeLists.txt index 6e88e0c3..243cef46 100644 --- a/graphic/src/constants/CMakeLists.txt +++ b/graphic/src/constants/CMakeLists.txt @@ -1,2 +1,3 @@ target_sources(zappy_gui_src PRIVATE - Broadcast.hpp) + Broadcast.hpp + Player.hpp) diff --git a/graphic/src/constants/Player.hpp b/graphic/src/constants/Player.hpp new file mode 100644 index 00000000..a1a3f12e --- /dev/null +++ b/graphic/src/constants/Player.hpp @@ -0,0 +1,10 @@ +/* +** EPITECH PROJECT, 2024 +** zappy +** File description: +** Player +*/ + +#pragma once + +#define PLAYER_SCALE 0.6f From 91d5ca0a73407b8c03c578c725a11a94a7a7c9b7 Mon Sep 17 00:00:00 2001 From: Yann Date: Tue, 18 Jun 2024 12:52:19 +0200 Subject: [PATCH 15/29] refactor(graphic): create new private function for app class --- graphic/src/app/App.cpp | 40 ++++++++++++++++++++++------------------ graphic/src/app/App.hpp | 20 ++++++++++++++++++++ 2 files changed, 42 insertions(+), 18 deletions(-) diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index d7051b7e..be6ea500 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -87,24 +87,7 @@ void App::setup() { } bool App::frameRenderingQueued(const Ogre::FrameEvent& evt) { - for (auto &circle : _map.broadcastCircles) { - if (circle.radius >= BROADCAST_CIRCLE_MAX_RADIUS) { - if (circle.circle) { - scnMgr->destroyManualObject(circle.circle); - circle.circle = nullptr; - } - _map.broadcastCircles.erase(std::remove(_map.broadcastCircles.begin(), _map.broadcastCircles.end(), circle), _map.broadcastCircles.end()); - continue; - } - circle.radius += evt.timeSinceLastFrame * BROADCAST_SPEED; - circle.circle->beginUpdate(0); - for (int i = 0; i <= BROADCAST_CIRCLE_SEGMENTS; ++i) - { - float angle = Ogre::Math::TWO_PI * i / BROADCAST_CIRCLE_SEGMENTS; - circle.circle->position(Ogre::Math::Cos(angle) * circle.radius, 0, Ogre::Math::Sin(angle) * circle.radius); - } - circle.circle->end(); - } + _updateBroadcastCircles(evt); if (_client.hasData()) { std::string command = _client.getCommandFromPendingBuffer(); @@ -157,3 +140,24 @@ void App::_updateMap(std::string &command) { std::cerr << "Unknown command: " << commandName << std::endl; } } + +void App::_updateBroadcastCircles(const Ogre::FrameEvent &evt) { + for (auto &circle : _map.broadcastCircles) { + if (circle.radius >= BROADCAST_CIRCLE_MAX_RADIUS) { + if (circle.circle) { + scnMgr->destroyManualObject(circle.circle); + circle.circle = nullptr; + } + _map.broadcastCircles.erase(std::remove(_map.broadcastCircles.begin(), _map.broadcastCircles.end(), circle), _map.broadcastCircles.end()); + continue; + } + circle.radius += evt.timeSinceLastFrame * BROADCAST_SPEED; + circle.circle->beginUpdate(0); + for (int i = 0; i <= BROADCAST_CIRCLE_SEGMENTS; ++i) + { + float angle = Ogre::Math::TWO_PI * i / BROADCAST_CIRCLE_SEGMENTS; + circle.circle->position(Ogre::Math::Cos(angle) * circle.radius, 0, Ogre::Math::Sin(angle) * circle.radius); + } + circle.circle->end(); + } +} diff --git a/graphic/src/app/App.hpp b/graphic/src/app/App.hpp index 6bd51b4e..81b600c6 100644 --- a/graphic/src/app/App.hpp +++ b/graphic/src/app/App.hpp @@ -33,13 +33,27 @@ class App : public OgreBites::ApplicationContext, public OgreBites::InputListene */ bool keyPressed(const OgreBites::KeyboardEvent &evt) override; + /** + * @brief Frame rendering queued event + * @param evt Frame event + * @return true if the event was handled + */ bool frameRenderingQueued(const Ogre::FrameEvent &evt) override; private: + /// @brief Client object used to communicate with the server Client _client; + + /// @brief Tray manager used to display GUI elements OgreBites::TrayManager *trayManager; + + /// @brief Scene manager used to manage the scene Ogre::SceneManager *scnMgr; + + /// @brief Map of the game with all the tiles, players... Map _map; + + /// @brief Map of commands received from the server std::map> _commands; /** @@ -52,4 +66,10 @@ class App : public OgreBites::ApplicationContext, public OgreBites::InputListene * @param command Command received from the server */ void _updateMap(std::string &command); + + /** + * @brief Update the broadcast circles + * @param evt Frame event + */ + void _updateBroadcastCircles(const Ogre::FrameEvent &evt); }; From 92c3c2015a92a596a9cd34cb1e9dbd357c843971 Mon Sep 17 00:00:00 2001 From: Yann Date: Tue, 18 Jun 2024 15:57:30 +0200 Subject: [PATCH 16/29] feat(graphic): add incantation animation --- graphic/resources.cfg | 2 +- graphic/src/app/App.cpp | 68 +++++++++++++++++++++++++++ graphic/src/app/App.hpp | 15 ++++++ graphic/src/commands/Commands.cpp | 26 ++++++++-- graphic/src/commands/Commands.hpp | 1 + graphic/src/constants/CMakeLists.txt | 3 +- graphic/src/constants/Incantation.hpp | 14 ++++++ graphic/src/types/Map.cpp | 5 ++ graphic/src/types/Map.hpp | 10 ++++ 9 files changed, 139 insertions(+), 5 deletions(-) create mode 100644 graphic/src/constants/Incantation.hpp diff --git a/graphic/resources.cfg b/graphic/resources.cfg index 53e7b7b9..dbcc3dc7 100644 --- a/graphic/resources.cfg +++ b/graphic/resources.cfg @@ -7,4 +7,4 @@ FileSystem=assets/sibur FileSystem=assets/mendiane FileSystem=assets/phiras FileSystem=assets/thystame -Zip=assets/ui/SdkTrays.zip \ No newline at end of file +Zip=assets/ui/SdkTrays.zip diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index be6ea500..974c9025 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -75,6 +75,12 @@ void App::setup() { // } // } + MaterialPtr material = MaterialManager::getSingleton().create("TransparentMaterial", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); + material->setDiffuse(1, 1, 1, 0.5); + material->setAmbient(0, 0.65, 1); + material->setSceneBlending(SBT_TRANSPARENT_ALPHA); + material->setDepthWriteEnabled(false); + CameraMan *camMan = new CameraMan(camNode); camMan->setStyle(CS_ORBIT); addInputListener(camMan); @@ -88,6 +94,8 @@ void App::setup() { bool App::frameRenderingQueued(const Ogre::FrameEvent& evt) { _updateBroadcastCircles(evt); + _updateIncantationSpheres(evt); + if (_client.hasData()) { std::string command = _client.getCommandFromPendingBuffer(); @@ -161,3 +169,63 @@ void App::_updateBroadcastCircles(const Ogre::FrameEvent &evt) { circle.circle->end(); } } + +void App::_updateIncantationSpheres(const Ogre::FrameEvent &evt) { + for (auto &sphere : _map.incantationSpheres) { + if (sphere.isGrowing) { + sphere.radius += evt.timeSinceLastFrame * INCANTATION_SPHERE_SPEED; + if (sphere.radius >= INCANTATION_SPHERE_MAX_RADIUS) { + sphere.isGrowing = false; + } + } else { + sphere.radius -= evt.timeSinceLastFrame * INCANTATION_SPHERE_SPEED; + if (sphere.radius <= INCANTATION_SPHERE_RADIUS) { + sphere.isGrowing = true; + } + } + _updateSphere(sphere.sphere, sphere.radius); + } +} + +void App::_updateSphere(Ogre::ManualObject* obj, float radius, int rings, int segments) +{ + obj->clear(); + obj->begin("TransparentMaterial", RenderOperation::OT_TRIANGLE_LIST); + + float fDeltaRingAngle = (Math::PI / rings); + float fDeltaSegAngle = (Math::TWO_PI / segments); + unsigned short wVerticeIndex = 0; + + // Generate the group of rings for the sphere + for (int ring = 0; ring <= rings; ring++) + { + float r0 = radius * sinf(ring * fDeltaRingAngle); + float y0 = radius * cosf(ring * fDeltaRingAngle); + + // Generate the group of segments for the current ring + for (int seg = 0; seg <= segments; seg++) + { + float x0 = r0 * sinf(seg * fDeltaSegAngle); + float z0 = r0 * cosf(seg * fDeltaSegAngle); + + // Add one vertex to the strip which makes up the sphere + obj->position(x0, y0, z0); + obj->normal(Vector3(x0, y0, z0).normalisedCopy()); + obj->textureCoord((float)seg / (float)segments, (float)ring / (float)rings); + + if (ring != rings) + { + // each vertex (except the last) has six indices pointing to it + obj->index(wVerticeIndex + segments + 1); + obj->index(wVerticeIndex); + obj->index(wVerticeIndex + segments); + obj->index(wVerticeIndex + segments + 1); + obj->index(wVerticeIndex + 1); + obj->index(wVerticeIndex); + wVerticeIndex++; + } + } + } + + obj->end(); +} diff --git a/graphic/src/app/App.hpp b/graphic/src/app/App.hpp index 81b600c6..0a68deed 100644 --- a/graphic/src/app/App.hpp +++ b/graphic/src/app/App.hpp @@ -72,4 +72,19 @@ class App : public OgreBites::ApplicationContext, public OgreBites::InputListene * @param evt Frame event */ void _updateBroadcastCircles(const Ogre::FrameEvent &evt); + + /** + * @brief Update the incantation spheres + * @param evt Frame event + */ + void _updateIncantationSpheres(const Ogre::FrameEvent &evt); + + /** + * @brief Update the sphere + * @param obj Manual object + * @param radius Radius of the sphere + * @param rings Number of rings + * @param segments Number of segments + */ + void _updateSphere(Ogre::ManualObject* obj, float radius, int rings = BROADCAST_CIRCLE_SEGMENTS, int segments = BROADCAST_CIRCLE_SEGMENTS); }; diff --git a/graphic/src/commands/Commands.cpp b/graphic/src/commands/Commands.cpp index f4b44440..2e9eefff 100644 --- a/graphic/src/commands/Commands.cpp +++ b/graphic/src/commands/Commands.cpp @@ -88,6 +88,17 @@ Circle Commands::_createBroadcastCircle(Ogre::SceneManager *scnMgr, const Ogre:: return circle; } +Sphere Commands::_createIncantationSphere(Ogre::SceneManager *scnMgr, const Ogre::Vector3 &position) +{ + Sphere sphere; + sphere.sphere = scnMgr->createManualObject(); + sphere.node = scnMgr->getRootSceneNode()->createChildSceneNode(); + sphere.node->attachObject(sphere.sphere); + sphere.node->setPosition(position); + + return sphere; +} + void Commands::map_size(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -139,7 +150,7 @@ void Commands::tile_content(std::string &command, Map &map, Ogre::SceneManager * return; int food = std::stoi(args[2]) - map.tiles[x][y].items["food"].size(); std::vector stones; - for (int i = 0; i < stonesNames.size(); i++) + for (int i = 0; i < stonesNames.size() && i + 3 < args.size(); i++) { stones.push_back(std::stoi(args[3 + i]) - map.tiles[x][y].items[stonesNames[i]].size()); } @@ -350,7 +361,8 @@ void Commands::incantation_start(std::string &command, Map &map, Ogre::SceneMana int level = std::stoi(args[2]); // TODO: Implement incantation animation - std::cout << "Incantation started at " << x << ", " << y << " for level " << level << std::endl; + Sphere sphere = _createIncantationSphere(scnMgr, map.tiles[x][y].node->getPosition()); + map.incantationSpheres.push_back(sphere); } void Commands::incantation_end(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) @@ -364,7 +376,15 @@ void Commands::incantation_end(std::string &command, Map &map, Ogre::SceneManage int level = std::stoi(args[2]); // TODO: Implement incantation animation - std::cout << "Incantation ended at " << x << ", " << y << " for level " << level << std::endl; + for (auto &sphere : map.incantationSpheres) + { + if (sphere.node->getPosition() == map.tiles[x][y].node->getPosition()) + { + scnMgr->destroySceneNode(sphere.node); + map.incantationSpheres.erase(std::remove(map.incantationSpheres.begin(), map.incantationSpheres.end(), sphere), map.incantationSpheres.end()); + return; + } + } } void Commands::player_laying_egg(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) diff --git a/graphic/src/commands/Commands.hpp b/graphic/src/commands/Commands.hpp index 21a4d3ac..7fe95437 100644 --- a/graphic/src/commands/Commands.hpp +++ b/graphic/src/commands/Commands.hpp @@ -44,4 +44,5 @@ class Commands { static void _removeItemsFromTile(Tile &tile, Ogre::SceneManager *scnMgr, const std::string &itemName, int quantity); static Ogre::SceneNode *_createPlayerItem(Ogre::SceneManager *scnMgr, Tile &tile); static Circle _createBroadcastCircle(Ogre::SceneManager *scnMgr, const Ogre::Vector3 &position); + static Sphere _createIncantationSphere(Ogre::SceneManager *scnMgr, const Ogre::Vector3 &position); }; diff --git a/graphic/src/constants/CMakeLists.txt b/graphic/src/constants/CMakeLists.txt index 243cef46..78a3ce61 100644 --- a/graphic/src/constants/CMakeLists.txt +++ b/graphic/src/constants/CMakeLists.txt @@ -1,3 +1,4 @@ target_sources(zappy_gui_src PRIVATE Broadcast.hpp - Player.hpp) + Player.hpp + Incantation.hpp) diff --git a/graphic/src/constants/Incantation.hpp b/graphic/src/constants/Incantation.hpp new file mode 100644 index 00000000..45e438a0 --- /dev/null +++ b/graphic/src/constants/Incantation.hpp @@ -0,0 +1,14 @@ +/* +** EPITECH PROJECT, 2024 +** zappy +** File description: +** Incantation +*/ + +#pragma once + +#define INCANTATION_SPHERE_RINGS 100 +#define INCANTATION_SPHERE_SEGMENTS = INCANTATION_SPHERE_RINGS +#define INCANTATION_SPHERE_SPEED 6.0f +#define INCANTATION_SPHERE_RADIUS 1.0f +#define INCANTATION_SPHERE_MAX_RADIUS 5.0f diff --git a/graphic/src/types/Map.cpp b/graphic/src/types/Map.cpp index b46eb0aa..7ba3858f 100644 --- a/graphic/src/types/Map.cpp +++ b/graphic/src/types/Map.cpp @@ -11,3 +11,8 @@ bool operator==(const Circle &lhs, const Circle &rhs) { return lhs.node == rhs.node; } + +bool operator==(const Sphere &lhs, const Sphere &rhs) +{ + return lhs.node == rhs.node; +} diff --git a/graphic/src/types/Map.hpp b/graphic/src/types/Map.hpp index 874acbb5..bff4436b 100644 --- a/graphic/src/types/Map.hpp +++ b/graphic/src/types/Map.hpp @@ -12,6 +12,7 @@ #include "Egg.hpp" #include "Player.hpp" #include "constants/Broadcast.hpp" +#include "constants/Incantation.hpp" struct Tile { std::map> items = {}; @@ -24,6 +25,13 @@ struct Circle { float radius = BROADCAST_CIRCLE_RADIUS; }; +struct Sphere { + Ogre::ManualObject *sphere = nullptr; + Ogre::SceneNode *node = nullptr; + float radius = INCANTATION_SPHERE_RADIUS; + bool isGrowing = true; +}; + struct Map { std::vector> tiles = {}; std::vector players = {}; @@ -33,6 +41,8 @@ struct Map { std::vector teams = {}; std::vector eggs = {}; std::vector broadcastCircles = {}; + std::vector incantationSpheres = {}; }; bool operator==(const Circle &lhs, const Circle &rhs); +bool operator==(const Sphere &lhs, const Sphere &rhs); From fc4ba8ec7e7bc223051c8715c62d87c445d3f63e Mon Sep 17 00:00:00 2001 From: sdragos1 Date: Sun, 23 Jun 2024 01:48:15 +0200 Subject: [PATCH 17/29] refactor(graphic): add a separate library for the network side of the gui --- graphic/CMakeLists.txt | 1 + graphic/client/CMakeLists.txt | 10 ++++++++++ graphic/{src => }/client/Client.cpp | 0 graphic/{src => }/client/Client.hpp | 1 - graphic/plugins.cfg | 6 ++++++ graphic/src/CMakeLists.txt | 3 ++- graphic/src/app/App.cpp | 30 +++++++++++++++++++++++++++-- graphic/src/app/App.hpp | 24 ++++++++++++++++++++++- graphic/src/client/CMakeLists.txt | 3 --- graphic/src/main.cpp | 10 +++++++--- 10 files changed, 77 insertions(+), 11 deletions(-) create mode 100644 graphic/client/CMakeLists.txt rename graphic/{src => }/client/Client.cpp (100%) rename graphic/{src => }/client/Client.hpp (99%) create mode 100644 graphic/plugins.cfg delete mode 100644 graphic/src/client/CMakeLists.txt diff --git a/graphic/CMakeLists.txt b/graphic/CMakeLists.txt index aaad904f..50085935 100644 --- a/graphic/CMakeLists.txt +++ b/graphic/CMakeLists.txt @@ -13,3 +13,4 @@ find_package(OGRE REQUIRED) # Add Subdirectories add_subdirectory(src) +add_subdirectory(client) diff --git a/graphic/client/CMakeLists.txt b/graphic/client/CMakeLists.txt new file mode 100644 index 00000000..f8ec0ac0 --- /dev/null +++ b/graphic/client/CMakeLists.txt @@ -0,0 +1,10 @@ +add_library(zappy_gui_client STATIC) + +target_include_directories(zappy_gui_client PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) + +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") + +target_sources(zappy_gui_client PRIVATE + Client.cpp + Client.hpp +) diff --git a/graphic/src/client/Client.cpp b/graphic/client/Client.cpp similarity index 100% rename from graphic/src/client/Client.cpp rename to graphic/client/Client.cpp diff --git a/graphic/src/client/Client.hpp b/graphic/client/Client.hpp similarity index 99% rename from graphic/src/client/Client.hpp rename to graphic/client/Client.hpp index 6a62f38d..2ef76af7 100644 --- a/graphic/src/client/Client.hpp +++ b/graphic/client/Client.hpp @@ -11,7 +11,6 @@ class Client { public: - /** * @brief Construct a new Client object. * @details During the construction of the Client object, the connection to the server is established. diff --git a/graphic/plugins.cfg b/graphic/plugins.cfg new file mode 100644 index 00000000..d7f14d15 --- /dev/null +++ b/graphic/plugins.cfg @@ -0,0 +1,6 @@ +# Plugin=RenderSystem_Direct3D9 +# Plugin=RenderSystem_Direct3D10 +# Plugin=RenderSystem_Direct3D11 +PluginFolder=/usr/local/lib/OGRE +Plugin=RenderSystem_GL +Plugin=Codec_FreeImage diff --git a/graphic/src/CMakeLists.txt b/graphic/src/CMakeLists.txt index 56f47b07..afc1dcea 100644 --- a/graphic/src/CMakeLists.txt +++ b/graphic/src/CMakeLists.txt @@ -3,17 +3,18 @@ add_library(zappy_gui_src STATIC) target_link_libraries(zappy_gui_src OgreBites) target_include_directories(zappy_gui_src PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) +target_include_directories(zappy_gui_src PUBLIC ${CMAKE_SOURCE_DIR}) ## Binary executable add_executable(zappy_gui main.cpp) include_directories(${OGRE_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} ${OGRE_LIBRARIES}) +target_link_libraries(zappy_gui zappy_gui_client) target_link_libraries(zappy_gui zappy_gui_src) ## Add subdirectories add_subdirectory(app) -add_subdirectory(client) add_subdirectory(commands) add_subdirectory(types) add_subdirectory(utils) diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index 974c9025..02a06428 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -7,13 +7,14 @@ #include #include +#include #include "App.hpp" #include "commands/Commands.hpp" using namespace Ogre; using namespace OgreBites; -App::App() : OgreBites::ApplicationContext("Zappy"), _client(3001) { +App::App() : OgreBites::ApplicationContext("Zappy"), _client(4444) { _client.write("mct\n"); this->_commands["msz"] = &Commands::map_size; this->_commands["bct"] = &Commands::tile_content; @@ -45,11 +46,12 @@ void App::setup() { addInputListener(this); Root *root = getRoot(); + root->loadPlugin("Codec_FreeImage"); scnMgr = root->createSceneManager(); _loadResources(); - scnMgr->setAmbientLight(ColourValue(0.5f, 0.5f, 0.5f)); // Soft white ambient light + scnMgr->setAmbientLight(ColourValue(0.5f, 0.5f, 0.5f)); Camera *cam = scnMgr->createCamera("myCam"); cam->setAutoAspectRatio(true); @@ -229,3 +231,27 @@ void App::_updateSphere(Ogre::ManualObject* obj, float radius, int rings, int se obj->end(); } + +void App::_printUsage() noexcept { + std::cout << "USAGE: ./zappy_ai -p port -h host" << std::endl; +} + +bool App::parseOptions(int argc, char **argv) { + int opt; + + while ((opt = getopt(argc, argv, "p:h:")) != -1) { + switch (opt) { + case 'p': + _options.port = static_cast(std::strtol(optarg, nullptr, 10)); + break; + case 'h': + _options.host = optarg; + break; + default: + App::_printUsage(); + return false; + } + } + return true; +} + diff --git a/graphic/src/app/App.hpp b/graphic/src/app/App.hpp index 0a68deed..d10a2ef5 100644 --- a/graphic/src/app/App.hpp +++ b/graphic/src/app/App.hpp @@ -10,22 +10,36 @@ #include #include #include -#include "client/Client.hpp" +#include "../../client/Client.hpp" #include "types/Map.hpp" class App : public OgreBites::ApplicationContext, public OgreBites::InputListener { public: + typedef struct Options { + std::string host; + int port; + } Options; + /** * @brief Construct a new App object */ App(); + /** * @brief Setup the application */ void setup() override; + /** + * @brief Parse the cli arguments + * @param argc Parameter count + * @param argv Parameter values + * @return true if the options are valid + */ + bool parseOptions(int ac, char **av); + /** * @brief Key pressed event * @param evt Keyboard event @@ -56,6 +70,9 @@ class App : public OgreBites::ApplicationContext, public OgreBites::InputListene /// @brief Map of commands received from the server std::map> _commands; + /// @brief Options of the application + Options _options; + /** * @brief Load resources of the application */ @@ -87,4 +104,9 @@ class App : public OgreBites::ApplicationContext, public OgreBites::InputListene * @param segments Number of segments */ void _updateSphere(Ogre::ManualObject* obj, float radius, int rings = BROADCAST_CIRCLE_SEGMENTS, int segments = BROADCAST_CIRCLE_SEGMENTS); + + /** + * @brief Print the usage of the application + */ + static void _printUsage() noexcept; }; diff --git a/graphic/src/client/CMakeLists.txt b/graphic/src/client/CMakeLists.txt deleted file mode 100644 index 9f4e9b74..00000000 --- a/graphic/src/client/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -target_sources(zappy_gui_src PRIVATE - Client.cpp - Client.hpp) diff --git a/graphic/src/main.cpp b/graphic/src/main.cpp index a031913d..e4bbefca 100644 --- a/graphic/src/main.cpp +++ b/graphic/src/main.cpp @@ -5,13 +5,17 @@ ** main class */ -#include "app/App.hpp" -#include "client/Client.hpp" #include +#include "app/App.hpp" +#include "../client/Client.hpp" -int main() { +int main(int argc, char **argv) +{ try { App app; + + if (!app.parseOptions(argc, argv)) + return 84; app.initApp(); app.getRoot()->startRendering(); app.closeApp(); From 41e96b847c07fb645f59d7d8c08a96d75b26963e Mon Sep 17 00:00:00 2001 From: sdragos1 Date: Sun, 23 Jun 2024 15:31:27 +0200 Subject: [PATCH 18/29] feat(graphic): add select for server reading --- graphic/client/Client.cpp | 89 +++++++++++++++++++-------------------- graphic/client/Client.hpp | 32 ++++++++------ graphic/src/app/App.cpp | 17 ++------ 3 files changed, 65 insertions(+), 73 deletions(-) diff --git a/graphic/client/Client.cpp b/graphic/client/Client.cpp index 84c521b1..4598da43 100644 --- a/graphic/client/Client.cpp +++ b/graphic/client/Client.cpp @@ -5,31 +5,26 @@ ** Client */ +#include #include #include #include -#include -#include -#include #include #include #include #include #include "Client.hpp" -Client::Client(int port, std::string host) +Client::Client(int port, const std::string &host) + : _socket(-1), _readSet(), _writeSet() { - this->_socket = -1; this->_connect(host, port); - - this->hasData(true); - + this->pollClient(); std::string command = this->getCommandFromPendingBuffer(); - - if (command != "WELCOME") { +/* if (command != "WELCOME") { + std::cout << command << std::endl; throw Client::Exception("Invalid welcome message"); - } - + }*/ this->write("GRAPHIC\n"); } @@ -54,7 +49,7 @@ void Client::_connect(const std::string& host, int port) throw Client::Exception("Socket creation failed"); } - struct sockaddr_in serverAddr; + struct sockaddr_in serverAddr = {0}; memset(&serverAddr, 0, sizeof(serverAddr)); serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(port); @@ -82,7 +77,7 @@ void Client::_disconnect() } } -void Client::_setNonBlocking() +void Client::_setNonBlocking() const { if (this->_socket == -1) { throw Client::Exception("Socket not connected"); @@ -98,7 +93,7 @@ void Client::_setNonBlocking() } } -std::size_t Client::write(const std::string &buffer, std::size_t size) +std::size_t Client::write(const std::string &buffer, std::size_t size) const { if (this->_socket == -1) { throw Client::Exception("Socket not connected"); @@ -116,63 +111,65 @@ std::size_t Client::write(const std::string &buffer, std::size_t size) return bytesWritten; } -std::size_t Client::write(const std::string& buffer) +std::size_t Client::write(const std::string& buffer) const { return this->write(buffer, buffer.size()); } -std::size_t Client::read(char *buffer, std::size_t size) -{ - if (this->_socket == -1) { - throw Client::Exception("Socket not connected"); - } +void Client::_readServer() { + char buffer[1024] = {0}; + ssize_t bytesRead = 0; - ssize_t bytesRead = ::read(this->_socket, buffer, size); + bytesRead = ::read(this->_socket, buffer, 1024); if (bytesRead < 0) { - if (errno == EAGAIN || errno == EWOULDBLOCK) { - return 0; - } else { + if (errno != EAGAIN || errno != EWOULDBLOCK) { throw Client::Exception("Error reading from socket"); } } else if (bytesRead == 0) { throw Client::Exception("Connection closed"); } - - return bytesRead; + this->_pendingBuffer.append(buffer, bytesRead); + _pendingBytes += bytesRead; } -bool Client::hasData(bool block) +bool Client::hasData(bool block) const { - char buffer[1024] = {0}; - std::size_t bytesRead = 0; - - bytesRead = this->read(buffer, 1024); - if (block) { - while (bytesRead == 0) { - bytesRead = this->read(buffer, 1024); - } - } - - if (bytesRead == 0) { - return false; + if (this->_socket == -1) { + throw Client::Exception("Socket not connected"); } - this->_pendingBuffer.append(buffer, bytesRead); - - return true; + return this->_pendingBytes > 0; } std::string Client::getCommandFromPendingBuffer() { std::size_t pos = this->_pendingBuffer.find('\n'); + std::string command; if (pos == std::string::npos) { return ""; } - std::string command; - command = this->_pendingBuffer.substr(0, pos); this->_pendingBuffer = this->_pendingBuffer.substr(pos + 1); - + this->_pendingBytes -= pos + 1; return command; } + +void Client::pollClient() +{ + timeval timeout = {0, 0}; + int activity = 0; + + FD_ZERO(&_readSet); + FD_SET(_socket, &_readSet); + if (this->_socket == -1) { + throw Client::Exception("Socket not connected"); + } + activity = select(this->_socket + 1, &_readSet, nullptr, nullptr, &timeout); + if (activity < 0) { + throw Client::Exception("Error polling client socket"); + } + if (FD_ISSET(this->_socket, &_readSet)) { + _readServer(); + } +} diff --git a/graphic/client/Client.hpp b/graphic/client/Client.hpp index 2ef76af7..cd57bde7 100644 --- a/graphic/client/Client.hpp +++ b/graphic/client/Client.hpp @@ -15,7 +15,7 @@ class Client { * @brief Construct a new Client object. * @details During the construction of the Client object, the connection to the server is established. */ - Client(int port, std::string host = "127.0.0.1"); + Client(int port, const std::string &host = "127.0.0.1"); /** * @brief Destroy the Client object. @@ -29,29 +29,21 @@ class Client { * @param size The size of the data * @return The number of bytes written */ - std::size_t write(const std::string &buffer, std::size_t size); + [[nodiscard]] std::size_t write(const std::string &buffer, std::size_t size) const; /** * @brief Write data to the server. * @param buffer The data to write * @return The number of bytes written */ - std::size_t write(const std::string &buffer); - - /** - * @brief Read data from the server. - * @param buffer The buffer to store the data - * @param size The size of the buffer - * @return The number of bytes read - */ - std::size_t read(char *buffer, std::size_t size); + [[nodiscard]] std::size_t write(const std::string &buffer) const; /** * @brief Check if the server has data to read. * @param block If true, the function will block until data is available. * @return True if the server has data to read in the pending buffer, false otherwise. */ - bool hasData(bool block = false); + [[nodiscard]] bool hasData(bool block = false) const; /** * @brief Get the next command from the pending buffer. @@ -59,6 +51,12 @@ class Client { */ std::string getCommandFromPendingBuffer(); + /** + * @brief Poll the client for new data. + * @details Call select to check if the server has data to read or if we can write. + */ + void pollClient(); + /** * @brief Exception class for the Client class. */ @@ -86,6 +84,9 @@ class Client { /// @brief The socket used to communicate with the server. int _socket; std::string _pendingBuffer; + std::size_t _pendingBytes; + fd_set _readSet; + fd_set _writeSet; /** * @brief Connect to the server. @@ -100,5 +101,10 @@ class Client { /** * @brief Set the socket to non-blocking mode. */ - void _setNonBlocking(); + void _setNonBlocking() const; + + /** + * @brief Read data from the server. + */ + void _readServer(); }; diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index 02a06428..7c80bce3 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -65,19 +65,8 @@ void App::setup() { getRenderWindow()->addViewport(cam); - // for (int i = -5; i <= 5; i++) { - // for (int j = -5; j <= 5; j++) { - // Entity *cubeEntity = scnMgr->createEntity("Cube.mesh"); - // SceneNode *node = scnMgr->getRootSceneNode()->createChildSceneNode(); - // node->attachObject(cubeEntity); - - // AxisAlignedBox aab = cubeEntity->getBoundingBox(); - // Vector3 size = aab.getSize(); - // node->setPosition(i * size.x, 0, j * size.z); - // } - // } - - MaterialPtr material = MaterialManager::getSingleton().create("TransparentMaterial", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); + MaterialPtr material = MaterialManager::getSingleton().create("TransparentMaterial", + ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); material->setDiffuse(1, 1, 1, 0.5); material->setAmbient(0, 0.65, 1); material->setSceneBlending(SBT_TRANSPARENT_ALPHA); @@ -98,6 +87,7 @@ bool App::frameRenderingQueued(const Ogre::FrameEvent& evt) { _updateBroadcastCircles(evt); _updateIncantationSpheres(evt); + _client.pollClient(); if (_client.hasData()) { std::string command = _client.getCommandFromPendingBuffer(); @@ -117,7 +107,6 @@ void App::_loadResources() { ConfigFile cf; cf.load("resources.cfg"); - ConfigFile::SectionIterator section = cf.getSectionIterator(); String typeName, archName; From ed23b066f2fcc1aa7e4530d29d9277508c2bf98a Mon Sep 17 00:00:00 2001 From: sdragos1 Date: Sun, 23 Jun 2024 16:01:04 +0200 Subject: [PATCH 19/29] feat(graphic): add cli options to the client initalization --- graphic/client/Client.cpp | 58 +++++++++++++++++++++---------- graphic/client/Client.hpp | 25 ++++++++++--- graphic/src/app/App.cpp | 14 +++++--- graphic/src/app/App.hpp | 6 ++++ graphic/src/commands/Commands.hpp | 2 +- graphic/src/main.cpp | 2 +- 6 files changed, 78 insertions(+), 29 deletions(-) diff --git a/graphic/client/Client.cpp b/graphic/client/Client.cpp index 4598da43..6d4554b3 100644 --- a/graphic/client/Client.cpp +++ b/graphic/client/Client.cpp @@ -5,7 +5,6 @@ ** Client */ -#include #include #include #include @@ -15,18 +14,8 @@ #include #include "Client.hpp" -Client::Client(int port, const std::string &host) - : _socket(-1), _readSet(), _writeSet() -{ - this->_connect(host, port); - this->pollClient(); - std::string command = this->getCommandFromPendingBuffer(); -/* if (command != "WELCOME") { - std::cout << command << std::endl; - throw Client::Exception("Invalid welcome message"); - }*/ - this->write("GRAPHIC\n"); -} +Client::Client() + : _socket(-1), _pendingBuffer(), _pendingBytes(0), _readSet() {} Client::~Client() { @@ -40,6 +29,29 @@ const char *Client::Exception::what() const noexcept return this->_message.c_str(); } +bool Client::establishConnection(const std::string &host, int port) +{ + std::string response; + ssize_t bytesWritten = 0; + + this->_connect(host, port); + while (true) { + this->pollClient(true); + response = this->getCommandFromPendingBuffer(); + if (response == "WELCOME") { + break; + } + if (response == "KO") { + return false; + } + } + bytesWritten = this->write("GRAPHIC\n"); + if (bytesWritten == 0) { + return false; + } + return true; +} + void Client::_connect(const std::string& host, int port) { this->_disconnect(); @@ -65,7 +77,6 @@ void Client::_connect(const std::string& host, int port) } this->_socket = sockfd; - this->_setNonBlocking(); } @@ -93,7 +104,7 @@ void Client::_setNonBlocking() const } } -std::size_t Client::write(const std::string &buffer, std::size_t size) const +ssize_t Client::write(const std::string &buffer, std::size_t size) const { if (this->_socket == -1) { throw Client::Exception("Socket not connected"); @@ -111,7 +122,7 @@ std::size_t Client::write(const std::string &buffer, std::size_t size) const return bytesWritten; } -std::size_t Client::write(const std::string& buffer) const +ssize_t Client::write(const std::string& buffer) const { return this->write(buffer, buffer.size()); } @@ -155,9 +166,19 @@ std::string Client::getCommandFromPendingBuffer() return command; } -void Client::pollClient() +timeval *Client::_handleTimeout(bool block, timeval *timeout) { + timeval *timeoutPtr = nullptr; + + if (block) { + timeoutPtr = timeout; + } + return timeoutPtr; +} + +void Client::pollClient(bool block) { timeval timeout = {0, 0}; + timeval *timeoutPtr = nullptr; int activity = 0; FD_ZERO(&_readSet); @@ -165,7 +186,8 @@ void Client::pollClient() if (this->_socket == -1) { throw Client::Exception("Socket not connected"); } - activity = select(this->_socket + 1, &_readSet, nullptr, nullptr, &timeout); + timeoutPtr = _handleTimeout(block, &timeout); + activity = select(this->_socket + 1, &_readSet, nullptr, nullptr, timeoutPtr); if (activity < 0) { throw Client::Exception("Error polling client socket"); } diff --git a/graphic/client/Client.hpp b/graphic/client/Client.hpp index cd57bde7..f3304dbd 100644 --- a/graphic/client/Client.hpp +++ b/graphic/client/Client.hpp @@ -15,7 +15,7 @@ class Client { * @brief Construct a new Client object. * @details During the construction of the Client object, the connection to the server is established. */ - Client(int port, const std::string &host = "127.0.0.1"); + Client(); /** * @brief Destroy the Client object. @@ -23,20 +23,30 @@ class Client { */ ~Client(); + /** + * @brief Establish a connection to the server. + * @details This starts the connection and handles the welcome + * and registering of the client. + * @param host Hostname or IP address of the server + * @param port Port of the server + * @return Success or failure + */ + bool establishConnection(const std::string &host, int port); + /** * @brief Write data to the server. * @param buffer The data to write * @param size The size of the data * @return The number of bytes written */ - [[nodiscard]] std::size_t write(const std::string &buffer, std::size_t size) const; + ssize_t write(const std::string &buffer, std::size_t size) const; /** * @brief Write data to the server. * @param buffer The data to write * @return The number of bytes written */ - [[nodiscard]] std::size_t write(const std::string &buffer) const; + ssize_t write(const std::string &buffer) const; /** * @brief Check if the server has data to read. @@ -54,8 +64,9 @@ class Client { /** * @brief Poll the client for new data. * @details Call select to check if the server has data to read or if we can write. + * @param block If true, the function will block until data is available. */ - void pollClient(); + void pollClient(bool block = false); /** * @brief Exception class for the Client class. @@ -86,7 +97,6 @@ class Client { std::string _pendingBuffer; std::size_t _pendingBytes; fd_set _readSet; - fd_set _writeSet; /** * @brief Connect to the server. @@ -107,4 +117,9 @@ class Client { * @brief Read data from the server. */ void _readServer(); + + /** + * @brief Handle a timeout. + */ + timeval *_handleTimeout(bool block, timeval *timeout); }; diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index 7c80bce3..1fe90bee 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -14,8 +14,7 @@ using namespace Ogre; using namespace OgreBites; -App::App() : OgreBites::ApplicationContext("Zappy"), _client(4444) { - _client.write("mct\n"); +App::App() : OgreBites::ApplicationContext("Zappy"), _client() { this->_commands["msz"] = &Commands::map_size; this->_commands["bct"] = &Commands::tile_content; this->_commands["tna"] = &Commands::teams_names; @@ -81,6 +80,7 @@ void App::setup() { trayMgr->showFrameStats(TL_BOTTOMLEFT); trayMgr->showLogo(TL_BOTTOMRIGHT); trayMgr->hideCursor(); + _client.write("mct\n"); } bool App::frameRenderingQueued(const Ogre::FrameEvent& evt) { @@ -228,6 +228,10 @@ void App::_printUsage() noexcept { bool App::parseOptions(int argc, char **argv) { int opt; + if (argc != 5) { + App::_printUsage(); + return false; + } while ((opt = getopt(argc, argv, "p:h:")) != -1) { switch (opt) { case 'p': @@ -237,10 +241,12 @@ bool App::parseOptions(int argc, char **argv) { _options.host = optarg; break; default: - App::_printUsage(); - return false; + break; } } return true; } +bool App::establishConnection() { + return _client.establishConnection(_options.host, _options.port); +} diff --git a/graphic/src/app/App.hpp b/graphic/src/app/App.hpp index d10a2ef5..18dcd1c2 100644 --- a/graphic/src/app/App.hpp +++ b/graphic/src/app/App.hpp @@ -40,6 +40,12 @@ class App : public OgreBites::ApplicationContext, public OgreBites::InputListene */ bool parseOptions(int ac, char **av); + /** + * @brief Establish a connection to the server + * @return true if the connection was successful + */ + bool establishConnection(); + /** * @brief Key pressed event * @param evt Keyboard event diff --git a/graphic/src/commands/Commands.hpp b/graphic/src/commands/Commands.hpp index 7fe95437..0844c610 100644 --- a/graphic/src/commands/Commands.hpp +++ b/graphic/src/commands/Commands.hpp @@ -8,7 +8,7 @@ #pragma once #include "types/Map.hpp" -#include "client/Client.hpp" +#include "../client/Client.hpp" #include "constants/Broadcast.hpp" #include "constants/Player.hpp" diff --git a/graphic/src/main.cpp b/graphic/src/main.cpp index e4bbefca..147e6c98 100644 --- a/graphic/src/main.cpp +++ b/graphic/src/main.cpp @@ -14,7 +14,7 @@ int main(int argc, char **argv) try { App app; - if (!app.parseOptions(argc, argv)) + if (!app.parseOptions(argc, argv) || !app.establishConnection()) return 84; app.initApp(); app.getRoot()->startRendering(); From f7da61b0030d7ff1f996afe012a20640f5da3a31 Mon Sep 17 00:00:00 2001 From: sdragos1 Date: Sun, 23 Jun 2024 16:35:10 +0200 Subject: [PATCH 20/29] chore(graphic): add emission of default reqeusts --- graphic/client/Client.cpp | 1 + graphic/src/app/App.cpp | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/graphic/client/Client.cpp b/graphic/client/Client.cpp index 6d4554b3..ac564a9d 100644 --- a/graphic/client/Client.cpp +++ b/graphic/client/Client.cpp @@ -49,6 +49,7 @@ bool Client::establishConnection(const std::string &host, int port) if (bytesWritten == 0) { return false; } + this->write("mct\n"); return true; } diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index 1fe90bee..330d4736 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -80,7 +80,6 @@ void App::setup() { trayMgr->showFrameStats(TL_BOTTOMLEFT); trayMgr->showLogo(TL_BOTTOMRIGHT); trayMgr->hideCursor(); - _client.write("mct\n"); } bool App::frameRenderingQueued(const Ogre::FrameEvent& evt) { From 7e8d4b58ee9ca07c29c3ed4ee79f61252f9dfaee Mon Sep 17 00:00:00 2001 From: sdragos1 Date: Sun, 23 Jun 2024 18:00:19 +0200 Subject: [PATCH 21/29] chore(graphic): rename command functions to have camel casing --- graphic/client/Client.cpp | 2 +- graphic/src/app/App.cpp | 82 ++++++++++++++++++------------- graphic/src/app/App.hpp | 16 +++++- graphic/src/commands/Commands.cpp | 44 ++++++++--------- graphic/src/commands/Commands.hpp | 44 ++++++++--------- graphic/src/main.cpp | 4 +- 6 files changed, 109 insertions(+), 83 deletions(-) diff --git a/graphic/client/Client.cpp b/graphic/client/Client.cpp index ac564a9d..7d06a0ec 100644 --- a/graphic/client/Client.cpp +++ b/graphic/client/Client.cpp @@ -170,7 +170,7 @@ std::string Client::getCommandFromPendingBuffer() timeval *Client::_handleTimeout(bool block, timeval *timeout) { timeval *timeoutPtr = nullptr; - if (block) { + if (!block) { timeoutPtr = timeout; } return timeoutPtr; diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index 330d4736..a5f9b172 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -14,30 +14,38 @@ using namespace Ogre; using namespace OgreBites; -App::App() : OgreBites::ApplicationContext("Zappy"), _client() { - this->_commands["msz"] = &Commands::map_size; - this->_commands["bct"] = &Commands::tile_content; - this->_commands["tna"] = &Commands::teams_names; - this->_commands["pnw"] = &Commands::player_connect; - this->_commands["ppo"] = &Commands::player_position; - this->_commands["plv"] = &Commands::player_level; - this->_commands["pin"] = &Commands::player_inventory; - this->_commands["pex"] = &Commands::player_eject; +App::App() : + OgreBites::ApplicationContext("Zappy"), + _client(), + trayMgr(nullptr), + scnMgr(nullptr), + _map(), + _commands(), + _options() +{ + this->_commands["msz"] = &Commands::mapSize; + this->_commands["bct"] = &Commands::tileContent; + this->_commands["tna"] = &Commands::teamsNames; + this->_commands["pnw"] = &Commands::playerConnect; + this->_commands["ppo"] = &Commands::playerPosition; + this->_commands["plv"] = &Commands::playerLevel; + this->_commands["pin"] = &Commands::playerInventory; + this->_commands["pex"] = &Commands::playerEject; this->_commands["pbc"] = &Commands::broadcast; - this->_commands["pic"] = &Commands::incantation_start; - this->_commands["pie"] = &Commands::incantation_end; - this->_commands["pfk"] = &Commands::player_laying_egg; - this->_commands["pdr"] = &Commands::player_resource_drop; - this->_commands["pgt"] = &Commands::player_resource_take; - this->_commands["pdi"] = &Commands::player_death; - this->_commands["enw"] = &Commands::player_egg_laid; - this->_commands["edi"] = &Commands::egg_death; - this->_commands["ebo"] = &Commands::egg_hatching; - this->_commands["sgt"] = &Commands::time_unit_request; - this->_commands["sst"] = &Commands::time_unit_modification; - this->_commands["seg"] = &Commands::end_game; - this->_commands["suc"] = &Commands::unknown_command; - this->_commands["sbp"] = &Commands::command_parameters; + this->_commands["pic"] = &Commands::incantationStart; + this->_commands["pie"] = &Commands::incantationEnd; + this->_commands["pfk"] = &Commands::playerLayingEgg; + this->_commands["pdr"] = &Commands::playerResourceDrop; + this->_commands["pgt"] = &Commands::playerResourceTake; + this->_commands["pdi"] = &Commands::playerDeath; + this->_commands["enw"] = &Commands::playerEggLaid; + this->_commands["edi"] = &Commands::eggDeath; + this->_commands["ebo"] = &Commands::eggHatching; + this->_commands["sgt"] = &Commands::timeUnitRequest; + this->_commands["sst"] = &Commands::timeUnitModification; + this->_commands["seg"] = &Commands::endGame; + this->_commands["suc"] = &Commands::unknownCommand; + this->_commands["sbp"] = &Commands::commandParameters; } void App::setup() { @@ -47,11 +55,20 @@ void App::setup() { Root *root = getRoot(); root->loadPlugin("Codec_FreeImage"); scnMgr = root->createSceneManager(); + scnMgr->setAmbientLight(ColourValue(0.5f, 0.5f, 0.5f)); _loadResources(); + _setupCamera(); + _setupMaterials(); - scnMgr->setAmbientLight(ColourValue(0.5f, 0.5f, 0.5f)); + trayMgr = new TrayManager("TrayGUISystem", getRenderWindow()); + addInputListener(trayMgr); + trayMgr->showFrameStats(TL_BOTTOMLEFT); + trayMgr->showLogo(TL_BOTTOMRIGHT); + trayMgr->hideCursor(); +} +void App::_setupCamera() { Camera *cam = scnMgr->createCamera("myCam"); cam->setAutoAspectRatio(true); cam->setNearClipDistance(0.1); @@ -61,25 +78,20 @@ void App::setup() { camNode->setPosition(0, 0, 20); camNode->lookAt(Vector3(0, 0, -1), Node::TS_PARENT); camNode->attachObject(cam); - getRenderWindow()->addViewport(cam); + auto *camMan = new CameraMan(camNode); + camMan->setStyle(CS_ORBIT); + addInputListener(camMan); +} + +void App::_setupMaterials() { MaterialPtr material = MaterialManager::getSingleton().create("TransparentMaterial", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); material->setDiffuse(1, 1, 1, 0.5); material->setAmbient(0, 0.65, 1); material->setSceneBlending(SBT_TRANSPARENT_ALPHA); material->setDepthWriteEnabled(false); - - CameraMan *camMan = new CameraMan(camNode); - camMan->setStyle(CS_ORBIT); - addInputListener(camMan); - - TrayManager *trayMgr = new TrayManager("TrayGUISystem", getRenderWindow()); - addInputListener(trayMgr); - trayMgr->showFrameStats(TL_BOTTOMLEFT); - trayMgr->showLogo(TL_BOTTOMRIGHT); - trayMgr->hideCursor(); } bool App::frameRenderingQueued(const Ogre::FrameEvent& evt) { diff --git a/graphic/src/app/App.hpp b/graphic/src/app/App.hpp index 18dcd1c2..9bf8d766 100644 --- a/graphic/src/app/App.hpp +++ b/graphic/src/app/App.hpp @@ -16,8 +16,11 @@ class App : public OgreBites::ApplicationContext, public OgreBites::InputListener { public: + // @brief Options of the application typedef struct Options { + // @brief Host of the server std::string host; + // @brief Port of the server int port; } Options; @@ -26,7 +29,6 @@ class App : public OgreBites::ApplicationContext, public OgreBites::InputListene */ App(); - /** * @brief Setup the application */ @@ -65,7 +67,7 @@ class App : public OgreBites::ApplicationContext, public OgreBites::InputListene Client _client; /// @brief Tray manager used to display GUI elements - OgreBites::TrayManager *trayManager; + OgreBites::TrayManager *trayMgr; /// @brief Scene manager used to manage the scene Ogre::SceneManager *scnMgr; @@ -84,6 +86,16 @@ class App : public OgreBites::ApplicationContext, public OgreBites::InputListene */ static void _loadResources(); + /** + * @brief Setup the camera + */ + void _setupCamera(); + + /** + * @rief Setup the materials of the application + */ + void _setupMaterials(); + /** * @brief Update the map * @param command Command received from the server diff --git a/graphic/src/commands/Commands.cpp b/graphic/src/commands/Commands.cpp index 2e9eefff..dbc36371 100644 --- a/graphic/src/commands/Commands.cpp +++ b/graphic/src/commands/Commands.cpp @@ -99,7 +99,7 @@ Sphere Commands::_createIncantationSphere(Ogre::SceneManager *scnMgr, const Ogre return sphere; } -void Commands::map_size(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::mapSize(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -138,7 +138,7 @@ void Commands::map_size(std::string &command, Map &map, Ogre::SceneManager *scnM } } -void Commands::tile_content(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::tileContent(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -168,7 +168,7 @@ void Commands::tile_content(std::string &command, Map &map, Ogre::SceneManager * } } -void Commands::teams_names(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::teamsNames(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -177,7 +177,7 @@ void Commands::teams_names(std::string &command, Map &map, Ogre::SceneManager *s map.teams.push_back(args[0]); } -void Commands::player_connect(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::playerConnect(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -211,7 +211,7 @@ void Commands::player_connect(std::string &command, Map &map, Ogre::SceneManager map.players.push_back(player); } -void Commands::player_position(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::playerPosition(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -251,7 +251,7 @@ void Commands::player_position(std::string &command, Map &map, Ogre::SceneManage client.write("plv " + std::to_string(id) + "\n"); } -void Commands::player_level(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::playerLevel(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -278,7 +278,7 @@ void Commands::player_level(std::string &command, Map &map, Ogre::SceneManager * client.write("ppo " + std::to_string(id) + "\n"); } -void Commands::player_inventory(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::playerInventory(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -318,7 +318,7 @@ void Commands::player_inventory(std::string &command, Map &map, Ogre::SceneManag client.write("plv " + std::to_string(id) + "\n"); } -void Commands::player_eject(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::playerEject(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -350,7 +350,7 @@ void Commands::broadcast(std::string &command, Map &map, Ogre::SceneManager *scn } } -void Commands::incantation_start(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::incantationStart(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -365,7 +365,7 @@ void Commands::incantation_start(std::string &command, Map &map, Ogre::SceneMana map.incantationSpheres.push_back(sphere); } -void Commands::incantation_end(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::incantationEnd(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -387,7 +387,7 @@ void Commands::incantation_end(std::string &command, Map &map, Ogre::SceneManage } } -void Commands::player_laying_egg(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::playerLayingEgg(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -398,7 +398,7 @@ void Commands::player_laying_egg(std::string &command, Map &map, Ogre::SceneMana // TODO: Implement egg laying animation } -void Commands::player_resource_drop(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::playerResourceDrop(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -426,7 +426,7 @@ void Commands::player_resource_drop(std::string &command, Map &map, Ogre::SceneM client.write("plv " + std::to_string(player_id) + "\n"); } -void Commands::player_resource_take(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::playerResourceTake(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -454,7 +454,7 @@ void Commands::player_resource_take(std::string &command, Map &map, Ogre::SceneM client.write("plv " + std::to_string(player_id) + "\n"); } -void Commands::player_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::playerDeath(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -474,7 +474,7 @@ void Commands::player_death(std::string &command, Map &map, Ogre::SceneManager * } } -void Commands::player_egg_laid(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::playerEggLaid(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -488,7 +488,7 @@ void Commands::player_egg_laid(std::string &command, Map &map, Ogre::SceneManage // TODO: Implement egg laying animation } -void Commands::egg_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::eggDeath(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -499,7 +499,7 @@ void Commands::egg_death(std::string &command, Map &map, Ogre::SceneManager *scn // TODO: Implement egg death animation } -void Commands::egg_hatching(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::eggHatching(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -510,7 +510,7 @@ void Commands::egg_hatching(std::string &command, Map &map, Ogre::SceneManager * // TODO: Implement egg hatching animation } -void Commands::time_unit_request(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::timeUnitRequest(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -521,7 +521,7 @@ void Commands::time_unit_request(std::string &command, Map &map, Ogre::SceneMana // TODO: Implement time unit request } -void Commands::time_unit_modification(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::timeUnitModification(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -532,7 +532,7 @@ void Commands::time_unit_modification(std::string &command, Map &map, Ogre::Scen // TODO: Implement time unit modification } -void Commands::end_game(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::endGame(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::vector args = Utils::StringUtils::split(command, ' '); @@ -543,12 +543,12 @@ void Commands::end_game(std::string &command, Map &map, Ogre::SceneManager *scnM std::cout << "Game ended, team " << winner << " won!" << std::endl; } -void Commands::unknown_command(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::unknownCommand(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::cout << "Unknown command: " << command << std::endl; } -void Commands::command_parameters(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) +void Commands::commandParameters(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client) { std::cout << "Command parameters: " << command << std::endl; } diff --git a/graphic/src/commands/Commands.hpp b/graphic/src/commands/Commands.hpp index 0844c610..47aa00ce 100644 --- a/graphic/src/commands/Commands.hpp +++ b/graphic/src/commands/Commands.hpp @@ -15,29 +15,29 @@ class Commands { public: - static void map_size(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void tile_content(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void teams_names(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void player_connect(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void player_position(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void player_level(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void player_inventory(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void player_eject(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void mapSize(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void tileContent(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void teamsNames(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void playerConnect(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void playerPosition(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void playerLevel(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void playerInventory(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void playerEject(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); static void broadcast(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void incantation_start(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void incantation_end(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void player_laying_egg(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void player_resource_drop(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void player_resource_take(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void player_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void player_egg_laid(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void egg_death(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void egg_hatching(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void time_unit_request(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void time_unit_modification(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void end_game(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void unknown_command(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); - static void command_parameters(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void incantationStart(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void incantationEnd(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void playerLayingEgg(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void playerResourceDrop(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void playerResourceTake(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void playerDeath(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void playerEggLaid(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void eggDeath(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void eggHatching(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void timeUnitRequest(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void timeUnitModification(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void endGame(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void unknownCommand(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); + static void commandParameters(std::string &command, Map &map, Ogre::SceneManager *scnMgr, Client &client); private: static void _addItemsToTile(Tile &tile, Ogre::SceneManager *scnMgr, const std::string &itemName, int quantity); diff --git a/graphic/src/main.cpp b/graphic/src/main.cpp index 147e6c98..f66427d1 100644 --- a/graphic/src/main.cpp +++ b/graphic/src/main.cpp @@ -14,9 +14,11 @@ int main(int argc, char **argv) try { App app; - if (!app.parseOptions(argc, argv) || !app.establishConnection()) + if (!app.parseOptions(argc, argv)) return 84; app.initApp(); + if (!app.establishConnection()) + return 84; app.getRoot()->startRendering(); app.closeApp(); } From 28f5597dfb541a7f4423eaa20ff8d8568c70f88d Mon Sep 17 00:00:00 2001 From: sdragos1 Date: Sun, 23 Jun 2024 18:06:09 +0200 Subject: [PATCH 22/29] fix(graphic): remove deprecated error --- graphic/src/app/App.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index a5f9b172..5c522f46 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -118,15 +118,13 @@ void App::_loadResources() { ConfigFile cf; cf.load("resources.cfg"); - ConfigFile::SectionIterator section = cf.getSectionIterator(); + ConfigFile::SettingsBySection_ section = cf.getSettingsBySection(); String typeName, archName; - while (section.hasMoreElements()) { - ConfigFile::SettingsMultiMap *settings = section.getNext(); - ConfigFile::SettingsMultiMap::iterator i; - for (i = settings->begin(); i != settings->end(); ++i) { - typeName = i->first; - archName = i->second; + for (auto &i : section) { + for (auto &j : i.second) { + typeName = j.first; + archName = j.second; rgm.addResourceLocation(archName, typeName, "Main"); } } From 14c023308a0b5ac0d7bec598c4687238c4343e2e Mon Sep 17 00:00:00 2001 From: sdragos1 Date: Sun, 23 Jun 2024 19:33:42 +0200 Subject: [PATCH 23/29] chore(graphic): solve CLion warnings on the GUI client --- graphic/client/Client.cpp | 28 ++++++++++------------------ graphic/client/Client.hpp | 8 +------- graphic/src/app/App.cpp | 1 - graphic/src/app/App.hpp | 1 + graphic/src/main.cpp | 1 - 5 files changed, 12 insertions(+), 27 deletions(-) diff --git a/graphic/client/Client.cpp b/graphic/client/Client.cpp index 7d06a0ec..0bf93e4a 100644 --- a/graphic/client/Client.cpp +++ b/graphic/client/Client.cpp @@ -6,6 +6,7 @@ */ #include +#include #include #include #include @@ -22,7 +23,7 @@ Client::~Client() this->_disconnect(); } -Client::Exception::Exception(std::string message) : _message(message) {} +Client::Exception::Exception(std::string message) : _message(std::move(message)) {} const char *Client::Exception::what() const noexcept { @@ -32,7 +33,7 @@ const char *Client::Exception::what() const noexcept bool Client::establishConnection(const std::string &host, int port) { std::string response; - ssize_t bytesWritten = 0; + ssize_t bytesWritten; this->_connect(host, port); while (true) { @@ -111,7 +112,7 @@ ssize_t Client::write(const std::string &buffer, std::size_t size) const throw Client::Exception("Socket not connected"); } - ssize_t bytesWritten = ::write(this->_socket, buffer.data(), size); + ssize_t bytesWritten = send(this->_socket, buffer.c_str(), size, MSG_DONTWAIT); if (bytesWritten < 0) { if (errno == EAGAIN || errno == EWOULDBLOCK) { return 0; @@ -130,9 +131,9 @@ ssize_t Client::write(const std::string& buffer) const void Client::_readServer() { char buffer[1024] = {0}; - ssize_t bytesRead = 0; + ssize_t bytesRead; - bytesRead = ::read(this->_socket, buffer, 1024); + bytesRead = recv(this->_socket, buffer, sizeof(buffer), MSG_DONTWAIT); if (bytesRead < 0) { if (errno != EAGAIN || errno != EWOULDBLOCK) { throw Client::Exception("Error reading from socket"); @@ -144,7 +145,7 @@ void Client::_readServer() { _pendingBytes += bytesRead; } -bool Client::hasData(bool block) const +bool Client::hasData() const { if (this->_socket == -1) { throw Client::Exception("Socket not connected"); @@ -167,27 +168,18 @@ std::string Client::getCommandFromPendingBuffer() return command; } -timeval *Client::_handleTimeout(bool block, timeval *timeout) { - timeval *timeoutPtr = nullptr; - - if (!block) { - timeoutPtr = timeout; - } - return timeoutPtr; -} - void Client::pollClient(bool block) { timeval timeout = {0, 0}; - timeval *timeoutPtr = nullptr; - int activity = 0; + timeval *timeoutPtr; + int activity; FD_ZERO(&_readSet); FD_SET(_socket, &_readSet); if (this->_socket == -1) { throw Client::Exception("Socket not connected"); } - timeoutPtr = _handleTimeout(block, &timeout); + timeoutPtr = block ? nullptr : &timeout; activity = select(this->_socket + 1, &_readSet, nullptr, nullptr, timeoutPtr); if (activity < 0) { throw Client::Exception("Error polling client socket"); diff --git a/graphic/client/Client.hpp b/graphic/client/Client.hpp index f3304dbd..364ee42b 100644 --- a/graphic/client/Client.hpp +++ b/graphic/client/Client.hpp @@ -50,10 +50,9 @@ class Client { /** * @brief Check if the server has data to read. - * @param block If true, the function will block until data is available. * @return True if the server has data to read in the pending buffer, false otherwise. */ - [[nodiscard]] bool hasData(bool block = false) const; + [[nodiscard]] bool hasData() const; /** * @brief Get the next command from the pending buffer. @@ -117,9 +116,4 @@ class Client { * @brief Read data from the server. */ void _readServer(); - - /** - * @brief Handle a timeout. - */ - timeval *_handleTimeout(bool block, timeval *timeout); }; diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index 5c522f46..d310f681 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -9,7 +9,6 @@ #include #include #include "App.hpp" -#include "commands/Commands.hpp" using namespace Ogre; using namespace OgreBites; diff --git a/graphic/src/app/App.hpp b/graphic/src/app/App.hpp index 9bf8d766..5ac56a68 100644 --- a/graphic/src/app/App.hpp +++ b/graphic/src/app/App.hpp @@ -12,6 +12,7 @@ #include #include "../../client/Client.hpp" #include "types/Map.hpp" +#include "commands/Commands.hpp" class App : public OgreBites::ApplicationContext, public OgreBites::InputListener { public: diff --git a/graphic/src/main.cpp b/graphic/src/main.cpp index f66427d1..9c5cd507 100644 --- a/graphic/src/main.cpp +++ b/graphic/src/main.cpp @@ -7,7 +7,6 @@ #include #include "app/App.hpp" -#include "../client/Client.hpp" int main(int argc, char **argv) { From ba41aeda4ea0c5c51c0166e1c7bf3f6642ba59a3 Mon Sep 17 00:00:00 2001 From: sdragos1 Date: Sun, 23 Jun 2024 19:36:08 +0200 Subject: [PATCH 24/29] chore(graphic): update documentation --- graphic/client/Client.cpp | 16 ++++++++-------- graphic/client/Client.hpp | 7 +++++-- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/graphic/client/Client.cpp b/graphic/client/Client.cpp index 0bf93e4a..91a9aa92 100644 --- a/graphic/client/Client.cpp +++ b/graphic/client/Client.cpp @@ -16,7 +16,7 @@ #include "Client.hpp" Client::Client() - : _socket(-1), _pendingBuffer(), _pendingBytes(0), _readSet() {} + : _socket(-1), _readBuffer(), _readBufferSize(0), _readSet() {} Client::~Client() { @@ -141,8 +141,8 @@ void Client::_readServer() { } else if (bytesRead == 0) { throw Client::Exception("Connection closed"); } - this->_pendingBuffer.append(buffer, bytesRead); - _pendingBytes += bytesRead; + this->_readBuffer.append(buffer, bytesRead); + _readBufferSize += bytesRead; } bool Client::hasData() const @@ -151,20 +151,20 @@ bool Client::hasData() const throw Client::Exception("Socket not connected"); } - return this->_pendingBytes > 0; + return this->_readBufferSize > 0; } std::string Client::getCommandFromPendingBuffer() { - std::size_t pos = this->_pendingBuffer.find('\n'); + std::size_t pos = this->_readBuffer.find('\n'); std::string command; if (pos == std::string::npos) { return ""; } - command = this->_pendingBuffer.substr(0, pos); - this->_pendingBuffer = this->_pendingBuffer.substr(pos + 1); - this->_pendingBytes -= pos + 1; + command = this->_readBuffer.substr(0, pos); + this->_readBuffer = this->_readBuffer.substr(pos + 1); + this->_readBufferSize -= pos + 1; return command; } diff --git a/graphic/client/Client.hpp b/graphic/client/Client.hpp index 364ee42b..9af86a77 100644 --- a/graphic/client/Client.hpp +++ b/graphic/client/Client.hpp @@ -93,8 +93,11 @@ class Client { private: /// @brief The socket used to communicate with the server. int _socket; - std::string _pendingBuffer; - std::size_t _pendingBytes; + /// @brief The buffer used to read data from the server. + std::string _readBuffer; + /// @brief The size of the read buffer. + std::size_t _readBufferSize; + /// @brief The file descriptor set used for polling. fd_set _readSet; /** From daf005ed8749a93b2e8af9e2f60888baf5b85202 Mon Sep 17 00:00:00 2001 From: sdragos1 Date: Sun, 23 Jun 2024 19:47:35 +0200 Subject: [PATCH 25/29] refactor(graphic): add the client network reading in the frame ending --- graphic/plugins.cfg | 3 --- graphic/src/app/App.cpp | 3 +++ graphic/src/app/App.hpp | 7 +++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/graphic/plugins.cfg b/graphic/plugins.cfg index d7f14d15..0b4cb0ba 100644 --- a/graphic/plugins.cfg +++ b/graphic/plugins.cfg @@ -1,6 +1,3 @@ -# Plugin=RenderSystem_Direct3D9 -# Plugin=RenderSystem_Direct3D10 -# Plugin=RenderSystem_Direct3D11 PluginFolder=/usr/local/lib/OGRE Plugin=RenderSystem_GL Plugin=Codec_FreeImage diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index d310f681..58637c7e 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -96,7 +96,10 @@ void App::_setupMaterials() { bool App::frameRenderingQueued(const Ogre::FrameEvent& evt) { _updateBroadcastCircles(evt); _updateIncantationSpheres(evt); + return true; +} +bool App::frameEnded(const Ogre::FrameEvent &evt) { _client.pollClient(); if (_client.hasData()) { std::string command = _client.getCommandFromPendingBuffer(); diff --git a/graphic/src/app/App.hpp b/graphic/src/app/App.hpp index 5ac56a68..dfe4ac0c 100644 --- a/graphic/src/app/App.hpp +++ b/graphic/src/app/App.hpp @@ -63,6 +63,13 @@ class App : public OgreBites::ApplicationContext, public OgreBites::InputListene */ bool frameRenderingQueued(const Ogre::FrameEvent &evt) override; + /** + * @brief Frame ended event + * @param evt Frame event + * @return true if the event was handled + */ + bool frameEnded(const Ogre::FrameEvent &evt) override; + private: /// @brief Client object used to communicate with the server Client _client; From b9bef27c6aeac37fd76eef2265d3c6e1ad09b723 Mon Sep 17 00:00:00 2001 From: sdragos1 Date: Sun, 23 Jun 2024 21:33:26 +0200 Subject: [PATCH 26/29] refactor(graphic): add the client in the src directory --- graphic/CMakeLists.txt | 1 - graphic/client/CMakeLists.txt | 10 ---------- graphic/src/CMakeLists.txt | 2 +- graphic/src/app/App.hpp | 2 +- graphic/src/client/CMakeLists.txt | 4 ++++ graphic/{ => src}/client/Client.cpp | 0 graphic/{ => src}/client/Client.hpp | 0 7 files changed, 6 insertions(+), 13 deletions(-) delete mode 100644 graphic/client/CMakeLists.txt create mode 100644 graphic/src/client/CMakeLists.txt rename graphic/{ => src}/client/Client.cpp (100%) rename graphic/{ => src}/client/Client.hpp (100%) diff --git a/graphic/CMakeLists.txt b/graphic/CMakeLists.txt index 50085935..aaad904f 100644 --- a/graphic/CMakeLists.txt +++ b/graphic/CMakeLists.txt @@ -13,4 +13,3 @@ find_package(OGRE REQUIRED) # Add Subdirectories add_subdirectory(src) -add_subdirectory(client) diff --git a/graphic/client/CMakeLists.txt b/graphic/client/CMakeLists.txt deleted file mode 100644 index f8ec0ac0..00000000 --- a/graphic/client/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -add_library(zappy_gui_client STATIC) - -target_include_directories(zappy_gui_client PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC") - -target_sources(zappy_gui_client PRIVATE - Client.cpp - Client.hpp -) diff --git a/graphic/src/CMakeLists.txt b/graphic/src/CMakeLists.txt index afc1dcea..8d67a6bb 100644 --- a/graphic/src/CMakeLists.txt +++ b/graphic/src/CMakeLists.txt @@ -10,7 +10,6 @@ add_executable(zappy_gui main.cpp) include_directories(${OGRE_INCLUDE_DIRS}) target_link_libraries(${PROJECT_NAME} ${OGRE_LIBRARIES}) -target_link_libraries(zappy_gui zappy_gui_client) target_link_libraries(zappy_gui zappy_gui_src) ## Add subdirectories @@ -18,4 +17,5 @@ add_subdirectory(app) add_subdirectory(commands) add_subdirectory(types) add_subdirectory(utils) +add_subdirectory(client) add_subdirectory(constants) diff --git a/graphic/src/app/App.hpp b/graphic/src/app/App.hpp index dfe4ac0c..6b7ee78c 100644 --- a/graphic/src/app/App.hpp +++ b/graphic/src/app/App.hpp @@ -10,7 +10,7 @@ #include #include #include -#include "../../client/Client.hpp" +#include "client/Client.hpp" #include "types/Map.hpp" #include "commands/Commands.hpp" diff --git a/graphic/src/client/CMakeLists.txt b/graphic/src/client/CMakeLists.txt new file mode 100644 index 00000000..4b12eec2 --- /dev/null +++ b/graphic/src/client/CMakeLists.txt @@ -0,0 +1,4 @@ +target_sources(zappy_gui_src PRIVATE + Client.cpp + Client.hpp +) diff --git a/graphic/client/Client.cpp b/graphic/src/client/Client.cpp similarity index 100% rename from graphic/client/Client.cpp rename to graphic/src/client/Client.cpp diff --git a/graphic/client/Client.hpp b/graphic/src/client/Client.hpp similarity index 100% rename from graphic/client/Client.hpp rename to graphic/src/client/Client.hpp From 79792e671a4660e5cf402935cf45414061d93d24 Mon Sep 17 00:00:00 2001 From: sdragos1 Date: Sun, 23 Jun 2024 22:04:29 +0200 Subject: [PATCH 27/29] fix(graphic): small changes after PR review --- graphic/src/app/App.cpp | 4 ++-- graphic/src/client/Client.cpp | 4 ++-- graphic/src/client/Client.hpp | 2 +- graphic/src/utils/String.cpp | 17 ++++++----------- 4 files changed, 11 insertions(+), 16 deletions(-) diff --git a/graphic/src/app/App.cpp b/graphic/src/app/App.cpp index 58637c7e..7b485874 100644 --- a/graphic/src/app/App.cpp +++ b/graphic/src/app/App.cpp @@ -100,7 +100,7 @@ bool App::frameRenderingQueued(const Ogre::FrameEvent& evt) { } bool App::frameEnded(const Ogre::FrameEvent &evt) { - _client.pollClient(); + _client.poll(); if (_client.hasData()) { std::string command = _client.getCommandFromPendingBuffer(); @@ -233,7 +233,7 @@ void App::_updateSphere(Ogre::ManualObject* obj, float radius, int rings, int se } void App::_printUsage() noexcept { - std::cout << "USAGE: ./zappy_ai -p port -h host" << std::endl; + std::cout << "USAGE: ./zappy_gui -p port -h host" << std::endl; } bool App::parseOptions(int argc, char **argv) { diff --git a/graphic/src/client/Client.cpp b/graphic/src/client/Client.cpp index 91a9aa92..87f4f537 100644 --- a/graphic/src/client/Client.cpp +++ b/graphic/src/client/Client.cpp @@ -37,7 +37,7 @@ bool Client::establishConnection(const std::string &host, int port) this->_connect(host, port); while (true) { - this->pollClient(true); + this->poll(true); response = this->getCommandFromPendingBuffer(); if (response == "WELCOME") { break; @@ -168,7 +168,7 @@ std::string Client::getCommandFromPendingBuffer() return command; } -void Client::pollClient(bool block) +void Client::poll(bool block) { timeval timeout = {0, 0}; timeval *timeoutPtr; diff --git a/graphic/src/client/Client.hpp b/graphic/src/client/Client.hpp index 9af86a77..6423452f 100644 --- a/graphic/src/client/Client.hpp +++ b/graphic/src/client/Client.hpp @@ -65,7 +65,7 @@ class Client { * @details Call select to check if the server has data to read or if we can write. * @param block If true, the function will block until data is available. */ - void pollClient(bool block = false); + void poll(bool block = false); /** * @brief Exception class for the Client class. diff --git a/graphic/src/utils/String.cpp b/graphic/src/utils/String.cpp index 09451c40..1459b0be 100644 --- a/graphic/src/utils/String.cpp +++ b/graphic/src/utils/String.cpp @@ -11,17 +11,12 @@ using namespace Utils; std::vector StringUtils::split(const std::string &str, const char delim) { - std::vector result; - std::string tmp = ""; + std::vector tokens; + std::string token; + std::stringstream ss(str); - for (char c : str) { - if (c == delim) { - result.push_back(tmp); - tmp = ""; - } else { - tmp += c; - } + while (std::getline(ss, token, delimiter)) { + tokens.push_back(token); } - result.push_back(tmp); - return result; + return tokens; } From 9c3a9d8d72461425de469d4612932772ffbc9008 Mon Sep 17 00:00:00 2001 From: sdragos1 Date: Sun, 23 Jun 2024 22:08:15 +0200 Subject: [PATCH 28/29] chore(graphic): fix compilation errors --- graphic/src/utils/String.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/graphic/src/utils/String.cpp b/graphic/src/utils/String.cpp index 1459b0be..c2fdbdf0 100644 --- a/graphic/src/utils/String.cpp +++ b/graphic/src/utils/String.cpp @@ -5,6 +5,7 @@ ** String */ +#include #include "String.hpp" using namespace Utils; @@ -15,7 +16,7 @@ std::vector StringUtils::split(const std::string &str, const char d std::string token; std::stringstream ss(str); - while (std::getline(ss, token, delimiter)) { + while (std::getline(ss, token, delim)) { tokens.push_back(token); } return tokens; From 46bd9e814a0fe902faf022b8f7cfe9f2f383c0c5 Mon Sep 17 00:00:00 2001 From: Suceveanu Dragos <114678687+sdragos1@users.noreply.github.com> Date: Sun, 23 Jun 2024 23:40:23 +0200 Subject: [PATCH 29/29] fix(graphic): check ko message when connecting to server Co-authored-by: Flavien Chenu <83367634+flavien-chenu@users.noreply.github.com> --- graphic/src/client/Client.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/graphic/src/client/Client.cpp b/graphic/src/client/Client.cpp index 87f4f537..435b5a7f 100644 --- a/graphic/src/client/Client.cpp +++ b/graphic/src/client/Client.cpp @@ -42,7 +42,7 @@ bool Client::establishConnection(const std::string &host, int port) if (response == "WELCOME") { break; } - if (response == "KO") { + if (response == "ko") { return false; } }