aboutsummaryrefslogtreecommitdiff
path: root/rc3/runtime/cmake/LibompCheckLinkerFlag.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'rc3/runtime/cmake/LibompCheckLinkerFlag.cmake')
-rw-r--r--rc3/runtime/cmake/LibompCheckLinkerFlag.cmake68
1 files changed, 68 insertions, 0 deletions
diff --git a/rc3/runtime/cmake/LibompCheckLinkerFlag.cmake b/rc3/runtime/cmake/LibompCheckLinkerFlag.cmake
new file mode 100644
index 0000000..75a38e3
--- /dev/null
+++ b/rc3/runtime/cmake/LibompCheckLinkerFlag.cmake
@@ -0,0 +1,68 @@
+#
+#//===----------------------------------------------------------------------===//
+#//
+#// The LLVM Compiler Infrastructure
+#//
+#// This file is dual licensed under the MIT and the University of Illinois Open
+#// Source Licenses. See LICENSE.txt for details.
+#//
+#//===----------------------------------------------------------------------===//
+#
+
+# Checking a linker flag to build a shared library
+# There is no real trivial way to do this in CMake, so we implement it here
+# this will have ${boolean} = TRUE if the flag succeeds, otherwise FALSE.
+function(libomp_check_linker_flag flag boolean)
+ if(NOT DEFINED "${boolean}")
+ set(retval TRUE)
+ set(library_source
+ "int foo(int a) { return a*a; }")
+ set(cmake_source
+ "cmake_minimum_required(VERSION 2.8)
+ project(foo C)
+ set(CMAKE_SHARED_LINKER_FLAGS \"${flag}\")
+ add_library(foo SHARED src_to_link.c)")
+ set(failed_regexes "[Ee]rror;[Uu]nknown;[Ss]kipping;LINK : warning")
+ set(base_dir ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/link_flag_check_${boolean})
+ file(MAKE_DIRECTORY ${base_dir})
+ file(MAKE_DIRECTORY ${base_dir}/build)
+ file(WRITE ${base_dir}/src_to_link.c "${library_source}")
+ file(WRITE ${base_dir}/CMakeLists.txt "${cmake_source}")
+
+ message(STATUS "Performing Test ${boolean}")
+ try_compile(
+ try_compile_result
+ ${base_dir}/build
+ ${base_dir}
+ foo
+ OUTPUT_VARIABLE OUTPUT)
+
+ if(try_compile_result)
+ foreach(regex IN LISTS failed_regexes)
+ if("${OUTPUT}" MATCHES ${regex})
+ set(retval FALSE)
+ endif()
+ endforeach()
+ else()
+ set(retval FALSE)
+ endif()
+
+ if(${retval})
+ set(${boolean} 1 CACHE INTERNAL "Test ${boolean}")
+ message(STATUS "Performing Test ${boolean} - Success")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
+ "Performing C Linker Flag test ${boolean} succeeded with the following output:\n"
+ "${OUTPUT}\n"
+ "Source file was:\n${library_source}\n")
+ else()
+ set(${boolean} "" CACHE INTERNAL "Test ${boolean}")
+ message(STATUS "Performing Test ${boolean} - Failed")
+ file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
+ "Performing C Linker Flag test ${boolean} failed with the following output:\n"
+ "${OUTPUT}\n"
+ "Source file was:\n${library_source}\n")
+ endif()
+
+ set(${boolean} ${retval} PARENT_SCOPE)
+ endif()
+endfunction()