当前位置: 代码迷 >> 综合 >> Dalvik vm make file config and source tree
  详细解决方案

Dalvik vm make file config and source tree

热度:41   发布时间:2023-12-08 11:47:57.0

Dalvik 虚拟机编译脚本 和 源代码树


本文简单的分析Dalvik虚拟机源码(dalvik/vm)的结构以及编译脚本(*.mk)

编译脚本

Dalvik源码目录结构并不复杂。其编译脚本也很简单。主要有以下几个文件组成:

dalvik/vm/Android.mk 

dalvik/vm/ReconfigureDvm.mk

dalvik/vm/Dvm.mk


和android系统里其他的模块类似,dalvik也是以Android.mk作为顶层编译配置文件或者入口。它的内容如下所示:

https://github.com/android/platform_dalvik/blob/master/vm/Android.mk


我们从头分析一下。首次按是注释说明:

#
# Android.mk for Dalvik VM.
#
# This makefile builds both for host and target, and so the very large
# swath of common definitions are factored out into a separate file to
# minimize duplication.
#
# If you enable or disable optional features here (or in Dvm.mk),
# rebuild the VM with:
#
#  make clean-libdvm clean-libdvm_assert clean-libdvm_sv clean-libdvm_interp
#  make -j4 libdvm
#

他告诉我们,该编译文件把dalvik编程成两部分,宿主机和目标机。对多数典型的配置下,宿主机就是我们的Linux编译服务器。而目标机就是我们的移动设备。 为了减少重复,宿主机和目标机都需要的编译配置被放到单独的文件里。单独的文件就是后面要讲道德(ReconfigureDvm.mk和Dvm.mk)。

同时,它也该出了在我们修改了dalvik源码后,怎么从头编译一个干净的实现出来。后面我们会动手实践。

LOCAL_PATH:= $(call my-dir)
和多数模块一样,接下来把dalvik源码路径赋值给LOCAL_PATH变量。以方便后面使用。这里LOCAL_PATH应该就是 dalvik/vm.

#
# Build for the target (device).
#ifeq ($(TARGET_CPU_SMP),true)target_smp_flag := -DANDROID_SMP=1
elsetarget_smp_flag := -DANDROID_SMP=0
endif
host_smp_flag := -DANDROID_SMP=1# Build the installed version (libdvm.so) first
include $(LOCAL_PATH)/ReconfigureDvm.mk# Overwrite default settings
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libdvm
LOCAL_CFLAGS += $(target_smp_flag)
include $(BUILD_SHARED_LIBRARY)
首先为目标机编译。首先是根据目标机是否支持SMP,设置变量target_smp_flag。后面我们会看到该变量被用来传给编译器选项。而宿主机上现在绝大多数都是支持SMP的,所以就直接复制是指为支持。

紧接着就调用脚本ReconfigureDvm.mk,从名字我们不难猜出改脚本是用来为dvm编译初始化编译环境的。后面我们会看到它的主要内容。

下面接着就是现实dvm在宿主机上最终会被编译的目标了。这是一个共享库。名字叫libdvm。我们可以在编译好的机器上找到他

out/target/xxx/libs/libdvm.so

# If WITH_JIT is configured,
  相关解决方案