113 lines
3.5 KiB
CMake
113 lines
3.5 KiB
CMake
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} HINTS $ENV{CROSS_COMPILE_BIN_PATH} NO_DEFAULT_PATH REQUIRED)
|
|
find_program (CMAKE_CXX_COMPILER ${CROSS_COMPILE_CXX} HINTS $ENV{CROSS_COMPILE_BIN_PATH} NO_DEFAULT_PATH 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)
|