project(armhf-sysroot) # Allow Custom Sysroot set(MCPI_CUSTOM_BUNDLED_ARMHF_SYSROOT "" CACHE PATH "Custom Bundled ARMHF Sysroot") if(MCPI_CUSTOM_BUNDLED_ARMHF_SYSROOT) # Custom Sysroot set(SYSROOT_DIR "${MCPI_CUSTOM_BUNDLED_ARMHF_SYSROOT}") else() # Download From APT set(APT_PACKAGES "libc6" "libstdc++6") # Copy To Binary Directory set(APT_DIR "${CMAKE_CURRENT_BINARY_DIR}/apt") file(REMOVE_RECURSE "${APT_DIR}") file(MAKE_DIRECTORY "${APT_DIR}") # Make Directories file(MAKE_DIRECTORY "${APT_DIR}/apt.conf.d") file(MAKE_DIRECTORY "${APT_DIR}/preferences.d") file(MAKE_DIRECTORY "${APT_DIR}/keys") file(MAKE_DIRECTORY "${APT_DIR}/dpkg") file(TOUCH "${APT_DIR}/dpkg/status") # Create APT Sources execute_process( COMMAND "${CMAKE_SOURCE_DIR}/scripts/tools/get-apt-sources.sh" OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE APT_SOURCES RESULT_VARIABLE APT_SOURCES_RESULT ) if(NOT APT_SOURCES_RESULT EQUAL 0) message(FATAL_ERROR "Unable To Get APT Sources For ARMHF Sysroot") endif() file(WRITE "${APT_DIR}/sources.list" "${APT_SOURCES}") # Create APT Config string(CONCAT APT_CONFIG "Dir \"${APT_DIR}\";\n" "Dir::State \"${APT_DIR}\";\n" "Dir::Cache \"${APT_DIR}\";\n" "Dir::Etc::Main \"${APT_DIR}/apt.conf\";\n" "Dir::Etc::Parts \"${APT_DIR}/apt.conf.d\";\n" "Dir::Etc::SourceList \"${APT_DIR}/sources.list\";\n" "Dir::Etc::SourceListParts \"${APT_DIR}/sources.list.d\";\n" "Dir::Etc::PreferencesParts \"${APT_DIR}/preferences.d\";\n" "Dir::Etc::TrustedParts \"${APT_DIR}/keys\";\n" "Dir::State::status \"${APT_DIR}/dpkg/status\";\n" "Dir::Ignore-Files-Silently \"False\";\n" "APT::Install-Recommends \"False\";\n" "APT::Install-Suggests \"False\";\n" "APT::Immediate-Configure \"False\";\n" "APT::Architecture \"armhf\";\n" "APT::Architectures { \"armhf\"; }\n" "Acquire::Languages \"none\";\n" "APT::Get::AllowUnauthenticated \"True\";\n" "Acquire::AllowInsecureRepositories \"True\";\n" ) file(WRITE "${APT_DIR}/apt.conf" "${APT_CONFIG}") # Environment set(APT_ENV "${CMAKE_COMMAND}" -E env "DEBIAN_FRONTEND=noninteractive" "APT_CONFIG=${APT_DIR}/apt.conf" ) # Create Sysroot Directory set(SYSROOT_DIR "${CMAKE_CURRENT_BINARY_DIR}/sysroot") file(REMOVE_RECURSE "${SYSROOT_DIR}") file(MAKE_DIRECTORY "${SYSROOT_DIR}") # Download add_custom_command( OUTPUT "${APT_DIR}/.update-stamp" COMMAND ${APT_ENV} apt-get update COMMAND "${CMAKE_COMMAND}" -E touch "${APT_DIR}/.update-stamp" VERBATIM ) add_custom_command( OUTPUT "${APT_DIR}/.download-stamp" DEPENDS "${APT_DIR}/.update-stamp" COMMAND ${APT_ENV} apt-get install -y --no-install-recommends --download-only ${APT_PACKAGES} COMMAND "${CMAKE_COMMAND}" -E touch "${APT_DIR}/.download-stamp" VERBATIM ) add_custom_command( OUTPUT "${APT_DIR}/.extract-stamp" DEPENDS "${APT_DIR}/.download-stamp" COMMAND ${APT_ENV} find "${APT_DIR}/archives" -maxdepth 1 -type f -name "*.deb" -exec dpkg -x {} "${SYSROOT_DIR}" ";" COMMAND "${CMAKE_COMMAND}" -E touch "${APT_DIR}/.extract-stamp" VERBATIM ) add_custom_target(armhf-sysroot ALL DEPENDS "${APT_DIR}/.extract-stamp") endif() # Install install( DIRECTORY "${SYSROOT_DIR}/" DESTINATION "${MCPI_INSTALL_DIR}/sysroot" USE_SOURCE_PERMISSIONS REGEX "usr/lib/arm-linux-gnueabihf/gconv" EXCLUDE REGEX "usr/lib/arm-linux-gnueabihf/audit" EXCLUDE REGEX "usr/share/man" EXCLUDE REGEX "usr/share/doc/.*/README\..*" EXCLUDE REGEX "usr/share/doc/.*/changelog\..*" EXCLUDE REGEX "usr/share/doc/.*/NEWS\..*" EXCLUDE REGEX "usr/share/doc/.*/TODO\..*" EXCLUDE REGEX "usr/share/lintian" EXCLUDE REGEX "usr/share/gcc" EXCLUDE REGEX "usr/share/gdb" EXCLUDE REGEX "usr/share/locale" EXCLUDE REGEX "usr/share/help" EXCLUDE REGEX "etc" EXCLUDE )