[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
Thu May 23 02:30:17 PDT 2019


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
> 


More information about the llvm-commits mailing list