changeset 164:e2fb5e8f867f

wip, endianess is hard
author Louis Opter <kalessin@kalessin.fr>
date Fri, 03 Jul 2015 12:46:45 +0800
parents 51ed5fc06d1a
children a22f5060e38f
files fix_bit_shift_in_insert_mock_bulb.patch
diffstat 1 files changed, 86 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/fix_bit_shift_in_insert_mock_bulb.patch	Fri Jun 19 12:20:05 2015 +0800
+++ b/fix_bit_shift_in_insert_mock_bulb.patch	Fri Jul 03 12:46:45 2015 +0800
@@ -3,17 +3,101 @@
 # Parent  a6582c808671b87b60a9c3ef06e8059b07515ca3
 Fix bitshift in test_utils_insert_mock_bulb...
 
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -22,8 +22,11 @@
+ # TODO: we need at least 2.0.19-stable because of the logging defines
+ FIND_PACKAGE(Event2 REQUIRED COMPONENTS core)
+ FIND_PACKAGE(Endian REQUIRED)
++INCLUDE(TestBigEndian)
+ INCLUDE(CompatTimeMonotonic)
+ 
++TEST_BIG_ENDIAN(LGTD_BIG_ENDIAN_SYSTEM)
++
+ ### Global definitions #########################################################
+ 
+ INCLUDE(AddAllSubdirectories)
+@@ -32,6 +35,7 @@
+ SET(CMAKE_C_FLAGS "-pipe -Wextra -Wall -Wstrict-prototypes -std=c99")
+ 
+ ADD_DEFINITIONS("-DLGTD_SIZEOF_VOID_P=${CMAKE_SIZEOF_VOID_P}")
++ADD_DEFINITIONS("-DLGTD_BIG_ENDIAN_SYSTEM=${LGTD_BIG_ENDIAN_SYSTEM}")
+ 
+ # Only relevant for the GNU libc:
+ ADD_DEFINITIONS(
+diff --git a/CMakeScripts/CompatTimeMonotonic.cmake b/CMakeScripts/CompatTimeMonotonic.cmake
+--- a/CMakeScripts/CompatTimeMonotonic.cmake
++++ b/CMakeScripts/CompatTimeMonotonic.cmake
+@@ -24,8 +24,16 @@
+             TIME_MONOTONIC_LIBRARY time_monotonic
+             CACHE INTERNAL "lgtd_time_monotonic (POSIX generic implementation)"
+         )
+-        ADD_LIBRARY(${TIME_MONOTONIC_LIBRARY} STATIC "${GENERIC_TIME_MONOTONIC_IMPL}")
+-        TARGET_LINK_LIBRARIES(${TIME_MONOTONIC_LIBRARY} ${CLOCK_GETTIME_LIBRARY})
++        SET(
++            TIME_MONOTONIC_IMPL time_monotonic
++            CACHE INTERNAL "lgtd_time_monotonic (POSIX generic source)"
++        )
++        IF (CLOCK_GETTIME_LIBRARY)
++            SET(
++                TIME_MONOTONIC_LIBRARY_DEP
++                CACHE INTERNAL ${CLOCK_GETTIME_LIBRARY} "dependency for lgtd_time_monotonic"
++            )
++        ENDIF ()
+     ELSEIF (EXISTS "${COMPAT_TIME_MONOTONIC_IMPL}")
+         MESSAGE(STATUS "Looking for clock_gettime - not found, using built-in compatibilty file")
+         FILE(COPY "${COMPAT_TIME_MONOTONIC_H}" DESTINATION "${LIGHTSD_BINARY_DIR}/core/")
+@@ -33,8 +41,17 @@
+             TIME_MONOTONIC_LIBRARY time_monotonic
+             CACHE INTERNAL "lgtd_time_monotonic (${CMAKE_SYSTEM_NAME} specific implementation)"
+         )
+-        ADD_LIBRARY(${TIME_MONOTONIC_LIBRARY} STATIC "${COMPAT_TIME_MONOTONIC_IMPL}")
++        SET(
++            TIME_MONOTONIC_IMPL "${COMPAT_TIME_MONOTONIC_IMPL}"
++            CACHE INTERNAL "lgtd_time_monotonic (${CMAKE_SYSTEM_NAME} specific source)"
++        )
+     ELSE ()
+         MESSAGE(SEND_ERROR "Looking for clock_gettime - not found")
+     ENDIF ()
+ ENDIF ()
++
++ADD_LIBRARY(${TIME_MONOTONIC_LIBRARY} STATIC "${TIME_MONOTONIC_IMPL}")
++
++IF (TIME_MONOTONIC_LIBRARY_DEP)
++    TARGET_LINK_LIBRARIES(${TIME_MONOTONIC_LIBRARY} ${TIME_MONOTONIC_LIBRARY_DEP})
++ENDIF ()
 diff --git a/tests/core/tests_utils.c b/tests/core/tests_utils.c
 --- a/tests/core/tests_utils.c
 +++ b/tests/core/tests_utils.c
-@@ -50,7 +50,9 @@
+@@ -50,9 +50,29 @@
      union {
          uint8_t     as_array[LGTD_LIFX_ADDR_LENGTH];
          uint64_t    as_scalar;
 -    } bulb_addr = { .as_scalar = htobe64(addr) >> 16 };
 +    } bulb_addr = {
-+        .as_scalar = addr << 8 * (LGTD_LIFX_ADDR_LENGTH - 1)
++#if LGTD_BIG_ENDIAN_SYSTEM
++        .as_scalar = htobe64(addr) << 8 * (sizeof(addr) - 1)
++#else
++        .as_scalar = htobe64(addr) >> 16
++#endif
 +    };
      struct lgtd_lifx_bulb *bulb = lgtd_lifx_bulb_open(gw, bulb_addr.as_array);
  
++#if 0
++    for (int i = 0; i != 8; i++) {
++        bulb_addr.as_scalar = addr << 8 * i;
++        printf("==== i := %d ====\n", i);
++        for (int j = 0; j != LGTD_LIFX_ADDR_LENGTH; j++) {
++            printf("bulb_addr.as_array[%d] = %hhu\n", j, bulb_addr.as_array[j]);
++        }
++    }
++#else
++    for (int j = 0; j != LGTD_LIFX_ADDR_LENGTH; j++) {
++        printf("bulb_addr.as_array[%d] = %hhu\n", j, bulb_addr.as_array[j]);
++    }
++#endif
++
      SLIST_INSERT_HEAD(&gw->bulbs, bulb, link_by_gw);
+ 
+     return bulb;