[Openmp-commits] [openmp] r270464 - Allow unit testing on Windows

Tom Stellard via Openmp-commits openmp-commits at lists.llvm.org
Thu Jun 2 12:05:50 PDT 2016


Hi Johnny,

Go ahead and merge all 4 patches: (r270464, r270821, r271035, r270884).
Try to do it soon, because I'm going to make the -rc1 release in about
24 hours.

-Tom


On Thu, Jun 02, 2016 at 03:40:55PM +0000, Churbanov, Andrey wrote:
> I am OK to merge it into 3.8.1.
> 
> - Andrey
> 
> -----Original Message-----
> From: Peyton, Jonathan L 
> Sent: Tuesday, May 31, 2016 10:00 PM
> To: Peyton, Jonathan L <jonathan.l.peyton at intel.com>; Churbanov, Andrey <Andrey.Churbanov at intel.com>; Tom Stellard <tom at stellard.net>
> Cc: openmp-commits (openmp-commits at lists.llvm.org) <openmp-commits at lists.llvm.org>
> Subject: RE: [Openmp-commits] [openmp] r270464 - Allow unit testing on Windows
> 
> Andrey (code owner), Tom,
> 
> Can this be merged into 3.8.1?  It enables unit testing on Windows using clang.exe.
> 
> -- Johnny
> 
> -----Original Message-----
> From: Openmp-commits [mailto:openmp-commits-bounces at lists.llvm.org] On Behalf Of Jonathan Peyton via Openmp-commits
> Sent: Monday, May 23, 2016 12:51 PM
> To: openmp-commits at lists.llvm.org
> Subject: [Openmp-commits] [openmp] r270464 - Allow unit testing on Windows
> 
> Author: jlpeyton
> Date: Mon May 23 12:50:32 2016
> New Revision: 270464
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=270464&view=rev
> Log:
> Allow unit testing on Windows
> 
> These changes allow testing on Windows using clang.exe.
> There are two main changes:
> 1. Only link to -lm when it actually exists on the system 2. Create basic versions of pthread_create() and pthread_join() for windows.
>    They are not POSIX compliant by any stretch but will allow any existing
>    and future tests to use pthread_create() and pthread_join() for testing
>    interactions of libomp with os threads.
> 
> Differential Revision: http://reviews.llvm.org/D20391
> 
> Modified:
>     openmp/trunk/runtime/src/CMakeLists.txt
>     openmp/trunk/runtime/test/CMakeLists.txt
>     openmp/trunk/runtime/test/lit.cfg
>     openmp/trunk/runtime/test/lit.site.cfg.in
>     openmp/trunk/runtime/test/misc_bugs/omp_foreign_thread_team_reuse.c
>     openmp/trunk/runtime/test/omp_testsuite.h
> 
> Modified: openmp/trunk/runtime/src/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/src/CMakeLists.txt?rev=270464&r1=270463&r2=270464&view=diff
> ==============================================================================
> --- openmp/trunk/runtime/src/CMakeLists.txt (original)
> +++ openmp/trunk/runtime/src/CMakeLists.txt Mon May 23 12:50:32 2016
> @@ -146,7 +146,11 @@ set_target_properties(omp PROPERTIES
>  )
>  
>  # Get the library's location within the build tree for the unit tester -get_target_property(LIBOMP_LIBRARY_DIR omp LIBRARY_OUTPUT_DIRECTORY)
> +if(NOT WIN32)
> +  get_target_property(LIBOMP_LIBRARY_DIR omp LIBRARY_OUTPUT_DIRECTORY)
> +else()
> +  get_target_property(LIBOMP_LIBRARY_DIR omp RUNTIME_OUTPUT_DIRECTORY)
> +endif()
>  if(NOT LIBOMP_LIBRARY_DIR)
>    set(LIBOMP_LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
>    set(LIBOMP_LIBRARY_DIR ${CMAKE_CURRENT_BINARY_DIR} PARENT_SCOPE)
> 
> Modified: openmp/trunk/runtime/test/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/test/CMakeLists.txt?rev=270464&r1=270463&r2=270464&view=diff
> ==============================================================================
> --- openmp/trunk/runtime/test/CMakeLists.txt (original)
> +++ openmp/trunk/runtime/test/CMakeLists.txt Mon May 23 12:50:32 2016
> @@ -1,6 +1,7 @@
>  # CMakeLists.txt file for unit testing OpenMP Library
>  include(FindPythonInterp)
>  include(CheckTypeSize)
> +include(CheckLibraryExists)
>  
>  if(NOT PYTHONINTERP_FOUND)
>    libomp_warning_say("Could not find Python.") @@ -8,6 +9,9 @@ if(NOT PYTHONINTERP_FOUND)
>    return()
>  endif()
>  
> +# Some tests use math functions
> +check_library_exists(m sqrt "" LIBOMP_HAVE_LIBM)
> +
>  macro(pythonize_bool var)
>    if (${var})
>      set(${var} True)
> @@ -20,6 +24,7 @@ pythonize_bool(LIBOMP_USE_HWLOC)
>  pythonize_bool(LIBOMP_OMPT_SUPPORT)
>  pythonize_bool(LIBOMP_OMPT_BLAME)
>  pythonize_bool(LIBOMP_OMPT_TRACE)
> +pythonize_bool(LIBOMP_HAVE_LIBM)
>  
>  set(LIBOMP_TEST_CFLAGS "" CACHE STRING
>    "Extra compiler flags to send to the test compiler")
> 
> Modified: openmp/trunk/runtime/test/lit.cfg
> URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/test/lit.cfg?rev=270464&r1=270463&r2=270464&view=diff
> ==============================================================================
> --- openmp/trunk/runtime/test/lit.cfg (original)
> +++ openmp/trunk/runtime/test/lit.cfg Mon May 23 12:50:32 2016
> @@ -48,6 +48,11 @@ config.test_cflags = config.test_openmp_
>      " -L " + config.library_dir + \
>      " " + config.test_extra_cflags
>  
> +# extra libraries
> +libs = ""
> +if config.has_libm:
> +    libs += " -lm"
> +
>  # Allow XFAIL to work
>  config.target_triple = [ ]
>  if re.search('gcc', config.test_compiler) is not None:
> @@ -92,7 +97,7 @@ if config.has_ompt:
>  config.substitutions.append(("%libomp-compile-and-run", \
>      "%libomp-compile && %libomp-run"))
>  config.substitutions.append(("%libomp-compile", \
> -    "%clang %cflags %s -o %t -lm"))
> +    "%clang %cflags %s -o %t" + libs))
>  config.substitutions.append(("%libomp-run", "%t"))  config.substitutions.append(("%clang", config.test_compiler))  config.substitutions.append(("%openmp_flag", config.test_openmp_flag))
> 
> Modified: openmp/trunk/runtime/test/lit.site.cfg.in
> URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/test/lit.site.cfg.in?rev=270464&r1=270463&r2=270464&view=diff
> ==============================================================================
> --- openmp/trunk/runtime/test/lit.site.cfg.in (original)
> +++ openmp/trunk/runtime/test/lit.site.cfg.in Mon May 23 12:50:32 2016
> @@ -11,6 +11,7 @@ config.operating_system = "@CMAKE_SYSTEM  config.hwloc_library_dir = "@LIBOMP_HWLOC_LIBRARY_DIR@"
>  config.using_hwloc = @LIBOMP_USE_HWLOC@  config.has_ompt = @LIBOMP_OMPT_SUPPORT@ and @LIBOMP_OMPT_BLAME@ and @LIBOMP_OMPT_TRACE@
> +config.has_libm = @LIBOMP_HAVE_LIBM@
>  
>  # Let the main config do the real work.
>  lit_config.load_config(config, "@LIBOMP_BASE_DIR@/test/lit.cfg")
> 
> Modified: openmp/trunk/runtime/test/misc_bugs/omp_foreign_thread_team_reuse.c
> URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/test/misc_bugs/omp_foreign_thread_team_reuse.c?rev=270464&r1=270463&r2=270464&view=diff
> ==============================================================================
> --- openmp/trunk/runtime/test/misc_bugs/omp_foreign_thread_team_reuse.c (original)
> +++ openmp/trunk/runtime/test/misc_bugs/omp_foreign_thread_team_reuse.c
> +++ Mon May 23 12:50:32 2016
> @@ -1,6 +1,5 @@
>  // RUN: %libomp-compile-and-run
>  #include <stdio.h>
> -#include <pthread.h>
>  #include "omp_testsuite.h"
>  
>  #define NUM_THREADS 10
> 
> Modified: openmp/trunk/runtime/test/omp_testsuite.h
> URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/runtime/test/omp_testsuite.h?rev=270464&r1=270463&r2=270464&view=diff
> ==============================================================================
> --- openmp/trunk/runtime/test/omp_testsuite.h (original)
> +++ openmp/trunk/runtime/test/omp_testsuite.h Mon May 23 12:50:32 2016
> @@ -4,6 +4,7 @@
>  #define OMP_TESTSUITE_H
>  
>  #include <stdio.h>
> +#include <stdlib.h>
>  #include <omp.h>
>  
>  /* General                                                */
> @@ -19,4 +20,60 @@
>  #define NUM_TASKS 25
>  #define MAX_TASKS_PER_THREAD 5
>  
> +#ifdef  _WIN32
> +// Windows versions of pthread_create() and pthread_join() # include 
> +<windows.h> typedef HANDLE pthread_t;
> +
> +// encapsulates the information about a pthread-callable function 
> +struct thread_func_info_t {
> +  void* (*start_routine)(void*);
> +  void* arg;
> +};
> +
> +// call the void* start_routine(void*); static DWORD 
> +__thread_func_wrapper(LPVOID lpParameter) {
> +  struct thread_func_info_t* function_information;
> +  function_information = (struct thread_func_info_t*)lpParameter;
> +  function_information->start_routine(function_information->arg);
> +  free(function_information);
> +  return 0;
> +}
> +
> +// attr is ignored
> +static int pthread_create(pthread_t *thread, void *attr,
> +                          void *(*start_routine) (void *), void *arg) {
> +  pthread_t pthread;
> +  struct thread_func_info_t* info;
> +  info = (struct thread_func_info_t*)malloc(sizeof(struct
> +thread_func_info_t));
> +  info->start_routine = start_routine;
> +  info->arg = arg;
> +  pthread = CreateThread(NULL, 0, __thread_func_wrapper, info, 0, 
> +NULL);
> +  if (pthread == NULL) {
> +    fprintf(stderr, "CreateThread() failed: Error #%u.\n", GetLastError());
> +    exit(1);
> +  }
> +  *thread = pthread;
> +  return 0;
> +}
> +// retval is ignored for now
> +static int pthread_join(pthread_t thread, void **retval) {
> +  int rc;
> +  rc = WaitForSingleObject(thread, INFINITE);
> +  if (rc == WAIT_FAILED) {
> +    fprintf(stderr, "WaitForSingleObject() failed: Error #%u.\n",
> +            GetLastError());
> +    exit(1);
> +  }
> +  rc = CloseHandle(thread);
> +  if (rc == 0) {
> +    fprintf(stderr, "CloseHandle() failed: Error #%u.\n", GetLastError());
> +    exit(1);
> +  }
> +  return 0;
> +}
> +#else
> +# include <pthread.h>
> +#endif
> +
>  #endif
> 
> 
> _______________________________________________
> Openmp-commits mailing list
> Openmp-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/openmp-commits
> 
> --------------------------------------------------------------------
> Joint Stock Company Intel A/O
> Registered legal address: Krylatsky Hills Business Park,
> 17 Krylatskaya Str., Bldg 4, Moscow 121614,
> Russian Federation
> 
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.


More information about the Openmp-commits mailing list