Files
GfxCanvas/rpi1-toolchain.cmake
2026-04-03 15:08:28 -03:00

71 lines
2.5 KiB
CMake

# rpi1-toolchain.cmake - Toolchain file for Raspberry Pi 1 (ARMv6)
# Additional settings for better compatibility
set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
# Detect if we're in a try_compile invocation
# During try_compile, BUILDROOT_PATH won't be available, but that's OK
# because we set CMAKE_TRY_COMPILE_TARGET_TYPE above
get_property(_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE)
if(NOT _IN_TRY_COMPILE)
# Only validate during main configuration, not during try_compile
if(NOT BUILDROOT_PATH)
message(FATAL_ERROR
"BUILDROOT_PATH is not defined!\n"
"Please pass -DBUILDROOT_PATH=/path/to/buildroot when configuring CMake.\n"
"Example: cmake -DBUILDROOT_PATH=/home/user/rpi1/buildroot ..."
)
endif()
# Verify BUILDROOT_PATH exists
if(NOT EXISTS "${BUILDROOT_PATH}")
message(FATAL_ERROR
"BUILDROOT_PATH does not exist: ${BUILDROOT_PATH}\n"
"Please check your .env file or cmake configuration."
)
endif()
# Cache it for use in this file during try_compile
set(BUILDROOT_PATH "${BUILDROOT_PATH}" CACHE PATH "Path to buildroot directory" FORCE)
endif()
# If BUILDROOT_PATH is not set (during try_compile), try to get it from cache
if(NOT BUILDROOT_PATH)
get_property(BUILDROOT_PATH CACHE BUILDROOT_PATH PROPERTY VALUE)
endif()
# Specify the cross compiler
set(TOOLCHAIN_PREFIX ${BUILDROOT_PATH}/output/host)
set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}/bin/arm-linux-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}/bin/arm-linux-g++)
# Specify the sysroot for finding libraries and headers
set(CMAKE_SYSROOT ${TOOLCHAIN_PREFIX}/arm-buildroot-linux-gnueabihf/sysroot)
set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
# Only verify paths during main configuration
if(NOT _IN_TRY_COMPILE)
# Verify sysroot exists
if(NOT EXISTS "${CMAKE_SYSROOT}")
message(FATAL_ERROR
"Sysroot not found: ${CMAKE_SYSROOT}\n"
"Please check that buildroot is properly built."
)
endif()
endif()
# Search for programs in the build host directories
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# Search 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)
# Specify target architecture flags
set(CMAKE_C_FLAGS_INIT "-march=armv6 -mfpu=vfp -mfloat-abi=hard")
set(CMAKE_CXX_FLAGS_INIT "-march=armv6 -mfpu=vfp -mfloat-abi=hard")