#
# Copyright (C) 2013-2015 STMicroelectronics
# Denis Ciocca - Motion MEMS Product Div.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#/

ifeq ($(USE_SENSOR_HAL_PREBUILTS),false)

ifneq ($(TARGET_SIMULATOR),true)

LOCAL_PATH := $(call my-dir)
ST_HAL_ROOT_PATH := $(call my-dir)

include $(CLEAR_VARS)
include $(ST_HAL_ROOT_PATH)/../.config

LOCAL_PRELINK_MODULE := false

ifdef TARGET_DEVICE
LOCAL_MODULE := libsensors_iio.robby
else
LOCAL_MODULE := libsensors_iio.default
endif

LOCAL_MODULE_RELATIVE_PATH := hw

LOCAL_MODULE_OWNER := STMicroelectronics

LOCAL_C_INCLUDES := $(LOCAL_PATH)/ bionic

LOCAL_CFLAGS += -DLOG_TAG=\"SensorHAL\"


ifeq ($(DEBUG),y)
LOCAL_CFLAGS += -g -O0
endif


ifdef CONFIG_ST_HAL_HAS_6AX_FUSION
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../lib/vSensorFusion
LOCAL_LDFLAGS += $(LOCAL_PATH)/../lib/vSensorFusion/vSensorFusion.a
else
ifdef CONFIG_ST_HAL_HAS_9AX_FUSION
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../lib/iNemoEngine_SensorFusion
LOCAL_STATIC_LIBRARIES += iNemoEngine_SensorFusion
endif
endif

ifdef CONFIG_ST_HAL_HAS_GYRO_GBIAS_ESTIMATION
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../lib/iNemoEngine_gbias_Estimation
LOCAL_STATIC_LIBRARIES += iNemoEngine_gbias_Estimation
endif

ifdef CONFIG_ST_HAL_HAS_TILT_FU_FD
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../lib/FUFD_CustomTilt
LOCAL_STATIC_LIBRARIES += FUFD_CustomTilt
endif

ifdef CONFIG_ST_HAL_HAS_GEOMAG_FUSION
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../lib/iNemoEngine_GeoMag_Fusion
LOCAL_STATIC_LIBRARIES += iNemoEngine_GeoMag_Fusion
endif

ifdef CONFIG_ST_HAL_HAS_MAGN_CALIB
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../lib/STCompass
LOCAL_STATIC_LIBRARIES += STCompass
endif


LOCAL_SRC_FILES := \
		sensor_cal.c \
		iio_utils.c \
		SensorHAL.cpp \
		CircularBuffer.cpp \
		SensorBase.cpp \
		HWSensorBase.cpp \
		SWSensorBase.cpp

ifdef CONFIG_ST_HAL_ACCEL_ENABLED
LOCAL_SRC_FILES += Accelerometer.cpp
endif

ifdef CONFIG_ST_HAL_MAGN_ENABLED
LOCAL_SRC_FILES += Magnetometer.cpp
endif

ifdef CONFIG_ST_HAL_GYRO_ENABLED
LOCAL_SRC_FILES += Gyroscope.cpp
endif

ifdef CONFIG_ST_HAL_STEP_DETECTOR_ENABLED
LOCAL_SRC_FILES += StepDetector.cpp
endif

ifdef CONFIG_ST_HAL_STEP_COUNTER_ENABLED
LOCAL_SRC_FILES += StepCounter.cpp
endif

ifdef CONFIG_ST_HAL_SIGN_MOTION_ENABLED
LOCAL_SRC_FILES += SignificantMotion.cpp
endif

ifdef CONFIG_ST_HAL_TILT_ENABLED
LOCAL_SRC_FILES += TiltSensor.cpp
endif

ifdef CONFIG_ST_HAL_MAGN_UNCALIB_AP_ENABLED
LOCAL_SRC_FILES += SWMagnetometerUncalibrated.cpp
endif

ifdef CONFIG_ST_HAL_GYRO_UNCALIB_AP_ENABLED
LOCAL_SRC_FILES += SWGyroscopeUncalibrated.cpp
endif

ifdef CONFIG_ST_HAL_PRESSURE_ENABLED
LOCAL_SRC_FILES += Pressure.cpp
endif

ifdef CONFIG_ST_HAL_HAS_GEOMAG_FUSION
LOCAL_SRC_FILES += SWAccelMagnFusion6X.cpp
endif

ifdef CONFIG_ST_HAL_GEOMAG_ROT_VECTOR_AP_ENABLED
LOCAL_SRC_FILES += SWGeoMagRotationVector.cpp
endif

ifdef CONFIG_ST_HAL_HAS_6AX_FUSION
LOCAL_SRC_FILES += SWAccelGyroFusion6X.cpp
endif

ifdef CONFIG_ST_HAL_GAME_ROT_VECTOR_AP_ENABLED
LOCAL_SRC_FILES += SWGameRotationVector.cpp
endif

ifdef CONFIG_ST_HAL_HAS_9AX_FUSION
LOCAL_SRC_FILES += SWAccelMagnGyroFusion9X.cpp
endif

ifdef CONFIG_ST_HAL_ROT_VECTOR_AP_ENABLED
LOCAL_SRC_FILES += SWRotationVector.cpp
endif

ifdef CONFIG_ST_HAL_ORIENTATION_AP_ENABLED
LOCAL_SRC_FILES += SWOrientation.cpp
endif

ifdef CONFIG_ST_HAL_GRAVITY_AP_ENABLED
LOCAL_SRC_FILES += SWGravity.cpp
endif

ifdef CONFIG_ST_HAL_LINEAR_AP_ENABLED
LOCAL_SRC_FILES += SWLinearAccel.cpp
endif


LOCAL_SHARED_LIBRARIES := liblog libcutils libutils libdl libc

LOCAL_MODULE_TAGS := optional

include $(BUILD_SHARED_LIBRARY)

include $(call all-makefiles-under, $(LOCAL_PATH))

endif # !TARGET_SIMULATOR

endif # USE_SENSOR_HAL_PREBUILTS
