[llvm] r361280 - [cmake] Add custom command to touch archives on Darwin so ninja won't rebuild them.

Mikael Holmén via llvm-commits llvm-commits at lists.llvm.org
Fri May 24 00:02:59 PDT 2019


Hi,

On 5/23/19 5:02 PM, Don Hinton wrote:
> Hi Mikael:
> 
> Thanks for reporting this.
> 
> Looks like the call to `include(CMakeNinjaFindMake OPTIONAL)` is the 
> problem since it's using find_program and overwrites it if it isn't a 
> full path.  Since the generator already set it, there's no reason for an 
> additional find_program call, so I'll remove it.
> 
> Fixed in r361501.
> 

Thanks!

> Btw, why were you setting CMAKE_MAKE_PROGRAM to a value without a path?  
> Is this so you can test alternative versions of ninja without rerunning 
> cmake?
> 

We're using several different machines with ninja installed at different 
places, so I think we just set CMAKE_MAKE_PROGRAM to ninja (without 
path) to use whatever ninja version we have in the PATH on that machine.

Perhaps we don't actually need to set CMAKE_MAKE_PROGRAM at all then?

Anyway, your patch made it work with just "ninja" again.

Thanks,
Mikael

> thanks again...
> don
> 
> On Thu, May 23, 2019 at 2:30 AM Mikael Holmén 
> <mikael.holmen at ericsson.com <mailto:mikael.holmen at ericsson.com>> wrote:
> 
>     Hi Don,
> 
>     I noticed that if I run cmake and configure with
>     -DCMAKE_MAKE_PROGRAM=ninja, so I'm not including the full path to
>     ninja,
>     then I get errors with this commit when it tries to do "ninja
>     --version".
> 
>     It then tries to do
> 
> 
>     '/local/repo/bbiswjenk/fem023-eiffel003/workspace/llvm/llvm-dev-kielx2/build-ccache/ninja'
> 
>     '--version'
> 
>     If I instead configure with -DCMAKE_MAKE_PROGRAM=/usr/bin/ninja it
>     works
>     as it should.
> 
>     /usr/bin/ is included in the PATH, but still it tries to run ninja from
>     the local build directory when I've cofigured with just "ninja".
> 
>     Is this expected?
> 
>     Regards,
>     Mikael
> 
>     On 5/21/19 7:56 PM, Don Hinton via llvm-commits wrote:
>      > Author: dhinton
>      > Date: Tue May 21 10:56:45 2019
>      > New Revision: 361280
>      >
>      > URL: http://llvm.org/viewvc/llvm-project?rev=361280&view=rev
>      > Log:
>      > [cmake] Add custom command to touch archives on Darwin so ninja
>     won't rebuild them.
>      >
>      > Summary:
>      > clang and newer versions of ninja use high-resolutions
>     timestamps, but
>      > older versions of libtool on Darwin don't, so the archive will often
>      > get an older timestamp than the last object that was added or
>     updated.
>      > To fix this, we add a custom command to touch the archive after it's
>      > been built so that ninja won't rebuild it unnecessarily the next time
>      > it's run.
>      >
>      > Reviewed By: beanz
>      >
>      > Tags: #llvm
>      >
>      > Differential Revision: https://reviews.llvm.org/D62172
>      >
>      > Modified:
>      >      llvm/trunk/cmake/config-ix.cmake
>      >      llvm/trunk/cmake/modules/AddLLVM.cmake
>      >
>      > Modified: llvm/trunk/cmake/config-ix.cmake
>      > URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/config-ix.cmake?rev=361280&r1=361279&r2=361280&view=diff
>      >
>     ==============================================================================
>      > --- llvm/trunk/cmake/config-ix.cmake (original)
>      > +++ llvm/trunk/cmake/config-ix.cmake Tue May 21 10:56:45 2019
>      > @@ -554,6 +554,22 @@ find_program(GOLD_EXECUTABLE NAMES ${LLV
>      >   set(LLVM_BINUTILS_INCDIR "" CACHE PATH
>      >       "PATH to binutils/include containing plugin-api.h for gold
>     plugin.")
>      >
>      > +if(CMAKE_GENERATOR STREQUAL "Ninja")
>      > +  include(CMakeNInjaFindMake)
>      > +  if(CMAKE_MAKE_PROGRAM)
>      > +    execute_process(COMMAND ${CMAKE_MAKE_PROGRAM} --version
>      > +      OUTPUT_VARIABLE NINJA_VERSION
>      > +      OUTPUT_STRIP_TRAILING_WHITESPACE)
>      > +    set(NINJA_VERSION ${NINJA_VERSION} CACHE STRING "Ninja
>     version number" FORCE)
>      > +  endif()
>      > +endif()
>      > +
>      > +if(CMAKE_GENERATOR STREQUAL "Ninja" AND
>      > +    NINJA_VERSION VERSION_GREATER_EQUAL "1.9.0" AND
>      > +    CMAKE_HOST_APPLE AND CMAKE_HOST_SYSTEM_VERSION
>     VERSION_GREATER "15.6.0")
>      > +  set(LLVM_TOUCH_STATIC_LIBRARIES ON)
>      > +endif()
>      > +
>      >   if(CMAKE_HOST_APPLE AND APPLE)
>      >     if(NOT CMAKE_XCRUN)
>      >       find_program(CMAKE_XCRUN NAMES xcrun)
>      >
>      > Modified: llvm/trunk/cmake/modules/AddLLVM.cmake
>      > URL:
>     http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/AddLLVM.cmake?rev=361280&r1=361279&r2=361280&view=diff
>      >
>     ==============================================================================
>      > --- llvm/trunk/cmake/modules/AddLLVM.cmake (original)
>      > +++ llvm/trunk/cmake/modules/AddLLVM.cmake Tue May 21 10:56:45 2019
>      > @@ -596,6 +596,18 @@ function(llvm_add_library name)
>      >       llvm_externalize_debuginfo(${name})
>      >       llvm_codesign(${name} ENTITLEMENTS ${ARG_ENTITLEMENTS})
>      >     endif()
>      > +  # clang and newer versions of ninja use high-resolutions
>     timestamps,
>      > +  # but older versions of libtool on Darwin don't, so the
>     archive will
>      > +  # often get an older timestamp than the last object that was added
>      > +  # or updated.  To fix this, we add a custom command to touch
>     archive
>      > +  # after it's been built so that ninja won't rebuild it
>     unnecessarily
>      > +  # the next time it's run.
>      > +  if(ARG_STATIC AND LLVM_TOUCH_STATIC_LIBRARIES)
>      > +    add_custom_command(TARGET ${name}
>      > +      POST_BUILD
>      > +      COMMAND touch
>     ${LLVM_LIBRARY_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}${name}${CMAKE_STATIC_LIBRARY_SUFFIX}
>      > +      )
>      > +  endif()
>      >   endfunction()
>      >
>      >   function(add_llvm_install_targets target)
>      >
>      >
>      > _______________________________________________
>      > llvm-commits mailing list
>      > llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
>      > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>      >
> 



More information about the llvm-commits mailing list