diff --git a/sw.cpp b/sw.cpp index 941ddcc..f625203 100644 --- a/sw.cpp +++ b/sw.cpp @@ -1,140 +1,140 @@ -#pragma sw require header org.sw.demo.lexxmark.winflexbison.bison - -void build(Solution &s) -{ - auto &tools = s.addProject("Polygon4.Tools", "master"); - tools += Git("https://github.com/aimrebirth/tools", "", "{v}"); - - auto cppstd = cpp23; - - auto &common = tools.addStaticLibrary("common"); - { - common += cppstd; - common.setRootDirectory("src/common"); - common += ".*"_rr; - common.Public += "pub.egorpugin.primitives.filesystem"_dep; - common.Public += "pub.egorpugin.primitives.templates2"_dep; - } - - auto add_exe_base = [&](const String &name, String dirname = {}) -> decltype(auto) - { - if (dirname.empty()) - dirname = name; - auto &t = tools.addExecutable(name); - t.PackageDefinitions = true; - t += cppstd; - t.setRootDirectory("src/" + dirname); - t += ".*"_rr; // to take .natvis files explicitly - return t; - }; - auto add_exe = [&](const String &name, const String &dirname = {}) -> decltype(auto) - { - auto &t = add_exe_base(name, dirname); - t.Public += "pub.egorpugin.primitives.sw.main"_dep; - return t; - }; - auto add_exe_with_common = [&](const String &name, const String &dirname = {}) -> decltype(auto) - { - auto &t = add_exe(name, dirname); - t.Public += common; - return t; - }; - auto add_exe_with_data_manager = [&](const String &name, const String &dirname = {}) -> decltype(auto) - { - auto &t = add_exe_with_common(name, dirname); - t.Public += "pub.lzwdgc.Polygon4.DataManager-master"_dep; - return t; - }; - - add_exe_with_data_manager("db_add_language") += "pub.egorpugin.primitives.executor"_dep; - add_exe_with_data_manager("db_extractor"); - add_exe_with_data_manager("db_extractor2") += "org.sw.demo.nlohmann.json.natvis"_dep; - add_exe_with_data_manager("mmm_extractor"); - add_exe_with_data_manager("mmo_extractor"); - add_exe_with_common("mmo_extractor2"); - add_exe_with_common("mmp_extractor") += "org.sw.demo.intel.opencv.highgui"_dep; - add_exe_with_common("mpj_loader"); - add_exe_with_common("paker"); - add_exe_with_common("script2txt"); - add_exe_with_common("txt2script"); - add_exe_with_common("tm_converter"); - add_exe_with_common("tm_converter2") += - "org.sw.demo.BenjaminDobell.s3tc_dxt_decompression-master"_dep, - "org.sw.demo.intel.opencv.highgui"_dep - ; - add_exe("name_generator"); - add_exe_with_common("save_loader"); - add_exe_with_common("bms_converter"); - add_exe_with_common("rgb_converter"); - add_exe_with_common("unpaker") += - "org.sw.demo.oberhumer.lzo.lzo"_dep, - "org.sw.demo.xz_utils.lzma"_dep - ; - - // not so simple targets - auto &model = tools.addStaticLibrary("model"); - { - model += cppstd; - model.setRootDirectory("src/model"); +#pragma sw require header org.sw.demo.lexxmark.winflexbison.bison + +void build(Solution &s) +{ + auto &tools = s.addProject("Polygon4.Tools", "master"); + tools += Git("https://github.com/aimrebirth/tools", "", "{v}"); + + auto cppstd = cpp23; + + auto &common = tools.addStaticLibrary("common"); + { + common += cppstd; + common.setRootDirectory("src/common"); + common += ".*"_rr; + common.Public += "pub.egorpugin.primitives.filesystem"_dep; + common.Public += "pub.egorpugin.primitives.templates2"_dep; + } + + auto add_exe_base = [&](const String &name, String dirname = {}) -> decltype(auto) + { + if (dirname.empty()) + dirname = name; + auto &t = tools.addExecutable(name); + t.PackageDefinitions = true; + t += cppstd; + t.setRootDirectory("src/" + dirname); + t += ".*"_rr; // to take .natvis files explicitly + return t; + }; + auto add_exe = [&](const String &name, const String &dirname = {}) -> decltype(auto) + { + auto &t = add_exe_base(name, dirname); + t.Public += "pub.egorpugin.primitives.sw.main"_dep; + return t; + }; + auto add_exe_with_common = [&](const String &name, const String &dirname = {}) -> decltype(auto) + { + auto &t = add_exe(name, dirname); + t.Public += common; + return t; + }; + auto add_exe_with_data_manager = [&](const String &name, const String &dirname = {}) -> decltype(auto) + { + auto &t = add_exe_with_common(name, dirname); + t.Public += "pub.lzwdgc.Polygon4.DataManager-master"_dep; + return t; + }; + + add_exe_with_data_manager("db_add_language") += "pub.egorpugin.primitives.executor"_dep; + add_exe_with_data_manager("db_extractor"); + add_exe_with_data_manager("db_extractor2") += "org.sw.demo.nlohmann.json.natvis"_dep; + add_exe_with_data_manager("mmm_extractor"); + add_exe_with_data_manager("mmo_extractor"); + add_exe_with_common("mmo_extractor2"); + add_exe_with_common("mmp_extractor") += "org.sw.demo.intel.opencv.highgui"_dep; + add_exe_with_common("mpj_loader"); + add_exe_with_common("paker"); + add_exe_with_common("script2txt"); + add_exe_with_common("txt2script"); + add_exe_with_common("tm_converter"); + add_exe_with_common("tm_converter2") += + "org.sw.demo.BenjaminDobell.s3tc_dxt_decompression-master"_dep, + "org.sw.demo.intel.opencv.highgui"_dep + ; + add_exe("name_generator"); + add_exe_with_common("save_loader"); + add_exe_with_common("bms_converter"); + add_exe_with_common("rgb_converter"); + add_exe_with_common("unpaker") += + "org.sw.demo.oberhumer.lzo.lzo"_dep, + "org.sw.demo.xz_utils.lzma"_dep + ; + + // not so simple targets + auto &model = tools.addStaticLibrary("model"); + { + model += cppstd; + model.setRootDirectory("src/model"); model.Public += common, "org.sw.demo.unicode.icu.i18n"_dep, - "org.sw.demo.eigen"_dep, - "pub.egorpugin.primitives.yaml"_dep, + "org.sw.demo.eigen"_dep, + "pub.egorpugin.primitives.yaml"_dep, "pub.egorpugin.primitives.sw.settings"_dep - ; - } - - add_exe_with_common("mod_converter2") += model; - - auto &language_switcher = tools.addExecutable("aim1.language_switcher"); - { - auto &t = language_switcher; - t += cppstd; - t += "src/aim1_language_switcher/.*"_rr; - t += "UNICODE"_def; - t += "gdi32.lib"_slib, "ole32.lib"_slib, "user32.lib"_slib; - if (auto L = t.getSelectedTool()->as(); L) - L->Subsystem = vs::Subsystem::Windows; - } - - auto &aim1_mod_activator = add_exe_with_common("aim1.mod_activator", "aim1_mod_activator"); - aim1_mod_activator += "pub.egorpugin.primitives.pack"_dep; - - auto &aim1_mod_maker = add_exe_with_common("aim1.mod_maker", "aim1_mod_maker"); // actually a library - aim1_mod_maker.Public += "pub.egorpugin.primitives.command"_dep; - aim1_mod_maker.Public += "org.sw.demo.nlohmann.json.natvis"_dep; - aim1_mod_maker.Interface.ForceIncludeFiles.push_back("aim1_mod_maker.h"); - - auto &aim1_mod_maker_injections = aim1_mod_maker.addStaticLibrary("injections"); - aim1_mod_maker_injections.setRootDirectory("src/aim1_mod_maker"); - aim1_mod_maker_injections += "aim\\.exe\\..*\\.h"_rr; - - auto &aim1_community_fix = tools.addExecutable("examples.mods.aim1.community_fix"); - { - auto &t = aim1_community_fix; - t.PackageDefinitions = true; - t += cppstd; - t += "examples/mods/aim1_community_fix/.*"_rr; - t += aim1_mod_maker; - } - - add_exe("mod_reader") += model; - - path sdk = "d:/arh/apps/Autodesk/FBX/FBX SDK/2019.0"; - if (fs::exists(sdk)) { - auto &mod_converter = add_exe("mod_converter"); - mod_converter += model; - mod_converter += "org.sw.demo.xmlsoft.libxml2"_dep; // fbx 2020 sdk requires libxml2 - mod_converter += IncludeDirectory(sdk / "include"); - String cfg = "release"; - if (mod_converter.getBuildSettings().Native.ConfigurationType == ConfigurationType::Debug) - cfg = "debug"; - String arch = "x64"; - if (mod_converter.getBuildSettings().TargetOS.Arch == ArchType::x86) + ; + } + + add_exe_with_common("mod_converter2") += model; + + auto &language_switcher = tools.addExecutable("aim1.language_switcher"); + { + auto &t = language_switcher; + t += cppstd; + t += "src/aim1_language_switcher/.*"_rr; + t += "UNICODE"_def; + t += "gdi32.lib"_slib, "ole32.lib"_slib, "user32.lib"_slib; + if (auto L = t.getSelectedTool()->as(); L) + L->Subsystem = vs::Subsystem::Windows; + } + + auto &aim1_mod_activator = add_exe_with_common("aim1.mod_activator", "aim1_mod_activator"); + aim1_mod_activator += "pub.egorpugin.primitives.pack"_dep; + + auto &aim1_mod_maker = add_exe_with_common("aim1.mod_maker", "aim1_mod_maker"); // actually a library + aim1_mod_maker.Public += "pub.egorpugin.primitives.command"_dep; + aim1_mod_maker.Public += "org.sw.demo.nlohmann.json.natvis"_dep; + aim1_mod_maker.Interface.ForceIncludeFiles.push_back("aim1_mod_maker.h"); + + auto &aim1_mod_maker_injections = aim1_mod_maker.addStaticLibrary("injections"); + aim1_mod_maker_injections.setRootDirectory("src/aim1_mod_maker"); + aim1_mod_maker_injections += "aim\\.exe.*"_rr; + + auto &aim1_community_fix = tools.addExecutable("examples.mods.aim1.community_fix"); + { + auto &t = aim1_community_fix; + t.PackageDefinitions = true; + t += cppstd; + t += "examples/mods/aim1_community_fix/.*"_rr; + t += aim1_mod_maker; + } + + add_exe("mod_reader") += model; + + path sdk = "d:/arh/apps/Autodesk/FBX/FBX SDK/2019.0"; + if (fs::exists(sdk)) { + auto &mod_converter = add_exe("mod_converter"); + mod_converter += model; + mod_converter += "org.sw.demo.xmlsoft.libxml2"_dep; // fbx 2020 sdk requires libxml2 + mod_converter += IncludeDirectory(sdk / "include"); + String cfg = "release"; + if (mod_converter.getBuildSettings().Native.ConfigurationType == ConfigurationType::Debug) + cfg = "debug"; + String arch = "x64"; + if (mod_converter.getBuildSettings().TargetOS.Arch == ArchType::x86) arch = "x86"; - String md = "md"; - if (mod_converter.getBuildSettings().Native.MT) - md = "mt"; - mod_converter += LinkLibrary(sdk / ("lib/vs2015/" + arch + "/" + cfg + "/libfbxsdk-" + md + ".lib")); - } -} + String md = "md"; + if (mod_converter.getBuildSettings().Native.MT) + md = "mt"; + mod_converter += LinkLibrary(sdk / ("lib/vs2015/" + arch + "/" + cfg + "/libfbxsdk-" + md + ".lib")); + } +}