<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>312192</bug_id>
          
          <creation_ts>2026-04-13 14:29:15 -0700</creation_ts>
          <short_desc>[CMake] Fix null builds taking ~90 seconds on Mac</short_desc>
          <delta_ts>2026-04-13 19:49:45 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brandon">brandonstewart</reporter>
          <assigned_to name="Brandon">brandonstewart</assigned_to>
          <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2199890</commentid>
    <comment_count>0</comment_count>
    <who name="Brandon">brandonstewart</who>
    <bug_when>2026-04-13 14:29:15 -0700</bug_when>
    <thetext>CMake Mac null builds were taking ~90 seconds due to three independent                                                            
  issues that cascaded into relinking most of the project on every build.
                                                                                                                                    
  1. GENERATE_BINDINGS used add_custom_target which is always considered                                                            
     out-of-date by Ninja, invoking the Perl binding generator on every                                                             
     build even when no IDL files changed. Convert to add_custom_command                                                            
     with a stamp file so the generator only runs when inputs change.                                                               
     Also promote generator script dependencies to CMake-level DEPENDS.                                                             
                                                                                                                                    
  2. The swiftc-wrapper strips -output-file-map in link mode to prevent                                                             
     ld from receiving the JSON as an input file, but this means swiftc                                                             
     in WMO mode does not produce the individual .o files or update the                                                             
     .swiftmodule that CMake&apos;s Ninja generator declares as build outputs.                                                           
     Touch these paths after a successful build so Ninja does not                                                                   
     consider the rule perpetually out-of-date.                                                                                     
                                                                                                                                    
  3. The Swift-to-C++ interop header was written directly to its final                                                              
     path, so the timestamp always changed even when content was
     identical, triggering recompilation of all includers. Write to a                                                               
     temporary file first and use copy_if_different.                                                                                
                                                                                                                                    
  4. ANGLE-webgl-headers used add_custom_target, running                                                                            
     adjust-angle-include-paths.py on every build. Convert to                                                                       
     add_custom_command with a stamp file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2199891</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2026-04-13 14:29:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/174687295&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2199896</commentid>
    <comment_count>2</comment_count>
    <who name="Brandon">brandonstewart</who>
    <bug_when>2026-04-13 14:36:27 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/62668</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2200014</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2026-04-13 19:49:43 -0700</bug_when>
    <thetext>Committed 311154@main (96cc0562a2a0): &lt;https://commits.webkit.org/311154@main&gt;

Reviewed commits have been landed. Closing PR #62668 and removing active labels.</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>