diff --git a/.github/workflows/build_and_run_examples.yml b/.github/workflows/build_and_run_examples.yml index 57a99c2b3d..63e2af5474 100644 --- a/.github/workflows/build_and_run_examples.yml +++ b/.github/workflows/build_and_run_examples.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-20.04 container: espressif/idf:${{ matrix.idf_ver }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: 'true' - name: Build Examples @@ -30,9 +30,9 @@ jobs: export EXTRA_CXXFLAGS="${PEDANTIC_FLAGS}" idf-build-apps find --config sdkconfig.ci idf-build-apps build --ignore-warning-file .ignore_build_warnings.txt --config sdkconfig.ci --parallel-index ${{ matrix.parallel_index }} - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: - name: example_binaries_${{ matrix.idf_ver }} + name: example_binaries_${{ matrix.idf_ver }}_${{ matrix.parallel_index }} path: | */examples/*/build_esp*/bootloader/bootloader.bin */examples/*/build_esp*/partition_table/partition-table.bin @@ -50,16 +50,15 @@ jobs: idf_ver: ["release-v5.0", "release-v5.1", "release-v5.2", "release-v5.3", "latest"] idf_target: ["esp32"] runs-on: [self-hosted, linux, docker, "${{ matrix.idf_target }}"] - env: - ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true container: - image: python:3.7-buster + image: python:3.11-bookworm options: --privileged # Privileged mode has access to serial ports steps: - - uses: actions/checkout@v3 - - uses: actions/download-artifact@v3 + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 with: - name: example_binaries_${{ matrix.idf_ver }} + pattern: example_binaries_${{ matrix.idf_ver }}_* + merge-multiple: true - name: Install Python packages env: PIP_EXTRA_INDEX_URL: "https://dl.espressif.com/pypi/" @@ -81,16 +80,15 @@ jobs: idf_ver: ["release-v5.0", "release-v5.1", "release-v5.2", "release-v5.3", "latest"] idf_target: ["esp32"] runs-on: [self-hosted, ESP32-ETHERNET-KIT] - env: - ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true container: - image: python:3.7-buster + image: python:3.11-bookworm options: --privileged # Privileged mode has access to serial ports steps: - - uses: actions/checkout@v3 - - uses: actions/download-artifact@v3 + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 with: - name: example_binaries_${{ matrix.idf_ver }} + pattern: example_binaries_${{ matrix.idf_ver }}_* + merge-multiple: true - name: Install Python packages env: PIP_EXTRA_INDEX_URL: "https://dl.espressif.com/pypi/" diff --git a/.github/workflows/build_and_run_test_app.yml b/.github/workflows/build_and_run_test_app.yml index 7004593b16..efe9a3b87d 100644 --- a/.github/workflows/build_and_run_test_app.yml +++ b/.github/workflows/build_and_run_test_app.yml @@ -31,7 +31,7 @@ jobs: export EXTRA_CFLAGS="${PEDANTIC_FLAGS} -Wstrict-prototypes" export EXTRA_CXXFLAGS="${PEDANTIC_FLAGS}" idf.py build - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 with: name: test_app_bin_${{ matrix.idf_target }}_${{ matrix.idf_ver }} path: | @@ -41,27 +41,6 @@ jobs: test_app/build/idf_extra_test_app.elf test_app/build/flasher_args.json - # Keeping this here for future reference. QEMU tests are not passing now - #run-qemu: - # name: Run Test App in QEMU - # needs: build - # strategy: - # matrix: - # idf_ver: ["release-v4.4", "latest"] #FIXME: QEMU is crashing with v4.3 build - # runs-on: ubuntu-20.04 - # container: ageon/pytest_env - # steps: - # - uses: actions/checkout@v2 - # with: - # fetch-depth: 0 - # - uses: actions/download-artifact@v2 - # with: - # name: test_app_bin_esp32_${{ matrix.idf_ver }} - # path: test_app/build - # - name: Run Test App in QEMU - # working-directory: test_app - # run: pytest -s --junit-xml=./test_app_results.xml --embedded-services qemu - run-target: name: Run Test App on target if: ${{ github.repository_owner == 'espressif' }} @@ -72,14 +51,12 @@ jobs: idf_ver: ["release-v5.0", "release-v5.1", "release-v5.2", "release-v5.3", "latest"] idf_target: ["esp32", "esp32c3", "esp32s3"] runs-on: [self-hosted, linux, docker, "${{ matrix.idf_target }}"] - env: - ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true container: - image: python:3.7-buster + image: python:3.11-bookworm options: --privileged # Privileged mode has access to serial ports steps: - - uses: actions/checkout@v3 - - uses: actions/download-artifact@v2 + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 with: name: test_app_bin_${{ matrix.idf_target }}_${{ matrix.idf_ver }} path: test_app/build @@ -90,7 +67,7 @@ jobs: - name: Run Test App on target working-directory: test_app run: pytest --junit-xml=./test_app_results_${{ matrix.idf_target }}_${{ matrix.idf_ver }}.xml --target=${{ matrix.idf_target }} - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 if: always() with: name: test_app_results_${{ matrix.idf_target }}_${{ matrix.idf_ver }} @@ -103,7 +80,7 @@ jobs: runs-on: ubuntu-20.04 steps: - name: Download Test results - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v4 with: path: test_results - name: Publish Test Results diff --git a/.github/workflows/clang-tidy.yml b/.github/workflows/clang-tidy.yml index 133c9ed78a..7f890cad63 100644 --- a/.github/workflows/clang-tidy.yml +++ b/.github/workflows/clang-tidy.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-20.04 container: espressif/idf:latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: 'true' - name: Install esp-clang @@ -41,7 +41,7 @@ jobs: export PATH=$PWD:$PATH ./clang-tidy-sarif -o results.sarif.raw warnings.txt python3 $GITHUB_WORKSPACE/.github/filter_sarif.py -o results.sarif --include-prefix ${GITHUB_WORKSPACE}/ results.sarif.raw - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 with: path: | warnings.txt diff --git a/.github/workflows/issue_comment.yml b/.github/workflows/issue_comment.yml index cbb69e018d..6b65f7fac7 100644 --- a/.github/workflows/issue_comment.yml +++ b/.github/workflows/issue_comment.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest if: ${{ github.repository_owner == 'espressif' }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Sync issue comments to JIRA uses: espressif/github-actions/sync_issues_to_jira@master env: diff --git a/.github/workflows/new_issues.yml b/.github/workflows/new_issues.yml index 35fa65cbf6..5d6f900a61 100644 --- a/.github/workflows/new_issues.yml +++ b/.github/workflows/new_issues.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest if: ${{ github.repository_owner == 'espressif' }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Sync GitHub issues to Jira project uses: espressif/github-actions/sync_issues_to_jira@master env: diff --git a/.github/workflows/new_prs.yml b/.github/workflows/new_prs.yml index 5604e5cb5e..52244c0b87 100644 --- a/.github/workflows/new_prs.yml +++ b/.github/workflows/new_prs.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest if: ${{ github.repository_owner == 'espressif' }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Sync PRs to Jira project uses: espressif/github-actions/sync_issues_to_jira@master with: diff --git a/.github/workflows/pre-commit.yml b/.github/workflows/pre-commit.yml index 739c97402a..bfd0538a38 100644 --- a/.github/workflows/pre-commit.yml +++ b/.github/workflows/pre-commit.yml @@ -8,6 +8,6 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-python@v2 - uses: pre-commit/action@v2.0.3 diff --git a/.github/workflows/test_sbom.yml b/.github/workflows/test_sbom.yml index 5ac9e51c4f..e482c10f87 100644 --- a/.github/workflows/test_sbom.yml +++ b/.github/workflows/test_sbom.yml @@ -9,7 +9,7 @@ jobs: name: Run SBOM manifests validation test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - run: | git config --global safe.directory $(pwd) pip install esp-idf-sbom diff --git a/.github/workflows/upload_component.yml b/.github/workflows/upload_component.yml index 7b579f8884..d01b9c1310 100644 --- a/.github/workflows/upload_component.yml +++ b/.github/workflows/upload_component.yml @@ -14,7 +14,7 @@ jobs: upload_components: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: 'recursive' - run: | diff --git a/coap/idf_component.yml b/coap/idf_component.yml index 737900502d..a17ed3abd9 100644 --- a/coap/idf_component.yml +++ b/coap/idf_component.yml @@ -1,4 +1,4 @@ -version: "4.3.5" +version: "4.3.5~1" description: Constrained Application Protocol (CoAP) C Library url: https://github.com/espressif/idf-extra-components/tree/master/coap dependencies: diff --git a/coap/port/include/coap_config_posix.h b/coap/port/include/coap_config_posix.h index 49f3f88d31..4053bea1ff 100644 --- a/coap/port/include/coap_config_posix.h +++ b/coap/port/include/coap_config_posix.h @@ -23,6 +23,7 @@ #include #include #include +#include "lwip/init.h" #define HAVE_SYS_SOCKET_H #define HAVE_MALLOC @@ -40,10 +41,13 @@ struct in6_pktinfo { struct in6_addr ipi6_addr; /* src/dst IPv6 address */ unsigned int ipi6_ifindex; /* send/recv interface index */ }; + +#if LWIP_VERSION < 0x02020000 #define IN6_IS_ADDR_V4MAPPED(a) \ ((((__const uint32_t *) (a))[0] == 0) \ && (((__const uint32_t *) (a))[1] == 0) \ && (((__const uint32_t *) (a))[2] == htonl (0xffff))) +#endif // LWIP_VERSION < 0x02020000 /* As not defined, just need to define is as something innocuous */ #define IPV6_PKTINFO IPV6_CHECKSUM diff --git a/spi_nand_flash/idf_component.yml b/spi_nand_flash/idf_component.yml index 0827276fdf..0d4f316cc6 100644 --- a/spi_nand_flash/idf_component.yml +++ b/spi_nand_flash/idf_component.yml @@ -1,4 +1,4 @@ -version: "0.3.0" +version: "0.3.1" description: Driver for accessing SPI NAND Flash url: https://github.com/espressif/idf-extra-components/tree/master/spi_nand_flash issues: https://github.com/espressif/idf-extra-components/issues diff --git a/spi_nand_flash/src/nand.c b/spi_nand_flash/src/nand.c index 515cc4b584..7415551eee 100644 --- a/spi_nand_flash/src/nand.c +++ b/spi_nand_flash/src/nand.c @@ -203,7 +203,7 @@ esp_err_t spi_nand_flash_init_device(spi_nand_flash_config_t *config, spi_nand_f config->gc_factor = 45; } - *handle = calloc(sizeof(spi_nand_flash_device_t), 1); + *handle = calloc(1, sizeof(spi_nand_flash_device_t)); if (*handle == NULL) { return ESP_ERR_NO_MEM; } diff --git a/thorvg/CMakeLists.txt b/thorvg/CMakeLists.txt index 424d0564b5..f683b7e41b 100644 --- a/thorvg/CMakeLists.txt +++ b/thorvg/CMakeLists.txt @@ -4,88 +4,52 @@ set(TVG_INC_DIR thorvg/src/bindings/capi) set(TVG_SUBDIR "${CMAKE_CURRENT_SOURCE_DIR}/thorvg") set(TVG_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/thorvg_build") set(TVG_CROSS_CFG "${CMAKE_CURRENT_BINARY_DIR}/thorvg_build/cross_file.txt") - -idf_component_register(SRCS dummy.c - INCLUDE_DIRS "${TVG_INC_DIR}") - -include(ExternalProject) - -if(NOT CMAKE_CXX_FLAGS STREQUAL "") - string(REGEX MATCHALL "-[^ ]+" match_list "${CMAKE_CXX_FLAGS}") - set(MESON_CXX_FLAGS "") - - list(LENGTH match_list match_list_length) - math(EXPR last_index "${match_list_length}-1") - - foreach(index RANGE ${last_index}) - list(GET match_list ${index} match) - string(APPEND MESON_CXX_FLAGS "'${match}'") - if(NOT ${index} EQUAL ${last_index}) - string(APPEND MESON_CXX_FLAGS ", ") - endif() - endforeach() -else() - string(APPEND MESON_CXX_FLAGS "''") +set(TVG_THREADS "true") + +idf_component_register( + SRCS dummy.c + INCLUDE_DIRS "${TVG_INC_DIR}" + PRIV_REQUIRES pthread) + + +# Convert argument strings to lists, for easier processing +set(linker_args ${CMAKE_EXE_LINKER_FLAGS}) +separate_arguments(linker_args) +list(FILTER linker_args EXCLUDE REGEX "^$") +set(compiler_args ${CMAKE_CXX_FLAGS}) +separate_arguments(compiler_args) +list(FILTER compiler_args EXCLUDE REGEX "^$") + +message(STATUS "CMAKE_EXE_LINKER_FLAGS: ${linker_args}") +message(STATUS "CMAKE_CXX_FLAGS: ${compiler_args}") + +# Add pthread library path to the linker flags if threads are enabled +if(TVG_THREADS STREQUAL "true") + idf_component_get_property(pthread_lib "pthread" COMPONENT_LIB GENERATOR_EXPRESSION) + set(pthread_lib_path_expr "$") + list(APPEND linker_args "-L${pthread_lib_path_expr}") + set(TVG_REQUIRES pthread) endif() -if(NOT CMAKE_EXE_LINKER_FLAGS STREQUAL "") - string(REGEX MATCHALL "-[^ ]+" match_list "${CMAKE_EXE_LINKER_FLAGS}") - set(MESON_LINKER_FLAGS "") +# Convert the list of arguments (arg;arg;arg) to a string "'arg', 'arg', 'arg'" +list(JOIN compiler_args "', '" MESON_CXX_FLAGS) +set(MESON_CXX_FLAGS "'${MESON_CXX_FLAGS}'") +list(JOIN linker_args "', '" MESON_LINKER_FLAGS) +set(MESON_LINKER_FLAGS "'${MESON_LINKER_FLAGS}'") - list(LENGTH match_list match_list_length) - math(EXPR last_index "${match_list_length}-1") - - foreach(index RANGE ${last_index}) - list(GET match_list ${index} match) - string(APPEND MESON_LINKER_FLAGS "'${match}'") - if(NOT ${index} EQUAL ${last_index}) - string(APPEND MESON_LINKER_FLAGS ", ") - endif() - endforeach() +if(CONFIG_IDF_TARGET_ARCH_RISCV) + set(cpu_family "riscv32") else() - string(APPEND MESON_LINKER_FLAGS "''") -endif() - -function(replace_tool_name last_name output_variable) - set(old_string "${_CMAKE_TOOLCHAIN_PREFIX}g++") - set(new_string "${_CMAKE_TOOLCHAIN_PREFIX}${last_name}") - string(REPLACE "${old_string}" "${new_string}" ${output_variable} "${CMAKE_CXX_COMPILER}") - set(${output_variable} "${${output_variable}}" PARENT_SCOPE) -endfunction() - -replace_tool_name("ar" ar_path) -replace_tool_name("as" as_path) -replace_tool_name("ranlib" ranlib_path) -replace_tool_name("ld" ld_path) -replace_tool_name("strip" srtip_path) - -file(WRITE ${TVG_CROSS_CFG} " -[binaries] -cpp = '${CMAKE_CXX_COMPILER}' -ar = '${ar_path}' -as = '${as_path}' -ranlib = '${ranlib_path}' -ld = '${ld_path}' -strip = '${srtip_path}' - -[built-in options] -cpp_args = ['-D_GNU_SOURCE','-D__linux__',${MESON_CXX_FLAGS}] -") - -if(NOT MESON_LINKER_FLAGS STREQUAL "''") - file(APPEND ${TVG_CROSS_CFG} " -cpp_link_args = [${MESON_LINKER_FLAGS}] -") + set(cpu_family "xtensa") endif() -file(APPEND ${TVG_CROSS_CFG} " -[host_machine] -system = 'android' -cpu_family = '${CMAKE_SYSTEM}' -cpu = 'esp' -endian = 'little' -") - +# Two-step generation of cross_file.txt to expand CMake variables... +configure_file(${CMAKE_CURRENT_LIST_DIR}/cross_file.txt.in ${TVG_CROSS_CFG}.tmp) +# ...and then expand generator expressions +file(GENERATE OUTPUT ${TVG_CROSS_CFG} INPUT ${TVG_CROSS_CFG}.tmp) + +include(ExternalProject) + ExternalProject_Add(${TVG_LIB}_target PREFIX ${TVG_BUILD_DIR} SOURCE_DIR ${TVG_SUBDIR} @@ -96,13 +60,17 @@ ExternalProject_Add(${TVG_LIB}_target -Dextra= -Ddefault_library=static # build static library -Db_staticpic=false # no -fPIC - -Dthreads=true # allow multi-threading + -Dthreads=${TVG_THREADS} BUILD_COMMAND ninja -C ${TVG_BUILD_DIR} INSTALL_COMMAND "" BUILD_BYPRODUCTS ${TVG_BUILD_DIR}/src/${TVG_LIB}.a ) -add_prebuilt_library(${TVG_LIB} ${TVG_BUILD_DIR}/src/${TVG_LIB}.a PRIV_REQUIRES pthread) +add_prebuilt_library(${TVG_LIB} ${TVG_BUILD_DIR}/src/${TVG_LIB}.a PRIV_REQUIRES ${TVG_REQUIRES}) add_dependencies(${TVG_LIB} ${TVG_LIB}_target) +if(TVG_THREADS STREQUAL "true") + add_dependencies(${TVG_LIB}_target idf::pthread) +endif() + target_link_libraries(${COMPONENT_LIB} INTERFACE ${TVG_LIB}) diff --git a/thorvg/cross_file.txt.in b/thorvg/cross_file.txt.in new file mode 100644 index 0000000000..b896109087 --- /dev/null +++ b/thorvg/cross_file.txt.in @@ -0,0 +1,17 @@ +[binaries] +cpp = '${CMAKE_CXX_COMPILER}' +ar = '${CMAKE_CXX_COMPILER_AR}' +as = '${CMAKE_ASM_COMPILER}' +ranlib = '${CMAKE_CXX_COMPILER_RANLIB}' +ld = '${CMAKE_LINKER}' +strip = '${CMAKE_STRIP}' + +[built-in options] +cpp_args = ['-D_GNU_SOURCE','-D__linux__',${MESON_CXX_FLAGS}] +cpp_link_args = [${MESON_LINKER_FLAGS}] + +[host_machine] +system = 'esp-idf' +cpu_family = '${cpu_family}' +cpu = 'esp' +endian = 'little' diff --git a/thorvg/examples/thorvg-example/main/CMakeLists.txt b/thorvg/examples/thorvg-example/main/CMakeLists.txt index 464a27aff3..2328325af3 100644 --- a/thorvg/examples/thorvg-example/main/CMakeLists.txt +++ b/thorvg/examples/thorvg-example/main/CMakeLists.txt @@ -3,7 +3,4 @@ idf_component_register( INCLUDE_DIRS "." PRIV_REQUIRES esp_lcd esp_timer esp_driver_ppa) -idf_component_get_property(board_lib espressif__esp32_p4_function_ev_board_noglib COMPONENT_LIB) -target_compile_options(${board_lib} PRIVATE "-Wno-unused-variable") - spiffs_create_partition_image(storage ../spiffs_content FLASH_IN_PROJECT) diff --git a/thorvg/idf_component.yml b/thorvg/idf_component.yml index 80f75dbef8..b522000fb0 100644 --- a/thorvg/idf_component.yml +++ b/thorvg/idf_component.yml @@ -1,4 +1,4 @@ -version: "0.13.8" +version: "0.13.8~1" description: "ThorVG is an open-source graphics library designed for creating vector-based scenes and animations" url: https://github.com/espressif/idf-extra-components/tree/master/thorvg repository: "https://github.com/espressif/idf-extra-components.git"