forked from espressif/esp-idf
Merge branch 'feature/add_bsd_fls' into 'master'
feat(linux): added fls() on Linux See merge request espressif/esp-idf!28807
This commit is contained in:
@@ -3,10 +3,14 @@ if(NOT "${target}" STREQUAL "linux")
|
|||||||
return()
|
return()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(includes "include")
|
||||||
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
|
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
list(APPEND srcs getrandom.c assert_func.c)
|
list(APPEND srcs getrandom.c assert_func.c)
|
||||||
|
else()
|
||||||
|
list(APPEND srcs fls.c)
|
||||||
|
list(APPEND includes "linux_include")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
idf_component_register(INCLUDE_DIRS include
|
idf_component_register(INCLUDE_DIRS ${includes}
|
||||||
REQUIRED_IDF_TARGETS linux
|
REQUIRED_IDF_TARGETS linux
|
||||||
SRCS ${srcs})
|
SRCS ${srcs})
|
||||||
|
18
components/linux/fls.c
Normal file
18
components/linux/fls.c
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: Copyright (c) 1990, 1993 The Regents of the University of California. All rights reserved.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-4-Clause-UC
|
||||||
|
*
|
||||||
|
* SPDX-FileContributor: 2024 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "strings.h"
|
||||||
|
|
||||||
|
int fls(unsigned int mask)
|
||||||
|
{
|
||||||
|
if (mask == 0) {
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (sizeof(mask) << 3) - __builtin_clz(mask);
|
||||||
|
}
|
23
components/linux/linux_include/strings.h
Normal file
23
components/linux/linux_include/strings.h
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is a helper include for fls(), which is present in the ESP-IDF toolchains and MacOS, but not on Linux.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int fls(unsigned int value);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include_next <strings.h>
|
6
components/linux/test_apps/.build-test-rules.yml
Normal file
6
components/linux/test_apps/.build-test-rules.yml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# Documentation: .gitlab/ci/README.md#manifest-file-to-control-the-buildtest-apps
|
||||||
|
|
||||||
|
components/linux/test_apps/linux_test:
|
||||||
|
enable:
|
||||||
|
- if: IDF_TARGET in ["linux"]
|
||||||
|
reason: Test app is specifically for the linux target
|
9
components/linux/test_apps/linux_test/CMakeLists.txt
Normal file
9
components/linux/test_apps/linux_test/CMakeLists.txt
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
# For more information about build system see
|
||||||
|
# https://docs.espressif.com/projects/esp-idf/en/latest/api-guides/build-system.html
|
||||||
|
# The following five lines of boilerplate have to be in your project's
|
||||||
|
# CMakeLists in this exact order for cmake to work correctly
|
||||||
|
cmake_minimum_required(VERSION 3.16)
|
||||||
|
|
||||||
|
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
|
||||||
|
set(COMPONENTS main)
|
||||||
|
project(linux_test)
|
2
components/linux/test_apps/linux_test/README.md
Normal file
2
components/linux/test_apps/linux_test/README.md
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
| Supported Targets | Linux |
|
||||||
|
| ----------------- | ----- |
|
@@ -0,0 +1,3 @@
|
|||||||
|
idf_component_register(SRCS "linux_test.c"
|
||||||
|
INCLUDE_DIRS "."
|
||||||
|
PRIV_REQUIRES unity)
|
51
components/linux/test_apps/linux_test/main/linux_test.c
Normal file
51
components/linux/test_apps/linux_test/main/linux_test.c
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "unity.h"
|
||||||
|
#include "unity_test_runner.h"
|
||||||
|
#include "unity_test_utils_memory.h"
|
||||||
|
#include "esp_log.h"
|
||||||
|
#include <strings.h>
|
||||||
|
|
||||||
|
static const char* TAG = "event_test_app";
|
||||||
|
|
||||||
|
void setUp(void)
|
||||||
|
{
|
||||||
|
// If heap tracing is enabled in kconfig, leak trace the test
|
||||||
|
unity_utils_set_leak_level(0);
|
||||||
|
unity_utils_record_free_mem();
|
||||||
|
}
|
||||||
|
|
||||||
|
void tearDown(void)
|
||||||
|
{
|
||||||
|
unity_utils_evaluate_leaks();
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("fls(0) = 0", "[fls]")
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL(0, fls(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("fls(1) = 1", "[fls]")
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL(1, fls(1));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("fls(0xF000) = 16", "[fls]")
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL(16, fls(0xF000));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("fls(0x80000000) = 32", "[fls]")
|
||||||
|
{
|
||||||
|
TEST_ASSERT_EQUAL(32, fls(0x80000000));
|
||||||
|
}
|
||||||
|
|
||||||
|
void app_main(void)
|
||||||
|
{
|
||||||
|
ESP_LOGI(TAG, "Running linux test app");
|
||||||
|
unity_run_menu();
|
||||||
|
}
|
12
components/linux/test_apps/linux_test/pytest_linux_test.py
Normal file
12
components/linux/test_apps/linux_test/pytest_linux_test.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2024 Espressif Systems (Shanghai) CO LTD
|
||||||
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
import pytest
|
||||||
|
from pytest_embedded_idf.dut import IdfDut
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.linux
|
||||||
|
@pytest.mark.host_test
|
||||||
|
def test_linux_component(dut: IdfDut) -> None:
|
||||||
|
dut.expect_exact('Press ENTER to see the list of tests.')
|
||||||
|
dut.write('![ignore]')
|
||||||
|
dut.expect(r'\d{1} Tests 0 Failures 0 Ignored', timeout=10)
|
1
components/linux/test_apps/linux_test/sdkconfig.defaults
Normal file
1
components/linux/test_apps/linux_test/sdkconfig.defaults
Normal file
@@ -0,0 +1 @@
|
|||||||
|
CONFIG_IDF_TARGET="linux"
|
@@ -104,6 +104,13 @@ ethernet_component:
|
|||||||
- Apache-2.0
|
- Apache-2.0
|
||||||
- MIT # To allow contributed drivers
|
- MIT # To allow contributed drivers
|
||||||
|
|
||||||
|
linux_component:
|
||||||
|
include:
|
||||||
|
- 'components/linux/fls.c'
|
||||||
|
allowed_licenses:
|
||||||
|
- Apache-2.0
|
||||||
|
- BSD-4-Clause-UC
|
||||||
|
|
||||||
systemview:
|
systemview:
|
||||||
include:
|
include:
|
||||||
- 'components/app_trace/sys_view'
|
- 'components/app_trace/sys_view'
|
||||||
|
Reference in New Issue
Block a user