if(DEFINED ENV{ZYNQ_7020_SYSROOT})
	set(ENV{ZYNQ_7020_ROOTFS} $ENV{ZYNQ_7020_SYSROOT})
endif()
# CROSS_COMPILE also needs to be set accordingly or passed to the CMake command
if(NOT DEFINED ENV{ZYNQ_7020_ROOTFS})
    # Sysroot has not been cached yet and was not set in environment either
    if(NOT DEFINED SYSROOT_PATH)
        message(FATAL_ERROR 
            "Define the ZYNQ_7020_ROOTFS variable to point to the Zynq-7020 rootfs."
        )
    endif()
else()
	set(SYSROOT_PATH "$ENV{ZYNQ_7020_ROOTFS}" CACHE PATH "Zynq-7020 root filesystem path")
endif()

if(NOT DEFINED ENV{CROSS_COMPILE})
	set(CROSS_COMPILE "arm-linux-gnueabihf")
	message(STATUS 
		"No CROSS_COMPILE environmental variable set, using default ARM linux "
		"cross compiler name ${CROSS_COMPILE}"
	)
else()
	set(CROSS_COMPILE "$ENV{CROSS_COMPILE}")
	message(STATUS 
		"Using environmental variable CROSS_COMPILE as cross-compiler: "
		"$ENV{CROSS_COMPILE}"
	)
endif()

message(STATUS "Using sysroot path: ${SYSROOT_PATH}")

set(CROSS_COMPILE_CC "${CROSS_COMPILE}-gcc")
set(CROSS_COMPILE_CXX "${CROSS_COMPILE}-g++")
set(CROSS_COMPILE_LD "${CROSS_COMPILE}-ld")
set(CROSS_COMPILE_AR "${CROSS_COMPILE}-ar")
set(CROSS_COMPILE_RANLIB "${CROSS_COMPILE}-ranlib")
set(CROSS_COMPILE_STRIP "${CROSS_COMPILE}-strip")
set(CROSS_COMPILE_NM "${CROSS_COMPILE}-nm")
set(CROSS_COMPILE_OBJCOPY "${CROSS_COMPILE}-objcopy")
set(CROSS_COMPILE_SIZE "${CROSS_COMPILE}-size")

# At the very least, cross compile gcc and g++ have to be set!
find_program (CMAKE_C_COMPILER ${CROSS_COMPILE_CC} REQUIRED)
find_program (CMAKE_CXX_COMPILER ${CROSS_COMPILE_CXX} REQUIRED)
# Useful utilities, not strictly necessary
find_program(CMAKE_SIZE ${CROSS_COMPILE_SIZE})
find_program(CMAKE_OBJCOPY ${CROSS_COMPILE_OBJCOPY})
find_program(CMAKE_STRIP ${CROSS_COMPILE_STRIP})

set(CMAKE_CROSSCOMPILING TRUE)
set(CMAKE_SYSROOT "${SYSROOT_PATH}")

# Define name of the target system
set(CMAKE_SYSTEM_NAME "Linux")
set(CMAKE_SYSTEM_PROCESSOR "armv7")

# Define the compiler
set(CMAKE_C_COMPILER ${CROSS_COMPILE_CC})
set(CMAKE_CXX_COMPILER ${CROSS_COMPILE_CXX})

if(EIVE_SYSROOT_MAGIC)
    # List of library dirs where LD has to look. Pass them directly through gcc. 
    set(LIB_DIRS
    	"${SYSROOT_PATH}/usr/include"
        "${SYSROOT_PATH}/usr/include/linux"
    	"${SYSROOT_PATH}/usr/lib"
    	"${SYSROOT_PATH}/lib"
    	"${SYSROOT_PATH}"
    	"${SYSROOT_PATH}/usr/lib/arm-xiphos-linux-gnueabi"
    )
    # You can additionally check the linker paths if you add the 
    # flags ' -Xlinker --verbose'
    set(COMMON_FLAGS "-I${SYSROOT_PATH}/usr/lib")
    foreach(LIB ${LIB_DIRS})
    	set(COMMON_FLAGS "${COMMON_FLAGS} -L${LIB} -Wl,-rpath-link,${LIB}")
    endforeach()
endif()

set(CMAKE_PREFIX_PATH 
	"${CMAKE_PREFIX_PATH}"
	# "${SYSROOT_PATH}/usr/lib/${CROSS_COMPILE}"
)

set(C_FLAGS
    -mcpu=cortex-a9
    -mfpu=neon-vfpv3
    -mfloat-abi=hard
    ${COMMON_FLAGS}
    -lgpiod
)

if (TGT_BSP MATCHES "arm/q7s")
	set(C_FLAGS ${C_FLAGS} -lxiphos)
endif()

string (REPLACE ";" " " C_FLAGS "${C_FLAGS}")

set(CMAKE_C_FLAGS 
    ${C_FLAGS}
	CACHE STRING "C flags for Zynq-7020"
)
set(CMAKE_CXX_FLAGS 
	"${CMAKE_C_FLAGS}"
	CACHE STRING "CPP flags for Zynq-7020"
)

# search for programs in the build host directories
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)