2024-12-19 03:44:36 -05:00
|
|
|
# Target
|
|
|
|
set(target "arm-none-linux-gnueabihf")
|
|
|
|
|
2023-11-24 03:07:06 -05:00
|
|
|
# Pick Archive
|
2024-08-02 01:03:20 -04:00
|
|
|
set(toolchain_version "13.3.rel1")
|
2022-08-05 20:08:13 -04:00
|
|
|
execute_process(COMMAND uname -m OUTPUT_VARIABLE arch OUTPUT_STRIP_TRAILING_WHITESPACE)
|
|
|
|
if(arch STREQUAL "x86_64")
|
2024-12-19 03:44:36 -05:00
|
|
|
set(toolchain_file "arm-gnu-toolchain-${toolchain_version}-x86_64-${target}.tar.xz")
|
2022-08-05 20:08:13 -04:00
|
|
|
elseif(arch STREQUAL "aarch64" OR arch STREQUAL "armv8b" OR arch STREQUAL "armv8l")
|
2024-12-19 03:44:36 -05:00
|
|
|
set(toolchain_file "arm-gnu-toolchain-${toolchain_version}-aarch64-${target}.tar.xz")
|
2022-08-05 20:08:13 -04:00
|
|
|
else()
|
|
|
|
message(FATAL_ERROR "Unable To Download Prebuilt ARMHF Toolchain")
|
|
|
|
endif()
|
|
|
|
|
|
|
|
# Download If Needed
|
2022-08-09 18:38:48 -04:00
|
|
|
include(FetchContent)
|
2024-12-19 03:44:36 -05:00
|
|
|
FetchContent_Declare(prebuilt-armhf-toolchain
|
2024-01-20 02:10:18 -05:00
|
|
|
URL "${CMAKE_CURRENT_LIST_DIR}/../../archives/${toolchain_file}"
|
2022-08-09 18:38:48 -04:00
|
|
|
)
|
|
|
|
FetchContent_MakeAvailable(prebuilt-armhf-toolchain)
|
2022-08-10 17:21:38 -04:00
|
|
|
set(toolchain_dir "${prebuilt-armhf-toolchain_SOURCE_DIR}")
|
2022-07-08 00:25:01 -04:00
|
|
|
|
2022-08-09 18:38:48 -04:00
|
|
|
# Force Toolchain
|
|
|
|
file(WRITE "${toolchain_dir}/toolchain.cmake"
|
2024-12-19 03:44:36 -05:00
|
|
|
"set(CMAKE_C_COMPILER \"\${CMAKE_CURRENT_LIST_DIR}/bin/${target}-gcc\")\n"
|
|
|
|
"set(CMAKE_CXX_COMPILER \"\${CMAKE_CURRENT_LIST_DIR}/bin/${target}-g++\")\n"
|
2022-08-09 18:38:48 -04:00
|
|
|
"set(CMAKE_SYSTEM_NAME \"Linux\")\n"
|
|
|
|
"set(CMAKE_SYSTEM_PROCESSOR \"arm\")\n"
|
2022-09-23 17:55:38 -04:00
|
|
|
"set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)\n"
|
2022-08-09 18:38:48 -04:00
|
|
|
)
|
2024-11-24 17:42:36 -05:00
|
|
|
force_set(MCPI_CMAKE_TOOLCHAIN_FILE "${toolchain_dir}/toolchain.cmake" FILEPATH)
|
2022-07-07 18:54:11 -04:00
|
|
|
|
|
|
|
# Build Sysroot
|
2022-08-10 17:21:38 -04:00
|
|
|
set(sysroot_dir "${CMAKE_CURRENT_BINARY_DIR}/bundled-armhf-sysroot")
|
2024-12-21 05:10:13 -05:00
|
|
|
set(sysroot_dir_debug "${sysroot_dir}/debug")
|
|
|
|
set(sysroot_dir_release "${sysroot_dir}/release")
|
2024-12-19 03:44:36 -05:00
|
|
|
if("${toolchain_dir}/bin/${target}-gcc" IS_NEWER_THAN "${sysroot_dir}")
|
2022-07-07 18:54:11 -04:00
|
|
|
# Create Directory
|
2022-08-09 18:38:48 -04:00
|
|
|
file(REMOVE_RECURSE "${sysroot_dir}")
|
2024-12-21 05:10:13 -05:00
|
|
|
file(MAKE_DIRECTORY "${sysroot_dir_debug}")
|
|
|
|
file(MAKE_DIRECTORY "${sysroot_dir_release}")
|
2022-07-07 18:54:11 -04:00
|
|
|
|
|
|
|
# Copy Files From Toolchain
|
|
|
|
file(
|
2024-12-19 03:44:36 -05:00
|
|
|
COPY "${toolchain_dir}/${target}/libc/"
|
2024-12-21 05:10:13 -05:00
|
|
|
DESTINATION "${sysroot_dir_debug}"
|
2022-07-07 18:54:11 -04:00
|
|
|
USE_SOURCE_PERMISSIONS
|
|
|
|
FILES_MATCHING
|
|
|
|
PATTERN "*.so*"
|
|
|
|
)
|
|
|
|
|
2022-07-08 00:25:01 -04:00
|
|
|
# Delete Unneeded Files
|
2024-12-21 05:10:13 -05:00
|
|
|
file(REMOVE_RECURSE "${sysroot_dir_debug}/usr/lib/audit")
|
|
|
|
file(REMOVE_RECURSE "${sysroot_dir_debug}/usr/lib/gconv")
|
2022-07-08 00:25:01 -04:00
|
|
|
|
2022-07-07 18:54:11 -04:00
|
|
|
# Strip Files
|
2024-12-21 05:10:13 -05:00
|
|
|
file(COPY "${sysroot_dir_debug}/." DESTINATION "${sysroot_dir_release}")
|
|
|
|
file(GLOB_RECURSE files LIST_DIRECTORIES FALSE "${sysroot_dir_release}/*")
|
|
|
|
foreach(file IN LISTS files)
|
|
|
|
execute_process(
|
|
|
|
COMMAND "${toolchain_dir}/bin/${target}-strip" "${file}"
|
|
|
|
RESULT_VARIABLE ret
|
|
|
|
ERROR_QUIET
|
|
|
|
)
|
|
|
|
# Delete Invalid Files
|
|
|
|
if(NOT ret EQUAL 0)
|
|
|
|
file(REMOVE "${file}")
|
|
|
|
endif()
|
|
|
|
endforeach()
|
2022-07-07 18:54:11 -04:00
|
|
|
endif()
|
|
|
|
|
|
|
|
# Install Sysroot (Skipping Empty Directories)
|
2024-12-21 05:10:13 -05:00
|
|
|
function(install_arm_sysroot_config config)
|
|
|
|
set(dir "${sysroot_dir_${config}}")
|
|
|
|
file(GLOB_RECURSE files LIST_DIRECTORIES FALSE RELATIVE "${dir}" "${dir}/*")
|
2024-01-16 01:45:52 -05:00
|
|
|
foreach(file IN LISTS files)
|
2024-11-15 15:26:33 -05:00
|
|
|
cmake_path(GET file PARENT_PATH parent)
|
2024-12-21 05:10:13 -05:00
|
|
|
install(
|
|
|
|
PROGRAMS "${dir}/${file}"
|
|
|
|
DESTINATION "${MCPI_INSTALL_DIR}/sysroot/${parent}"
|
|
|
|
CONFIGURATIONS "${config}"
|
|
|
|
)
|
2024-01-16 01:45:52 -05:00
|
|
|
endforeach()
|
|
|
|
endfunction()
|
2024-12-21 05:10:13 -05:00
|
|
|
function(install_arm_sysroot)
|
|
|
|
install_arm_sysroot_config(debug)
|
|
|
|
install_arm_sysroot_config(release)
|
|
|
|
endfunction()
|