mirror of
https://github.com/ModOrganizer2/mob.git
synced 2026-07-27 14:07:05 -07:00
Build DirectXTex with mob. (#140)
This commit is contained in:
@@ -101,6 +101,7 @@ boost = 1.85.0
|
||||
boost_vs = 14.3
|
||||
fmt = 10.2.1
|
||||
gtest = main
|
||||
directxtex = main
|
||||
libloot = 0.22.4
|
||||
lz4 = v1.9.4
|
||||
nmm = 0.71.2
|
||||
|
||||
+2
-1
@@ -33,7 +33,8 @@ namespace mob {
|
||||
.add_task<libbsarch>()
|
||||
.add_task<libloot>()
|
||||
.add_task<openssl>()
|
||||
.add_task<bzip2>();
|
||||
.add_task<bzip2>()
|
||||
.add_task<directxtex>();
|
||||
|
||||
add_task<parallel_tasks>()
|
||||
.add_task<tasks::python>()
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
#include "pch.h"
|
||||
#include "tasks.h"
|
||||
|
||||
namespace mob::tasks {
|
||||
|
||||
namespace {
|
||||
|
||||
msbuild create_msbuild_tool(arch a, config config,
|
||||
msbuild::ops o = msbuild::build)
|
||||
{
|
||||
return std::move(msbuild(o).architecture(a).configuration(config).solution(
|
||||
directxtex::source_path() / "DirectXTex" /
|
||||
"DirectXTex_Desktop_2022.vcxproj"));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
directxtex::directxtex() : basic_task("directxtex") {}
|
||||
|
||||
std::string directxtex::version()
|
||||
{
|
||||
return conf().version().get("directxtex");
|
||||
}
|
||||
|
||||
bool directxtex::prebuilt()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
fs::path directxtex::source_path()
|
||||
{
|
||||
return conf().path().build() / "DirectXTex";
|
||||
}
|
||||
|
||||
void directxtex::do_clean(clean c)
|
||||
{
|
||||
if (is_set(c, clean::reclone)) {
|
||||
git_wrap::delete_directory(cx(), source_path());
|
||||
return;
|
||||
}
|
||||
|
||||
if (is_set(c, clean::rebuild)) {
|
||||
run_tool(create_msbuild_tool(arch::x64, config::release, msbuild::clean));
|
||||
run_tool(create_msbuild_tool(arch::x64, config::debug, msbuild::clean));
|
||||
}
|
||||
}
|
||||
|
||||
void directxtex::do_fetch()
|
||||
{
|
||||
run_tool(make_git()
|
||||
.url(make_git_url("microsoft", "DirectXTex"))
|
||||
.branch(version())
|
||||
.root(source_path()));
|
||||
}
|
||||
|
||||
void directxtex::do_build_and_install()
|
||||
{
|
||||
op::create_directories(cx(), directxtex::source_path() / "Include");
|
||||
op::create_directories(cx(), directxtex::source_path() / "Lib" / "Debug");
|
||||
op::create_directories(cx(), directxtex::source_path() / "Lib" / "Release");
|
||||
|
||||
// DO NOT run these in parallel because both generate files that are shared
|
||||
// between release and debug
|
||||
run_tool(create_msbuild_tool(arch::x64, config::release));
|
||||
run_tool(create_msbuild_tool(arch::x64, config::debug));
|
||||
|
||||
const auto binary_path =
|
||||
source_path() / "DirectXTex" / "Bin" / "Desktop_2022" / "x64";
|
||||
|
||||
for (const auto& header : {"DDS.h", "DirectXTex.h", "DirectXTex.inl "}) {
|
||||
op::copy_file_to_dir_if_better(cx(), source_path() / "DirectXTex" / header,
|
||||
source_path() / "Include");
|
||||
}
|
||||
op::copy_file_to_dir_if_better(cx(), binary_path / "Debug" / "DirectXTex.lib",
|
||||
source_path() / "Lib" / "Debug");
|
||||
op::copy_file_to_dir_if_better(cx(), binary_path / "Release" / "DirectXTex.lib",
|
||||
source_path() / "Lib" / "Release");
|
||||
}
|
||||
|
||||
} // namespace mob::tasks
|
||||
@@ -226,6 +226,7 @@ namespace mob::tasks {
|
||||
gtest::build_path(arch::x64, c == config::debug ? config::debug
|
||||
: config::release))
|
||||
.def("OPENSSL_ROOT_DIR", openssl::source_path())
|
||||
.def("DIRECTXTEX_ROOT", directxtex::source_path())
|
||||
.root(root));
|
||||
}
|
||||
|
||||
|
||||
@@ -77,6 +77,20 @@ namespace mob::tasks {
|
||||
void do_fetch() override;
|
||||
};
|
||||
|
||||
class directxtex : public basic_task<directxtex> {
|
||||
public:
|
||||
directxtex();
|
||||
|
||||
static std::string version();
|
||||
static bool prebuilt();
|
||||
static fs::path source_path();
|
||||
|
||||
protected:
|
||||
void do_clean(clean c) override;
|
||||
void do_fetch() override;
|
||||
void do_build_and_install() override;
|
||||
};
|
||||
|
||||
class explorerpp : public basic_task<explorerpp> {
|
||||
public:
|
||||
explorerpp();
|
||||
|
||||
Reference in New Issue
Block a user