//
// Copyright (C) 2006 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.
//

cc_binary {

    srcs: [
        "access.c",
        "affinity.c",
        "aio.c",
        "basic_filters.c",
        "bind.c",
        "bjm.c",
        "block.c",
        "bpf.c",
        "bpf_filter.c",
        "bpf_seccomp_filter.c",
        "bpf_sock_filter.c",
        "btrfs.c",
        "cacheflush.c",
        "capability.c",
        "chdir.c",
        "chmod.c",
        "clone.c",
        "copy_file_range.c",
        "count.c",
        "desc.c",
        "dirent.c",
        "dirent64.c",
        "dm.c",
        "dyxlat.c",
        "epoll.c",
        "error_prints.c",
        "evdev.c",
        "eventfd.c",
        "execve.c",
        "fadvise.c",
        "fallocate.c",
        "fanotify.c",
        "fchownat.c",
        "fcntl.c",
        "fetch_bpf_fprog.c",
        "fetch_indirect_syscall_args.c",
        "fetch_struct_flock.c",
        "fetch_struct_keyctl_kdf_params.c",
        "fetch_struct_mmsghdr.c",
        "fetch_struct_msghdr.c",
        "fetch_struct_stat.c",
        "fetch_struct_stat64.c",
        "fetch_struct_statfs.c",
        "file_handle.c",
        "file_ioctl.c",
        "filter_qualify.c",
        "flock.c",
        "fstatfs.c",
        "fstatfs64.c",
        "fs_x_ioctl.c",
        "futex.c",
        "getcpu.c",
        "getcwd.c",
        "getpagesize.c",
        "getrandom.c",
        "get_robust_list.c",
        "hdio.c",
        "hostname.c",
        "inotify.c",
        "io.c",
        "ioctl.c",
        "ioperm.c",
        "iopl.c",
        "ioprio.c",
        "ipc.c",
        "ipc_msg.c",
        "ipc_msgctl.c",
        "ipc_sem.c",
        "ipc_shm.c",
        "ipc_shmctl.c",
        "kcmp.c",
        "kexec.c",
        "keyctl.c",
        "kvm.c",
        "ldt.c",
        "link.c",
        "listen.c",
        "lookup_dcookie.c",
        "loop.c",
        "lseek.c",
        "mem.c",
        "membarrier.c",
        "memfd_create.c",
        "mknod.c",
        "mmsghdr.c",
        "mount.c",
        "mq.c",
        "msghdr.c",
        "mtd.c",
        "net.c",
        "netlink.c",
        "netlink_crypto.c",
        "netlink_inet_diag.c",
        "netlink_netlink_diag.c",
        "netlink_packet_diag.c",
        "netlink_route.c",
        "netlink_selinux.c",
        "netlink_smc_diag.c",
        "netlink_sock_diag.c",
        "netlink_unix_diag.c",
        "nlattr.c",
        "nsfs.c",
        "numa.c",
        "number_set.c",
        "oldstat.c",
        "open.c",
        "pathtrace.c",
        "perf.c",
        "personality.c",
        "pkeys.c",
        "poll.c",
        "prctl.c",
        "print_dev_t.c",
        "print_group_req.c",
        "print_ifindex.c",
        "print_mq_attr.c",
        "print_msgbuf.c",
        "print_sigevent.c",
        "print_sg_req_info.c",
        "print_statfs.c",
        "print_struct_stat.c",
        "print_time.c",
        "print_timespec.c",
        "print_timeval.c",
        "print_timex.c",
        "printmode.c",
        "printrusage.c",
        "printsiginfo.c",
        "process.c",
        "process_vm.c",
        "ptp.c",
        "quota.c",
        "readahead.c",
        "readlink.c",
        "reboot.c",
        "renameat.c",
        "resource.c",
        "rtc.c",
        "rtnl_addr.c",
        "rtnl_addrlabel.c",
        "rtnl_dcb.c",
        "rtnl_link.c",
        "rtnl_mdb.c",
        "rtnl_neigh.c",
        "rtnl_neightbl.c",
        "rtnl_netconf.c",
        "rtnl_nsid.c",
        "rtnl_route.c",
        "rtnl_rule.c",
        "rtnl_tc.c",
        "rtnl_tc_action.c",
        "rt_sigframe.c",
        "rt_sigreturn.c",
        "sched.c",
        "scsi.c",
        "seccomp.c",
        "sendfile.c",
        "sg_io_v3.c",
        "sg_io_v4.c",
        "shutdown.c",
        "sigaltstack.c",
        "signal.c",
        "signalfd.c",
        "sigreturn.c",
        "sock.c",
        "sockaddr.c",
        "socketcall.c",
        "socketutils.c",
        "sram_alloc.c",
        "stat.c",
        "stat64.c",
        "statfs.c",
        "statfs64.c",
        "statx.c",
        "strace.c",
        "string_to_uint.c",
        "swapon.c",
        "sync_file_range.c",
        "sync_file_range2.c",
        "syscall.c",
        "sysctl.c",
        "sysinfo.c",
        "syslog.c",
        "sysmips.c",
        "term.c",
        "time.c",
        "times.c",
        "truncate.c",
        "ubi.c",
        "ucopy.c",
        "uid16.c",
        "uid.c",
        "umask.c",
        "umount.c",
        "uname.c",
        "upeek.c",
        "upoke.c",
        "userfaultfd.c",
        "ustat.c",
        "util.c",
        "utime.c",
        "utimes.c",
        "v4l2.c",
        "wait.c",
        "xattr.c",
        "xlat.c",
        "xmalloc.c",
    ],

    // We have "config.h", but since we're using one file for both LP32 and LP64,
    // we need to set the hard-coded size #defines here instead.
    cflags: ["-DHAVE_CONFIG_H"] + [
        "-DSIZEOF_KERNEL_LONG_T=SIZEOF_LONG",
        "-DSIZEOF_OFF_T=SIZEOF_LONG",
    ] + [
        "-Wall",
        "-Werror",
        "-Wno-missing-field-initializers",
        "-Wno-pointer-arith",
        "-Wno-unused-parameter",
        "-Wno-sign-compare",
        "-fno-strict-aliasing",
    ],
    multilib: {
        lib32: {
            cflags: [
                "-DSIZEOF_LONG_LONG=8",
                "-DSIZEOF_LONG=4",
                "-DSIZEOF_RLIM_T=4",
                "-DHAVE_STRUCT_STAT64=1",
            ],
        },
        lib64: {
            cflags: [
                "-DSIZEOF_LONG_LONG=8",
                "-DSIZEOF_LONG=8",
                "-DSIZEOF_RLIM_T=8",
            ],
        },
    },

    arch: {
        arm: {
            cflags: ["-DARM=1"] + ["-DHAVE_STRUCT___OLD_KERNEL_STAT=1"],

            local_include_dirs: [
                "linux/arm",
                "linux",
            ],
        },
        arm64: {
            cflags: ["-DAARCH64=1"],

            local_include_dirs: [
                "linux/aarch64",
                "linux",
            ],
        },
        mips: {
            enabled: false,
        },
        mips64: {
            enabled: false,
        },
        x86: {
            cflags: ["-DI386=1"] + ["-DHAVE_STRUCT___OLD_KERNEL_STAT=1"],

            local_include_dirs: [
                "linux/i386",
                "linux",
            ],
        },
        x86_64: {
            cflags: ["-DX86_64=1"],

            local_include_dirs: [
                "linux/x86_64",
                "linux",
            ],
        },
    },

    name: "strace",

}
