ntel-gpu-tools/tests/Android.mk
Robert Beckett a896ef9c1f igt: tests/Android.mk: fix LOCAL_PATH usage
Fix usage of shared variable LOCAL_PATH in deferred variable expansion area.

In Makefile language, rule and dependency definitions use immediate
expansions of variables, so they get expanded as soon as the rule is
created (1st pass). Rule implementation (a.k.a recipe) use deferred
expansion (2nd pass).

Android effectively makes all Android.mk files a single makefile by
including them all in a big tree from the toplevel makefile. The rules
are all evaluated in the first pass and targets are generated. Then the
2nd pass happens and the required target's recipes are run. At this
point, LOCAL_PATH has been assigned the value from the last evaluated
Android.mk in the 1st phase that defined LOCAL_PATH (most Android.mk use
this variable). In my particular case, it was the bootloader's
Android.mk that was evaluated last and had defined LOCAL_PATH to it's
path. The errors are rather misleading due to it looking like a bug in
another module's Android.mk rather than this one :)

Basically, if you want to use a variable that any other Android.mk
defines, then you can only use it in an immediate expansion context,
not a deferred expansion context as it will likely be re-defined by
the time the 2nd pass happens.

This patch stores it in a unique variable that should not be being
used by other Android.mk files. An alternative fix would be to use $@
and $< as the files in question are target and dependency, but I never
like using those as they can easily break if dependencies are added
etc. I prefer variable to be explicitly named to make them obvious.

See gnu make manual for explanation of deferred vs immediate
expansion of variables :
http://www.gnu.org/software/make/manual/make.html#Reading-Makefiles

Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Robert Beckett <robert.beckett@intel.com>
2014-01-14 18:53:00 +00:00

111 lines
2.9 KiB
Makefile

include $(LOCAL_PATH)/tests/Makefile.sources
include $(LOCAL_PATH)/lib/Makefile.sources
LIBPCIACCESS_PATH := $(firstword $(wildcard \
$(TOP)/external/PRIVATE/libpciaccess \
$(TOP)/hardware/intel/libpciaccess \
$(TOP)/external/libpciaccess))
ifeq ($(LIBPCIACCESS_PATH),)
$(error "Unable to find libpciaccess!")
endif
LIBDRM_PATH := $(firstword $(wildcard \
$(TOP)/external/PRIVATE/drm \
$(TOP)/external/drm))
ifeq ($(LIBDRM_PATH),)
$(error "Unable to find libdrm!")
endif
skip_lib_list := \
igt_kms.c \
igt_kms.h
lib_list := $(filter-out $(skip_lib_list),$(libintel_tools_la_SOURCES))
LIB_SOURCES := $(addprefix lib/,$(lib_list))
GPU_TOOLS_PATH := $(LOCAL_PATH)
.PHONY: version.h.tmp
$(LOCAL_PATH)/version.h.tmp:
@touch $@
@if test -d .git; then \
if which git > /dev/null; then git log -n 1 --oneline | \
sed 's/^\([^ ]*\) .*/#define IGT_GIT_SHA1 "g\1"/' \
>> $@ ; \
fi \
else \
echo '#define IGT_GIT_SHA1 "NOT-GIT"' >> $@ ; \
fi
$(LOCAL_PATH)/version.h: $(LOCAL_PATH)/version.h.tmp
@echo "updating version.h"
@if ! cmp -s $(GPU_TOOLS_PATH)/version.h.tmp $(GPU_TOOLS_PATH)/version.h; then \
mv $(GPU_TOOLS_PATH)/version.h.tmp $(GPU_TOOLS_PATH)/version.h ; \
else \
rm $(GPU_TOOLS_PATH)/version.h.tmp ; \
fi
# FIXME: autogenerate this info #
$(LOCAL_PATH)/config.h:
@echo "updating config.h"
echo '#define PACKAGE_VERSION "1.5"' >> $@ ; \
echo '#define TARGET_CPU_PLATFORM "android-ia"' >> $@ ;
#================#
define add_test
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
tests/$1.c \
$(LIB_SOURCES)
LOCAL_GENERATED_SOURCES := \
$(LOCAL_PATH)/version.h \
$(LOCAL_PATH)/config.h
LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/lib \
$(LIBDRM_PATH)/include/drm \
$(LIBDRM_PATH)/intel \
$(LIBPCIACCESS_PATH)/include
LOCAL_CFLAGS += -DHAVE_STRUCT_SYSINFO_TOTALRAM
LOCAL_CFLAGS += -DANDROID -UNDEBUG -include "check-ndebug.h"
LOCAL_CFLAGS += -std=c99
# FIXME: drop once Bionic correctly annotates "noreturn" on pthread_exit
LOCAL_CFLAGS += -Wno-error=return-type
# Excessive complaining for established cases. Rely on the Linux version warnings.
LOCAL_CFLAGS += -Wno-sign-compare
LOCAL_MODULE := $1
LOCAL_MODULE_TAGS := optional
LOCAL_SHARED_LIBRARIES := libpciaccess \
libdrm \
libdrm_intel
include $(BUILD_EXECUTABLE)
endef
#================#
skip_tests_list := \
testdisplay \
kms_addfb \
kms_cursor_crc \
kms_flip \
kms_pipe_crc_basic \
kms_fbc_crc \
kms_render \
kms_setmode \
pm_pc8 \
gem_seqno_wrap \
gem_render_copy \
pm_lpsp
tests_list := $(filter-out $(skip_tests_list),$(TESTS_progs) $(TESTS_progs_M) $(HANG) $(TESTS_testsuite))
$(foreach item,$(tests_list),$(eval $(call add_test,$(item))))