diff options
-rw-r--r-- | Android.bp | 58 | ||||
l--------- | aosp/include/components/zucchini | 1 | ||||
-rw-r--r-- | aosp/include/third_party/abseil-cpp/absl/types/optional.h (renamed from aosp/include/absl/types/optional.h) | 0 | ||||
-rwxr-xr-x | aosp/preprocess.py | 31 | ||||
-rw-r--r-- | buildflags.h (renamed from aosp/include/buildflags.h) | 0 | ||||
-rw-r--r-- | mapped_file.cc | 2 | ||||
-rw-r--r-- | zucchini_main_aosp.cc | 69 |
7 files changed, 105 insertions, 56 deletions
@@ -41,6 +41,7 @@ filegroup { "image_index.cc", "imposed_ensemble_matcher.cc", "io_utils.cc", + "mapped_file.cc", "patch_reader.cc", "patch_writer.cc", "reference_bytes_mixer.cc", @@ -58,6 +59,16 @@ filegroup { } filegroup { + name: "zucchini_srcs", + srcs: [ + "main_utils.cc", + "zucchini_commands.cc", + "zucchini_integration.cc", + "zucchini_main_aosp.cc", + ], +} + +filegroup { name: "libzucchini_headers", srcs: [ "abs32_utils.h", @@ -115,26 +126,6 @@ filegroup { ], } -// The aosp versions of sources are preprocesseed with include -// re-written in an AOSP compatible way. Some headers, such as -// absl, are simply redirected to STL equivalent. -gensrcs { - name: "libzucchini_aosp_srcs", - cmd: "$(location aosp/preprocess.py) $(in) $(out)", - tool_files: ["aosp/preprocess.py"], - srcs: [":libzucchini_srcs"], - output_extension: "cc", -} - -gensrcs { - name: "libzucchini_aosp_headers", - cmd: "$(location aosp/preprocess.py) $(in) $(out)", - tool_files: ["aosp/preprocess.py"], - srcs: [":libzucchini_headers"], - export_include_dirs: ["."], - output_extension: "h", -} - cc_library { name: "libzucchini", @@ -143,11 +134,9 @@ cc_library { // instead of loacl ones. As the generated headers contain // incorrect include paths include_build_directory: false, - srcs: [":libzucchini_aosp_srcs"], - generated_headers: ["libzucchini_aosp_headers"], + srcs: [":libzucchini_srcs"], local_include_dirs: ["aosp/include"], - export_generated_headers: ["libzucchini_aosp_headers"], - export_include_dirs: ["aosp/include"], + export_include_dirs: ["aosp/include/components"], static_libs: [ "libchrome", "libcutils", @@ -161,3 +150,24 @@ cc_library { ], visibility: ["//system/update_engine:__subpackages__"], } + +cc_binary { + name: "zucchini", + host_supported: true, + device_supported: true, + srcs: [":zucchini_srcs"], + include_build_directory: false, + local_include_dirs: ["aosp/include"], + static_libs: [ + "libchrome", + "libcutils", + "libzucchini", + ], + shared_libs: [ + "liblog", + "libbase", + ], + cflags: [ + "-Wno-unused-parameter", + ], +} diff --git a/aosp/include/components/zucchini b/aosp/include/components/zucchini new file mode 120000 index 0000000..1b20c9f --- /dev/null +++ b/aosp/include/components/zucchini @@ -0,0 +1 @@ +../../../
\ No newline at end of file diff --git a/aosp/include/absl/types/optional.h b/aosp/include/third_party/abseil-cpp/absl/types/optional.h index 3321c72..3321c72 100644 --- a/aosp/include/absl/types/optional.h +++ b/aosp/include/third_party/abseil-cpp/absl/types/optional.h diff --git a/aosp/preprocess.py b/aosp/preprocess.py deleted file mode 100755 index 7a31ffc..0000000 --- a/aosp/preprocess.py +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env python3 - -# ChromeOs version of zucchini expects to find its headers -# in a specifc path. In android the include paths are slightly -# different. Since we can't change upstream source code, we -# use this script to preprocess all files(.cc and ,h) and -# re-write all include paths - - -def main(argv): - if len(argv) != 3: - print("Usage:", argv[0], "<input path> <output path>") - return 1 - input_path = argv[1] - output_path = argv[2] - with open(input_path, "r") as infp, open(output_path, "w") as outfp: - for line in infp.readlines(): - line = line.replace('#include "components/zucchini/', - '#include "') - line = line.replace('#include <components/zucchini/', - '#include <') - line = line.replace('#include "third_party/abseil-cpp/', - '#include "') - line = line.replace('#include <third_party/abseil-cpp/', - '#include <') - outfp.write(line) - - -if __name__ == '__main__': - import sys - sys.exit(main(sys.argv)) diff --git a/aosp/include/buildflags.h b/buildflags.h index 2b63e59..2b63e59 100644 --- a/aosp/include/buildflags.h +++ b/buildflags.h diff --git a/mapped_file.cc b/mapped_file.cc index a742414..2ea973c 100644 --- a/mapped_file.cc +++ b/mapped_file.cc @@ -49,7 +49,7 @@ MappedFileWriter::MappedFileWriter(const base::FilePath& file_path, MappedFileWriter::~MappedFileWriter() { if (!HasError() && delete_behavior_ == kManualDeleteOnClose && - !file_path_.empty() && !base::DeleteFile(file_path_)) { + !file_path_.empty() && !base::DeleteFile(file_path_, false)) { error_ = "Failed to delete file."; } } diff --git a/zucchini_main_aosp.cc b/zucchini_main_aosp.cc new file mode 100644 index 0000000..4e410a5 --- /dev/null +++ b/zucchini_main_aosp.cc @@ -0,0 +1,69 @@ +// +// Copyright (C) 2021 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +// This file is exactly the same as zucchini_main.cc, except with a few fixes +// that make it compatible with AOSP version of liblog + +#include <iostream> + +#include "base/command_line.h" +#include "base/logging.h" +#include "base/process/memory.h" +#include "build/build_config.h" +#include "main_utils.h" + +#if defined(OS_WIN) +#include "base/win/process_startup_helper.h" +#endif // defined(OS_WIN) + +namespace { + +void InitLogging() { + logging::LoggingSettings settings; + settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; + // settings.log_file_path = nullptr; + settings.lock_log = logging::DONT_LOCK_LOG_FILE; + settings.delete_old = logging::APPEND_TO_OLD_LOG_FILE; + bool logging_res = logging::InitLogging(settings); + CHECK(logging_res); +} + +void InitErrorHandling(const base::CommandLine &command_line) { + base::EnableTerminationOnHeapCorruption(); + base::EnableTerminationOnOutOfMemory(); +#if defined(OS_WIN) + base::win::RegisterInvalidParamHandler(); + base::win::SetupCRT(command_line); +#endif // defined(OS_WIN) +} + +} // namespace + +int main(int argc, const char *argv[]) { + // Initialize infrastructure from base. + base::CommandLine::Init(argc, argv); + const base::CommandLine &command_line = + *base::CommandLine::ForCurrentProcess(); + InitLogging(); + InitErrorHandling(command_line); + zucchini::status::Code status = + RunZucchiniCommand(command_line, std::cout, std::cerr); + if (!(status == zucchini::status::kStatusSuccess || + status == zucchini::status::kStatusInvalidParam)) { + std::cerr << "Failed with code " << static_cast<int>(status) << std::endl; + } + return static_cast<int>(status); +} |