# Copyright (C) 2014 The Android Open Source Project
#
# 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.
#

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

# b/31559947, work around clang-tidy bug, disable clang-analyzer checks.
LOCAL_TIDY_CHECKS := -clang-analyzer*

LOCAL_CFLAGS_32 += -DBITS_PER_LONG=32 -DCONFIG_64BIT
LOCAL_CFLAGS_64 += -DBITS_PER_LONG=64 -DCONFIG_32BIT

main_src_files := gettime.c fio.c ioengines.c init.c stat.c log.c time.c \
                  filesetup.c eta.c verify.c memory.c io_u.c parse.c mutex.c options.c \
                  smalloc.c filehash.c helpers.c profile.c debug.c backend.c \
                  cconv.c client.c filelock.c flow.c gettime-thread.c idletime.c io_u_queue.c \
                  iolog.c json.c libfio.c memalign.c profiles/act.c profiles/tiobench.c server.c \
                  td_error.c diskutil.c blktrace.c trim.c fifo.c cgroup.c

lib_src_files := lib/rbtree.c lib/flist_sort.c lib/getrusage.c lib/hweight.c lib/ieee754.c lib/lfsr.c \
                 lib/num2str.c lib/prio_tree.c lib/rand.c lib/zipf.c lib/inet_aton.c lib/axmap.c \
                 lib/bloom.c lib/linux-dev-lookup.c lib/tp.c

crc_src_files := crc/crc7.c crc/crc16.c crc/crc32.c crc/crc64.c crc/crc32c.c crc/crc32c-intel.c \
                 crc/sha1.c crc/sha256.c crc/sha512.c crc/md5.c crc/test.c crc/xxhash.c \
                 crc/fnv.c crc/murmur3.c

engines_src_files := engines/cpu.c engines/mmap.c engines/null.c engines/net.c \
                     engines/sg.c engines/sync.c

engines_src_files_64 := engines/splice.c

LOCAL_SRC_FILES := $(main_src_files) \
                   $(lib_src_files) \
                   $(crc_src_files) \
                   $(engines_src_files) \

LOCAL_SRC_FILES_64 += $(engines_src_files_64)

LOCAL_MODULE := fio
LOCAL_MODULE_PATH := $(TARGET_OUT_OPTIONAL_EXECUTABLES)
LOCAL_MODULE_TAGS := debug

LOCAL_SHARED_LIBRARIES := libdl
LOCAL_STATIC_LIBRARIES := libcutils libz

LOCAL_CFLAGS += -DFIO_VERSION="\"fio-2.2.6\"" \
                -DCONFIG_3ARG_AFFINITY \
                -DCONFIG_CLOCK_GETTIME \
                -DCONFIG_CLOCK_MONOTONIC \
                -DCONFIG_FDATASYNC \
                -DCONFIG_GETOPT_LONG_ONLY \
                -DCONFIG_GETTIMEOFDAY \
                -DCONFIG_IPV6 \
                -DCONFIG_LINUX_FALLOCATE \
                -DCONFIG_LITTLE_ENDIAN \
                -DCONFIG_RLIMIT_MEMLOCK \
                -DCONFIG_RUSAGE_THREAD \
                -DCONFIG_SCHED_IDLE \
                -DCONFIG_SETVBUF \
                -DCONFIG_SFAA \
                -DCONFIG_SOCKLEN_T \
                -DCONFIG_STRCASESTR \
                -DCONFIG_STRSEP \
                -DCONFIG_TCP_NODELAY \
                -DCONFIG_TLS_THREAD \
                -DCONFIG_ZLIB \
                -DFIO_HAVE_CGROUPS \
                -DFIO_INC_DEBUG \
                -DFIO_INTERNAL \
                -DNO_GETMNTENT_R \
                -DNO_INET_NETWORK \
                -D_FILE_OFFSET_BITS=64 \
                -D_FORTIFY_SOURCE=2 \
                -D_GNU_SOURCE \
                -D_LARGEFILE_SOURCE \
                -D__ANDROID__ \
                -O3 \
                -Wall \
                -Wdeclaration-after-statement \
                -Wwrite-strings \
                -ffast-math \
                -fno-omit-frame-pointer \
                -g \
                -std=gnu99 \
                -Wno-pointer-arith \
                -Wno-sign-compare \
                -Wno-unused-parameter \
                -Wno-unused-variable \

LOCAL_LDFLAGS += \
                -rdynamic \

LOCAL_CFLAGS_64 += \
                -DCONFIG_LINUX_SPLICE \

include $(BUILD_EXECUTABLE)
