2015-07-16 00:05:30 +08:00
|
|
|
#
|
|
|
|
#//===----------------------------------------------------------------------===//
|
|
|
|
#//
|
|
|
|
#// 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}")
|
2015-07-16 00:57:19 +08:00
|
|
|
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")
|
2015-07-23 22:41:35 +08:00
|
|
|
set(base_dir ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/link_flag_check_${boolean})
|
2015-07-16 00:57:19 +08:00
|
|
|
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}")
|
2015-07-16 00:05:30 +08:00
|
|
|
|
2015-07-16 00:57:19 +08:00
|
|
|
message(STATUS "Performing Test ${boolean}")
|
|
|
|
try_compile(
|
|
|
|
try_compile_result
|
|
|
|
${base_dir}/build
|
|
|
|
${base_dir}
|
|
|
|
foo
|
|
|
|
OUTPUT_VARIABLE OUTPUT)
|
2015-07-16 00:05:30 +08:00
|
|
|
|
2015-07-16 00:57:19 +08:00
|
|
|
if(try_compile_result)
|
|
|
|
foreach(regex IN LISTS failed_regexes)
|
|
|
|
if("${OUTPUT}" MATCHES ${regex})
|
2015-07-16 00:05:30 +08:00
|
|
|
set(retval FALSE)
|
2015-07-16 00:57:19 +08:00
|
|
|
endif()
|
|
|
|
endforeach()
|
|
|
|
else()
|
|
|
|
set(retval FALSE)
|
|
|
|
endif()
|
2015-07-16 00:05:30 +08:00
|
|
|
|
2015-07-16 00:57:19 +08:00
|
|
|
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()
|
2015-07-16 00:05:30 +08:00
|
|
|
|
2015-07-16 00:57:19 +08:00
|
|
|
set(${boolean} ${retval} PARENT_SCOPE)
|
2015-07-16 00:05:30 +08:00
|
|
|
endif()
|
|
|
|
endfunction()
|