project(armhf-sysroot) # Packages set(APT_PACKAGES "libc6" "libstdc++6") # Trigger Reconfigure On APT Change file(GLOB_RECURSE APT_FILES "apt/*") foreach(APT_FILE IN LISTS APT_FILES) set_property( DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${APT_FILE}" ) endforeach() # Copy To Binary Directory set(APT_DIR "${CMAKE_CURRENT_BINARY_DIR}/apt") file(REMOVE_RECURSE "${APT_DIR}") file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/apt/." DESTINATION "${APT_DIR}") # Make Directories file(MAKE_DIRECTORY "${APT_DIR}/apt.conf.d") file(MAKE_DIRECTORY "${APT_DIR}/preferences.d") file(MAKE_DIRECTORY "${APT_DIR}/dpkg") file(TOUCH "${APT_DIR}/dpkg/status") # 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 \"False\";\n" "Acquire::AllowInsecureRepositories \"False\";\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 touch ARGS "${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 touch ARGS "${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 touch ARGS "${APT_DIR}/.extract-stamp" VERBATIM ) add_custom_target(armhf-sysroot ALL DEPENDS "${APT_DIR}/.extract-stamp") # 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 )