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

Don Hinton via llvm-commits llvm-commits at lists.llvm.org
Thu May 23 08:02:23 PDT 2019


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.

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?

thanks again...
don

On Thu, May 23, 2019 at 2:30 AM Mikael Holmén <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
> > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190523/9711cc90/attachment.html>


More information about the llvm-commits mailing list