diff options
Diffstat (limited to 'backend')
-rw-r--r-- | backend/src/Android.mk | 288 | ||||
-rw-r--r-- | backend/src/libocl/Android.mk | 89 |
2 files changed, 377 insertions, 0 deletions
diff --git a/backend/src/Android.mk b/backend/src/Android.mk new file mode 100644 index 00000000..da4d787a --- /dev/null +++ b/backend/src/Android.mk @@ -0,0 +1,288 @@ +LOCAL_PATH:= $(call my-dir) +include $(LOCAL_PATH)/../../Android.common.mk + +include $(CLEAR_VARS) +include $(CLEAR_TBLGEN_VARS) + +LLVM_ROOT_PATH := external/llvm +CLANG_ROOT_PATH := external/clang + +include $(CLANG_ROOT_PATH)/clang.mk + +BACKEND_SRC_FILES:= \ + ${ocl_blob_file} \ + sys/vector.hpp \ + sys/map.hpp \ + sys/set.hpp \ + sys/intrusive_list.hpp \ + sys/intrusive_list.cpp \ + sys/exception.hpp \ + sys/assert.cpp \ + sys/assert.hpp \ + sys/alloc.cpp \ + sys/alloc.hpp \ + sys/mutex.cpp \ + sys/mutex.hpp \ + sys/platform.cpp \ + sys/platform.hpp \ + sys/cvar.cpp \ + sys/cvar.hpp \ + ir/context.cpp \ + ir/context.hpp \ + ir/profile.cpp \ + ir/profile.hpp \ + ir/type.cpp \ + ir/type.hpp \ + ir/unit.cpp \ + ir/unit.hpp \ + ir/constant.cpp \ + ir/constant.hpp \ + ir/sampler.cpp \ + ir/sampler.hpp \ + ir/image.cpp \ + ir/image.hpp \ + ir/half.cpp \ + ir/half.hpp \ + ir/instruction.cpp \ + ir/instruction.hpp \ + ir/liveness.cpp \ + ir/register.cpp \ + ir/register.hpp \ + ir/function.cpp \ + ir/function.hpp \ + ir/profiling.cpp \ + ir/profiling.hpp \ + ir/value.cpp \ + ir/value.hpp \ + ir/lowering.cpp \ + ir/lowering.hpp \ + ir/printf.cpp \ + ir/printf.hpp \ + ir/immediate.hpp \ + ir/immediate.cpp \ + ir/structurizer.hpp \ + ir/structurizer.cpp \ + backend/context.cpp \ + backend/context.hpp \ + backend/program.cpp \ + backend/program.hpp \ + backend/program.h \ + llvm/llvm_sampler_fix.cpp \ + llvm/llvm_bitcode_link.cpp \ + llvm/llvm_gen_backend.cpp \ + llvm/llvm_passes.cpp \ + llvm/llvm_scalarize.cpp \ + llvm/llvm_intrinsic_lowering.cpp \ + llvm/llvm_barrier_nodup.cpp \ + llvm/llvm_printf_parser.cpp \ + llvm/ExpandConstantExpr.cpp \ + llvm/ExpandUtils.cpp \ + llvm/PromoteIntegers.cpp \ + llvm/ExpandLargeIntegers.cpp \ + llvm/StripAttributes.cpp \ + llvm/llvm_to_gen.cpp \ + llvm/llvm_loadstore_optimization.cpp \ + llvm/llvm_gen_backend.hpp \ + llvm/llvm_gen_ocl_function.hxx \ + llvm/llvm_unroll.cpp \ + llvm/llvm_to_gen.hpp \ + llvm/llvm_profiling.cpp \ + backend/gen/gen_mesa_disasm.c \ + backend/gen_insn_selection.cpp \ + backend/gen_insn_selection.hpp \ + backend/gen_insn_selection_optimize.cpp \ + backend/gen_insn_scheduling.cpp \ + backend/gen_insn_scheduling.hpp \ + backend/gen_insn_selection_output.cpp \ + backend/gen_insn_selection_output.hpp \ + backend/gen_reg_allocation.cpp \ + backend/gen_reg_allocation.hpp \ + backend/gen_context.cpp \ + backend/gen_context.hpp \ + backend/gen75_context.hpp \ + backend/gen75_context.cpp \ + backend/gen8_context.hpp \ + backend/gen8_context.cpp \ + backend/gen9_context.hpp \ + backend/gen9_context.cpp \ + backend/gen_program.cpp \ + backend/gen_program.hpp \ + backend/gen_program.h \ + backend/gen7_instruction.hpp \ + backend/gen8_instruction.hpp \ + backend/gen_defs.hpp \ + backend/gen_insn_compact.cpp \ + backend/gen_encoder.hpp \ + backend/gen_encoder.cpp \ + backend/gen7_encoder.hpp \ + backend/gen7_encoder.cpp \ + backend/gen75_encoder.hpp \ + backend/gen75_encoder.cpp \ + backend/gen8_encoder.hpp \ + backend/gen8_encoder.cpp \ + backend/gen9_encoder.hpp \ + backend/gen9_encoder.cpp + +#Generate GBEConfig for android +LOCAL_MODULE := libgbe +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_CLASS := SHARED_LIBRARIES + +generated_path := $(call local-generated-sources-dir) +gbe_config_file = $(LOCAL_PATH)/GBEConfig.h +$(shell echo "// the configured options and settings for LIBGBE" > $(gbe_config_file)) +$(shell echo "#define LIBGBE_VERSION_MAJOR 0" >> $(gbe_config_file)) +$(shell echo "#define LIBGBE_VERSION_MINOR 2" >> $(gbe_config_file)) +$(shell echo "#if defined(__ANDROID__)" >> $(gbe_config_file)) +$(shell echo "#if __x86_64__" >> $(gbe_config_file)) +$(shell echo " #define GBE_OBJECT_DIR \"/system/lib64/libgbe.so\"" >> $(gbe_config_file)) +$(shell echo " #define INTERP_OBJECT_DIR \"/system/lib64/libgbeinterp.so\"" >> $(gbe_config_file)) +$(shell echo " #define OCL_BITCODE_BIN \"/system/lib/ocl/beignet.bc\"" >> $(gbe_config_file)) +$(shell echo " #define OCL_HEADER_DIR \"/system/lib/ocl/include\"" >> $(gbe_config_file)) +$(shell echo " #define OCL_PCH_OBJECT \"/system/lib/ocl/beignet.pch\"" >> $(gbe_config_file)) +$(shell echo "#else /*__x86_64__*/" >> $(gbe_config_file)) +$(shell echo " #define GBE_OBJECT_DIR \"/system/lib/libgbe.so\"" >> $(gbe_config_file)) +$(shell echo " #define INTERP_OBJECT_DIR \"/system/lib/libgbeinterp.so\"" >> $(gbe_config_file)) +$(shell echo " #define OCL_BITCODE_BIN \"/system/lib/ocl/beignet.bc\"" >> $(gbe_config_file)) +$(shell echo " #define OCL_HEADER_DIR \"/system/lib/ocl/include\"" >> $(gbe_config_file)) +$(shell echo " #define OCL_PCH_OBJECT \"/system/lib/ocl/beignet.pch\"" >> $(gbe_config_file)) +$(shell echo "#endif" >> $(gbe_config_file)) +$(shell echo "#else /*__ANDROID__*/" >> $(gbe_config_file)) +$(shell echo " #define GBE_OBJECT_DIR \"\"" >> $(gbe_config_file)) +$(shell echo " #define INTERP_OBJECT_DIR \"\"" >> $(gbe_config_file)) +$(shell echo " #define OCL_BITCODE_BIN \"`pwd $(TOP)`/$(generated_path)\"" >> $(gbe_config_file)) +$(shell echo " #define OCL_HEADER_DIR \"`pwd $(TOP)`/$(generated_path)/libocl/include\"" >> $(gbe_config_file)) +$(shell echo " #define OCL_PCH_OBJECT \"`pwd $(TOP)`/$(generated_path)\"" >> $(gbe_config_file)) +$(shell echo "#endif" >> $(gbe_config_file)) + +#Build HOST libgbe.so +LOCAL_C_INCLUDES := $(TOP_C_INCLUDE) \ + $(BEIGNET_ROOT_PATH) \ + $(LOCAL_PATH)/../ \ + $(LLVM_INCLUDE_DIRS) +LOCAL_CPPFLAGS += $(LLVM_CFLAGS) -std=c++11 -fexceptions -DGBE_DEBUG=0 -DGBE_COMPILER_AVAILABLE=1 -DGEN7_SAMPLER_CLAMP_BORDER_WORKAROUND +LOCAL_CFLAGS += $(LLVM_CFLAGS) -fexceptions -DGBE_DEBUG=0 -DGBE_COMPILER_AVAILABLE=1 -DGEN7_SAMPLER_CLAMP_BORDER_WORKAROUND +LOCAL_LDLIBS += -lpthread -lm -ldl -lLLVM -lclang +#LOCAL_STATIC_LIBRARIES := $(CLANG_MODULE_LIBS) +LOCAL_SHARED_LIBRARIES := libclang + +TBLGEN_TABLES := \ + AttrList.inc \ + Attrs.inc \ + CommentCommandList.inc \ + CommentNodes.inc \ + DeclNodes.inc \ + DiagnosticCommonKinds.inc \ + DiagnosticDriverKinds.inc \ + DiagnosticFrontendKinds.inc \ + DiagnosticSemaKinds.inc + +LOCAL_SRC_FILES = $(BACKEND_SRC_FILES) +include $(CLANG_HOST_BUILD_MK) +include $(CLANG_TBLGEN_RULES_MK) +include $(LLVM_GEN_INTRINSICS_MK) +include $(BUILD_HOST_SHARED_LIBRARY) + + +#Build gbe_bin_generater +include $(CLEAR_VARS) +LOCAL_SRC_FILES := gbe_bin_generater.cpp + +LOCAL_C_INCLUDES := $(TOP_C_INCLUDE) \ + $(BEIGNET_ROOT_PATH) \ + $(LOCAL_PATH)/ \ + $(LLVM_INCLUDE_DIRS) + +LOCAL_CLANG := true +LOCAL_MODULE := gbe_bin_generater +LOCAL_MODULE_TAGS := optional +LOCAL_CFLAGS = $(LLVM_CFLAGS) -std=gnu++11 -fexceptions +LOCAL_SHARED_LIBRARIES := libgbe +LOCAL_LDLIBS += -lpthread -lm -ldl + +include $(BUILD_HOST_EXECUTABLE) + + +#Build libgbeinterp.so +include $(CLEAR_VARS) + +LLVM_ROOT_PATH := external/llvm +include $(LLVM_ROOT_PATH)/llvm.mk + +LOCAL_C_INCLUDES := $(TOP_C_INCLUDE) \ + $(BEIGNET_ROOT_PATH) \ + $(LOCAL_PATH)/../ \ + $(LLVM_INCLUDE_DIRS) + +LOCAL_LDFLAGS := -Wl,--no-undefined + +LOCAL_CFLAGS += $(SUBDIR_C_CXX_FLAGS) +LOCAL_CPPFLAGS += -Wl,-E -std=c++11 -DGBE_COMPILER_AVAILABLE=1 + +LOCAL_MODULE := libgbeinterp +LOCAL_MODULE_TAGS := optional +LOCAL_SRC_FILES := gbe_bin_interpreter.cpp +LOCAL_SHARED_LIBRARIES := \ +libcutils \ +$(DRM_INTEL_LIBRARY) \ +$(DRM_LIBRARY) + +include $(LLVM_DEVICE_BUILD_MK) +include $(BUILD_SHARED_LIBRARY) + +#Build targe libgbe.so +include $(CLEAR_VARS) +include $(CLEAR_TBLGEN_VARS) + +LOCAL_C_INCLUDES := $(TOP_C_INCLUDE) \ + $(BEIGNET_ROOT_PATH) \ + $(LOCAL_PATH)/../ \ + $(LLVM_INCLUDE_DIRS) + +SUBDIR_C_CXX_FLAGS := -fvisibility=hidden +SUBDIR_C_CXX_FLAGS += -funroll-loops -fstrict-aliasing -msse2 -msse3 -mssse3 -msse4.1 -fPIC -Wall +SUBDIR_C_CXX_FLAGS += $(LLVM_CFLAGS) + +LOCAL_CPPFLAGS := $(SUBDIR_C_CXX_FLAGS) +LOCAL_CPPFLAGS += -fno-rtti -std=c++11 -DGBE_DEBUG=1 -DGBE_COMPILER_AVAILABLE=1 -DGEN7_SAMPLER_CLAMP_BORDER_WORKAROUND +LOCAL_CPPFLAGS += -Wl,-E + +#LOCAL_SDK_VERSION := 19 +#LOCAL_NDK_STL_VARIANT := gnustl_static + +LOCAL_CFLAGS := $(SUBDIR_C_CXX_FLAGS) +LOCAL_CFLAGS += -Wl,-E +LOCAL_LDFLAGS := -Wl,--no-undefined +LOCAL_LDLIBS := $(LLVM_LFLAGS) + +LOCAL_MODULE := libgbe +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_CLASS := SHARED_LIBRARIES +LOCAL_SHARED_LIBRARIES := \ +libcutils \ +$(DRM_INTEL_LIBRARY) \ +$(DRM_LIBRARY) \ +libclang libLLVM +#$(THREAD_LIBS_INIT) +#$(DL_LIBS) + +#LOCAL_STATIC_LIBRARIES := $(CLANG_MODULE_LIBS) + +TBLGEN_TABLES := \ + AttrList.inc \ + Attrs.inc \ + CommentCommandList.inc \ + CommentNodes.inc \ + DeclNodes.inc \ + DiagnosticCommonKinds.inc \ + DiagnosticDriverKinds.inc \ + DiagnosticFrontendKinds.inc \ + DiagnosticSemaKinds.inc + +LOCAL_SRC_FILES := $(BACKEND_SRC_FILES) + +include $(CLANG_DEVICE_BUILD_MK) +include $(CLANG_TBLGEN_RULES_MK) +include $(LLVM_GEN_INTRINSICS_MK) +include $(BUILD_SHARED_LIBRARY) + diff --git a/backend/src/libocl/Android.mk b/backend/src/libocl/Android.mk new file mode 100644 index 00000000..8e45c12e --- /dev/null +++ b/backend/src/libocl/Android.mk @@ -0,0 +1,89 @@ +LOCAL_PATH:= $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE := libgbe +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_CLASS := SHARED_LIBRARIES + +generated_sources := $(call local-generated-sources-dir)/libocl + +$(shell mkdir -p ${generated_sources}/include/) +$(shell mkdir -p ${generated_sources}/src/) +#$(shell echo "cat $(LOCAL_PATH)/tmpl/ocl_defines.tmpl.h \\> ${LIBOCL_BINARY_DIR}/include/ocl_defines.h") +$(shell cat $(LOCAL_PATH)/tmpl/ocl_defines.tmpl.h > ${generated_sources}/include/ocl_defines.h) +#$(shell echo "cat $(LOCAL_PATH)/../ocl_common_defines.h \\>\\> ${LIBOCL_BINARY_DIR}/include/ocl_defines.h") +$(shell cat ${LOCAL_PATH}/../ocl_common_defines.h >> ${generated_sources}/include/ocl_defines.h) +$(shell echo "Generate the header: ${generated_sources}/include/ocl_defines.h") + +define COPY_THE_HEADER + # Use the python script to generate the header files. + $(shell cp ${LOCAL_PATH}/include/$(1).h ${generated_sources}/include/$(1).h) +endef +define COPY_THE_SOURCE + # Use the python script to generate the header files. + $(shell cp ${LOCAL_PATH}/src/$(1).cl ${generated_sources}/src/$(1).cl) +endef + +OCL_COPY_MODULES := ocl ocl_types ocl_float ocl_printf +$(foreach _M_, ${OCL_COPY_MODULES}, $(eval $(call COPY_THE_HEADER,$(_M_)))) + +OCL_COPY_MODULES := ocl_workitem ocl_atom ocl_async ocl_sync ocl_memcpy ocl_memset ocl_misc ocl_vload ocl_geometric ocl_image ocl_work_group +OCL_SOURCE_FILES := $(OCL_COPY_MODULES) +$(foreach _M_, ${OCL_COPY_MODULES}, $(eval $(call COPY_THE_HEADER,$(_M_)))) +$(foreach _M_, ${OCL_COPY_MODULES}, $(eval $(call COPY_THE_SOURCE,$(_M_)))) + +define GENERATE_HEADER_PY + # Use the python script to generate the header files. + $(shell cat ${LOCAL_PATH}/tmpl/$(1).tmpl.h > ${generated_sources}/include/$(1).h) + $(shell /usr/bin/python ${LOCAL_PATH}/script/gen_vector.py ${LOCAL_PATH}/script/$(1).def ${generated_sources}/include/$(1).h 1) + $(shell echo "#endif" >> ${generated_sources}/include/$(1).h) +endef +define GENERATE_SOURCE_PY + # Use the python script to generate the header files. + $(shell cat ${LOCAL_PATH}/tmpl/$(1).tmpl.cl > ${generated_sources}/src/$(1).cl) + $(shell /usr/bin/python ${LOCAL_PATH}/script/gen_vector.py ${LOCAL_PATH}/script/$(1).def ${generated_sources}/src/$(1).cl 0) +endef + +OCL_COPY_MODULES_PY := ocl_common ocl_relational ocl_integer ocl_math ocl_simd +OCL_SOURCE_FILES += $(OCL_COPY_MODULES_PY) +$(foreach _M_, ${OCL_COPY_MODULES_PY}, $(eval $(call GENERATE_HEADER_PY,$(_M_)))) +$(foreach _M_, ${OCL_COPY_MODULES_PY}, $(eval $(call GENERATE_SOURCE_PY,$(_M_)))) + +define GENERATE_HEADER_BASH + # Use the python script to generate the header files.\ + $(shell ${LOCAL_PATH}/script/$(1).sh -p > ${generated_sources}/include/$(1).h) +endef +define GENERATE_SOURCE_BASH + # Use the python script to generate the header files. + $(shell ${LOCAL_PATH}/script/$(1).sh > ${generated_sources}/src/$(1).cl) +endef +OCL_COPY_MODULES_SH := ocl_as ocl_convert +OCL_SOURCE_FILES += $(OCL_COPY_MODULES_SH) +$(foreach _M_, ${OCL_COPY_MODULES_SH}, $(eval $(call GENERATE_HEADER_BASH,$(_M_)))) +$(foreach _M_, ${OCL_COPY_MODULES_SH}, $(eval $(call GENERATE_SOURCE_BASH,$(_M_)))) + +CLANG_OCL_FLAGS := -fno-builtin -ffp-contract=off -cl-kernel-arg-info -DGEN7_SAMPLER_CLAMP_BORDER_WORKAROUND "-cl-std=CL1.2" +define ADD_CL_TO_BC_TARGET + # Use the python script to generate the header files. + $(shell $(HOST_OUT)/bin/clang -cc1 ${CLANG_OCL_FLAGS} -I ${generated_sources}/include/ -emit-llvm-bc -triple spir -o ${generated_sources}/$(1).bc -x cl ${generated_sources}/src/$(1).cl) +endef +$(foreach _M_, ${OCL_SOURCE_FILES}, $(eval $(call ADD_CL_TO_BC_TARGET,$(_M_)))) + +define COPY_THE_LL + # Use the python script to generate the header files. + $(shell cp ${LOCAL_PATH}/src/$(1).ll ${generated_sources}/src/$(1).ll) +endef +define ADD_LL_TO_BC_TARGET + # Use the python script to generate the header files. + $(shell $(HOST_OUT)/bin/llvm-as -o ${generated_sources}/$(1).bc ${generated_sources}/src/$(1).ll) +endef +OCL_LL_MODULES := ocl_barrier ocl_clz +OCL_SOURCE_FILES += $(OCL_LL_MODULES) +$(foreach _M_, ${OCL_LL_MODULES}, $(eval $(call COPY_THE_LL,$(_M_)))) +$(foreach _M_, ${OCL_LL_MODULES}, $(eval $(call ADD_LL_TO_BC_TARGET,$(_M_)))) + +$(shell $(HOST_OUT)/bin/llvm-link -o ${generated_sources}/../beignet.bc $(addprefix ${generated_sources}/, $(addsuffix .bc, ${OCL_SOURCE_FILES}))) + +$(shell $(HOST_OUT)/bin/clang -cc1 ${CLANG_OCL_FLAGS} -triple spir -I ${generated_sources}/include/ --relocatable-pch -emit-pch -isysroot ${generated_sources} -x cl ${generated_sources}/include/ocl.h -o ${generated_sources}/../beignet.pch) + + |