From 41336609facbed68508a3f153ca3523b3ae3839d Mon Sep 17 00:00:00 2001 From: YZBruh Date: Wed, 27 Aug 2025 22:04:06 +0300 Subject: [PATCH] pmt: switch builder to ninja. And some extra improvements --- .github/workflows/build.yml | 2 +- Android.bp | 6 +-- build.sh | 8 +++- src/functions/InfoFunction.cpp | 7 +-- src/functions/PartitionSizeFunction.cpp | 14 +++++- srclib/libhelper/include/libhelper/lib.hpp | 2 +- .../include/libpartition_map/lib.hpp | 15 +++++++ srclib/libpartition_map/src/PartitionMap.cpp | 43 +++++++++++++++++++ 8 files changed, 82 insertions(+), 15 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e4ec3ed..1299e92 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,7 +23,7 @@ jobs: run: | sudo apt update sudo apt upgrade -y - sudo apt install make cmake extra-cmake-modules zip -y + sudo apt install make ninja cmake extra-cmake-modules zip -y - name: Setup Android NDK id: setup-ndk diff --git a/Android.bp b/Android.bp index 8e262c3..619d0df 100644 --- a/Android.bp +++ b/Android.bp @@ -82,14 +82,14 @@ cc_defaults { shared_libs: ["libbase"], } -// Build libhelper library +// libhelper library target cc_library_shared { name: "libhelper", defaults: ["pmt_defaults"], srcs: [":libhelper_srcs"], } -// Build libpartition_map library +// libpartition_map library target cc_library_shared { name: "libpartition_map", defaults: ["pmt_defaults"], @@ -98,7 +98,7 @@ cc_library_shared { static_libs: ["libc++fs"], } -// Build pmt +// pmt executable target cc_binary { name: "pmt", defaults: ["pmt_defaults"], diff --git a/build.sh b/build.sh index 8204771..f80006f 100755 --- a/build.sh +++ b/build.sh @@ -29,6 +29,10 @@ checks() { echo "Please verify your CMake installation." exit 1 fi + if ! which ninja &>/dev/null; then + echo "Please verify your Ninja installation." + exit 1 + fi } clean() { @@ -50,7 +54,7 @@ build() { for a in ${TARGET_ABI_LIST[@]}; do echo "Configuring for $a..." mkdir -p build_$a - cmake -B build_$a -S . $1 \ + cmake -B build_$a -G Ninja -S . $1 \ -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \ -DANDROID_ABI=$a \ -DANDROID_PLATFORM=$ANDROID_PLATFORM \ @@ -59,7 +63,7 @@ build() { for a in ${TARGET_ABI_LIST[@]}; do echo "Building $a artifacts..." - cmake --build build_$a + cmake --build build_$a -j$(nproc) echo "$a build complete, artifacts: $PWD/build_$a" done } diff --git a/src/functions/InfoFunction.cpp b/src/functions/InfoFunction.cpp index f90dbcc..17af290 100644 --- a/src/functions/InfoFunction.cpp +++ b/src/functions/InfoFunction.cpp @@ -56,15 +56,10 @@ INIT(infoFunction) { RUN(infoFunction) { if (partitions.back() == "get-all" || partitions.back() == "getvar-all") { - partitions.clear(); - const auto parts = Variables->PartMap->getPartitionList(); - if (!parts) + if (!Variables->PartMap->copyPartitionsToVector(partitions)) throw Error("Cannot get list of all partitions! See logs for more " "information (%s)", Helper::LoggingProperties::FILE.data()); - - for (const auto &name : *parts) - partitions.push_back(name); } std::vector jParts; diff --git a/src/functions/PartitionSizeFunction.cpp b/src/functions/PartitionSizeFunction.cpp index bd5f94e..a37cdc5 100644 --- a/src/functions/PartitionSizeFunction.cpp +++ b/src/functions/PartitionSizeFunction.cpp @@ -19,7 +19,7 @@ Copyright 2025 Yağız Zengin #define SFUN "partitionSizeFunction" -std::string convertTo(const uint64_t size, const std::string &multiple) { +static std::string convertTo(const uint64_t size, const std::string &multiple) { if (multiple == "KB") return std::to_string(TO_KB(size)); if (multiple == "MB") return std::to_string(TO_MB(size)); if (multiple == "GB") return std::to_string(TO_GB(size)); @@ -31,7 +31,10 @@ INIT(partitionSizeFunction) { LOGN(SFUN, INFO) << "Initializing variables of partition size getter function." << std::endl; - cmd = _app.add_subcommand("sizeof", "Tell size(s) of input partition list"); + cmd = _app.add_subcommand("sizeof", "Tell size(s) of input partition list") + ->footer("Use get-all or getvar-all as partition name for getting " + "sizes of all " + "partitions."); cmd->add_option("partition(s)", partitions, "Partition name(s).") ->required() ->delimiter(','); @@ -55,6 +58,13 @@ INIT(partitionSizeFunction) { } RUN(partitionSizeFunction) { + if (partitions.back() == "get-all" || partitions.back() == "getvar-all") { + if (!Variables->PartMap->copyPartitionsToVector(partitions)) + throw Error("Cannot get list of all partitions! See logs for more " + "information (%s)", + Helper::LoggingProperties::FILE.data()); + } + for (const auto &partition : partitions) { if (!Variables->PartMap->hasPartition(partition)) throw Error("Couldn't find partition: %s", partition.data()); diff --git a/srclib/libhelper/include/libhelper/lib.hpp b/srclib/libhelper/include/libhelper/lib.hpp index 859d75d..fbd145b 100644 --- a/srclib/libhelper/include/libhelper/lib.hpp +++ b/srclib/libhelper/include/libhelper/lib.hpp @@ -247,7 +247,7 @@ std::string getLibVersion(); #define MKVERSION(name) \ char vinfo[512]; \ sprintf(vinfo, \ - "%s 1.2.0 [XXXX-XX-XX XX.XX.XX]\nBuildType: Release\nCompiler: clang\n" \ + "%s 1.2.0\nBuildType: Release\nCompiler: clang\n" \ "BuildFlags: -Wall;-Werror;-Wno-deprecated-declarations;-Os", name); \ return std::string(vinfo) #else diff --git a/srclib/libpartition_map/include/libpartition_map/lib.hpp b/srclib/libpartition_map/include/libpartition_map/lib.hpp index 5dd3d4e..f43c43d 100644 --- a/srclib/libpartition_map/include/libpartition_map/lib.hpp +++ b/srclib/libpartition_map/include/libpartition_map/lib.hpp @@ -221,6 +221,21 @@ public: */ [[nodiscard]] bool isLogical(std::string_view name) const; + /** + * Copy partition list to vec, current vec contents are cleaned + */ + bool copyPartitionsToVector(std::vector &vec) const; + + /** + * Copy logical partition list to vec, current vec contents are cleaned + */ + bool copyLogicalPartitionsToVector(std::vector &vec) const; + + /** + * Copy physical partition list to vec, current vec contents are cleaned + */ + bool copyPhysicalPartitionsToVector(std::vector &vec) const; + /** * The created list and the current search index name are cleared. */ diff --git a/srclib/libpartition_map/src/PartitionMap.cpp b/srclib/libpartition_map/src/PartitionMap.cpp index 7905249..da389bd 100644 --- a/srclib/libpartition_map/src/PartitionMap.cpp +++ b/srclib/libpartition_map/src/PartitionMap.cpp @@ -218,6 +218,49 @@ bool basic_partition_map_builder::readDefaultDirectories() { return true; } +bool basic_partition_map_builder::copyPartitionsToVector(std::vector &vec) const { + if (_current_map.empty()) { + LOGN(MAP, ERROR) << "Current map is empty."; + return false; + } + vec.clear(); + for (const auto &[name, props] : _current_map) + vec.push_back(name); + return true; +} + +bool basic_partition_map_builder::copyLogicalPartitionsToVector(std::vector &vec) const { + if (_current_map.empty()) { + LOGN(MAP, ERROR) << "Current map is empty."; + return false; + } + std::vector vec2; + for (const auto &[name, props] : _current_map) + if (props.isLogical) vec2.push_back(name); + + if (vec2.empty()) { + LOGN(MAP, ERROR) << "Cannot find logical partitions in current map."; + return false; + } else vec = vec2; + return true; +} + +bool basic_partition_map_builder::copyPhysicalPartitionsToVector(std::vector &vec) const { + if (_current_map.empty()) { + LOGN(MAP, ERROR) << "Current map is empty."; + return false; + } + std::vector vec2; + for (const auto &[name, props] : _current_map) + if (!props.isLogical) vec2.push_back(name); + + if (vec2.empty()) { + LOGN(MAP, ERROR) << "Cannot find physical partitions in current map."; + return false; + } else vec = vec2; + return true; +} + bool basic_partition_map_builder::empty() const { _map_build_check(); return _current_map.empty();