diff --git a/dependencies/armhf-sysroot/CMakeLists.txt b/dependencies/armhf-sysroot/CMakeLists.txt index e8feafbe..24fd2239 100644 --- a/dependencies/armhf-sysroot/CMakeLists.txt +++ b/dependencies/armhf-sysroot/CMakeLists.txt @@ -1,87 +1,94 @@ project(armhf-sysroot) -# Packages -set(APT_PACKAGES "libc6" "libstdc++6") +# 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") -# 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}" + # Reconfigure CMake If APT Data Is Changed + 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-build") + 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" ) -endforeach() + file(WRITE "${APT_DIR}/apt.conf" "${APT_CONFIG}") -# Copy To Binary Directory -set(APT_DIR "${CMAKE_CURRENT_BINARY_DIR}/apt-build") -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") + # Environment + set(APT_ENV + "${CMAKE_COMMAND}" + -E env + "DEBIAN_FRONTEND=noninteractive" + "APT_CONFIG=${APT_DIR}/apt.conf" + ) -# 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}") + # Create Sysroot Directory + set(SYSROOT_DIR "${CMAKE_CURRENT_BINARY_DIR}/sysroot") + file(REMOVE_RECURSE "${SYSROOT_DIR}") + file(MAKE_DIRECTORY "${SYSROOT_DIR}") -# 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") + # 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(