void CMakeProvider::createWorkspace(const BuildSetup &setup) { std::string filename = setup.outputDir + "/CMakeLists.txt"; std::ofstream workspace(filename.c_str()); if (!workspace) error("Could not open \"" + filename + "\" for writing"); workspace << "cmake_minimum_required(VERSION 3.2)\n" "project(" << setup.projectDescription << ")\n\n"; workspace << "# Define the engines and subengines\n"; writeEngines(setup, workspace); writeSubEngines(setup, workspace); workspace << "# Generate options for the engines\n"; writeEngineOptions(workspace); workspace << "include_directories(${" << setup.projectDescription << "_SOURCE_DIR} ${" << setup.projectDescription << "_SOURCE_DIR}/engines " "$ENV{"<<LIBS_DEFINE<<"}/include .)\n\n"; workspace << "# Libraries and features\n\n"; writeFeatureLibSearch(setup, workspace, "sdl"); workspace << "# Depending on how SDL2 was built, there can be either and imported target or flags variables\n"; workspace << "# Define the flags variables from the imported target if necessary\n"; workspace << "if (TARGET SDL2::SDL2)\n"; workspace << " get_target_property(SDL2_INCLUDE_DIRS SDL2::SDL2 INTERFACE_INCLUDE_DIRECTORIES)\n"; workspace << " get_target_property(SDL2_LIBRARIES SDL2::SDL2 LOCATION)\n"; workspace << "endif()\n"; workspace << "include_directories(${SDL2_INCLUDE_DIRS})\n\n"; for (FeatureList::const_iterator i = setup.features.begin(), end = setup.features.end(); i != end; ++i) { if (!i->enable || featureExcluded(i->name)) continue; writeFeatureLibSearch(setup, workspace, i->name); workspace << "add_definitions(-D" << i->define << ")\n"; } workspace << "\n"; writeWarnings(workspace); writeDefines(setup, workspace); workspace << "# Generate definitions for the engines\n"; writeEngineDefinitions(workspace); workspace << "# Generate \"engines/plugins_table.h\"\n"; writeGeneratePluginsTable(workspace); }
void CMakeProvider::createWorkspace(const BuildSetup &setup) { std::string filename = setup.outputDir + "/CMakeLists.txt"; std::ofstream workspace(filename.c_str()); if (!workspace) error("Could not open \"" + filename + "\" for writing"); workspace << "cmake_minimum_required(VERSION 3.2)\n" "project(" << setup.projectDescription << ")\n\n"; workspace << "# Define the engines and subengines\n"; writeEngines(setup, workspace); writeSubEngines(setup, workspace); workspace << "# Generate options for the engines\n"; writeEngineOptions(workspace); workspace << "include_directories(${" << setup.projectDescription << "_SOURCE_DIR} ${" << setup.projectDescription << "_SOURCE_DIR}/engines\n" "$ENV{"<<LIBS_DEFINE<<"}/include)\n\n"; workspace << "# Libraries and features\n"; writeFeatureLibSearch(setup, workspace, "sdl"); for (FeatureList::const_iterator i = setup.features.begin(), end = setup.features.end(); i != end; ++i) { if (!i->enable || featureExcluded(i->name)) continue; writeFeatureLibSearch(setup, workspace, i->name); workspace << "add_definitions(-D" << i->define << ")\n"; } workspace << "\n"; writeWarnings(workspace); writeDefines(setup, workspace); workspace << "# Generate definitions for the engines\n"; writeEngineDefinitions(workspace); workspace << "# Generate \"engines/plugins_table.h\"\n"; writeGeneratePluginsTable(workspace); }
void CMakeProvider::createProjectFile(const std::string &name, const std::string &, const BuildSetup &setup, const std::string &moduleDir, const StringList &includeList, const StringList &excludeList) { const std::string projectFile = setup.outputDir + "/CMakeLists.txt"; std::ofstream project(projectFile.c_str(), std::ofstream::out | std::ofstream::app); if (!project) error("Could not open \"" + projectFile + "\" for writing"); if (name == setup.projectName) { project << "add_executable(" << name << "\n"; } else { std::string engineName; std::transform(name.begin(), name.end(), std::back_inserter(engineName), toupper); project << "if (ENABLE_" << engineName << ")\n"; project << "add_library(" << name << "\n"; } std::string modulePath; if (!moduleDir.compare(0, setup.srcDir.size(), setup.srcDir)) { modulePath = moduleDir.substr(setup.srcDir.size()); if (!modulePath.empty() && modulePath.at(0) == '/') modulePath.erase(0, 1); } if (modulePath.size()) addFilesToProject(moduleDir, project, includeList, excludeList, setup.filePrefix + '/' + modulePath); else addFilesToProject(moduleDir, project, includeList, excludeList, setup.filePrefix); project << ")\n\n"; if (name != setup.projectName) { project << "endif()\n"; } if (name == setup.projectName) { project << "# Engines libraries handling\n"; writeEnginesLibrariesHandling(setup, project); project << "# Libraries\n"; const Library *sdlLibrary = getLibraryFromFeature("sdl", setup.useSDL2); project << "target_link_libraries(" << name << " ${" << sdlLibrary->librariesVar << "})\n"; for (FeatureList::const_iterator i = setup.features.begin(), end = setup.features.end(); i != end; ++i) { if (!i->enable || featureExcluded(i->name)) continue; const Library *library = getLibraryFromFeature(i->name, setup.useSDL2); if (!library) continue; if (library->librariesVar) { project << "target_link_libraries(" << name << " ${" << library->librariesVar << "})\n"; } else { project << "target_link_libraries(" << name << " " << library->libraries << ")\n"; } } project << "if (WIN32)\n"; project << " target_sources(" << name << " PUBLIC " << setup.filePrefix << "/dists/" << name << ".rc)\n"; project << " target_link_libraries(" << name << " winmm)\n"; project << "endif()\n"; project << "\n"; project << "set_property(TARGET " << name << " PROPERTY CXX_STANDARD 11)\n"; project << "set_property(TARGET " << name << " PROPERTY CXX_STANDARD_REQUIRED ON)\n"; } }