From 639c336dc15c49daa27c118d10cef586ffa2633a Mon Sep 17 00:00:00 2001
From: Colin Cross
By default, on the target these are built into /system/bin, and on the
host, they're built into LOCAL_MODULE_PATH
. See
+LOCAL_MODULE_PATH
or LOCAL_MODULE_RELATIVE_PATH
. See
Putting targets elsewhere
for more.
If you have modules that normally go somewhere, and you need to have them -build somewhere else, read this. One use of this is putting files on -the root filesystem instead of where they normally go in /system. Add these -lines to your Android.mk:
+build somewhere else, read this. +If you have modules that need to go in a subdirectory of their normal +location, for example HAL modules that need to go in /system/lib/hw or +/vendor/lib/hw, set LOCAL_MODULE_RELATIVE_PATH in your Android.mk, for +example:
++LOCAL_MODULE_RELATIVE_PATH := hw ++
If you have modules that need to go in an entirely different location, for +example the root filesystem instead of in /system, add these lines to your +Android.mk:
LOCAL_MODULE_PATH := $(TARGET_ROOT_OUT_SBIN) LOCAL_UNSTRIPPED_PATH := $(TARGET_ROOT_OUT_SBIN_UNSTRIPPED)-
For executables and libraries, you need to also specify a
-LOCAL_UNSTRIPPED_PATH
location, because on target builds, we keep
-the unstripped executables so GDB can find the symbols.
+
For executables and libraries, you need to specify a
+LOCAL_UNSTRIPPED_PATH
location if you specified a
+LOCAL_MODULE_PATH
, because on target builds, we keep
+the unstripped executables so GDB can find the symbols.
+LOCAL_UNSTRIPPED_PATH
is not necessary if you only specified
+LOCAL_MODULE_RELATIVE_PATH
.
Look in config/envsetup.make
for all of the variables defining
places to build things.
FYI: If you're installing an executable to /sbin, you probably also want to @@ -818,6 +829,13 @@ so the unstripped binary has somewhere to go. An error will occur if you forget to.
See Putting modules elsewhere for more.
+Instructs the build system to put the module in a subdirectory under the
+directory that is normal for its type. If you set this you do not need to
+set LOCAL_UNSTRIPPED_PATH
, the unstripped binaries will also use
+the relative path.
See Putting modules elsewhere for more.
+Instructs the build system to put the unstripped version of the module
somewhere other than what's normal for its type. Usually, you override this
diff --git a/core/clear_vars.mk b/core/clear_vars.mk
index 56e17b0a3b..8863fe6b88 100644
--- a/core/clear_vars.mk
+++ b/core/clear_vars.mk
@@ -4,6 +4,7 @@
LOCAL_MODULE:=
LOCAL_MODULE_PATH:=
+LOCAL_MODULE_RELATIVE_PATH :=
LOCAL_MODULE_STEM:=
LOCAL_DONT_CHECK_MODULE:=
LOCAL_CHECKED_MODULE:=
From d0378b3f2dbb5a5ff0cf0517354606f3f808d790 Mon Sep 17 00:00:00 2001
From: Colin Cross $@
is the make built-in variable for
need to change.
You need to put this after you have declared LOCAL_PATH
and
-LOCAL_MODULE
, because the $(local-intermediates-dir)
-and $(local-host-intermediates-dir)
macros use these variables
+LOCAL_MODULE
, because the $(local-generated-sources-dir)
+and $(local-host-generated-sources-dir)
macros use these variables
to determine where to put the files.
-intermediates:= $(local-intermediates-dir) +intermediates:= $(local-generated-sources-dir) GEN := $(intermediates)/chartables.c $(GEN): PRIVATE_CUSTOM_TOOL = $(HOST_OUT_EXECUTABLES)/dftables $@ $(GEN): $(HOST_OUT_EXECUTABLES)/dftables @@ -433,7 +433,7 @@ a file. Pretend that it does something useful. Note how we use a target-specific variable called PRIVATE_INPUT_FILE to store the name of the input file.-intermediates:= $(local-intermediates-dir) +intermediates:= $(local-generated-sources-dir) GEN := $(intermediates)/file.c $(GEN): PRIVATE_INPUT_FILE := $(LOCAL_PATH)/input.file $(GEN): PRIVATE_CUSTOM_TOOL = cat $(PRIVATE_INPUT_FILE) > $@ @@ -447,7 +447,7 @@ LOCAL_GENERATED_SOURCES += $(GEN) name, and use the same tool, you can combine them. (here the *.lut.h files are the generated ones, and the *.cpp files are the input files)-intermediates:= $(local-intermediates-dir) +intermediates:= $(local-generated-sources-dir) GEN := $(addprefix $(intermediates)/kjs/, \ array_object.lut.h \ bool_object.lut.h \ diff --git a/core/definitions.mk b/core/definitions.mk index eb462a37da..7c29e307eb 100644 --- a/core/definitions.mk +++ b/core/definitions.mk @@ -461,6 +461,51 @@ $(strip \ ) endef +########################################################### +## The generated sources directory. Placing generated +## source files directly in the intermediates directory +## causes problems for multiarch builds, where there are +## two intermediates directories for a single target. Put +## them in a separate directory, and they will be copied to +## each intermediates directory automatically. +########################################################### + +# $(1): target class, like "APPS" +# $(2): target name, like "NotePad" +# $(3): if non-empty, this is a HOST target. +# $(4): if non-empty, force the generated sources to be COMMON +define generated-sources-dir-for +$(strip \ + $(eval _idfClass := $(strip $(1))) \ + $(if $(_idfClass),, \ + $(error $(LOCAL_PATH): Class not defined in call to generated-sources-dir-for)) \ + $(eval _idfName := $(strip $(2))) \ + $(if $(_idfName),, \ + $(error $(LOCAL_PATH): Name not defined in call to generated-sources-dir-for)) \ + $(eval _idfPrefix := $(if $(strip $(3)),HOST,TARGET)) \ + $(if $(filter $(_idfPrefix)-$(_idfClass),$(COMMON_MODULE_CLASSES))$(4), \ + $(eval _idfIntBase := $($(_idfPrefix)_OUT_GEN_COMMON)) \ + , \ + $(eval _idfIntBase := $($(_idfPrefix)_OUT_GEN)) \ + ) \ + $(_idfIntBase)/$(_idfClass)/$(_idfName)_intermediates \ +) +endef + +# Uses LOCAL_MODULE_CLASS, LOCAL_MODULE, and LOCAL_IS_HOST_MODULE +# to determine the generated sources directory. +# +# $(1): if non-empty, force the intermediates to be COMMON +define local-generated-sources-dir +$(strip \ + $(if $(strip $(LOCAL_MODULE_CLASS)),, \ + $(error $(LOCAL_PATH): LOCAL_MODULE_CLASS not defined before call to local-generated-sources-dir)) \ + $(if $(strip $(LOCAL_MODULE)),, \ + $(error $(LOCAL_PATH): LOCAL_MODULE not defined before call to local-generated-sources-dir)) \ + $(call generated-sources-dir-for,$(LOCAL_MODULE_CLASS),$(LOCAL_MODULE),$(LOCAL_IS_HOST_MODULE),$(1)) \ +) +endef + ########################################################### ## Convert "path/to/libXXX.so" to "-lXXX". ## Any "path/to/libXXX.a" elements pass through unchanged. diff --git a/core/envsetup.mk b/core/envsetup.mk index a348eb7dd6..4cb389bf4e 100644 --- a/core/envsetup.mk +++ b/core/envsetup.mk @@ -208,11 +208,17 @@ HOST_OUT_INTERMEDIATE_LIBRARIES := $(HOST_OUT_INTERMEDIATES)/lib HOST_OUT_NOTICE_FILES := $(HOST_OUT_INTERMEDIATES)/NOTICE_FILES HOST_OUT_COMMON_INTERMEDIATES := $(HOST_COMMON_OUT_ROOT)/obj +HOST_OUT_GEN := $(HOST_OUT)/gen +HOST_OUT_COMMON_GEN := $(HOST_COMMON_OUT_ROOT)/gen + TARGET_OUT_INTERMEDIATES := $(PRODUCT_OUT)/obj TARGET_OUT_HEADERS := $(TARGET_OUT_INTERMEDIATES)/include TARGET_OUT_INTERMEDIATE_LIBRARIES := $(TARGET_OUT_INTERMEDIATES)/lib TARGET_OUT_COMMON_INTERMEDIATES := $(TARGET_COMMON_OUT_ROOT)/obj +TARGET_OUT_GEN := $(PRODUCT_OUT)/gen +TARGET_OUT_COMMON_GEN := $(TARGET_COMMON_OUT_ROOT)/gen + TARGET_OUT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_SYSTEM) TARGET_OUT_EXECUTABLES := $(TARGET_OUT)/bin TARGET_OUT_OPTIONAL_EXECUTABLES := $(TARGET_OUT)/xbin