| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- //
- // Depends.pp
- //
- // This file is loaded and run after each Sources.pp is read. It
- // defines the inter-directory dependencies, which is useful for
- // determining build order.
- //
- #if $[eq $[DIR_TYPE], toplevel]
- #define DEPENDABLE_HEADERS $[CONFIG_HEADER]
- #elif $[or $[eq $[DIR_TYPE], src], $[eq $[DIR_TYPE], metalib]]
- #if $[eq $[DEPEND_DIRS],]
- // DEPENDABLE_HEADERS is supposed to be the primary purpose of this
- // file: here we generate the list of source files that might be
- // included in some other source file, and hence is relevant to the
- // automatically-generated dependency chain.
- // We generate this variable by walking through all of the targets
- // and building it up.
- #define DEPENDABLE_HEADERS
- // We will also need to sort out the types files we will actually
- // compile within each directory, as well as the lists of files that
- // go into each composite.
- // We define $[c_sources], $[cxx_sources], $[yxx_sources], and
- // $[lxx_sources] within each target, which lists original files as
- // well as synthetic composite files. We also now add
- // $[cxx_interrogate_sources], which are the C++ files generated by
- // interrogate. Under OSX, we want to compile these files
- // separately.
- // Finally, there's $[compile_sources], which is the union of all
- // the others: any source files that are actually compiled and
- // result in a generated .o (or .obj) file.
- // Finally, we build up $[composite_list] out here to list all of
- // the composite files generated for all targets.
- // This is done at this point, within Depends.pp, so that the
- // various Template.*.pp files will be able to reliably access
- // $[compile_sources] from the different directories.
- #define composite_list
- // Tag all the static libraries by defining the "lib_is_static" variable.
- #forscopes static_lib_target
- #define lib_is_static 1
- #end static_lib_target
- #if $[WINDOWS_PLATFORM]
- #forscopes ss_lib_target
- #define lib_is_static 1
- #end ss_lib_target
- #endif
- #if $[LINK_ALL_STATIC]
- #forscopes metalib_target ss_lib_target lib_target
- #define lib_is_static 1
- #end metalib_target ss_lib_target lib_target
- #endif
- #forscopes metalib_target lib_target noinst_lib_target test_lib_target static_lib_target dynamic_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target
- // We can optimize quite a bit by evaluating now several of the key
- // deferred variables defined in Globals.pp. This way they won't need
- // to get repeatedly reevaluated as each directory examines each
- // other.
- #define build_directory $[build_directory]
- #define build_target $[build_target]
- #define active_local_libs $[active_local_libs]
- #define active_component_libs $[active_component_libs]
- #define active_libs $[active_libs]
- #define get_sources $[get_sources]
- #define get_igatescan $[get_igatescan]
- #define get_igateoutput $[get_igateoutput]
- #define get_igatedb $[get_igatedb]
- #define get_igatemscan $[get_igatemscan]
- #define get_igatemout $[get_igatemout]
- // Report a warning for nonexisting dependencies.
- #define nonexisting $[unmapped all_libs,$[LOCAL_LIBS]]
- #if $[ne $[nonexisting],]
- #print Warning: Lib(s) $[nonexisting], referenced in $[DIRNAME]/$[TARGET], not found.
- #endif
- #set DEPENDABLE_HEADERS $[DEPENDABLE_HEADERS] $[filter %.h %.I %.T %_src.cxx,$[get_sources]] $[included_sources]
- // Now compute the source files.
- #define c_sources $[filter-out %_src.c,$[filter %.c,$[get_sources]]]
- #define mm_sources $[filter %.mm,$[get_sources]]
- #define cxx_sources $[filter-out %_src.cxx,$[filter %.cxx %.cpp,$[get_sources]]]
- #define cxx_interrogate_sources
- #if $[PYTHON_MODULE_ONLY]
- #set cxx_interrogate_sources $[cxx_sources]
- #set cxx_sources
- #endif
- #define yxx_sources $[filter %.yxx,$[get_sources]]
- #define lxx_sources $[filter %.lxx,$[get_sources]]
- // Define what the object files are.
- #foreach file $[c_sources] $[mm_sources] $[cxx_sources] $[cxx_interrogate_sources] $[yxx_sources] $[lxx_sources]
- #define $[file]_obj $[patsubst %.c %.cxx %.mm %.cpp %.yxx %.lxx,$[ODIR]/$[obj_prefix]%$[OBJ],$[notdir $[file]]]
- #push 1 $[file]_obj
- #end file
- #if $[and $[not $[DONT_COMBINE]],$[or $[USE_SINGLE_COMPOSITE_SOURCEFILE],$[USE_TAU]]]
- #if $[> $[words $[cxx_sources]], 1]
- // If we have multiple C++ files, put them together into one
- // composite file.
- #define composite_file $[ODIR]/$[TARGET]_composite.cxx
- #set composite_list $[composite_list] $[composite_file]
- #define $[composite_file]_sources $[cxx_sources]
- #define $[composite_file]_obj $[ODIR]/$[TARGET]_composite$[OBJ]
- #push 1 $[composite_file]_sources
- #push 1 $[composite_file]_obj
- #if $[PYTHON_MODULE_ONLY]
- #set cxx_interrogate_sources $[composite_file]
- #else
- #set cxx_sources $[composite_file]
- #endif
- #endif
- #if $[> $[words $[c_sources]], 1]
- // If we have multiple C files, put them together into one
- // composite file also.
- #define composite_file $[ODIR]/$[TARGET]_composite_c.c
- #set composite_list $[composite_list] $[composite_file]
- #define $[composite_file]_sources $[c_sources]
- #define $[composite_file]_obj $[ODIR]/$[TARGET]_composite_c$[OBJ]
- #push 1 $[composite_file]_sources
- #push 1 $[composite_file]_obj
- #set c_sources $[composite_file]
- #endif
- #endif
- // Add the bison- and flex-generated .cxx files, as well as the
- // interrogate-generated files, to the compile list, too. These
- // never get added to composite files, though, mainly because they
- // tend to be very large files themselves.
- #foreach source_file $[yxx_sources] $[lxx_sources]
- #define generated_file $[patsubst %.yxx %.lxx,%.cxx,$[source_file]]
- #define $[generated_file]_obj $[patsubst %.yxx %.lxx,$[ODIR]/$[TARGET]_%$[OBJ],$[source_file]]
- #define $[generated_file]_sources $[source_file]
- #push 1 $[generated_file]_obj
- #set cxx_sources $[cxx_sources] $[generated_file]
- #end source_file
- #if $[and $[build_directory],$[get_igateoutput]]
- #define generated_file $[get_igateoutput]
- #define $[generated_file]_obj $[get_igateoutput:%.cxx=%$[OBJ]]
- // #define $[generated_file]_sources $[get_igatescan]
- #push 1 $[generated_file]_obj
- // We add this to cxx_sources instead of cxx_interrogate_sources,
- // even though it's an interrogate-generated file, because it's
- // not a module file--we really only accumulate module files into
- // cxx_interrogate_sources.
- #set cxx_sources $[cxx_sources] $[generated_file]
- #endif
- #if $[get_igatemout]
- #define generated_file $[get_igatemout]
- #define $[generated_file]_obj $[get_igatemout:%.cxx=%$[OBJ]]
- #define $[generated_file]_sources none
- #push 1 $[generated_file]_obj
- #set cxx_interrogate_sources $[cxx_interrogate_sources] $[generated_file]
- #endif
- #define compile_sources $[c_sources] $[mm_sources] $[cxx_sources] $[cxx_interrogate_sources]
- #end metalib_target lib_target noinst_lib_target test_lib_target static_lib_target dynamic_lib_target ss_lib_target bin_target noinst_bin_target test_bin_target
- // Allow the user to define additional EXTRA_DEPENDS targets in each
- // Sources.pp.
- #define DEPEND_DIRS \
- $[sort $[EXTRA_DEPENDS] $[all_libs $[DIRNAME],$[get_depend_libs]]]
- #set DEPENDABLE_HEADERS $[sort $[DEPENDABLE_HEADERS] $[EXTRA_DEPENDABLE_HEADERS]]
- #endif
- #endif // DIR_TYPE
|