build_bc_lib_internal.mk revision e81f26204ca98c9c8f0ea3bf67d991c6b9750284
118b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn#
218b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn# Copyright (C) 2012 The Android Open Source Project
318b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn#
418b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn# Licensed under the Apache License, Version 2.0 (the "License");
518b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn# you may not use this file except in compliance with the License.
618b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn# You may obtain a copy of the License at
718b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn#
818b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn#      http://www.apache.org/licenses/LICENSE-2.0
918b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn#
1018b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn# Unless required by applicable law or agreed to in writing, software
1118b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn# distributed under the License is distributed on an "AS IS" BASIS,
1218b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1318b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn# See the License for the specific language governing permissions and
1418b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn# limitations under the License.
1518b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn#
1618b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
1718b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornifndef BCC_RS_TRIPLE
1818b64f446cd7b9043909b0cd42d1ab364392da24Dianne HackbornBCC_RS_TRIPLE := $($(LOCAL_2ND_ARCH_VAR_PREFIX)RS_TRIPLE)
1918b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornendif
2018b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
2118b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn# Set these values always by default
2218b64f446cd7b9043909b0cd42d1ab364392da24Dianne HackbornLOCAL_MODULE_TAGS := optional
2318b64f446cd7b9043909b0cd42d1ab364392da24Dianne HackbornLOCAL_MODULE_CLASS := SHARED_LIBRARIES
2418b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
2518b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborninclude $(BUILD_SYSTEM)/base_rules.mk
2618b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
2718b64f446cd7b9043909b0cd42d1ab364392da24Dianne HackbornBCC_STRIP_ATTR := $(BUILD_OUT_EXECUTABLES)/bcc_strip_attr$(BUILD_EXECUTABLE_SUFFIX)
2818b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
2918b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornbc_clang := $(RS_CLANG)
300dd9902c89e7b705fd73158aadf1bf27843ad201Dianne Hackbornifdef RS_DRIVER_CLANG_EXE
310dd9902c89e7b705fd73158aadf1bf27843ad201Dianne Hackbornbc_clang := $(RS_DRIVER_CLANG_EXE)
3239b467482d1bf256a111c757e9b7621c6f523271Jason Monkendif
3318b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
3418b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornbc_clang_cc1_cflags := -fnative-half-type -fallow-half-arguments-and-returns
3518b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornifeq ($(BCC_RS_TRIPLE),armv7-none-linux-gnueabi)
3618b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn# We need to pass the +long64 flag to the underlying version of Clang, since
3718b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn# we are generating a library for use with Renderscript (64-bit long type,
3818b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn# not 32-bit).
3918b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornbc_clang_cc1_cflags += -target-feature +long64
4018b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornendif
4118b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornbc_translated_clang_cc1_cflags := $(addprefix -Xclang , $(bc_clang_cc1_cflags))
4218b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
4318b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn# Bug: 25435756 - must be switched back to the proper API level
440dd9902c89e7b705fd73158aadf1bf27843ad201Dianne Hackbornbc_RS_VERSION := -DRS_VERSION=4294967295
450dd9902c89e7b705fd73158aadf1bf27843ad201Dianne Hackborn
460dd9902c89e7b705fd73158aadf1bf27843ad201Dianne Hackborn# Disable deprecated warnings, because we have to support even legacy APIs.
4718b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornbc_warning_flags := -Wno-deprecated -Werror
4818b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
4918b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornbc_cflags := -MD \
508b0afc7fb53b90e522b86ba04bb17c0cba2364abDianne Hackborn             $(bc_RS_VERSION) \
518b0afc7fb53b90e522b86ba04bb17c0cba2364abDianne Hackborn             -std=c99 \
5218b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn             -c \
5318b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn             -O3 \
5418b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn             -fno-builtin \
5518b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn             -emit-llvm \
5618b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn             -target $(BCC_RS_TRIPLE) \
5718b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn             -fsigned-char \
5818b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn             $($(LOCAL_2ND_ARCH_VAR_PREFIX)RS_TRIPLE_CFLAGS) \
598b0afc7fb53b90e522b86ba04bb17c0cba2364abDianne Hackborn             $(bc_warning_flags) \
608b0afc7fb53b90e522b86ba04bb17c0cba2364abDianne Hackborn             $(LOCAL_CFLAGS) \
6118b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn             $(bc_translated_clang_cc1_cflags) \
6218b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn             $(LOCAL_CFLAGS_$(my_32_64_bit_suffix))
6318b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
6418b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornifeq ($(rs_debug_runtime),1)
6527daaab633a80be50863e6539e947db674090662Dianne Hackborn    bc_cflags += -DRS_DEBUG_RUNTIME
6618b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornendif
6727daaab633a80be50863e6539e947db674090662Dianne Hackborn
6818b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornifeq ($(rs_g_runtime),1)
6927daaab633a80be50863e6539e947db674090662Dianne Hackborn    bc_cflags += -DRS_G_RUNTIME
7018b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornendif
7118b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
7218b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornbc_src_files := $(LOCAL_SRC_FILES)
7318b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornbc_src_files += $(LOCAL_SRC_FILES_$(TARGET_$(LOCAL_2ND_ARCH_VAR_PREFIX)ARCH)) $(LOCAL_SRC_FILES_$(my_32_64_bit_suffix))
7427daaab633a80be50863e6539e947db674090662Dianne Hackborn
7518b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornc_sources := $(filter %.c,$(bc_src_files))
7618b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornll_sources := $(filter %.ll,$(bc_src_files))
7718b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
7818b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornc_bc_files := $(patsubst %.c,%.bc, \
7918b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn    $(addprefix $(intermediates)/, $(c_sources)))
8018b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
8118b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackbornll_bc_files := $(patsubst %.ll,%.bc, \
8218b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn    $(addprefix $(intermediates)/, $(ll_sources)))
8318b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
8418b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn$(c_bc_files): PRIVATE_INCLUDES := \
8527daaab633a80be50863e6539e947db674090662Dianne Hackborn    frameworks/rs/scriptc \
8618b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn    external/clang/lib/Headers
8718b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn$(c_bc_files): PRIVATE_CFLAGS := $(bc_cflags)
8818b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
8918b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn$(c_bc_files): $(intermediates)/%.bc: $(LOCAL_PATH)/%.c $(bc_clang)
9018b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn	@echo "bc: $(PRIVATE_MODULE) <= $<"
9118b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn	@mkdir -p $(dir $@)
9218b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn	$(hide) $(bc_clang) $(addprefix -I, $(PRIVATE_INCLUDES)) $(PRIVATE_CFLAGS) $< -o $@
9318b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn	$(call transform-d-to-p-args,$(@:%.bc=%.d),$(@:%.bc=%.P))
9418b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
9518b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn$(ll_bc_files): $(intermediates)/%.bc: $(LOCAL_PATH)/%.ll $(RS_LLVM_AS)
9618b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn	@mkdir -p $(dir $@)
9718b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn	$(hide) $(RS_LLVM_AS) $< -o $@
9818b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
9918b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn-include $(c_bc_files:%.bc=%.P)
10018b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn
10118b64f446cd7b9043909b0cd42d1ab364392da24Dianne Hackborn$(LOCAL_BUILT_MODULE): PRIVATE_BC_FILES := $(c_bc_files) $(ll_bc_files)
1020dd9902c89e7b705fd73158aadf1bf27843ad201Dianne Hackborn$(LOCAL_BUILT_MODULE): $(c_bc_files) $(ll_bc_files)
10327daaab633a80be50863e6539e947db674090662Dianne Hackborn$(LOCAL_BUILT_MODULE): $(RS_LLVM_LINK)
10415ab7758df616a27c28276ab97ddb2e2de6089f7Dianne Hackborn$(LOCAL_BUILT_MODULE): $(RS_LLVM_AS) $(BCC_STRIP_ATTR)
1054a06e4cc4370f5897f07f6314f25b37db759cf18David Christie	@echo "bc lib: $(PRIVATE_MODULE) ($@)"
106bdf28e40251772a35f776af9fd1a4b903f0f9771Michael Wright	@mkdir -p $(dir $@)
10727daaab633a80be50863e6539e947db674090662Dianne Hackborn	$(hide) $(RS_LLVM_LINK) $(PRIVATE_BC_FILES) -o $@.unstripped 2> >(grep -o -v "modules of different" >&2)
10827daaab633a80be50863e6539e947db674090662Dianne Hackborn	$(hide) $(BCC_STRIP_ATTR) -o $@ $@.unstripped
10927daaab633a80be50863e6539e947db674090662Dianne Hackborn
11015ab7758df616a27c28276ab97ddb2e2de6089f7Dianne HackbornBCC_RS_TRIPLE :=
11127daaab633a80be50863e6539e947db674090662Dianne Hackborn