On Sat, May 10, 2014 at 12:07:22AM -0500, Joshua Cranmer ? wrote:
> One of the most useful things to export to moz.build backends is the ability
> to represent compile commands faithfully--for example, for things like IDE
> integration or clang compilation databases. Our moz.build migrations have
> moved most of the obvious stuff (DEFINES, LOCAL_INCLUDES), but there are
> still some critical logic rules missing:
> -DIMPL_LIBXUL, -DMOZILLA_INTERNAL_API
> -include $(DEPTH)/mozilla-config.h

> -std=gnu++0x

This one should be in OS_CXXFLAGS already.

> -I/usr/include/gtk-2.0 (i.e., TK_CFLAGS where directories need them).
> 
> The current command line rules in rules.mk looks like this:
> $(CC) $(OUTOPTION)$@ -c $(COMPILE_CFLAGS) $($(notdir $<)_FLAGS)
> $(TARGET_LOCAL_INCLUDES) $(_VPATH_SRCS)
> where $(COMPILE_CFLAGS) is a very nasty command-line option requiring about
> 1/3 of config.mk to construct.
> 
> In theory, we can break down the basic structure of COMPILE_CFLAGS and
> friends into four categories of flags:
> 1. Global flags (e.g., -DDEBUG, -std=gnu++0x).
> 2. Binary-specific flags (e.g., -DIMPL_LIBXUL). (i.e., these ought to
> propagate according to FINAL_LIBRARY).
> 3. File-specific flags
> 4. PGO mode-dependent flags. In practice, these flags oughtn't be necessary
> for most integration project tools
> 
> [The role of NO_VISIBILITY_FLAGS, DISABLE_STL_WRAPPING, and FAIL_ON_WARNINGS
> is kind of vague on this point. In theory, NO_VISIBILITY_FLAGS and
> DISABLE_STL_WRAPPING should apply equally across all levels of
> FINAL_LIBRARY, but I'm willing to bet that they don't right now. I'm
> treating FAIL_ON_WARNINGS as effectively a file-specific flag for this
> categorization purpose.]
> 
> In theory, we ought to be able to cleanly separate these rules so we could
> define a compile rule like this:
> $(CC) $(OUTOPTION)$@ -c $(GLOBAL_CFLAGS) $(BINARY_CFLAGS) $(PGO_CFLAGS)
> $($(notdir $<)_FLAGS) $(_VPATH_SRCS)
> 
> [This is less true for linking-level flags, but the most important use cases
> are concerned with the compile lines, not the link lines, so I'm willing to
> punt on that for now.]
> 
> With this in mind, I'd like to propose working on this issue by doing the
> following steps:
> 1. Start combining the global flags into a single GLOBAL_CFLAGS rule, and
> make the logic for emitting this happen at configure-time, not in config.mk.
> I kind of prefer doing this in moz.build somehow since python is a far
> easier language to do logic in than Makefile or m4-augmented shell-script,
> but as long as this knowledge is easily communicable to moz.build (e.g., via
> CONFIG), that should satisfy most use cases.
> 2. Introduce a LIBRARY_DEFINES rule that acts like DEFINES but adds its
> defines to all libraries within the same FINAL_LIBRARY set. This model is
> meant to extend to other options like potentially EXTRA_DSO_LDOPT or LIBS
> rules, but I'm not actively targetting linking right now.
> 
> Thoughts/comments/questions/concerns/responses/flames?

I think I can vouch for this. The bikeshedding about how to name
LIBRARY_DEFINES and/or how to define it in moz.build can be dealt with
later. Once something is in moz.build, automatic rewrites are easy.

Mike
_______________________________________________
dev-builds mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-builds

Reply via email to