Merge pull request #322 from uraimo/system_arch_fix

Improve host architecture detection
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 365add2..7fe4aa3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -214,6 +214,7 @@
 check_symbol_exists(CLOCK_UPTIME_FAST "time.h" HAVE_DECL_CLOCK_UPTIME_FAST)
 check_symbol_exists(CLOCK_MONOTONIC "time.h" HAVE_DECL_CLOCK_MONOTONIC)
 check_symbol_exists(CLOCK_REALTIME "time.h" HAVE_DECL_CLOCK_REALTIME)
+check_symbol_exists(CLOCK_MONOTONIC_COARSE "time.h" HAVE_DECL_CLOCK_MONOTONIC_COARSE)
 check_symbol_exists(FD_COPY "sys/select.h" HAVE_DECL_FD_COPY)
 check_symbol_exists(NOTE_LOWAT "sys/event.h" HAVE_DECL_NOTE_LOWAT)
 check_symbol_exists(NOTE_NONE "sys/event.h" HAVE_DECL_NOTE_NONE)
@@ -250,20 +251,26 @@
 endif()
 
 if(CMAKE_SYSTEM_NAME STREQUAL Darwin)
-  add_custom_target(module-map-symlinks
-                    ALL
-                    COMMAND
-                      ${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/dispatch/darwin/module.modulemap" "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
-                    COMMAND
-                      ${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/private/darwin/module.modulemap" "${CMAKE_SOURCE_DIR}/private/module.modulemap")
+  add_custom_command(OUTPUT
+                       "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
+                       "${CMAKE_SOURCE_DIR}/private/module.modulemap"
+                     COMMAND
+                       ${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/dispatch/darwin/module.modulemap" "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
+                     COMMAND
+                       ${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/private/darwin/module.modulemap" "${CMAKE_SOURCE_DIR}/private/module.modulemap")
 else()
-  add_custom_target(module-map-symlinks
-                    ALL
-                    COMMAND
-                      ${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/dispatch/generic/module.modulemap" "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
-                    COMMAND
-                      ${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/private/generic/module.modulemap" "${CMAKE_SOURCE_DIR}/private/module.modulemap")
+  add_custom_command(OUTPUT
+                       "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
+                       "${CMAKE_SOURCE_DIR}/private/module.modulemap"
+                     COMMAND
+                       ${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/dispatch/generic/module.modulemap" "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
+                     COMMAND
+                       ${CMAKE_COMMAND} -E create_symlink "${CMAKE_SOURCE_DIR}/private/generic/module.modulemap" "${CMAKE_SOURCE_DIR}/private/module.modulemap")
 endif()
+add_custom_target(module-map-symlinks
+                  DEPENDS
+                     "${CMAKE_SOURCE_DIR}/dispatch/module.modulemap"
+                     "${CMAKE_SOURCE_DIR}/private/module.modulemap")
 configure_file("${CMAKE_SOURCE_DIR}/cmake/config.h.in"
                "${CMAKE_BINARY_DIR}/config/config_ac.h")
 add_definitions(-DHAVE_CONFIG_H)
diff --git a/cmake/config.h.in b/cmake/config.h.in
index a59737b..c858589 100644
--- a/cmake/config.h.in
+++ b/cmake/config.h.in
@@ -21,6 +21,10 @@
    you don't. */
 #cmakedefine01 HAVE_DECL_CLOCK_UPTIME_FAST
 
+/* Define to 1 if you have the declaration of `CLOCK_MONOTONIC_COARSE', and to
+   0 if you don't. */
+#cmakedefine01 HAVE_CLOCK_MONOTONIC_COARSE
+
 /* Define to 1 if you have the declaration of `FD_COPY', and to 0 if you
    don't. */
 #cmakedefine01 HAVE_DECL_FD_COPY
diff --git a/cmake/modules/SwiftSupport.cmake b/cmake/modules/SwiftSupport.cmake
index ec891d5..bae1f9f 100644
--- a/cmake/modules/SwiftSupport.cmake
+++ b/cmake/modules/SwiftSupport.cmake
@@ -4,7 +4,7 @@
 function(add_swift_library library)
   set(options)
   set(single_value_options MODULE_NAME;MODULE_LINK_NAME;MODULE_PATH;MODULE_CACHE_PATH;OUTPUT;TARGET)
-  set(multiple_value_options SOURCES;SWIFT_FLAGS;CFLAGS)
+  set(multiple_value_options SOURCES;SWIFT_FLAGS;CFLAGS;DEPENDS)
 
   cmake_parse_arguments(ASL "${options}" "${single_value_options}" "${multiple_value_options}" ${ARGN})
 
@@ -61,6 +61,7 @@
                      DEPENDS
                        ${ASL_SOURCES}
                        ${CMAKE_SWIFT_COMPILER}
+                       ${ASL_DEPENDS}
                      COMMAND
                        ${CMAKE_COMMAND} -E make_directory ${module_directory}
                      COMMAND
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 11c3a3d..2336908 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -100,9 +100,9 @@
                       -fmodule-map-file=${CMAKE_SOURCE_DIR}/dispatch/module.modulemap
                     SWIFT_FLAGS
                       -I ${CMAKE_SOURCE_DIR}
-                      ${swift_optimization_flags})
-  add_dependencies(swiftDispatch
-                     module-map-symlinks)
+                      ${swift_optimization_flags}
+                    DEPENDS
+                      ${CMAKE_SOURCE_DIR}/dispatch/module.modulemap)
   target_sources(dispatch
                  PRIVATE
                    swift/DispatchStubs.cc
diff --git a/src/event/event_epoll.c b/src/event/event_epoll.c
index 97b4bba..0425cb2 100644
--- a/src/event/event_epoll.c
+++ b/src/event/event_epoll.c
@@ -391,13 +391,14 @@
 	dispatch_epoll_timeout_t timer = &_dispatch_epoll_timeout[clock];
 	struct epoll_event ev = {
 		.events = EPOLLONESHOT | EPOLLIN,
-		.data = { .u32 = timer->det_ident },
+
 	};
 	int op;
 
 	if (target >= INT64_MAX && !timer->det_registered) {
 		return;
 	}
+	ev.data.u32 = timer->det_ident;
 
 	if (unlikely(timer->det_fd < 0)) {
 		clockid_t clockid;