[compiler-rt] r278454 - [CMake] If the compiler supports _Atomic include atomic.c in builtins libraries

Saleem Abdulrasool via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 12 17:55:16 PDT 2016


On Fri, Aug 12, 2016 at 9:39 AM, Chris Bieneman <beanz at apple.com> wrote:

>
> On Aug 11, 2016, at 9:02 PM, Saleem Abdulrasool <compnerd at compnerd.org>
> wrote:
>
> On Thu, Aug 11, 2016 at 6:29 PM, Chris Bieneman via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: cbieneman
>> Date: Thu Aug 11 20:29:26 2016
>> New Revision: 278454
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=278454&view=rev
>> Log:
>> [CMake] If the compiler supports _Atomic include atomic.c in builtins
>> libraries
>>
>> This fixes a long-standing TODO by implementing a compiler check for
>> supporting the _Atomic keyword. If the _Atomic keyword is supported by the
>> compiler we should include it in the builtin library sources.
>>
>> Modified:
>>     compiler-rt/trunk/cmake/Modules/BuiltinTests.cmake
>>     compiler-rt/trunk/cmake/builtin-config-ix.cmake
>>     compiler-rt/trunk/lib/builtins/CMakeLists.txt
>>
>> Modified: compiler-rt/trunk/cmake/Modules/BuiltinTests.cmake
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/cmake/Modules/
>> BuiltinTests.cmake?rev=278454&r1=278453&r2=278454&view=diff
>> ============================================================
>> ==================
>> --- compiler-rt/trunk/cmake/Modules/BuiltinTests.cmake (original)
>> +++ compiler-rt/trunk/cmake/Modules/BuiltinTests.cmake Thu Aug 11
>> 20:29:26 2016
>> @@ -3,11 +3,15 @@ include(CMakeCheckCompilerFlagCommonPatt
>>  # This function takes an OS and a list of architectures and identifies
>> the
>>  # subset of the architectures list that the installed toolchain can
>> target.
>>  function(try_compile_only output)
>> +  cmake_parse_arguments(ARG "" "" "SOURCE;FLAGS" ${ARGN})
>> +  if(NOT ARG_SOURCE)
>> +    set(ARG_SOURCE "int foo(int x, int y) { return x + y; }\n")
>> +  endif()
>>    set(SIMPLE_C ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/src.c)
>> -  file(WRITE ${SIMPLE_C} "int foo(int x, int y) { return x + y; }\n")
>> +  file(WRITE ${SIMPLE_C} "${ARG_SOURCE}\n")
>>    string(REGEX MATCHALL "<[A-Za-z0-9_]*>" substitutions
>>           ${CMAKE_C_COMPILE_OBJECT})
>> -  string(REPLACE ";" " " extra_flags "${ARGN}")
>> +  string(REPLACE ";" " " extra_flags "${ARG_FLAGS}")
>>
>>    set(test_compile_command "${CMAKE_C_COMPILE_OBJECT}")
>>    foreach(substitution ${substitutions})
>> @@ -63,7 +67,20 @@ endfunction()
>>  function(builtin_check_c_compiler_flag flag output)
>>    if(NOT DEFINED ${output})
>>      message(STATUS "Performing Test ${output}")
>> -    try_compile_only(result ${flag})
>> +    try_compile_only(result FLAGS ${flag})
>> +    set(${output} ${result} CACHE INTERNAL "Compiler supports ${flag}")
>> +    if(${result})
>> +      message(STATUS "Performing Test ${output} - Success")
>> +    else()
>> +      message(STATUS "Performing Test ${output} - Failed")
>> +    endif()
>> +  endif()
>> +endfunction()
>> +
>> +function(builtin_check_c_compiler_source output source)
>> +  if(NOT DEFINED ${output})
>> +    message(STATUS "Performing Test ${output}")
>> +    try_compile_only(result SOURCE ${source})
>>      set(${output} ${result} CACHE INTERNAL "Compiler supports ${flag}")
>>      if(${result})
>>        message(STATUS "Performing Test ${output} - Success")
>>
>> Modified: compiler-rt/trunk/cmake/builtin-config-ix.cmake
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/
>> trunk/cmake/builtin-config-ix.cmake?rev=278454&r1=278453&r2=
>> 278454&view=diff
>> ============================================================
>> ==================
>> --- compiler-rt/trunk/cmake/builtin-config-ix.cmake (original)
>> +++ compiler-rt/trunk/cmake/builtin-config-ix.cmake Thu Aug 11 20:29:26
>> 2016
>> @@ -1,4 +1,5 @@
>>  include(BuiltinTests)
>> +include(CheckCSourceCompiles)
>>
>>  # Make all the tests only check the compiler
>>  set(TEST_COMPILE_ONLY On)
>> @@ -14,6 +15,15 @@ builtin_check_c_compiler_flag(-mfloat-ab
>>  builtin_check_c_compiler_flag(-mfloat-abi=hard
>> COMPILER_RT_HAS_FLOAT_ABI_HARD_FLAG)
>>  builtin_check_c_compiler_flag(-static
>>  COMPILER_RT_HAS_STATIC_FLAG)
>>
>> +builtin_check_c_compiler_source(COMPILER_RT_SUPPORTS_ATOMIC_KEYWORD
>>
>
> Probably better to  use `COMPILER_RT_CC_SUPPORTS_ATOMIC_KEYWORD` as its
> not compiler-rt but rather CC that we are checking has support for the
> atomic keyword.
>
>
> So, I agree that the option is incorrectly named, but I don’t agree with
> your suggestion. I think it should follow the convention of the other
> compiler checks in the project, which would be COMPILER_RT_HAS_ATOMIC_
> KEYWORD.
>

Sounds reasonable enough to me.


> Because of the convention we use where variable names start with the
> project name I think we need to try not to be overly verbose in naming. In
> places where we’re not we already end up with really crazy long lines.
>
> Thoughts?
> -Chris
>
>
>
>> +"
>> +int foo(int x, int y) {
>> + _Atomic int result = x * y;
>> + return result;
>> +}
>> +")
>> +
>> +
>>  set(ARM64 aarch64)
>>  set(ARM32 arm armhf)
>>  set(X86 i386 i686)
>>
>> Modified: compiler-rt/trunk/lib/builtins/CMakeLists.txt
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/
>> trunk/lib/builtins/CMakeLists.txt?rev=278454&r1=278453&r2=
>> 278454&view=diff
>> ============================================================
>> ==================
>> --- compiler-rt/trunk/lib/builtins/CMakeLists.txt (original)
>> +++ compiler-rt/trunk/lib/builtins/CMakeLists.txt Thu Aug 11 20:29:26
>> 2016
>> @@ -42,8 +42,6 @@ set(GENERIC_SOURCES
>>    ashlti3.c
>>    ashrdi3.c
>>    ashrti3.c
>> -  # FIXME: atomic.c may only be compiled if host compiler understands
>> _Atomic
>> -  # atomic.c
>>    clear_cache.c
>>    clzdi2.c
>>    clzsi2.c
>> @@ -166,6 +164,12 @@ set(GENERIC_SOURCES
>>    umodsi3.c
>>    umodti3.c)
>>
>> +if(COMPILER_RT_SUPPORTS_ATOMIC_KEYWORD)
>> +  set(GENERIC_SOURCES
>> +    ${GENERIC_SOURCES}
>> +    atomic.c)
>> +endif()
>> +
>>  set(MSVC_SOURCES
>>   divsc3.c
>>   divdc3.c
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
>
>
> --
> Saleem Abdulrasool
> compnerd (at) compnerd (dot) org
>
>
>


-- 
Saleem Abdulrasool
compnerd (at) compnerd (dot) org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160812/bb9031a4/attachment.html>


More information about the llvm-commits mailing list