From 4d1a3912d0275dca3783159de2a19dc7b916e82c Mon Sep 17 00:00:00 2001
From: cfig <yuyezhong@gmail.com>
Date: Fri, 8 Nov 2019 10:36:25 +0800
Subject: [PATCH] support makefile for c/cpp files

Fix: #33
usage:
    make
    ./gradlew unpack
    ./gradlew pack
---
 Makefile                              | 14 +++++++
 aosp/libavb/Makefile                  | 26 +++++++++++++
 aosp/libsparse/Makefile               | 27 ++++++++++++++
 aosp/libsparse/base/Makefile          | 20 ++++++++++
 aosp/libsparse/sparse/Makefile        | 20 ++++++++++
 aosp/mkbootfs/Makefile                | 19 ++++++++++
 external/avb_print_property_desc.diff | 40 ++++++++++++++++++++
 external/remove_projects.diff         | 54 +++++++++++++++++++++++++++
 8 files changed, 220 insertions(+)
 create mode 100644 Makefile
 create mode 100644 aosp/libavb/Makefile
 create mode 100644 aosp/libsparse/Makefile
 create mode 100644 aosp/libsparse/base/Makefile
 create mode 100644 aosp/libsparse/sparse/Makefile
 create mode 100644 aosp/mkbootfs/Makefile
 create mode 100644 external/avb_print_property_desc.diff
 create mode 100644 external/remove_projects.diff

diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..d933fb1
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,14 @@
+all:
+	-git apply external/remove_projects.diff
+	make -C aosp/mkbootfs
+	make -C aosp/libsparse/base/
+	make -C aosp/libsparse/sparse/
+	make -C aosp/libsparse
+	make -C aosp/libavb
+clean:
+	-git apply -R external/remove_projects.diff
+	make clean -C aosp/mkbootfs
+	make clean -C aosp/libsparse/base/
+	make clean -C aosp/libsparse/sparse/
+	make clean -C aosp/libsparse
+	make clean -C aosp/libavb
diff --git a/aosp/libavb/Makefile b/aosp/libavb/Makefile
new file mode 100644
index 0000000..0a75860
--- /dev/null
+++ b/aosp/libavb/Makefile
@@ -0,0 +1,26 @@
+.PHONY: clean nativeLibrary
+.DEFAULT_GOAL: nativeLibrary
+src_dir := src/avb/c
+header_dir := src/avb/headers
+build_dir := build
+CFLAGS := \
+    -I$(header_dir) \
+    -D_FILE_OFFSET_BITS=64 \
+    -D_POSIX_C_SOURCE=199309L \
+    -DAVB_ENABLE_DEBUG \
+    -DAVB_COMPILATION \
+    -Wall -g
+nativeLibrary: build/libs/avb/shared/libavb.so
+CPP_FILES := $(wildcard src/avb/c/*.c)
+OBJ_FILES := $(patsubst src/avb/c/%,build/%,$(CPP_FILES:.c=.o))
+
+clean:
+	rm -fr $(build_dir)
+
+build/%.o: $(src_dir)/%.c
+	mkdir -p $(dir $@)
+	$(CC) -fPIC $(CFLAGS) -c -o $@ $<
+
+build/libs/avb/shared/libavb.so: $(OBJ_FILES)
+	mkdir -p $(dir $@)
+	$(CC) -shared -fPIC $^ -o $@
diff --git a/aosp/libsparse/Makefile b/aosp/libsparse/Makefile
new file mode 100644
index 0000000..7afb864
--- /dev/null
+++ b/aosp/libsparse/Makefile
@@ -0,0 +1,27 @@
+.PHONY: nativeExecutable clean
+osSuffix := linux
+nativeExecutable: \
+	build/append2simg \
+    simg2img/build/install/main/release/$(osSuffix)/simg2img \
+    build/simg2simg \
+    build/img2simg
+CFLAGS := -Isparse/src/main/public
+LDFLAGS :=  \
+    -Lsparse/build/lib/main/release/linux/ -lsparse \
+    -Lbase/build/lib/main/release/linux/ -lbase \
+    -lz
+build/append2simg: append2simg/src/main/cpp/append2simg.cpp
+	mkdir -p $(dir $@)
+	$(CXX) $^ $(CFLAGS) $(LDFLAGS) -o $@
+simg2img/build/install/main/release/$(osSuffix)/simg2img: simg2img/src/main/cpp/simg2img.cpp
+	mkdir -p $(dir $@)
+	$(CXX) $^ $(CFLAGS) $(LDFLAGS) -o $@
+build/img2simg: img2simg/src/main/cpp/img2simg.cpp
+	mkdir -p $(dir $@)
+	$(CXX) $^ $(CFLAGS) $(LDFLAGS) -o $@
+build/simg2simg: simg2simg/src/main/cpp/simg2simg.cpp
+	mkdir -p $(dir $@)
+	$(CXX) $^ $(CFLAGS) $(LDFLAGS) -o $@
+clean:
+	rm -fr build
+	rm -fr simg2img/build/
diff --git a/aosp/libsparse/base/Makefile b/aosp/libsparse/base/Makefile
new file mode 100644
index 0000000..efd3c20
--- /dev/null
+++ b/aosp/libsparse/base/Makefile
@@ -0,0 +1,20 @@
+.PHONY: clean nativeLibrary
+.DEFAULT_GOAL: nativeLibrary
+src_dir := src/main/cpp
+header_dir := src/main/public
+build_dir := build
+CFLAGS :=
+nativeLibrary: build/lib/main/release/linux/libbase.a
+CPP_FILES := $(wildcard $(src_dir)/*.cpp)
+OBJ_FILES := $(patsubst $(src_dir)/%,build/%,$(CPP_FILES:.cpp=.o))
+
+clean:
+	rm -fr $(build_dir)
+
+build/%.o: $(src_dir)/%.cpp
+	mkdir -p $(dir $@)
+	$(CC) $(CFLAGS) -c -o $@ $<
+
+build/lib/main/release/linux/libbase.a: $(OBJ_FILES)
+	mkdir -p $(dir $@)
+	ar rcs $@ $^
diff --git a/aosp/libsparse/sparse/Makefile b/aosp/libsparse/sparse/Makefile
new file mode 100644
index 0000000..4246422
--- /dev/null
+++ b/aosp/libsparse/sparse/Makefile
@@ -0,0 +1,20 @@
+.PHONY: clean nativeLibrary
+.DEFAULT_GOAL: nativeLibrary
+src_dir := src/main/cpp
+header_dir := src/main/public
+build_dir := build
+CFLAGS := -I$(header_dir) -I../base/src/main/public/
+nativeLibrary: build/lib/main/release/linux/libsparse.a
+CPP_FILES := $(wildcard $(src_dir)/*.cpp)
+OBJ_FILES := $(patsubst $(src_dir)/%,build/%,$(CPP_FILES:.cpp=.o))
+
+clean:
+	rm -fr $(build_dir)
+
+build/%.o: $(src_dir)/%.cpp
+	mkdir -p $(dir $@)
+	$(CC) $(CFLAGS) -c -o $@ $<
+
+build/lib/main/release/linux/libsparse.a: $(OBJ_FILES)
+	mkdir -p $(dir $@)
+	ar rcs $@ $^
diff --git a/aosp/mkbootfs/Makefile b/aosp/mkbootfs/Makefile
new file mode 100644
index 0000000..2e7a9b8
--- /dev/null
+++ b/aosp/mkbootfs/Makefile
@@ -0,0 +1,19 @@
+src_dir := src/mkbootfs/cpp
+header_dir := src/mkbootfs/headers
+build_dir := build
+CXX_FLAGS := -I$(header_dir) -std=gnu++11 -Wno-write-strings -D__ANDROID_VNDK__
+
+.PHONY: clean nativeExecutable
+nativeExecutable: $(build_dir)/exe/mkbootfs/mkbootfs
+$(build_dir)/exe/mkbootfs/mkbootfs: $(build_dir)/fs_config.o $(build_dir)/mkbootfs.o |$(build_dir)/exe/mkbootfs
+	$(CXX) $^ -o $@
+$(build_dir)/fs_config.o: $(src_dir)/fs_config.cpp |$(build_dir)
+	$(CXX) -c $(CXX_FLAGS) $< -o $@
+$(build_dir)/mkbootfs.o: $(src_dir)/mkbootfs.c |$(build_dir)
+	$(CXX) -c $(CXX_FLAGS) $< -o $@
+$(build_dir):
+	mkdir $@
+$(build_dir)/exe/mkbootfs: |$(build_dir)
+	mkdir -p $@
+clean:
+	rm -rf $(build_dir)
diff --git a/external/avb_print_property_desc.diff b/external/avb_print_property_desc.diff
new file mode 100644
index 0000000..5a4d37b
--- /dev/null
+++ b/external/avb_print_property_desc.diff
@@ -0,0 +1,40 @@
+diff --git a/aosp/libavb/src/avb/c/avb_slot_verify.c b/aosp/libavb/src/avb/c/avb_slot_verify.c
+index 0d75210..4c44755 100644
+--- a/aosp/libavb/src/avb/c/avb_slot_verify.c
++++ b/aosp/libavb/src/avb/c/avb_slot_verify.c
+@@ -29,10 +29,12 @@
+ #include "avb_hash_descriptor.h"
+ #include "avb_hashtree_descriptor.h"
+ #include "avb_kernel_cmdline_descriptor.h"
++#include "avb_property_descriptor.h"
+ #include "avb_sha.h"
+ #include "avb_util.h"
+ #include "avb_vbmeta_image.h"
+ #include "avb_version.h"
++#include <stdio.h>
+ 
+ /* Maximum number of partitions that can be loaded with avb_slot_verify(). */
+ #define MAX_NUMBER_OF_LOADED_PARTITIONS 32
+@@ -1199,8 +1201,21 @@ static AvbSlotVerifyResult load_and_verify_vbmeta(
+         }
+       } break;
+ 
+-      case AVB_DESCRIPTOR_TAG_PROPERTY:
++      case AVB_DESCRIPTOR_TAG_PROPERTY: {
+         /* Do nothing. */
++        AvbPropertyDescriptor property_desc;
++        const uint8_t* prop_key = NULL;
++        const char* prop_value = NULL;
++        if (!avb_property_descriptor_validate_and_byteswap((AvbPropertyDescriptor *)descriptors[n], &property_desc)) {
++            avb_errorv(full_partition_name, ": Property descriptor is invalid.\n", NULL);
++            ret = AVB_SLOT_VERIFY_RESULT_ERROR_INVALID_METADATA;
++            goto out;
++        }
++        prop_key = (const uint8_t*)descriptors[n] + sizeof(AvbPropertyDescriptor);
++        prop_value = (const char*)descriptors[n] + sizeof(AvbPropertyDescriptor) + property_desc.key_num_bytes + 1;
++        fprintf(stderr, "PROPERTY DESCRIPTOR: k=[%s], v=[%s]\n", prop_key, prop_value);
++        /* Do nothing. */
++      }
+         break;
+     }
+   }
diff --git a/external/remove_projects.diff b/external/remove_projects.diff
new file mode 100644
index 0000000..f8da97c
--- /dev/null
+++ b/external/remove_projects.diff
@@ -0,0 +1,54 @@
+diff --git a/build.gradle.kts b/build.gradle.kts
+index fae7552..a871a89 100644
+--- a/build.gradle.kts
++++ b/build.gradle.kts
+@@ -59,15 +59,15 @@ tasks {
+     flashTask.dependsOn("bbootimg:jar")
+ 
+     //sparse image dependencies
+-    packTask.dependsOn("aosp:mkbootfs:mkbootfsExecutable")
+-    unpackTask.dependsOn("aosp:mkbootfs:mkbootfsExecutable")
+-    if (System.getProperty("os.name").contains("Mac")) {
+-        unpackTask.dependsOn("aosp:libsparse:simg2img:installReleaseMacos")
+-        packTask.dependsOn("aosp:libsparse:img2simg:installReleaseMacos")
+-    } else {
+-        unpackTask.dependsOn("aosp:libsparse:simg2img:installReleaseLinux")
+-        packTask.dependsOn("aosp:libsparse:img2simg:installReleaseLinux")
+-    }
++    //packTask.dependsOn("aosp:mkbootfs:mkbootfsExecutable")
++    //unpackTask.dependsOn("aosp:mkbootfs:mkbootfsExecutable")
++    //if (System.getProperty("os.name").contains("Mac")) {
++    //    unpackTask.dependsOn("aosp:libsparse:simg2img:installReleaseMacos")
++    //    packTask.dependsOn("aosp:libsparse:img2simg:installReleaseMacos")
++    //} else {
++    //    unpackTask.dependsOn("aosp:libsparse:simg2img:installReleaseLinux")
++    //    packTask.dependsOn("aosp:libsparse:img2simg:installReleaseLinux")
++    //}
+ }
+ 
+ fun parseGradleVersion(version: String): Int {
+diff --git a/settings.gradle.kts b/settings.gradle.kts
+index 1485b37..fd953dc 100644
+--- a/settings.gradle.kts
++++ b/settings.gradle.kts
+@@ -1,11 +1,11 @@
+ include("bbootimg")
+ include("aosp:boot_signer")
+-include("aosp:mkbootfs")
+-include("aosp:libsparse:base")
+-include("aosp:libsparse:sparse")
+-include("aosp:libsparse:img2simg")
+-include("aosp:libsparse:simg2img")
+-include("aosp:libsparse:simg2simg")
+-include("aosp:libsparse:append2simg")
+-include("aosp:libavb")
+-include("avbImpl")
++//include("aosp:mkbootfs")
++//include("aosp:libsparse:base")
++//include("aosp:libsparse:sparse")
++//include("aosp:libsparse:img2simg")
++//include("aosp:libsparse:simg2img")
++//include("aosp:libsparse:simg2simg")
++//include("aosp:libsparse:append2simg")
++//include("aosp:libavb")
++//include("avbImpl")