[llvm] r235732 - [CMake] Fix for PR 23328: LLVM_OPTIMIZED_TABLEGEN broken

Chris Bieneman via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 2 13:51:19 PDT 2016


Gotcha. I have an idea about how to fix this, but I’m a bit swamped this week. I may have time to take a stab at it during the dev meeting. Can you please harass me about it if you don’t hear back from me?

The underlying issue all comes down to bad dependency mappings. I *really* need to rewrite all the goop in TableGen.cmake and CrossCompile.cmake to get the dependencies straightened out. One of my many sins against the LLVM build system.

-Chris

> On Nov 1, 2016, at 12:08 PM, NAKAMURA Takumi <geek4civic at gmail.com> wrote:
> 
> I am checking LLVM_OPTIMIZD_TABLEGEN with ninja.
> 
> NATIVE/bin/*-tblgen(s) are generated but *.gen.tmp(s) are not regenerated, when NATIVE/bin/*-tblgen(s) should be rebuilt.
> 
> $ touch llvm/utils/TableGen/TableGen.cpp
> $ ninja LLVMCore
> 
> On Wed, Nov 2, 2016 at 3:27 AM Chris Bieneman <beanz at apple.com <mailto:beanz at apple.com>> wrote:
> Hi Takumi,
> 
> What is the issue you’re seeing? Do you have a reproduction case?
> 
> This change is trying to solve the case where there is no target to generate the tablegen executable. This happens when you are cross-compiling or when you are using LLVM_OPTIMIZED_TABLEGEN=On.
> 
> -Chris
> 
>> On Nov 1, 2016, at 11:20 AM, NAKAMURA Takumi <geek4civic at gmail.com <mailto:geek4civic at gmail.com>> wrote:
>> 
>> Chris, excuse me to respond an older commit.
>> 
>> On Sat, Apr 25, 2015 at 2:17 AM Chris Bieneman <beanz at apple.com <mailto:beanz at apple.com>> wrote:
>> Author: cbieneman
>> Date: Fri Apr 24 12:09:20 2015
>> New Revision: 235732
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=235732&view=rev <http://llvm.org/viewvc/llvm-project?rev=235732&view=rev>
>> Log:
>> [CMake] Fix for PR 23328: LLVM_OPTIMIZED_TABLEGEN broken
>> 
>> In CMake dependencies can be filenames or targets, and targets can't be filenames. The Ninja generator handles filename dependencies because it generates targets for every output file from a command. For example:
>> 
>> add_custom_command(OUTPUT foo.txt COMMAND touch foo.txt)
>> 
>> With the Ninja generator this generates a target foo.txt, but with the Makefile generator it doesn't. This is probably because Ninja explicitly requires these hard dependency ties, and Make just behaves oddly in general.
>> 
>> To fix this we need to make the tablegen actions depend on a target rather than a filename.
>> 
>> Modified:
>>     llvm/trunk/cmake/modules/TableGen.cmake
>> 
>> Modified: llvm/trunk/cmake/modules/TableGen.cmake
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/TableGen.cmake?rev=235732&r1=235731&r2=235732&view=diff <http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/TableGen.cmake?rev=235732&r1=235731&r2=235732&view=diff>
>> ==============================================================================
>> --- llvm/trunk/cmake/modules/TableGen.cmake (original)
>> +++ llvm/trunk/cmake/modules/TableGen.cmake Fri Apr 24 12:09:20 2015
>> @@ -32,7 +32,7 @@ function(tablegen project ofn)
>>      # The file in LLVM_TARGET_DEFINITIONS may be not in the current
>>      # directory and local_tds may not contain it, so we must
>>      # explicitly list it here:
>> -    DEPENDS ${${project}_TABLEGEN_EXE} ${local_tds} ${global_tds}
>> +    DEPENDS ${${project}_TABLEGEN_TARGET} ${local_tds} ${global_tds}
>> 
>> I think it'd be wrong. Order-only dependency is generated in trunk.
>> 
>>   build include/llvm/IR/Intrinsics.gen.tmp: CUSTOM_COMMAND foo.td <http://foo.td/> ...
>>   || utils/TableGen/LLVM-tablegen-host
>> 
>> I think it should be right with ${${project}_TABLEGEN_EXE}. Files (or executable targets) may be described here.
>> 
>>      ${LLVM_TARGET_DEFINITIONS_ABSOLUTE}
>>      COMMENT "Building ${ofn}..."
>>      )
>> @@ -90,6 +90,7 @@ macro(add_tablegen target project)
>> 
>>    # Effective tblgen executable to be used:
>>    set(${project}_TABLEGEN_EXE ${${project}_TABLEGEN} PARENT_SCOPE)
>> +  set(${project}_TABLEGEN_TARGET ${${project}_TABLEGEN} PARENT_SCOPE)
>> 
>>    if(LLVM_USE_HOST_TOOLS)
>>      if( ${${project}_TABLEGEN} STREQUAL "${target}" )
>> @@ -101,8 +102,8 @@ macro(add_tablegen target project)
>>          DEPENDS CONFIGURE_LLVM_NATIVE ${target}
>>          WORKING_DIRECTORY ${LLVM_NATIVE_BUILD}
>>          COMMENT "Building native TableGen...")
>> -      add_custom_target(${project}NativeTableGen DEPENDS ${${project}_TABLEGEN_EXE})
>> -      add_dependencies(${project}NativeTableGen CONFIGURE_LLVM_NATIVE)
>> +      add_custom_target(${project}-tablegen-host DEPENDS ${${project}_TABLEGEN_EXE})
>> +      set(${project}_TABLEGEN_TARGET ${project}-tablegen-host PARENT_SCOPE)
>>      endif()
>>    endif()
>> 
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu <mailto:llvm-commits at cs.uiuc.edu>
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits <http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161102/522bb472/attachment.html>


More information about the llvm-commits mailing list