diff options
author | Tom Stellard <tstellar@redhat.com> | 2019-04-11 23:41:27 +0000 |
---|---|---|
committer | Tom Stellard <tstellar@redhat.com> | 2019-04-11 23:41:27 +0000 |
commit | 0c48ee0c90739da26986252ab5147810351eeff3 (patch) | |
tree | c4688322ef6ff3153683eab622de31ef851da282 /final/runtime/cmake/LibompCheckLinkerFlag.cmake | |
parent | e82e2d89e6770bb05a0eec2db8f30058228d7ac6 (diff) |
Creating release candidate final from release_710 branchsvn-tags/RELEASE_710
git-svn-id: https://llvm.org/svn/llvm-project/openmp/tags/RELEASE_710@358242 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'final/runtime/cmake/LibompCheckLinkerFlag.cmake')
-rw-r--r-- | final/runtime/cmake/LibompCheckLinkerFlag.cmake | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/final/runtime/cmake/LibompCheckLinkerFlag.cmake b/final/runtime/cmake/LibompCheckLinkerFlag.cmake new file mode 100644 index 0000000..75a38e3 --- /dev/null +++ b/final/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() |