[Openmp-commits] [openmp] r270464 - Allow unit testing on Windows
Peyton, Jonathan L via Openmp-commits
openmp-commits at lists.llvm.org
Thu Jun 2 13:41:50 PDT 2016
They are all merged. Thank you Tom!
-- Johnny
-----Original Message-----
From: Tom Stellard [mailto:tom at stellard.net]
Sent: Thursday, June 2, 2016 2:06 PM
To: Churbanov, Andrey <Andrey.Churbanov at intel.com>
Cc: Peyton, Jonathan L <jonathan.l.peyton at intel.com>; 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
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/CMakeList
> s.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/CMakeLis
> ts.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_bug
> s/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_test
> suite.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