[libclc] r347667 - Add cmake build system
Jan Vesely via cfe-commits
cfe-commits at lists.llvm.org
Tue Nov 27 08:07:19 PST 2018
Author: jvesely
Date: Tue Nov 27 08:07:19 2018
New Revision: 347667
URL: http://llvm.org/viewvc/llvm-project?rev=347667&view=rev
Log:
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 at rutgers.edu>
Acked-by: Aaron Watry <awatry at gmail.com>
Tested-by: Aaron Watry <awatry at gmail.com>
Acked-by: Vedran Miletić <vedran at miletic.net>
Added:
libclc/trunk/CMakeLists.txt
libclc/trunk/cmake/
libclc/trunk/cmake/CMakeCLCCompiler.cmake.in
libclc/trunk/cmake/CMakeCLCInformation.cmake
libclc/trunk/cmake/CMakeDetermineCLCCompiler.cmake
libclc/trunk/cmake/CMakeDetermineLLAsmCompiler.cmake
libclc/trunk/cmake/CMakeLLAsmCompiler.cmake.in
libclc/trunk/cmake/CMakeLLAsmInformation.cmake
libclc/trunk/cmake/CMakeTestCLCCompiler.cmake
libclc/trunk/cmake/CMakeTestLLAsmCompiler.cmake
libclc/trunk/libclc.pc.in
Added: libclc/trunk/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/CMakeLists.txt?rev=347667&view=auto
==============================================================================
--- libclc/trunk/CMakeLists.txt (added)
+++ libclc/trunk/CMakeLists.txt Tue Nov 27 08:07:19 2018
@@ -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 )
Added: libclc/trunk/cmake/CMakeCLCCompiler.cmake.in
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/cmake/CMakeCLCCompiler.cmake.in?rev=347667&view=auto
==============================================================================
--- libclc/trunk/cmake/CMakeCLCCompiler.cmake.in (added)
+++ libclc/trunk/cmake/CMakeCLCCompiler.cmake.in Tue Nov 27 08:07:19 2018
@@ -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")
Added: libclc/trunk/cmake/CMakeCLCInformation.cmake
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/cmake/CMakeCLCInformation.cmake?rev=347667&view=auto
==============================================================================
--- libclc/trunk/cmake/CMakeCLCInformation.cmake (added)
+++ libclc/trunk/cmake/CMakeCLCInformation.cmake Tue Nov 27 08:07:19 2018
@@ -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")
Added: libclc/trunk/cmake/CMakeDetermineCLCCompiler.cmake
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/cmake/CMakeDetermineCLCCompiler.cmake?rev=347667&view=auto
==============================================================================
--- libclc/trunk/cmake/CMakeDetermineCLCCompiler.cmake (added)
+++ libclc/trunk/cmake/CMakeDetermineCLCCompiler.cmake Tue Nov 27 08:07:19 2018
@@ -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)
Added: libclc/trunk/cmake/CMakeDetermineLLAsmCompiler.cmake
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/cmake/CMakeDetermineLLAsmCompiler.cmake?rev=347667&view=auto
==============================================================================
--- libclc/trunk/cmake/CMakeDetermineLLAsmCompiler.cmake (added)
+++ libclc/trunk/cmake/CMakeDetermineLLAsmCompiler.cmake Tue Nov 27 08:07:19 2018
@@ -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)
Added: libclc/trunk/cmake/CMakeLLAsmCompiler.cmake.in
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/cmake/CMakeLLAsmCompiler.cmake.in?rev=347667&view=auto
==============================================================================
--- libclc/trunk/cmake/CMakeLLAsmCompiler.cmake.in (added)
+++ libclc/trunk/cmake/CMakeLLAsmCompiler.cmake.in Tue Nov 27 08:07:19 2018
@@ -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")
Added: libclc/trunk/cmake/CMakeLLAsmInformation.cmake
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/cmake/CMakeLLAsmInformation.cmake?rev=347667&view=auto
==============================================================================
--- libclc/trunk/cmake/CMakeLLAsmInformation.cmake (added)
+++ libclc/trunk/cmake/CMakeLLAsmInformation.cmake Tue Nov 27 08:07:19 2018
@@ -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")
Added: libclc/trunk/cmake/CMakeTestCLCCompiler.cmake
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/cmake/CMakeTestCLCCompiler.cmake?rev=347667&view=auto
==============================================================================
--- libclc/trunk/cmake/CMakeTestCLCCompiler.cmake (added)
+++ libclc/trunk/cmake/CMakeTestCLCCompiler.cmake Tue Nov 27 08:07:19 2018
@@ -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)
Added: libclc/trunk/cmake/CMakeTestLLAsmCompiler.cmake
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/cmake/CMakeTestLLAsmCompiler.cmake?rev=347667&view=auto
==============================================================================
--- libclc/trunk/cmake/CMakeTestLLAsmCompiler.cmake (added)
+++ libclc/trunk/cmake/CMakeTestLLAsmCompiler.cmake Tue Nov 27 08:07:19 2018
@@ -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)
Added: libclc/trunk/libclc.pc.in
URL: http://llvm.org/viewvc/llvm-project/libclc/trunk/libclc.pc.in?rev=347667&view=auto
==============================================================================
--- libclc/trunk/libclc.pc.in (added)
+++ libclc/trunk/libclc.pc.in Tue Nov 27 08:07:19 2018
@@ -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}
More information about the cfe-commits
mailing list