1 # Copyright (C) 2011 The Android Open Source Project 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 15 LOCAL_PATH:= $(call my-dir) 16 17 ifeq ($(TARGET_ARCH),arm) 18 arch := arm 19 else ifeq ($(TARGET_ARCH),x86) 20 arch := x86 21 endif 22 ifdef arch 23 24 common_cflags := \ 25 -Wall -Wno-deprecated -fno-exceptions -fno-stack-protector \ 26 -DTS_VALGRIND=1 \ 27 -DTS_VERSION=\"exported\" \ 28 -DVGA_$(arch)=1 \ 29 -DVGO_linux=1 \ 30 -DVGP_$(arch)_linux=1 \ 31 -DVG_PLATFORM=\"$(arch)-linux\" \ 32 -D_STLP_NO_IOSTREAMS=1 33 34 common_includes := \ 35 external/valgrind/main \ 36 external/valgrind/main/include \ 37 external/valgrind/main/VEX/pub \ 38 external/valgrind/dynamic_annotations 39 40 ifeq ($(TARGET_ARCH),arm) 41 tool_ldflags := -static -Wl,--build-id=none,-Ttext=0x38000000 -nodefaultlibs -nostartfiles -u _start -e_start 42 else 43 tool_ldflags := -static -Wl,-Ttext=0x38000000 -nodefaultlibs -nostartfiles -u _start -e_start 44 endif 45 46 preload_ldflags := -nodefaultlibs -Wl,-z,interpose,-z,initfirst 47 # Remove this when the all toolchains are GCC 4.4 48 ifeq ($(TARGET_ARCH),arm) 49 preload_ldflags += -Wl,--icf=none 50 endif 51 52 # TODO(eugenis): Add ts_event_names.h generation step 53 54 # Build tsan-$(arch)-linux 55 include $(CLEAR_VARS) 56 57 LOCAL_MODULE := tsan-$(arch)-linux 58 LOCAL_MODULE_TAGS := optional 59 LOCAL_MODULE_CLASS := SHARED_LIBRARIES 60 LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/valgrind 61 LOCAL_ARM_MODE := arm 62 LOCAL_FORCE_STATIC_EXECUTABLE := true 63 LOCAL_NO_CRT := true 64 LOCAL_SYSTEM_SHARED_LIBRARIES := 65 LOCAL_CPP_EXTENSION := .cc 66 LOCAL_SRC_FILES := \ 67 thread_sanitizer.cc \ 68 ts_valgrind.cc \ 69 ts_valgrind_libc.cc \ 70 ts_util.cc \ 71 suppressions.cc \ 72 ignore.cc \ 73 common_util.cc \ 74 ts_race_verifier.cc 75 LOCAL_C_INCLUDES := \ 76 bionic \ 77 external/stlport/stlport \ 78 $(common_includes) 79 LOCAL_LDFLAGS := $(tool_ldflags) 80 LOCAL_CFLAGS := $(common_cflags) 81 LOCAL_CXXFLAGS := $(common_cxxflags) 82 LOCAL_RTTI_FLAG := -fno-rtti 83 LOCAL_STATIC_LIBRARIES := libcoregrind-$(arch)-linux libvex-$(arch)-linux 84 85 include $(BUILD_EXECUTABLE) 86 87 88 # Build vgpreload_tsan-$(arch)-linux.so 89 include $(CLEAR_VARS) 90 91 LOCAL_MODULE := vgpreload_tsan-$(arch)-linux 92 LOCAL_MODULE_TAGS := optional 93 LOCAL_MODULE_CLASS := SHARED_LIBRARIES 94 LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/valgrind 95 LOCAL_ARM_MODE := arm 96 LOCAL_STRIP_MODULE := false 97 LOCAL_NO_CRT := true 98 LOCAL_PRELINK_MODULE := false 99 LOCAL_SRC_FILES := \ 100 ts_valgrind_intercepts.c 101 LOCAL_C_INCLUDES := $(common_includes) 102 LOCAL_LDFLAGS := $(preload_ldflags) 103 LOCAL_CFLAGS := $(common_cflags) 104 LOCAL_RTTI_FLAG := -fno-rtti 105 106 include $(BUILD_SHARED_LIBRARY) 107 108 endif 109