176 lines
7.5 KiB
ObjectPascal
176 lines
7.5 KiB
ObjectPascal
|
//
|
||
|
// 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
|