Skip to content

Commit

Permalink
Build DirectXTex with mob. (#140)
Browse files Browse the repository at this point in the history
  • Loading branch information
Holt59 authored Jul 1, 2024
1 parent a308e75 commit eba5bf4
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 1 deletion.
1 change: 1 addition & 0 deletions mob.ini
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion src/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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>()
Expand Down
80 changes: 80 additions & 0 deletions src/tasks/directxtex.cpp
Original file line number Diff line number Diff line change
@@ -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
1 change: 1 addition & 0 deletions src/tasks/modorganizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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));
}

Expand Down
14 changes: 14 additions & 0 deletions src/tasks/tasks.h
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down

0 comments on commit eba5bf4

Please sign in to comment.