mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-19 03:25:54 -04:00
Add cmake build system
Add cmake support for CLC and ll asm language, the latter includes clang preprocessing stage. Add ctests to check for external function calls. v2: fix typos, style Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu> Acked-by: Aaron Watry <awatry@gmail.com> Tested-by: Aaron Watry <awatry@gmail.com> Acked-by: Vedran Miletić <vedran@miletic.net> llvm-svn: 347667
This commit is contained in:
parent
43adbf8dd4
commit
2ce1d090c2
298
libclc/CMakeLists.txt
Normal file
298
libclc/CMakeLists.txt
Normal file
@ -0,0 +1,298 @@
|
||||
cmake_minimum_required( VERSION 3.9.2 )
|
||||
|
||||
project( libclc VERSION 0.2.0 LANGUAGES CXX )
|
||||
|
||||
# List of all targets
|
||||
set( LIBCLC_TARGETS_ALL
|
||||
amdgcn--
|
||||
amdgcn--amdhsa
|
||||
r600--
|
||||
nvptx--
|
||||
nvptx64--
|
||||
nvptx--nvidiacl
|
||||
nvptx64--nvidiacl
|
||||
)
|
||||
|
||||
set( LIBCLC_MIN_LLVM "3.9.0" )
|
||||
|
||||
set( LIBCLC_TARGETS_TO_BUILD "all"
|
||||
CACHE STRING "Semicolon-separated list of targets to build, or 'all'." )
|
||||
|
||||
option( ENABLE_RUNTIME_SUBNORMAL "Enable runtime linking of subnormal support."
|
||||
OFF )
|
||||
|
||||
if( NOT LLVM_CONFIG )
|
||||
find_program( LLVM_CONFIG llvm-config )
|
||||
endif()
|
||||
execute_process( COMMAND ${LLVM_CONFIG} "--version"
|
||||
OUTPUT_VARIABLE LLVM_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
message( "LLVM version: ${LLVM_VERSION}" )
|
||||
|
||||
if( ${LLVM_VERSION} VERSION_LESS ${LIBCLC_MIN_LLVM} )
|
||||
message( FATAL_ERROR "libclc needs at least LLVM ${LIBCLC_MIN_LLVM}" )
|
||||
endif()
|
||||
|
||||
# mesa3d environment is only available since LLVM 4.0
|
||||
if( ${LLVM_VERSION} VERSION_GREATER "3.9.0" )
|
||||
set( LIBCLC_TARGETS_ALL ${LIBCLC_TARGETS_ALL} amdgcn-mesa-mesa3d )
|
||||
endif()
|
||||
|
||||
if( LIBCLC_TARGETS_TO_BUILD STREQUAL "all" )
|
||||
set( LIBCLC_TARGETS_TO_BUILD ${LIBCLC_TARGETS_ALL} )
|
||||
endif()
|
||||
|
||||
list( SORT LIBCLC_TARGETS_TO_BUILD )
|
||||
|
||||
execute_process( COMMAND ${LLVM_CONFIG} "--system-libs"
|
||||
OUTPUT_VARIABLE LLVM_SYSTEM_LIBS
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
execute_process( COMMAND ${LLVM_CONFIG} "--libs" "core" "bitreader" "bitwriter"
|
||||
OUTPUT_VARIABLE LLVM_LIBS
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
execute_process( COMMAND ${LLVM_CONFIG} "--libdir"
|
||||
OUTPUT_VARIABLE LLVM_LIBDIR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
execute_process( COMMAND ${LLVM_CONFIG} "--ldflags"
|
||||
OUTPUT_VARIABLE LLVM_LD_FLAGS
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
execute_process( COMMAND ${LLVM_CONFIG} "--cxxflags"
|
||||
OUTPUT_VARIABLE LLVM_CXX_FLAGS
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
separate_arguments( LLVM_CXX_FLAGS )
|
||||
execute_process( COMMAND ${LLVM_CONFIG} "--bindir"
|
||||
OUTPUT_VARIABLE LLVM_BINDIR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
|
||||
# These were not properly reported in early LLVM and we don't need them
|
||||
set( LLVM_CXX_FLAGS ${LLVM_CXX_FLAGS} -fno-rtti -fno-exceptions )
|
||||
|
||||
# Print LLVM variables
|
||||
message( "LLVM system libs: ${LLVM_SYSTEM_LIBS}" )
|
||||
message( "LLVM libs: ${LLVM_LIBS}" )
|
||||
message( "LLVM libdir: ${LLVM_LIBDIR}" )
|
||||
message( "LLVM bindir: ${LLVM_BINDIR}" )
|
||||
message( "LLVM ld flags: ${LLVM_LD_FLAGS}" )
|
||||
message( "LLVM cxx flags: ${LLVM_CXX_FLAGS}" )
|
||||
message( "" )
|
||||
|
||||
find_program( LLVM_CLANG clang PATHS ${LLVM_BINDIR} NO_DEFAULT_PATH )
|
||||
find_program( LLVM_AS llvm-as PATHS ${LLVM_BINDIR} NO_DEFAULT_PATH )
|
||||
find_program( LLVM_LINK llvm-link PATHS ${LLVM_BINDIR} NO_DEFAULT_PATH )
|
||||
find_program( LLVM_OPT opt PATHS ${LLVM_BINDIR} NO_DEFAULT_PATH )
|
||||
|
||||
# Print toolchain
|
||||
message( "clang: ${LLVM_CLANG}" )
|
||||
message( "llvm-as: ${LLVM_AS}" )
|
||||
message( "llvm-link: ${LLVM_LINK}" )
|
||||
message( "opt: ${LLVM_OPT}" )
|
||||
message( "" )
|
||||
if( NOT LLVM_CLANG OR NOT LLVM_OPT OR NOT LLVM_AS OR NOT LLVM_LINK )
|
||||
message( FATAL_ERROR "toolchain incomplete!" )
|
||||
endif()
|
||||
|
||||
set( CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake )
|
||||
set( CMAKE_CLC_COMPILER ${LLVM_CLANG} )
|
||||
set( CMAKE_CLC_ARCHIVE ${LLVM_LINK} )
|
||||
set( CMAKE_LLAsm_PREPROCESSOR ${LLVM_CLANG} )
|
||||
set( CMAKE_LLAsm_COMPILER ${LLVM_AS} )
|
||||
set( CMAKE_LLAsm_ARCHIVE ${LLVM_LINK} )
|
||||
enable_language( CLC LLAsm )
|
||||
|
||||
# Construct LLVM version define
|
||||
string( REPLACE "." ";" LLVM_VERSION_LIST ${LLVM_VERSION} )
|
||||
list( GET LLVM_VERSION_LIST 0 LLVM_MAJOR )
|
||||
list( GET LLVM_VERSION_LIST 1 LLVM_MINOR )
|
||||
set( LLVM_VERSION_DEFINE "-DHAVE_LLVM=0x${LLVM_MAJOR}0${LLVM_MINOR}" )
|
||||
|
||||
# This needs to be set before any target that needs it
|
||||
link_directories( ${LLVM_LIBDIR} )
|
||||
|
||||
# Setup prepare_builtins tools
|
||||
add_executable( prepare_builtins utils/prepare-builtins.cpp )
|
||||
target_compile_options( prepare_builtins PRIVATE ${LLVM_CXX_FLAGS} )
|
||||
target_compile_definitions( prepare_builtins PRIVATE ${LLVM_VERSION_DEFINE} )
|
||||
target_link_libraries( prepare_builtins PRIVATE ${LLVM_SYSTEM_LIBS} )
|
||||
target_link_libraries( prepare_builtins PRIVATE ${LLVM_LIBS} )
|
||||
|
||||
# Setup arch devices
|
||||
set( r600--_devices cedar cypress barts cayman )
|
||||
set( amdgcn--_devices tahiti )
|
||||
set( amdgcn-mesa-mesa3d_devices ${amdgcn--_devices} )
|
||||
set( amdgcn--amdhsa_devices none )
|
||||
set( nvptx--_devices none )
|
||||
set( nvptx64--_devices none )
|
||||
set( nvptx--nvidiacl_devices none )
|
||||
set( nvptx64--nvidiacl_devices none )
|
||||
|
||||
# Setup aliases
|
||||
set( cedar_aliases palm sumo sumo2 redwood juniper )
|
||||
set( cypress_aliases hemlock )
|
||||
set( barts_aliases turks caicos )
|
||||
set( cayman_aliases aruba )
|
||||
set( tahiti_aliases pitcairn verde oland hainan bonaire kabini kaveri hawaii
|
||||
mullins tonga iceland carrizo fiji stoney polaris10 polaris11 )
|
||||
|
||||
# Support for gfx9 was added in LLVM 5.0 (r295554)
|
||||
if( ${LLVM_VERSION} VERSION_GREATER "4.99.99" )
|
||||
set( tahiti_aliases ${tahiti_aliases} gfx900 gfx902 )
|
||||
endif()
|
||||
|
||||
# Support for Vega12 and Vega20 was added in LLVM 7 (r331215)
|
||||
if( ${LLVM_VERSION} VERSION_GREATER "6.99.99" )
|
||||
set( tahiti_aliases ${tahiti_aliases} gfx904 gfx906 )
|
||||
endif()
|
||||
|
||||
# pkg-config file
|
||||
configure_file( libclc.pc.in libclc.pc @ONLY )
|
||||
install( FILES ${CMAKE_CURRENT_BINARY_DIR}/libclc.pc DESTINATION share/pkgconfig )
|
||||
install( DIRECTORY generic/include/clc DESTINATION include )
|
||||
|
||||
if( ENABLE_RUNTIME_SUBNORMAL )
|
||||
add_library( subnormal_use_default STATIC
|
||||
generic/lib/subnormal_use_default.ll )
|
||||
add_library( subnormal_disable STATIC
|
||||
generic/lib/subnormal_disable.ll )
|
||||
install( TARGETS subnormal_use_default subnormal_disable ARCHIVE
|
||||
DESTINATION lib/clc )
|
||||
endif()
|
||||
|
||||
find_program( PYTHON python )
|
||||
file( TO_CMAKE_PATH ${CMAKE_SOURCE_DIR}/generic/lib/gen_convert.py script_loc )
|
||||
add_custom_command(
|
||||
OUTPUT convert.cl
|
||||
COMMAND ${PYTHON} ${script_loc} > convert.cl
|
||||
DEPENDS ${script_loc} )
|
||||
add_custom_target( "generate_convert.cl" DEPENDS convert.cl )
|
||||
|
||||
enable_testing()
|
||||
|
||||
foreach( t ${LIBCLC_TARGETS_TO_BUILD} )
|
||||
message( "BUILDING ${t}" )
|
||||
string( REPLACE "-" ";" TRIPLE ${t} )
|
||||
list( GET TRIPLE 0 ARCH )
|
||||
list( GET TRIPLE 1 VENDOR )
|
||||
list( GET TRIPLE 2 OS )
|
||||
|
||||
set( dirs generic )
|
||||
if( ${ARCH} STREQUAL r600 OR ${ARCH} STREQUAL amdgcn )
|
||||
set( dirs ${dirs} amdgpu )
|
||||
endif()
|
||||
|
||||
#nvptx is special
|
||||
if( ${ARCH} STREQUAL nvptx OR ${ARCH} STREQUAL nvptx64 )
|
||||
set( DARCH ptx )
|
||||
else()
|
||||
set( DARCH ${ARCH} )
|
||||
endif()
|
||||
|
||||
# Enumerate SOURCES* files
|
||||
set( source_list )
|
||||
foreach( l ${dirs} ${DARCH} ${DARCH}-${OS} ${DARCH}-${VENDOR}-${OS} )
|
||||
foreach( s "SOURCES" "SOURCES_${LLVM_MAJOR}.${LLVM_MINOR}" )
|
||||
file( TO_CMAKE_PATH ${l}/lib/${s} file_loc )
|
||||
file( TO_CMAKE_PATH ${CMAKE_SOURCE_DIR}/${file_loc} loc )
|
||||
# Prepend the location to give higher priority to
|
||||
# specialized implementation
|
||||
if( EXISTS ${loc} )
|
||||
set( source_list ${file_loc} ${source_list} )
|
||||
endif()
|
||||
endforeach()
|
||||
endforeach()
|
||||
|
||||
# Add the generated convert.cl here to prevent adding
|
||||
# the one listed in SOURCES
|
||||
set( rel_files convert.cl )
|
||||
set( objects convert.cl )
|
||||
if( NOT ENABLE_RUNTIME_SUBNORMAL )
|
||||
list( APPEND rel_files generic/lib/subnormal_use_default.ll )
|
||||
endif()
|
||||
|
||||
foreach( l ${source_list} )
|
||||
file( READ ${l} file_list )
|
||||
string( REPLACE "\n" ";" file_list ${file_list} )
|
||||
get_filename_component( dir ${l} DIRECTORY )
|
||||
foreach( f ${file_list} )
|
||||
list( FIND objects ${f} found )
|
||||
if( found EQUAL -1 )
|
||||
list( APPEND objects ${f} )
|
||||
list( APPEND rel_files ${dir}/${f} )
|
||||
# FIXME: This should really go away
|
||||
file( TO_CMAKE_PATH ${CMAKE_SOURCE_DIR}/${dir}/${f} src_loc )
|
||||
get_filename_component( fdir ${src_loc} DIRECTORY )
|
||||
|
||||
set_source_files_properties( ${dir}/${f}
|
||||
PROPERTIES COMPILE_FLAGS "-I ${fdir}" )
|
||||
endif()
|
||||
endforeach()
|
||||
endforeach()
|
||||
|
||||
foreach( d ${${t}_devices} )
|
||||
# Some targets don't have a specific GPU to target
|
||||
if( ${d} STREQUAL "none" )
|
||||
set( mcpu )
|
||||
set( arch_suffix "${t}" )
|
||||
else()
|
||||
set( mcpu "-mcpu=${d}" )
|
||||
set( arch_suffix "${d}-${t}" )
|
||||
endif()
|
||||
message( " DEVICE: ${d} ( ${${d}_aliases} )" )
|
||||
|
||||
add_library( builtins.link.${arch_suffix} STATIC ${rel_files} )
|
||||
# Make sure we depend on the pseudo target to prevent
|
||||
# multiple invocations
|
||||
add_dependencies( builtins.link.${arch_suffix}
|
||||
generate_convert.cl )
|
||||
# CMake will turn this include into absolute path
|
||||
target_include_directories( builtins.link.${arch_suffix} PRIVATE
|
||||
"generic/include" )
|
||||
target_compile_definitions( builtins.link.${arch_suffix} PRIVATE
|
||||
"__CLC_INTERNAL" )
|
||||
target_compile_options( builtins.link.${arch_suffix} PRIVATE -target
|
||||
${t} ${mcpu} -fno-builtin )
|
||||
set_target_properties( builtins.link.${arch_suffix} PROPERTIES
|
||||
LINKER_LANGUAGE CLC )
|
||||
|
||||
set( obj_suffix ${arch_suffix}.bc )
|
||||
|
||||
# Add opt target
|
||||
add_custom_command( OUTPUT "builtins.opt.${obj_suffix}"
|
||||
COMMAND ${LLVM_OPT} -O3 -o
|
||||
"builtins.opt.${obj_suffix}"
|
||||
"builtins.link.${obj_suffix}"
|
||||
DEPENDS "builtins.link.${arch_suffix}" )
|
||||
add_custom_target( "opt.${obj_suffix}" ALL
|
||||
DEPENDS "builtins.opt.${obj_suffix}" )
|
||||
|
||||
# Add prepare target
|
||||
add_custom_command( OUTPUT "${obj_suffix}"
|
||||
COMMAND prepare_builtins -o
|
||||
"${obj_suffix}"
|
||||
"builtins.opt.${obj_suffix}"
|
||||
DEPENDS "opt.${obj_suffix}"
|
||||
"builtins.opt.${obj_suffix}"
|
||||
prepare_builtins )
|
||||
add_custom_target( "prepare-${obj_suffix}" ALL
|
||||
DEPENDS "${obj_suffix}" )
|
||||
install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${obj_suffix} DESTINATION lib/clc )
|
||||
# nvptx-- targets don't include workitem builtins
|
||||
if( NOT ${t} MATCHES ".*ptx.*--$" )
|
||||
add_test( NAME external-calls-${obj_suffix}
|
||||
COMMAND ./check_external_calls.sh ${CMAKE_CURRENT_BINARY_DIR}/${obj_suffix}
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} )
|
||||
set_tests_properties( external-calls-${obj_suffix}
|
||||
PROPERTIES ENVIRONMENT "LLVM_CONFIG=${LLVM_CONFIG}" )
|
||||
endif()
|
||||
|
||||
|
||||
foreach( a ${${d}_aliases} )
|
||||
set( alias_suffix "${a}-${t}.bc" )
|
||||
add_custom_target( ${alias_suffix} ALL
|
||||
COMMAND ${CMAKE_COMMAND} -E
|
||||
create_symlink ${obj_suffix}
|
||||
${alias_suffix}
|
||||
DEPENDS "prepare-${obj_suffix}" )
|
||||
install( FILES ${CMAKE_CURRENT_BINARY_DIR}/${alias_suffix} DESTINATION lib/clc )
|
||||
endforeach( a )
|
||||
endforeach( d )
|
||||
endforeach( t )
|
9
libclc/cmake/CMakeCLCCompiler.cmake.in
Normal file
9
libclc/cmake/CMakeCLCCompiler.cmake.in
Normal file
@ -0,0 +1,9 @@
|
||||
set(CMAKE_CLC_COMPILER "@CMAKE_CLC_COMPILER@")
|
||||
set(CMAKE_CLC_COMPILER_LOADED 1)
|
||||
|
||||
set(CMAKE_CLC_SOURCE_FILE_EXTENSIONS cl)
|
||||
set(CMAKE_CLC_OUTPUT_EXTENSION .bc)
|
||||
set(CMAKE_CLC_OUTPUT_EXTENSION_REPLACE 1)
|
||||
set(CMAKE_STATIC_LIBRARY_PREFIX_CLC "")
|
||||
set(CMAKE_STATIC_LIBRARY_SUFFIX_CLC ".bc")
|
||||
set(CMAKE_CLC_COMPILER_ENV_VAR "CLC_COMPILER")
|
11
libclc/cmake/CMakeCLCInformation.cmake
Normal file
11
libclc/cmake/CMakeCLCInformation.cmake
Normal file
@ -0,0 +1,11 @@
|
||||
if(NOT CMAKE_CLC_COMPILE_OBJECT)
|
||||
set(CMAKE_CLC_COMPILE_OBJECT
|
||||
"<CMAKE_CLC_COMPILER> <DEFINES> <INCLUDES> <FLAGS> -o <OBJECT> -c <SOURCE> -emit-llvm")
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_CLC_CREATE_STATIC_LIBRARY)
|
||||
set(CMAKE_CLC_CREATE_STATIC_LIBRARY
|
||||
"<CMAKE_CLC_ARCHIVE> <LINK_FLAGS> -o <TARGET> <OBJECTS>")
|
||||
endif()
|
||||
|
||||
set(CMAKE_INCLUDE_FLAG_CLC "-I")
|
18
libclc/cmake/CMakeDetermineCLCCompiler.cmake
Normal file
18
libclc/cmake/CMakeDetermineCLCCompiler.cmake
Normal file
@ -0,0 +1,18 @@
|
||||
include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
|
||||
|
||||
if(NOT CMAKE_CLC_COMPILER)
|
||||
find_program(CMAKE_CLC_COMPILER NAMES clang)
|
||||
endif()
|
||||
mark_as_advanced(CMAKE_CLC_COMPILER)
|
||||
|
||||
if(NOT CMAKE_CLC_ARCHIVE)
|
||||
find_program(CMAKE_CLC_ARCHIVE NAMES llvm-link)
|
||||
endif()
|
||||
mark_as_advanced(CMAKE_CLC_ARCHIVE)
|
||||
|
||||
set(CMAKE_CLC_COMPILER_ENV_VAR "CLC_COMPILER")
|
||||
set(CMAKE_CLC_ARCHIVE_ENV_VAR "CLC_LINKER")
|
||||
find_file(clc_comp_in CMakeCLCCompiler.cmake.in PATHS ${CMAKE_ROOT}/Modules ${CMAKE_MODULE_PATH})
|
||||
# configure all variables set in this file
|
||||
configure_file(${clc_comp_in} ${CMAKE_PLATFORM_INFO_DIR}/CMakeCLCCompiler.cmake @ONLY)
|
||||
mark_as_advanced(clc_comp_in)
|
24
libclc/cmake/CMakeDetermineLLAsmCompiler.cmake
Normal file
24
libclc/cmake/CMakeDetermineLLAsmCompiler.cmake
Normal file
@ -0,0 +1,24 @@
|
||||
include(${CMAKE_ROOT}/Modules/CMakeDetermineCompiler.cmake)
|
||||
|
||||
if(NOT CMAKE_LLAsm_PREPROCESSOR)
|
||||
find_program(CMAKE_LLAsm_PREPROCESSOR NAMES clang)
|
||||
endif()
|
||||
mark_as_advanced(CMAKE_LLAsm_PREPROCESSOR)
|
||||
|
||||
if(NOT CMAKE_LLAsm_COMPILER)
|
||||
find_program(CMAKE_LLAsm_COMPILER NAMES llvm-as)
|
||||
endif()
|
||||
mark_as_advanced(CMAKE_LLAsm_ASSEMBLER)
|
||||
|
||||
if(NOT CMAKE_LLAsm_ARCHIVE)
|
||||
find_program(CMAKE_LLAsm_ARCHIVE NAMES llvm-link)
|
||||
endif()
|
||||
mark_as_advanced(CMAKE_LLAsm_ARCHIVE)
|
||||
|
||||
set(CMAKE_LLAsm_PREPROCESSOR_ENV_VAR "LL_PREPROCESSOR")
|
||||
set(CMAKE_LLAsm_COMPILER_ENV_VAR "LL_ASSEMBLER")
|
||||
set(CMAKE_LLAsm_ARCHIVE_ENV_VAR "LL_LINKER")
|
||||
find_file(ll_comp_in CMakeLLAsmCompiler.cmake.in PATHS ${CMAKE_ROOT}/Modules ${CMAKE_MODULE_PATH})
|
||||
# configure all variables set in this file
|
||||
configure_file(${ll_comp_in} ${CMAKE_PLATFORM_INFO_DIR}/CMakeLLAsmCompiler.cmake @ONLY)
|
||||
mark_as_advanced(ll_comp_in)
|
10
libclc/cmake/CMakeLLAsmCompiler.cmake.in
Normal file
10
libclc/cmake/CMakeLLAsmCompiler.cmake.in
Normal file
@ -0,0 +1,10 @@
|
||||
set(CMAKE_LLAsm_PREPROCESSOR "@CMAKE_LLAsm_PREPROCESSOR@")
|
||||
set(CMAKE_LLAsm_COMPILER "@CMAKE_LLAsm_COMPILER@")
|
||||
set(CMAKE_LLAsm_ARCHIVE "@CMAKE_LLAsm_ARCHIVE@")
|
||||
set(CMAKE_LLAsm_COMPILER_LOADED 1)
|
||||
|
||||
set(CMAKE_LLAsm_SOURCE_FILE_EXTENSIONS ll)
|
||||
set(CMAKE_LLAsm_OUTPUT_EXTENSION .bc)
|
||||
set(CMAKE_LLAsm_OUTPUT_EXTENSION_REPLACE 1)
|
||||
set(CMAKE_STATIC_LIBRARY_PREFIX_LLAsm "")
|
||||
set(CMAKE_STATIC_LIBRARY_SUFFIX_LLAsm ".bc")
|
11
libclc/cmake/CMakeLLAsmInformation.cmake
Normal file
11
libclc/cmake/CMakeLLAsmInformation.cmake
Normal file
@ -0,0 +1,11 @@
|
||||
if(NOT CMAKE_LLAsm_COMPILE_OBJECT)
|
||||
set(CMAKE_LLAsm_COMPILE_OBJECT
|
||||
"${CMAKE_LLAsm_PREPROCESSOR} -E -P <DEFINES> <INCLUDES> <FLAGS> -x cl <SOURCE> -o - | <CMAKE_LLAsm_COMPILER> -o <OBJECT> ")
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_LLAsm_CREATE_STATIC_LIBRARY)
|
||||
set(CMAKE_LLAsm_CREATE_STATIC_LIBRARY
|
||||
"<CMAKE_LLAsm_ARCHIVE> <LINK_FLAGS> -o <TARGET> <OBJECTS>")
|
||||
endif()
|
||||
|
||||
set(CMAKE_INCLUDE_FLAG_LLAsm "-I")
|
56
libclc/cmake/CMakeTestCLCCompiler.cmake
Normal file
56
libclc/cmake/CMakeTestCLCCompiler.cmake
Normal file
@ -0,0 +1,56 @@
|
||||
if(CMAKE_CLC_COMPILER_FORCED)
|
||||
# The compiler configuration was forced by the user.
|
||||
# Assume the user has configured all compiler information.
|
||||
set(CMAKE_CLC_COMPILER_WORKS TRUE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
include(CMakeTestCompilerCommon)
|
||||
|
||||
# Remove any cached result from an older CMake version.
|
||||
# We now store this in CMakeCCompiler.cmake.
|
||||
unset(CMAKE_CLC_COMPILER_WORKS CACHE)
|
||||
|
||||
# This file is used by EnableLanguage in cmGlobalGenerator to
|
||||
# determine that that selected CLC compiler can actually compile
|
||||
# and link the most basic of programs. If not, a fatal error
|
||||
# is set and cmake stops processing commands and will not generate
|
||||
# any makefiles or projects.
|
||||
if(NOT CMAKE_CLC_COMPILER_WORKS)
|
||||
PrintTestCompilerStatus("CLC" "")
|
||||
file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCLCCompiler.cl
|
||||
"__kernel void test_k(global int * a)\n"
|
||||
"{ *a = 1; }\n")
|
||||
try_compile(CMAKE_CLC_COMPILER_WORKS ${CMAKE_BINARY_DIR}
|
||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testCLCCompiler.cl
|
||||
# We never generate executable so bypass the link step
|
||||
CMAKE_FLAGS -DCMAKE_CLC_LINK_EXECUTABLE='true'
|
||||
OUTPUT_VARIABLE __CMAKE_CLC_COMPILER_OUTPUT)
|
||||
# Move result from cache to normal variable.
|
||||
set(CMAKE_CLC_COMPILER_WORKS ${CMAKE_CLC_COMPILER_WORKS})
|
||||
unset(CMAKE_CLC_COMPILER_WORKS CACHE)
|
||||
set(CLC_TEST_WAS_RUN 1)
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_CLC_COMPILER_WORKS)
|
||||
PrintTestCompilerStatus("CLC" " -- broken")
|
||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||
"Determining if the CLC compiler works failed with "
|
||||
"the following output:\n${__CMAKE_CLC_COMPILER_OUTPUT}\n\n")
|
||||
message(FATAL_ERROR "The CLC compiler \"${CMAKE_CLC_COMPILER}\" "
|
||||
"is not able to compile a simple test program.\nIt fails "
|
||||
"with the following output:\n ${__CMAKE_CLC_COMPILER_OUTPUT}\n\n"
|
||||
"CMake will not be able to correctly generate this project.")
|
||||
else()
|
||||
if(CLC_TEST_WAS_RUN)
|
||||
PrintTestCompilerStatus("CLC" " -- works")
|
||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||
"Determining if the CLC compiler works passed with "
|
||||
"the following output:\n${__CMAKE_CLC_COMPILER_OUTPUT}\n\n")
|
||||
endif()
|
||||
|
||||
include(${CMAKE_PLATFORM_INFO_DIR}/CMakeCLCCompiler.cmake)
|
||||
|
||||
endif()
|
||||
|
||||
unset(__CMAKE_CLC_COMPILER_OUTPUT)
|
56
libclc/cmake/CMakeTestLLAsmCompiler.cmake
Normal file
56
libclc/cmake/CMakeTestLLAsmCompiler.cmake
Normal file
@ -0,0 +1,56 @@
|
||||
if(CMAKE_LLAsm_COMPILER_FORCED)
|
||||
# The compiler configuration was forced by the user.
|
||||
# Assume the user has configured all compiler information.
|
||||
set(CMAKE_LLAsm_COMPILER_WORKS TRUE)
|
||||
return()
|
||||
endif()
|
||||
|
||||
include(CMakeTestCompilerCommon)
|
||||
|
||||
# Remove any cached result from an older CMake version.
|
||||
# We now store this in CMakeCCompiler.cmake.
|
||||
unset(CMAKE_LLAsm_COMPILER_WORKS CACHE)
|
||||
|
||||
# This file is used by EnableLanguage in cmGlobalGenerator to
|
||||
# determine that that selected llvm assembler can actually compile
|
||||
# and link the most basic of programs. If not, a fatal error
|
||||
# is set and cmake stops processing commands and will not generate
|
||||
# any makefiles or projects.
|
||||
if(NOT CMAKE_LLAsm_COMPILER_WORKS)
|
||||
PrintTestCompilerStatus("LLAsm" "")
|
||||
file(WRITE ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testLLAsmCompiler.ll
|
||||
"define i32 @test() {\n"
|
||||
"ret i32 0 }\n" )
|
||||
try_compile(CMAKE_LLAsm_COMPILER_WORKS ${CMAKE_BINARY_DIR}
|
||||
${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/testLLAsmCompiler.ll
|
||||
# We never generate executable so bypass the link step
|
||||
CMAKE_FLAGS -DCMAKE_LLAsm_LINK_EXECUTABLE='true'
|
||||
OUTPUT_VARIABLE __CMAKE_LLAsm_COMPILER_OUTPUT)
|
||||
# Move result from cache to normal variable.
|
||||
set(CMAKE_LLAsm_COMPILER_WORKS ${CMAKE_LLAsm_COMPILER_WORKS})
|
||||
unset(CMAKE_LLAsm_COMPILER_WORKS CACHE)
|
||||
set(LLAsm_TEST_WAS_RUN 1)
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_LLAsm_COMPILER_WORKS)
|
||||
PrintTestCompilerStatus("LLAsm" " -- broken")
|
||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log
|
||||
"Determining if the LLAsm compiler works failed with "
|
||||
"the following output:\n${__CMAKE_LLAsm_COMPILER_OUTPUT}\n\n")
|
||||
message(FATAL_ERROR "The LLAsm compiler \"${CMAKE_LLAsm_COMPILER}\" "
|
||||
"is not able to compile a simple test program.\nIt fails "
|
||||
"with the following output:\n ${__CMAKE_LLAsm_COMPILER_OUTPUT}\n\n"
|
||||
"CMake will not be able to correctly generate this project.")
|
||||
else()
|
||||
if(LLAsm_TEST_WAS_RUN)
|
||||
PrintTestCompilerStatus("LLAsm" " -- works")
|
||||
file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log
|
||||
"Determining if the LLAsm compiler works passed with "
|
||||
"the following output:\n${__CMAKE_LLAsm_COMPILER_OUTPUT}\n\n")
|
||||
endif()
|
||||
|
||||
include(${CMAKE_PLATFORM_INFO_DIR}/CMakeLLAsmCompiler.cmake)
|
||||
|
||||
endif()
|
||||
|
||||
unset(__CMAKE_LLAsm_COMPILER_OUTPUT)
|
8
libclc/libclc.pc.in
Normal file
8
libclc/libclc.pc.in
Normal file
@ -0,0 +1,8 @@
|
||||
includedir=@CMAKE_INSTALL_PREFIX@/include
|
||||
libexecdir=@CMAKE_INSTALL_PREFIX@/lib/clc
|
||||
|
||||
Name: libclc
|
||||
Description: Library requirements of the OpenCL C programming language
|
||||
Version: @PROJECT_VERSION@
|
||||
Cflags: -I${includedir}
|
||||
Libs: -L${libexecdir}
|
Loading…
Reference in New Issue
Block a user