libavb: Move all A/B functionality into separate libavb_ab/ directory.

This new libavb_ab "library" depends on libavb "library" insofar that
it's using the same abstractions (system dependencies and
operations). For easy integration the newly introduced AvbABOps struct
extends the AvbOps struct so users can build just a single struct and
use that for both.

Also emphasize in README that libavb_ab usage is optional and that
it's possible to integrate libavb with another A/B stack.

(The quotes in use for "library" above is because these are not really
libraries from a system-integration perspective. That is, 3rd party is
expected to integrate this source-code with their own build-system and
toolchain.)

Since we now have multiple libraries - at least from the point of view
of how it's used in unit tests - change Android.mk such that library
users need to use libavb/libavb.h and libavb_ab/libavb_ab.h instead of
just e.g. libavb.h.

Test: Unit tests pass
Test: Tested in UEFI-based bootloader in qemu.
Test: Tested boot_control.avb.so in same UEFI-based system.
Bug: None

Change-Id: I19ea8f6bd1e63b2617b0e9fa9fc3b2a68ac4a92e
diff --git a/Android.mk b/Android.mk
index 30f0919..952572e 100644
--- a/Android.mk
+++ b/Android.mk
@@ -50,16 +50,15 @@
 LOCAL_MODULE := avbtool
 include $(BUILD_PREBUILT)
 
-# Build for the target (for e.g. fs_mgr usage).
+# Build libavb for the target (for e.g. fs_mgr usage).
 include $(CLEAR_VARS)
 LOCAL_MODULE := libavb
 LOCAL_MODULE_HOST_OS := linux
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/libavb
+LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
 LOCAL_CLANG := true
 LOCAL_CFLAGS := $(avb_common_cflags) -DAVB_ENABLE_DEBUG -DAVB_COMPILATION
 LOCAL_LDFLAGS := $(avb_common_ldflags)
 LOCAL_SRC_FILES := \
-    libavb/avb_ab_flow.c \
     libavb/avb_chain_partition_descriptor.c \
     libavb/avb_crc32.c \
     libavb/avb_crypto.c \
@@ -78,17 +77,16 @@
     libavb/avb_vbmeta_image.c
 include $(BUILD_STATIC_LIBRARY)
 
-# Build for the host (for unit tests).
+# Build libavb for the host (for unit tests).
 include $(CLEAR_VARS)
 LOCAL_MODULE := libavb_host
 LOCAL_MODULE_HOST_OS := linux
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/libavb
+LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
 LOCAL_CLANG := true
 LOCAL_CFLAGS := $(avb_common_cflags) -fno-stack-protector -DAVB_ENABLE_DEBUG -DAVB_COMPILATION
 LOCAL_LDFLAGS := $(avb_common_ldflags)
 LOCAL_SRC_FILES := \
-    libavb/avb_ab_flow.c \
     libavb/avb_chain_partition_descriptor.c \
     libavb/avb_crc32.c \
     libavb/avb_crypto.c \
@@ -106,9 +104,23 @@
     libavb/avb_vbmeta_image.c
 include $(BUILD_HOST_STATIC_LIBRARY)
 
+# Build libavb_ab for the host (for unit tests).
+include $(CLEAR_VARS)
+LOCAL_MODULE := libavb_ab_host
+LOCAL_REQUIRED_MODULES := libavb_host
+LOCAL_MODULE_HOST_OS := linux
+LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
+LOCAL_MODULE_CLASS := STATIC_LIBRARIES
+LOCAL_CLANG := true
+LOCAL_CFLAGS := $(avb_common_cflags) -fno-stack-protector -DAVB_ENABLE_DEBUG -DAVB_COMPILATION
+LOCAL_LDFLAGS := $(avb_common_ldflags)
+LOCAL_SRC_FILES := \
+    libavb_ab/avb_ab_flow.c
+include $(BUILD_HOST_STATIC_LIBRARY)
+
 include $(CLEAR_VARS)
 LOCAL_MODULE := libavb_host_sysdeps
-LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/libavb
+LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
 LOCAL_MODULE_HOST_OS := linux
 LOCAL_MODULE_CLASS := STATIC_LIBRARIES
 LOCAL_CLANG := true
@@ -130,6 +142,7 @@
 LOCAL_STATIC_LIBRARIES := \
     libavb_host \
     libavb_host_sysdeps \
+    libavb_ab_host \
     libgmock_host \
     libgtest_host
 LOCAL_SHARED_LIBRARIES := \
@@ -151,12 +164,13 @@
 LOCAL_SRC_FILES := \
     boot_control/boot_control_avb.c \
     boot_control/avb_ops_device.c \
+    libavb_ab/avb_ab_flow.c \
     libavb/avb_sysdeps_posix.c
 LOCAL_CLANG := true
 LOCAL_CFLAGS := $(avb_common_cflags) -DAVB_COMPILATION
 LOCAL_LDFLAGS := $(avb_common_ldflags)
 LOCAL_SHARED_LIBRARIES := libcutils
-LOCAL_STATIC_LIBRARIES := libavb libfs_mgr
+LOCAL_STATIC_LIBRARIES := libfs_mgr libavb
 LOCAL_POST_INSTALL_CMD := \
 	$(hide) mkdir -p $(TARGET_OUT_SHARED_LIBRARIES)/hw && \
 	ln -sf bootctrl.avb.so $(TARGET_OUT_SHARED_LIBRARIES)/hw/bootctrl.default.so
@@ -165,5 +179,5 @@
 include $(CLEAR_VARS)
 LOCAL_SRC_FILES := libavb_host_symbols_test
 LOCAL_MODULE_TAGS := debug
-LOCAL_ADDITIONAL_DEPENDENCIES := libavb_host
+LOCAL_ADDITIONAL_DEPENDENCIES := libavb_ab_host
 include $(BUILD_HOST_PREBUILT)