# CMakeLists template for shared library
cmake_minimum_required(VERSION 3.12)

# Toolchain file targetting armhf platform
set(CMAKE_TOOLCHAIN_FILE "toolchain.cmake")

# Set project name
project(adrv900x-cmake)

# Enable verbose output from Makefile builds
set(CMAKE_VERBOSE_MAKEFILE ON)

# C files compilation flags
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -std=c99 -D_DEFAULT_SOURCE -DADRV9001_ZCU102_OFFSET")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -UADI_VALIDATE_PARAMS -DADI_COMMON_VERBOSE -DADI_DYNAMIC_PROFILE_LOAD -DADI_ADRV9001_ARM_VERBOSE -DADRV9001_BITFIELD_NULL_CHECK")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DADI_FPGA9001_USE_DYNAMIC_MEMORY")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_POSIX_C_SOURCE=199309L")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w")

# Traverse specified subdirectories and put all files 
# that match the pattern(.h/.c) in the variables 
# `DEPS` and `SRCS`.
file(GLOB_RECURSE DEPS "${CMAKE_CURRENT_SOURCE_DIR}/cmake_build/*.h")
file(GLOB_RECURSE SRCS CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/cmake_build/*.c")

# Exclude/remove items from the compile files list that match the mode’s pattern
list(FILTER DEPS EXCLUDE REGEX "${CMAKE_CURRENT_SOURCE_DIR}/cmake_build/c_src/third_party/jsmn/example/.*h" )
list(FILTER DEPS EXCLUDE REGEX "${CMAKE_CURRENT_SOURCE_DIR}/cmake_build/c_src/third_party/jsmn/test/.*h" )
list(FILTER DEPS EXCLUDE REGEX "${CMAKE_CURRENT_SOURCE_DIR}/cmake_build/c_src/devices/adrv9001/private/include/a0/.*h" )
list(FILTER SRCS EXCLUDE REGEX "${CMAKE_CURRENT_SOURCE_DIR}/cmake_build/c_src/third_party/fru_tools/operating-system.c" )
list(FILTER SRCS EXCLUDE REGEX "${CMAKE_CURRENT_SOURCE_DIR}/cmake_build/c_src/third_party/jsmn/example/.*c" )	
list(FILTER SRCS EXCLUDE REGEX "${CMAKE_CURRENT_SOURCE_DIR}/cmake_build/c_src/third_party/jsmn/test/.*c" )
list(FILTER SRCS EXCLUDE REGEX "${CMAKE_CURRENT_SOURCE_DIR}/cmake_build/c_src/devices/adrv9001/private/src/a0/.*c" )
list(FILTER SRCS EXCLUDE REGEX "${CMAKE_CURRENT_SOURCE_DIR}/cmake_build/c_src/third_party/cliopts/*.c" )

# Finds all header files and add the directories to CFLAGS with -I option
foreach(file_path ${DEPS})
    set(path ${file_path})
    cmake_path(REMOVE_FILENAME path)
    list(APPEND header_path ${path})
endforeach()

list(REMOVE_DUPLICATES header_path)
include_directories(header_path)

foreach(file_path ${header_path})
	string(APPEND CMAKE_C_FLAGS " -I" ${file_path})
endforeach()

# Project executable using the specified source files
add_executable(cmake-example ${SRCS})