diff --git a/libomptarget/CMakeLists.txt b/libomptarget/CMakeLists.txt index 3d9c78a72..ad0afb47d 100644 --- a/libomptarget/CMakeLists.txt +++ b/libomptarget/CMakeLists.txt @@ -53,6 +53,13 @@ if(LIBOMPTARGET_CMAKE_BUILD_TYPE MATCHES debug) add_definitions(-O0) endif() +set(LIBOMPTARGET_FLANG_API FALSE CACHE BOOL + "Build API for Flang.") +if(${LIBOMPTARGET_FLANG_API}) + add_definitions(-DFLANG_API) + libomptarget_say("Building OpenMP API for FLANG.") +endif() + include_directories(include) # Build target agnostic offloading library. diff --git a/libomptarget/deviceRTLs/nvptx/src/interface.h b/libomptarget/deviceRTLs/nvptx/src/interface.h index 680df48d4..b23bf7053 100644 --- a/libomptarget/deviceRTLs/nvptx/src/interface.h +++ b/libomptarget/deviceRTLs/nvptx/src/interface.h @@ -88,6 +88,36 @@ EXTERN int omp_is_initial_device(void); EXTERN int omp_get_initial_device(void); EXTERN int omp_get_max_task_priority(void); + +#ifdef FLANG_API +EXTERN double omp_get_wtick_(void); +EXTERN double omp_get_wtime_(void); +EXTERN int omp_get_num_threads_(void); +EXTERN int omp_get_max_threads_(void); +EXTERN int omp_get_thread_limit_(void); +EXTERN int omp_get_thread_num_(void); +EXTERN int omp_get_num_procs_(void); +EXTERN int omp_in_parallel_(void); +EXTERN int omp_in_final_(void); +EXTERN int omp_get_nested_(void); +EXTERN int omp_get_max_active_levels_(void); +EXTERN int omp_get_level_(void); +EXTERN int omp_get_active_level_(void); +EXTERN int omp_get_ancestor_thread_num_(int level); +EXTERN int omp_get_team_size_(int level); +EXTERN int omp_get_default_device_(void); +EXTERN int omp_get_num_devices_(void); +EXTERN int omp_get_num_teams_(void); +EXTERN int omp_get_team_num_(void); +EXTERN void omp_get_schedule_(omp_sched_t *kind, int *modifier); +EXTERN int omp_get_initial_device_(void); +EXTERN int omp_get_max_task_priority_(void); +EXTERN int omp_get_cancellation_(void); +EXTERN int omp_get_dynamic_(void); +EXTERN void omp_lib_osnt4_(int num); +EXTERN void omp_lib_osmal4_(int level); +#endif + //////////////////////////////////////////////////////////////////////////////// // OMPTARGET_NVPTX private (debug / temportary?) interface //////////////////////////////////////////////////////////////////////////////// diff --git a/libomptarget/deviceRTLs/nvptx/src/libcall.cu b/libomptarget/deviceRTLs/nvptx/src/libcall.cu index 15040dbaf..aedfed242 100644 --- a/libomptarget/deviceRTLs/nvptx/src/libcall.cu +++ b/libomptarget/deviceRTLs/nvptx/src/libcall.cu @@ -460,3 +460,67 @@ EXTERN void xlf_debug_print_double(double *p) { EXTERN void xlf_debug_print_addr(void *p) { printf("xlf DEBUG %d): %p \n", omp_get_team_num(), p); } + + +#ifdef FLANG_API +EXTERN double omp_get_wtick_(void) { return omp_get_wtick(); } + +EXTERN double omp_get_wtime_(void) { return omp_get_wtime(); } + +EXTERN int omp_get_num_threads_(void) { return omp_get_num_threads(); } + +EXTERN int omp_get_max_threads_(void) { return omp_get_max_threads(); } + +EXTERN int omp_get_thread_limit_(void) { return omp_get_thread_limit(); } + +EXTERN int omp_get_thread_num_(void) { return omp_get_thread_num(); } + +EXTERN int omp_get_num_procs_(void) { return omp_get_num_procs(); } + +EXTERN int omp_in_parallel_(void) { return omp_in_parallel(); } + +EXTERN int omp_in_final_(void) { return omp_in_final(); } + +EXTERN int omp_get_nested_(void) { return omp_get_nested(); } + +EXTERN int omp_get_max_active_levels_(void) { + return omp_get_max_active_levels(); +} + +EXTERN int omp_get_level_(void) { return omp_get_level(); } + +EXTERN int omp_get_active_level_(void) { return omp_get_active_level(); } + +EXTERN int omp_get_ancestor_thread_num_(int* level) { + return omp_get_ancestor_thread_num(*level); +} + +EXTERN int omp_get_team_size_(int* level) { return omp_get_team_size(*level); } + +EXTERN int omp_get_default_device_(void) { return omp_get_default_device(); } + +EXTERN int omp_get_num_devices_(void) { return omp_get_num_devices(); } + +EXTERN int omp_get_num_teams_(void) { return omp_get_num_teams(); } + +EXTERN int omp_get_team_num_(void) { return omp_get_team_num(); } + +EXTERN void omp_get_schedule_(omp_sched_t *kind, int *modifier) { + return omp_get_schedule(kind, modifier); +} + +EXTERN int omp_get_initial_device_(void) { return omp_get_initial_device(); } + +EXTERN int omp_get_max_task_priority_(void) { + return omp_get_max_task_priority(); +} + +EXTERN int omp_get_cancellation_(void) { return omp_get_cancellation(); } + +EXTERN int omp_get_dynamic_(void) { return omp_get_dynamic(); } + +EXTERN void omp_lib_osnt4_(int* num) { omp_set_num_threads(*num); } + +EXTERN void omp_lib_osmal4_(int* level) { omp_set_max_active_levels(*level); } +#endif +