# -*- mode: makefile -*-
#
# Copyright (c) 2019-2021, NVIDIA CORPORATION.  All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the "Software"),
# to deal in the Software without restriction, including without limitation
# the rights to use, copy, modify, merge, publish, distribute, sublicense,
# and/or sell copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.

include $(NVGPU_SRC)/Makefile.sources
include $(NVGPU_NEXT_SRC)/Makefile.sources

OBJS := $(srcs:%.c=$(NVGPU_OUT)/%.o) $(srcs_next:%.c=$(NVGPU_OUT)/%.o)

HEADERS :=	\
	$(NVGPU_SRC)/include/nvgpu/*.h		\
	$(NVGPU_SRC)/include/nvgpu/hw/*/*.h

CORE_OBJS :=	\
	$(CORE_OUT)/unit_main.o			\
	$(CORE_OUT)/nvgpu.o			\
	$(CORE_OUT)/args.o			\
	$(CORE_OUT)/io.o			\
	$(CORE_OUT)/module.o			\
	$(CORE_OUT)/required_tests.o		\
	$(CORE_OUT)/results.o			\
	$(CORE_OUT)/exec.o

CORE_HEADERS :=	\
	$(CORE_SRC)/../include/unit/*.h

# Each directory under the UNIT_SRC directory should correspond to one module.
UNITS :=				\
	$(UNIT_SRC)/posix/env		\
	$(UNIT_SRC)/posix/bitops	\
	$(UNIT_SRC)/posix/fault-injection \
	$(UNIT_SRC)/posix/bug		\
	$(UNIT_SRC)/posix/os_sched	\
	$(UNIT_SRC)/posix/log2		\
	$(UNIT_SRC)/posix/sizes		\
	$(UNIT_SRC)/posix/thread	\
	$(UNIT_SRC)/posix/cond		\
	$(UNIT_SRC)/posix/timers	\
	$(UNIT_SRC)/posix/kmem		\
	$(UNIT_SRC)/posix/rwsem		\
	$(UNIT_SRC)/posix/queue		\
	$(UNIT_SRC)/posix/utils		\
	$(UNIT_SRC)/posix/circ_buf	\
	$(UNIT_SRC)/bus			\
	$(UNIT_SRC)/pramin		\
	$(UNIT_SRC)/ptimer		\
	$(UNIT_SRC)/priv_ring		\
	$(UNIT_SRC)/init		\
	$(UNIT_SRC)/interface/bit-utils	\
	$(UNIT_SRC)/interface/lock	\
	$(UNIT_SRC)/interface/nvgpu_gk20a	\
	$(UNIT_SRC)/interface/atomic	\
	$(UNIT_SRC)/interface/rbtree	\
	$(UNIT_SRC)/interface/static_analysis	\
	$(UNIT_SRC)/interface/string	\
	$(UNIT_SRC)/interface/worker	\
	$(UNIT_SRC)/interface/kref	\
	$(UNIT_SRC)/interface/list	\
	$(UNIT_SRC)/mc			\
	$(UNIT_SRC)/mm/nvgpu_sgt	\
	$(UNIT_SRC)/mm/allocators/buddy_allocator	\
	$(UNIT_SRC)/mm/allocators/nvgpu_allocator	\
	$(UNIT_SRC)/mm/allocators/bitmap_allocator	\
	$(UNIT_SRC)/mm/allocators/page_allocator	\
        $(UNIT_SRC)/mm/as		\
	$(UNIT_SRC)/mm/dma		\
	$(UNIT_SRC)/mm/gmmu/pd_cache	\
	$(UNIT_SRC)/mm/gmmu/page_table	\
	$(UNIT_SRC)/mm/hal/cache/flush_gk20a_fusa	\
	$(UNIT_SRC)/mm/hal/cache/flush_gv11b_fusa	\
	$(UNIT_SRC)/mm/hal/gmmu/gmmu_gk20a_fusa		\
	$(UNIT_SRC)/mm/hal/gmmu/gmmu_gm20b_fusa		\
	$(UNIT_SRC)/mm/hal/gmmu/gmmu_gp10b_fusa		\
	$(UNIT_SRC)/mm/hal/gmmu/gmmu_gv11b_fusa		\
	$(UNIT_SRC)/mm/hal/gp10b_fusa	\
	$(UNIT_SRC)/mm/hal/gv11b_fusa	\
	$(UNIT_SRC)/mm/hal/mmu_fault/gv11b_fusa		\
	$(UNIT_SRC)/mm/mm		\
	$(UNIT_SRC)/mm/page_table_faults \
	$(UNIT_SRC)/mm/nvgpu_mem	\
	$(UNIT_SRC)/mm/vm		\
	$(UNIT_SRC)/netlist		\
        $(UNIT_SRC)/fb 	        	\
	$(UNIT_SRC)/fbp			\
	$(UNIT_SRC)/fifo		\
	$(UNIT_SRC)/fifo/fifo/gk20a	\
	$(UNIT_SRC)/fifo/fifo/gv11b	\
	$(UNIT_SRC)/fifo/channel	\
	$(UNIT_SRC)/fifo/channel/gk20a	\
	$(UNIT_SRC)/fifo/channel/gm20b	\
	$(UNIT_SRC)/fifo/channel/gv11b	\
	$(UNIT_SRC)/fifo/ctxsw_timeout/gv11b            \
	$(UNIT_SRC)/fifo/engine		\
	$(UNIT_SRC)/fifo/engine/gm20b	\
	$(UNIT_SRC)/fifo/engine/gp10b	\
	$(UNIT_SRC)/fifo/engine/gv100	\
	$(UNIT_SRC)/fifo/engine/gv11b	\
	$(UNIT_SRC)/fifo/fifo		\
	$(UNIT_SRC)/fifo/pbdma		\
	$(UNIT_SRC)/fifo/pbdma/gm20b	\
	$(UNIT_SRC)/fifo/pbdma/gp10b	\
	$(UNIT_SRC)/fifo/pbdma/gv11b	\
	$(UNIT_SRC)/fifo/preempt	\
	$(UNIT_SRC)/fifo/preempt/gv11b	\
	$(UNIT_SRC)/fifo/ramfc/gp10b	\
	$(UNIT_SRC)/fifo/ramfc/gv11b	\
	$(UNIT_SRC)/fifo/ramin/gk20a	\
	$(UNIT_SRC)/fifo/ramin/gm20b	\
	$(UNIT_SRC)/fifo/ramin/gv11b	\
	$(UNIT_SRC)/fifo/runlist	\
	$(UNIT_SRC)/fifo/runlist/gk20a	\
	$(UNIT_SRC)/fifo/runlist/gv11b	\
	$(UNIT_SRC)/fifo/tsg		\
	$(UNIT_SRC)/fifo/tsg/gv11b	\
	$(UNIT_SRC)/fifo/userd/gk20a	\
	$(UNIT_SRC)/fifo/usermode/gv11b	\
	$(UNIT_SRC)/ltc			\
	$(UNIT_SRC)/enabled		\
	$(UNIT_SRC)/falcon		\
	$(UNIT_SRC)/falcon/falcon_tests	\
	$(UNIT_SRC)/fuse		\
	$(UNIT_SRC)/pmu			\
	$(UNIT_SRC)/therm		\
	$(UNIT_SRC)/top			\
	$(UNIT_SRC)/class		\
	$(UNIT_SRC)/gr			\
	$(UNIT_SRC)/gr/falcon		\
	$(UNIT_SRC)/gr/config		\
	$(UNIT_SRC)/gr/init		\
	$(UNIT_SRC)/gr/fs_state		\
	$(UNIT_SRC)/gr/global_ctx	\
	$(UNIT_SRC)/gr/ctx		\
	$(UNIT_SRC)/gr/obj_ctx		\
	$(UNIT_SRC)/gr/intr		\
	$(UNIT_SRC)/gr/setup		\
	$(UNIT_SRC)/acr			\
	$(UNIT_SRC)/ce			\
	$(UNIT_SRC)/cg                  \
	$(UNIT_SRC)/rc                  \
	$(UNIT_SRC)/sync		\
	$(UNIT_SRC)/ecc			\
	$(UNIT_SRC)/io
