> On Oct 20, 2020, at 2:25 PM, Keith Rollin <krol...@apple.com> wrote:
> 
>> On Oct 20, 2020, at 10:51, Andy Estes <aes...@apple.com> wrote:
>> 
>>> On Oct 18, 2020, at 11:01, Sam Weinig <wei...@apple.com> wrote:
>>> 
>>> One direct benefit of moving away from DerivedSources.make would likely be 
>>> (I say likely, as the details of how it works out are far from certain in 
>>> my mind) removing at least one place that a IDL file needs to be listed as 
>>> we would not need to explicitly the list the IDL file in 
>>> DerivedSources.make, and would only need to ensure it was in some 
>>> *input.xcfilelist.
>> 
>> The way I imagine this working is that the existing .idl file references in 
>> the (e.g., WebCore) project would become members in a target with a custom 
>> build rule for “*.idl”. Target membership is itself another list inside the 
>> .xcodeproj file, just one you manage through checkboxes in Xcode (and can be 
>> done reasonably quickly as part of adding a new file reference).
>> 
>> Whether or not this actually creates one fewer “place a IDL file needs to be 
>> listed” (which I think is a worthwhile goal), I think you should still 
>> remove the Makefile build phases from Xcode for the reasons you originally 
>> cited.
>> 
>> Andy
> 
> Overall, this sounds like an awesome endeavor. The initial reasons for using 
> Makefiles were sound ones (as Darin described), but there are also the 
> incumbent issues, such as maintainability and efficiency.
> 
> I wasn’t clear on what the alternative to Makefiles would look like, though. 
> The options that occur to me are:
> 
> * Custom build rules, as Andy describes. This seems to make sense, but I 
> wonder if it is flexible enough for all the cases we might want to put it 
> through. Our DerivedSources.make files process many types of files. I haven’t 
> checked, but I could imagine that not all of these files could be uniquely 
> distinguished by their suffixes. That is, there might be one set of *.foo 
> files that should be processed one way, and another set that should processed 
> another way. In those cases, I guess some suffixes could be changed to 
> accommodate the different processing.
> 
> * Using a set of Run Script build phases. That is, have a Run Script phase 
> for processing a specific set of *.idl files, another for processing one set 
> of *.foo files, a third for processing a different specific set of *.foo 
> files, and so on. I’m against this approach, though. While it offers lots of 
> flexibility, it’s not very maintainable. It would mean having to keep the set 
> of script inputs and outputs up-to-date, something that is fragile, even with 
> the help of the generate-xcfilelists utility script.
> 
> Of these two, the one based on custom build rules seems to make the most 
> sense. One need only add a file to an Xcode project and possibly a CMake 
> file. Of note, the dreaded .xcfilelists are not affected (and, if this 
> project can be taken to its extreme, we can get rid of the 
> DerivedSources*.xcfilelist files). I do worry about some efficiency issues, 
> though. For instance, one part of DerivedSources.make processes Platform.h 
> (and all its children) in order to extract some configuration information. 
> That processing is done once per DerivedSources.make invocation. If we move 
> to a model where a script is invoked once per *.idl file, then the overhead 
> is now multiplied by the number of *.idl files. We should watch for that. 
> (Perhaps your recent configuration/preferences/settings changes obviate the 
> need to pre-process Platform.h all the time?)

My thought is that we would be using a combination of Run Script phases and 
Build Rules, depending on the thing being generated. There are quite a few 
one-off scripts like makeprop.pl, makevalues.pl, 
makeSelectorPseudoClassAndCompatibilityElementMap.py, etc, that don’t have 
their input or output change very often at all, so are really much better 
suited for a Run Script phase. Whereas things like the IDLs are better suited 
for build rules.

For the Platform.h issue, I think we could probably engineer things in the 
short term to have a script phase that produces a Defines.txt that the other 
script phases and build rules depend on. Longer term, I would like to remove 
the need for it altogether, but that’s going to take additional work in the 
various scripts.


> Still, I’m open to a solution based on a single IDL.txt file that can be 
> shared by Xcode and CMake. It all depends on the details, the resulting 
> solution, and the trade-offs it makes.
> 
> Regarding Xcode vs. CMake, I certainly understand the reasons people would 
> like to see us move solely to CMake. But, for now, the plan is to see if we 
> can get Apple-OS ports to build with CMake at all. Replacing Xcode and 
> xcodebuild is a follow-on project with an interesting set of issues. I set up 
> #cmake on Slack to provide a place where we can talk about this for anyone 
> who’s interested.
> 


Thanks for the feedback,

- Sam

> — Keith
> 
> _______________________________________________
> webkit-dev mailing list
> webkit-dev@lists.webkit.org <mailto:webkit-dev@lists.webkit.org>
> https://lists.webkit.org/mailman/listinfo/webkit-dev 
> <https://lists.webkit.org/mailman/listinfo/webkit-dev>
_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-dev

Reply via email to