mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-12-29 22:15:03 +08:00
0823efedd0
Merge from cxx-conversion branch (http://gcc.gnu.org/wiki/cxx-conversion). As described in http://gcc.gnu.org/ml/gcc/2012-08/msg00015.html, this patch changes the default bootstrap process so that stage 1 always builds with a C++ compiler. Other than the bootstrap change, the patch makes no functional changes to the compiler. Everything should build as it does now in trunk. The main changes in this patch are: 1- Configuration changes. 2- Re-write of VEC. 3- Re-write of gengtype to support C++ templates and user-provided marking functions. 4- New hash table class. 5- Re-write double_int. 6- Implement tree macros as inline functions so they can be called from gdb. As discussed before, several of these changes do not fully change the call sites to use the new APIs. The bootstrap changes have already been tested on a wide range of targets (http://gcc.gnu.org/wiki/CppBuildStatus). Additionally, I have tested the merged trunk on: x86_64-unknown-linux-gnu, mips64el-unknown-linux-gnu, powerpc64-unknown-linux-gnu, i686-pc-linux-gnu, and ia64-unknown-linux-gnu. ChangeLog 2012-08-14 Diego Novillo <dnovillo@google.com> Merge from cxx-conversion branch. * Makefile.tpl (STAGE[+id+]_CXXFLAGS): Remove POSTSTAGE1_CONFIGURE_FLAGS. * Makefile.in: Regenerate. * configure.ac (ENABLE_BUILD_WITH_CXX): Remove. Update all users. Force C++ when bootstrapping. * configure: Regenerate. libcpp/ChangeLog 2012-08-14 Diego Novillo <dnovillo@google.com> Merge from cxx-conversion branch. Configury. * Makefile.in: Remove all handlers of ENABLE_BUILD_WITH_CXX. * configure.ac: Likewise. * configure: Regenerate. 2012-08-14 Lawrence Crowl <crowl@google.com> Merge from cxx-conversion branch. New C++ hash table. * include/symtab.h (typedef struct ht hash_table): Change the typedef name to cpp_hash_table. Update all users of the typedef. gcc/ChangeLog 2012-08-14 Diego Novillo <dnovillo@google.com> Merge from cxx-conversion branch. Configury. * configure.ac (CXX_FOR_BUILD): Define and substitute. (BUILD_CXXFLAGS): Define. Remove all handlers of ENABLE_BUILD_WITH_CXX. Force all build to be with C++. * Makefile.in (BUILD_CXXFLAGS): Use it. Remove all handlers of ENABLE_BUILD_WITH_CXX. * configure: Regenerate. * config.in: Regenerate. * doc/install.texi: Remove documentation for --enable-build-with-cxx and --enable-build-poststage1-with-cxx. 2012-08-14 Diego Novillo <dnovillo@google.com> Merge from cxx-conversion branch. Re-implement VEC in C++. * vec.c (vec_heap_free): Convert into a template function. (vec_gc_o_reserve_1): Make extern. (vec_gc_p_reserve): Remove. (vec_gc_p_reserve_exact): Remove. (vec_gc_o_reserve): Remove. (vec_gc_o_reserve_exact): Remove. (vec_heap_o_reserve_1): Make extern. (vec_heap_p_reserve): Remove. (vec_heap_p_reserve_exact): Remove. (vec_heap_o_reserve): Remove. (vec_heap_o_reserve_exact): Remove. (vec_stack_p_reserve): Remove. (vec_stack_p_reserve_exact): Remove. * vec.h (VEC_CHECK_INFO, VEC_CHECK_DECL, VEC_CHECK_PASS, VEC_ASSERT, VEC_ASSERT_FAIL, vec_assert_fail): Move earlier in the file. (VEC): Define to vec_t<T>. (vec_allocation_t): Define. (struct vec_prefix): Move earlier in the file. (vec_t<T>): New template. (DEF_VEC_I, DEF_VECL_ALLOC_I, DEF_VEC_P, DEF_VEC_ALLOC_P, DEF_VEC_O, DEF_VEC_ALLOC_P, DEF_VEC_O, DEF_VEC_ALLOC_O, DEF_VEC_ALLOC_P_STACK, DEF_VEC_ALLOC_O_STACK, DEF_VEC_ALLOC_I_STACK): Expand to 'struct vec_swallow_trailing_semi'. (DEF_VEC_A): Provide template instantiations for GC/PCH markers that do not traverse the vector. (vec_stack_p_reserve): Remove. (vec_stack_p_reserve_exact): Remove. (vec_stack_p_reserve_exact_1): Remove. (vec_stack_o_reserve): Remove. (vec_stack_o_reserve_exact): Remove. (vec_stack_free): Re-write as a template function. (vec_reserve): New template function. (vec_reserve_exact): New template function. (vec_heap_free): New template function if GATHER_STATISTICS is defined. Otherwise, macro that expands to free(). (VEC_length_1): New template function. (VEC_length): Call it. (VEC_empty_1): New template function. (VEC_empty): Call it. (VEC_address_1): New template function. (VEC_address): Call it. (VEC_last_1): New template function. (VEC_last): Call it. Change return type to T&. Change all users that used VEC_Os. (VEC_index_1): New template function. (VEC_index): Call it. Return a T& instead of a T*. Update all callers that were using VEC_O before. (VEC_iterate_1): New template function. (VEC_iterate): Call it. (VEC_embedded_size_1): New template function. (VEC_embedded_size): Call it. (VEC_embedded_init_1): New template function. (VEC_embedded_init): Call it. (VEC_alloc_1): New template function. (VEC_alloc): Call it. If A is 'stack', call XALLOCAVAR to do the allocation. (VEC_free_1): New template function. (VEC_free): Call it. (VEC_copy_1): New template function. (VEC_copy): Call it. (VEC_space_1): New template function (VEC_space): Call it. (VEC_reserve_1): New template function. (VEC_reserve): Call it. (VEC_reserve_exact_1): New template function. (VEC_reserve_exact): Call it. (VEC_splice_1): New template function. (VEC_splice): Call it. (VEC_safe_splice_1): New template function. (VEC_safe_splice): Call it. (VEC_quick_push_1): New template function. Create two overloads, one accepting T, the other accepting T *. Update all callers where T and T * are ambiguous. (VEC_quick_push): Call it. (VEC_safe_push_1): New template function. Create two overloads, one accepting T, the other accepting T *. Update all callers where T and T * are ambiguous. (VEC_safe_push): Call it. (VEC_pop_1): New template function. (VEC_pop): Call it. (VEC_truncate_1): New template function. (VEC_truncate): Call it. (VEC_safe_grow_1): New template function. (VEC_safe_grow): Call it. (VEC_safe_grow_cleared_1): New template function. (VEC_safe_grow_cleared): Call it. (VEC_replace_1): New template function. (VEC_replace): Call it. Always accept T instead of T*. Update all callers that used VEC_Os. (VEC_quick_insert_1): New template function. (VEC_quick_insert): Call it. (VEC_safe_insert_1): New template function. (VEC_safe_insert): Call it. (VEC_ordered_remove_1): New template function. (VEC_ordered_remove): Call it. (VEC_unordered_remove_1): New template function. (VEC_unordered_remove): Call it. (VEC_block_remove_1): New template function. (VEC_block_remove): Call it. (VEC_lower_bound_1): New template function. (VEC_lower_bound): Call it. (VEC_OP): Remove. (DEF_VEC_FUNC_P): Remove. (DEF_VEC_ALLOC_FUNC_P): Remove. (DEF_VEC_NONALLOC_FUNCS_P): Remove. (DEF_VEC_FUNC_O): Remove. (DEF_VEC_ALLOC_FUNC_O): Remove. (DEF_VEC_NONALLOC_FUNCS_O): Remove. (DEF_VEC_ALLOC_FUNC_I): Remove. (DEF_VEC_NONALLOC_FUNCS_I): Remove. (DEF_VEC_ALLOC_FUNC_P_STACK): Remove. (DEF_VEC_ALLOC_FUNC_O_STACK): Remove. (DEF_VEC_ALLOC_FUNC_I_STACK): Remove. (vec_reserve_exact): New template function. * gengtype-lex.l (DEF_VEC_ALLOC_[IOP]/{EOID}): Remove. * gengtype-parse.c (token_names): Remove DEF_VEC_ALLOC_[IOP]. (typedef_name): Emit vec_t<C1> instead of VEC_C1_C2. (def_vec_alloc): Remove. Update all callers. * gengtype.c (filter_type_name): New. (output_mangled_typename): Call it. (write_func_for_structure): Likewise. (write_types): Likewise. (write_root): Likewise. (write_typed_alloc_def): Likewise. (note_def_vec): Emit vec_t<TYPE_NAME> instead of VEC_TYPE_NAME_base. (note_def_vec_alloc): Remove. * gengtype.h (note_def_vec_alloc): Remove. (DEFVEC_ALLOC): Remove token code. * df-scan.c (df_bb_verify): Remove call to df_free_collection_rec inside the insn traversal loop. * gimplify.c (gimplify_compound_lval): Rename STACK to EXPR_STACK. * ipa-inline.c (inline_small_functions): Rename HEAP to EDGE_HEAP. * reg-stack.c (stack): Rename to STACK_PTR. Update all users. * tree-vrp.c (stack): Rename to EQUIV_STACK. Update all users. * config/bfin/bfin.c (hwloop_optimize): Update some calls to VEC_* for vectors of non-pointers. * config/c6x/c6x.c (try_rename_operands): Likewise. (reshuffle_units): Likewise. * config/mips/mips.c (mips_multi_start): Likewise. (mips_multi_add): Likewise. (mips_multi_copy_insn): Likewise. (mips_multi_set_operand): Likewise. * hw-doloop.c (discover_loop): Likewise. (discover_loops): Likewise. (reorg_loops): Likewise. 2012-08-14 Diego Novillo <dnovillo@google.com> Merge from cxx-conversion branch. C++ support in gengtype. * coretypes.h (gt_pointer_operator): Move from ... * ggc.h: ... here. * doc/gty.texi: Document support for C++ templates and user-provided markers. * gcc/gengtype-lex.l: Update copyright year. Remove support for recognizing DEF_VEC_O, DEF_VEC_P and DEFVEC_I. * gengtype-parse.c: Update copyright year. (token_names): Remove DEF_VEC_O, DEF_VEC_P and DEF_VEC_I. (require_template_declaration): New. (typedef_name): Call it. (type): Replace IS_UNION with KIND. Replace all users. (def_vec): Remove. Update all users. * gengtype-state.c (type_lineloc): Handle TYPE_USER_STRUCT. (write_state_user_struct_type): New. (write_state_type): Call it. (read_state_user_struct_type): New. (read_state_type): Call it. * gengtype.c: Update copyright year. (dump_pair): Move declaration to the top. (dump_type): Likewise. (dump_type_list): Likewise. (dbgprint_count_type_at): Handle TYPE_USER_STRUCT. (create_user_defined_type): New. (resolve_typedef): Call it. (new_structure): Replace argument ISUNION with KIND. Change users to refer to KIND directly. Update all callers. (find_structure): Likewise. (set_gc_used_type): Handle TYPE_USER_STRUCT. (create_file): Update HDR to include new copyright year. (struct walk_type_data): Add field IN_PTR_FIELD. (output_mangled_typename): Handle TYPE_USER_STRUCT. (walk_type): Set D->IN_PTR_FIELD when walking a TYPE_POINTER. Clear it afterwards. Handle TYPE_USER_STRUCT. (write_types_process_field): Handle TYPE_USER_STRUCT. (get_type_specifier): Move earlier in the file. (write_type_decl): New. (write_marker_function_name): New. (write_user_func_for_structure_ptr): New. (write_user_func_for_structure_body): New. (write_user_marking_functions): New. (write_func_for_structure): Call write_marker_function_name and write_type_decl. Do not call walk_type for TYPE_USER_STRUCT. Emit a call to the user function directly. Call write_user_marking_functions on TYPE_USER_STRUCTs. (write_types_local_user_process_field): New. (write_pch_user_walking_for_structure_body): New. (write_pch_user_walking_functions): New. (write_types_local_process_field): Handle TYPE_USER_STRUCT. (write_local_func_for_structure): Do not call walk_type for TYPE_USER_STRUCT. Instead, emit the call to gt_pch_nx directly. Call write_pch_user_walking_functions for TYPE_USER_STRUCTs. (write_root): Handle TYPE_USER_STRUCT. (vec_prefix_type): Remove. Update all users. (note_def_vec): Remove. Update all users. (dump_typekind): Handle TYPE_USER_STRUCT. (dump_type): Initialize SEEN_TYPES, if needed. Handle TYPE_USER_STRUCT. (dump_everything): Do not initialize SEEN_TYPES. * gengtype.h: Update copyright year. (enum typekind): Add TYPE_USER_STRUCT. (union_or_struct_p): Rename from UNION_OR_STRUCT_P. Convert into function. Add an overload taking const_type_p. Update all callers. (new_structure): Change second field to type enum typekind. Update all users. (find_structure): Likewise. (note_def_vec): Remove. (DEFVEC_OP): Remove. (DEFVEC_I): Remove. * ggc-page.c (gt_ggc_mx): Add entry points for marking 'const char *&', 'unsigned char *&' and 'unsigned char&'. * ggc-zone.c (gt_ggc_mx): Add entry points for marking 'const char *&' and 'unsigned char *&'. * stringpool.c (gt_pch_nx): Add entry points for marking 'const char *&', 'unsigned char *&' and 'unsigned char&'. Add an entry point for the overload taking arguments 'unsigned char *', 'gt_pointer_operator' and 'void *'. * vec.h (struct vec_prefix): Remove GTY marker. (struct vec_t): Remove GTY((length)) attribute from field 'vec'. (gt_ggc_mx (vec_t<T> *)): New template function. (gt_pch_nx (vec_t<T> *)): New template function. (gt_pch_nx (vec_t<T *> *, gt_pointer_operator, void *)): New template function. (gt_pch_nx (vec_t<T> *, gt_pointer_operator, void *)): New template function. * basic-block.h (struct edge_def): Mark GTY((user)). Remove all GTY markers from fields. (gt_ggc_mx): Declare. (gt_pch_nx): Declare. * tree-cfg.c (gt_ggc_mx): New. (gt_pch_nx): New. * gengtype-lex.l (USER_GTY): Add pattern for "user". * gengtype-parse.c (option): Handle USER_GTY. (opts_have): New. (type): Call it. If the keyword 'user' is used, do not walk the fields of the structure. * gengtype.h (USER_GTY): Add. * doc/gty.texi: Update. 2012-08-14 Lawrence Crowl <crowl@google.com> Merge cxx-conversion branch. Implement C++ hash table. * hash-table.h: New. Implementation borrowed from libiberty/hashtab.c. * hash-table.c: Likewise. * tree-ssa-tail-merge.c: Include hash-table.h instead of hashtab.h. (static htab_t same_succ_htab): Change type to hash_table; move specification of helper functions from create call to declaration. Change users to invoke member functions. (same_succ_print_traverse): Make extern ssa_.... Change callers. Remove void* casting. (same_succ_hash): Likewise. (same_succ_equal): Likewise. (same_succ_delete): Likewise. * tree-ssa-threadupdate.c: Include hash-table.h. (struct local_info): Rename to ssa_local_info_t to avoid overloading the type name local_info with the variable name local_info. (static htab_t redirection_data): Change type to hash_table. Move specification of helper functions from create call to declaration. Change users to invoke member functions. (redirection_data_hash): Make extern ssa_.... Change callers. Remove void* casting. (redirection_data_eq): Likewise. (fix_duplicate_block_edges): Likewise. (create_duplicates): Likewise. (fixup_template_block): Likewise. (redirect_edges): Likewise. (lookup_redirection_data): Change types associated with the hash table from void* to their actual type. Remove unnecessary casts. * tree-ssa-ccp.c: Include hash-table.h. (typedef gimple_htab): New. Uses hash_table. Replace specific uses of htab_t with gimple_htab. Change users to invoke member functions. Move specification of helper functions from create call to declaration. * tree-ssa-coalesce.c: Include hash-table.h instead of hashtab.h. (hash_ssa_name_by_var): Make extern. Remove void* casting. (eq_ssa_name_by_var): Likewise. (coalesce_ssa_name): Change type of local static htab_t ssa_name_hash to hash_table. Change users to invoke member functions. Move specification of helper functions from create call to declaration. * coverage.c: Include hash-table.h instead of hashtab.h. (static htab_t counts_hash): Change type to hash_table; move specification of helper functions from create call to declaration. Change users to invoke member functions. (htab_counts_entry_hash): Make extern. Rename with coverage_... instead of htab_... Remove void* casting. (htab_counts_entry_eq): Likewise. (htab_counts_entry_del): Likewise. * tree-ssa-pre.c: Include hash-table.h instead of hashtab.h. (static htab_t expression_to_id): Change type to hash_table. Move specification of helper functions from create call to declaration. Change users to invoke member functions. (static htab_t phi_translate_table): Likewise. (pre_expr_eq): Make extern ssa_.... Change callers. Remove void* casting. (pre_expr_hash): Likewise. (expr_pred_trans_hash): Likewise. (expr_pred_trans_eq): Likewise. (alloc_expression_id): Change types associated with the hash table from void* to their actual type. Remove unnecessary casts. (lookup_expression_id): Likewise. (phi_trans_lookup): Likewise. (phi_trans_add): Likewise. * stringpool.c: Rename uses of libcpp typedef hash_table to cpp_hash_table. * Makefile.in: Add hash-table.o to OBJS-libcommon-target. Add $(HASH_TABLE_H). Add new dependences on $(HASH_TABLE_H). 2012-08-14 Lawrence Crowl <crowl@google.com> Merge from cxx-conversion branch. Re-write double_int in C++. * hash-table.h (typedef double_int): Change to struct (POD). (double_int::make): New overloads for int to double-int conversion. (double_int::mask): New. (double_int::max_value): New. (double_int::min_value): New. (double_int::operator ++): New. (double_int::operator --): New. (double_int::operator *=): New. (double_int::operator +=): New. (double_int::operator -=): New. (double_int::to_signed): New. (double_int::to_unsigned): New. (double_int::fits_unsigned): New. (double_int::fits_signed): New. (double_int::fits): New. (double_int::trailing_zeros): New. (double_int::popcount): New. (double_int::multiple_of): New. (double_int::set_bit): New. (double_int::mul_with_sign): New. (double_int::operator * (binary)): New. (double_int::operator + (binary)): New. (double_int::operator - (binary)): New. (double_int::operator - (unary)): New. (double_int::operator ~ (unary)): New. (double_int::operator & (binary)): New. (double_int::operator | (binary)): New. (double_int::operator ^ (binary)): New. (double_int::and_not): New. (double_int::lshift): New. (double_int::rshift): New. (double_int::alshift): New. (double_int::arshift): New. (double_int::llshift): New. (double_int::lrshift): New. (double_int::lrotate): New. (double_int::rrotate): New. (double_int::div): New. (double_int::sdiv): New. (double_int::udiv): New. (double_int::mod): New. (double_int::smod): New. (double_int::umod): New. (double_int::divmod): New. (double_int::sdivmod): New. (double_int::udivmod): New. (double_int::ext): New. (double_int::zext): New. (double_int::sext): New. (double_int::is_zero): New. (double_int::is_one): New. (double_int::is_minus_one): New. (double_int::is_negative): New. (double_int::cmp): New. (double_int::ucmp): New. (double_int::scmp): New. (double_int::ult): New. (double_int::ugt): New. (double_int::slt): New. (double_int::sgt): New. (double_int::max): New. (double_int::smax): New. (double_int::umax): New. (double_int::min): New. (double_int::smin): New. (double_int::umin): New. (double_int::operator ==): New. (double_int::operator !=): New. (shwi_to_double_int): Change implementation to use member function. (double_int_minus_one): Likewise. (double_int_zero): Likewise. (double_int_one): Likewise. (double_int_two): Likewise. (double_int_ten): Likewise. (uhwi_to_double_int): Likewise. (double_int_to_shwi): Likewise. (double_int_to_uhwi): Likewise. (double_int_fits_in_uhwi_p): Likewise. (double_int_fits_in_shwi_p): Likewise. (double_int_fits_in_hwi_p): Likewise. (double_int_mul): Likewise. (double_int_mul_with_sign): Likewise. (double_int_add): Likewise. (double_int_sub): Likewise. (double_int_neg): Likewise. (double_int_div): Likewise. (double_int_sdiv): Likewise. (double_int_udiv): Likewise. (double_int_mod): Likewise. (double_int_smod): Likewise. (double_int_umod): Likewise. (double_int_divmod): Likewise. (double_int_sdivmod): Likewise. (double_int_udivmod): Likewise. (double_int_multiple_of): Likewise. (double_int_setbit): Likewise. (double_int_ctz): Likewise. (double_int_not): Likewise. (double_int_ior): Likewise. (double_int_and): Likewise. (double_int_and_not): Likewise. (double_int_xor): Likewise. (double_int_lshift): Likewise. (double_int_rshift): Likewise. (double_int_lrotate): Likewise. (double_int_rrotate): Likewise. (double_int_cmp): Likewise. (double_int_scmp): Likewise. (double_int_ucmp): Likewise. (double_int_max): Likewise. (double_int_smax): Likewise. (double_int_umax): Likewise. (double_int_min): Likewise. (double_int_smin): Likewise. (double_int_umin): Likewise. (double_int_ext): Likewise. (double_int_sext): Likewise. (double_int_zext): Likewise. (double_int_mask): Likewise. (double_int_max_value): Likewise. (double_int_min_value): Likewise. (double_int_zero_p): Likewise. (double_int_one_p): Likewise. (double_int_minus_one_p): Likewise. (double_int_equal_p): Likewise. (double_int_popcount): Likewise. * hash-table.c (double_int_mask): Reuse implementation for double_int::mask. (double_int_max_value): Likewise. (double_int_min_value): Likewise. (double_int_ext): Likewise. (double_int_zext): Likewise. (double_int_sext): Likewise. (double_int_mul_with_sign): Likewise. (double_int_divmod): Likewise. (double_int_sdivmod): Likewise. (double_int_udivmod): Likewise. (double_int_div): Likewise. (double_int_sdiv): Likewise. (double_int_udiv): Likewise. (double_int_mod): Likewise. (double_int_smod): Likewise. (double_int_umod): Likewise. (double_int_multiple_of): Likewise. (double_int_lshift): Likewise. (double_int_rshift): Likewise. (double_int_lrotate): Likewise. (double_int_rrotate): Likewise. (double_int_cmp): Likewise. (double_int_ucmp): Likewise. (double_int_scmp): Likewise. (double_int_max): Likewise. (double_int_smax): Likewise. (double_int_umax): Likewise. (double_int_min): Likewise. (double_int_smin): Likewise. (double_int_umin): Likewise. (double_int_min): Likewise. (double_int_min): Likewise. (double_int_min): Likewise. (double_int_min): Likewise. (double_int_min): Likewise. (double_int_min): Likewise. (double_int::alshift): New. (double_int::arshift): New. (double_int::llshift): New. (double_int::lrshift): New. (double_int::ult): New. (double_int::ugt): New. (double_int::slt): New. (double_int::sgt): New. (double_int_setbit): Reuse implementation for double_int::set_bit, which avoids a name conflict with a macro. (double_int_double_int_ctz): Reuse implementation for double_int::trailing_zeros. (double_int_fits_in_shwi_p): Reuse implementation for double_int::fits_signed. (double_int_fits_in_hwi_p): Reuse implementation for double_int::fits. (double_int_mul): Reuse implementation for binary double_int::operator *. (double_int_add): Likewise. (double_int_sub): Likewise. (double_int_neg): Reuse implementation for unary double_int::operator -. (double_int_max_value): Likewise. * fixed-value.c: Change to use member functions introduced above. 2012-08-14 Lawrence Crowl <crowl@google.com> Merge cxx-conversion branch. Support tree macro calling from gdb. * tree.h (tree_check): New. (TREE_CHECK): Use inline function above instead of __extension__. (tree_not_check): New. (TREE_NOT_CHECK): Use inline function above instead of __extension__. (tree_check2): New. (TREE_CHECK2): Use inline function above instead of __extension__. (tree_not_check2): New. (TREE_NOT_CHECK2): Use inline function above instead of __extension__. (tree_check3): New. (TREE_CHECK3): Use inline function above instead of __extension__. (tree_not_check3): New. (TREE_NOT_CHECK3): Use inline function above instead of __extension__. (tree_check4): New. (TREE_CHECK4): Use inline function above instead of __extension__. (tree_not_check4): New. (TREE_NOT_CHECK4): Use inline function above instead of __extension__. (tree_check5): New. (TREE_CHECK5): Use inline function above instead of __extension__. (tree_not_check5): New. (TREE_NOT_CHECK5): Use inline function above instead of __extension__. (contains_struct_check): New. (CONTAINS_STRUCT_CHECK): Use inline function above instead of __extension__. (tree_class_check): New. (TREE_CLASS_CHECK): Use inline function above instead of __extension__. (tree_range_check): New. (TREE_RANGE_CHECK): Use inline function above instead of __extension__. (omp_clause_subcode_check): New. (OMP_CLAUSE_SUBCODE_CHECK): Use inline function above instead of __extension__. (omp_clause_range_check): New. (OMP_CLAUSE_RANGE_CHECK): Use inline function above instead of __extension__. (expr_check): New. (EXPR_CHECK): Use inline function above instead of __extension__. (non_type_check): New. (NON_TYPE_CHECK): Use inline function above instead of __extension__. (tree_vec_elt_check): New. (TREE_VEC_ELT_CHECK): Use inline function above instead of __extension__. (omp_clause_elt_check): New. (OMP_CLAUSE_ELT_CHECK): Use inline function above instead of __extension__. (tree_operand_check): New. (TREE_OPERAND_CHECK): Use inline function above instead of __extension__. (tree_operand_check_code): New. (TREE_OPERAND_CHECK_CODE): Use inline function above instead of __extension__. (TREE_CHAIN): Simplify implementation. (TREE_TYPE): Simplify implementation. (tree_operand_length): Move for compilation dependences. * gdbinit.in: (macro define __FILE__): New. (macro define __LINE__): New. (skip "tree.h"): New. gcc/cp/ChangeLog 2012-08-14 Diego Novillo <dnovillo@google.com> Merge from cxx-conversion branch. Re-write VEC in C++. * call.c (add_function_candidate): Remove const qualifier from call to VEC_index. 2012-08-14 Diego Novillo <dnovillo@google.com> Merge from cxx-conversion branch. Configury. * go-c.h: Remove all handlers of ENABLE_BUILD_WITH_CXX. * go-gcc.cc: Likewise. * go-system.h: Likewise. From-SVN: r190402
1901 lines
66 KiB
Smarty
1901 lines
66 KiB
Smarty
[+ AutoGen5 template -*- Mode: Makefile -*-
|
|
in
|
|
+]
|
|
|
|
# Makefile.in is generated from Makefile.tpl by 'autogen Makefile.def'.
|
|
#
|
|
# Makefile for directory with subdirs to build.
|
|
# Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
|
|
# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
|
|
# Free Software Foundation
|
|
#
|
|
# This file is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; see the file COPYING3. If not see
|
|
# <http://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
# First, test for a proper version of make, but only where one is required.
|
|
|
|
@if gcc
|
|
ifeq (,$(.VARIABLES)) # The variable .VARIABLES, new with 3.80, is never empty.
|
|
$(error GNU make version 3.80 or newer is required.)
|
|
endif
|
|
@endif gcc
|
|
|
|
# -------------------------------
|
|
# Standard Autoconf-set variables
|
|
# -------------------------------
|
|
VPATH=@srcdir@
|
|
|
|
build_alias=@build_noncanonical@
|
|
build_vendor=@build_vendor@
|
|
build_os=@build_os@
|
|
build=@build@
|
|
host_alias=@host_noncanonical@
|
|
host_vendor=@host_vendor@
|
|
host_os=@host_os@
|
|
host=@host@
|
|
target_alias=@target_noncanonical@
|
|
target_vendor=@target_vendor@
|
|
target_os=@target_os@
|
|
target=@target@
|
|
|
|
program_transform_name = @program_transform_name@
|
|
|
|
prefix = @prefix@
|
|
exec_prefix = @exec_prefix@
|
|
|
|
srcdir = @srcdir@
|
|
|
|
bindir = @bindir@
|
|
sbindir = @sbindir@
|
|
libexecdir = @libexecdir@
|
|
datadir = @datadir@
|
|
sysconfdir = @sysconfdir@
|
|
sharedstatedir = @sharedstatedir@
|
|
localstatedir = @localstatedir@
|
|
libdir = @libdir@
|
|
includedir = @includedir@
|
|
oldincludedir = @oldincludedir@
|
|
infodir = @infodir@
|
|
datarootdir = @datarootdir@
|
|
docdir = @docdir@
|
|
pdfdir = @pdfdir@
|
|
htmldir = @htmldir@
|
|
mandir = @mandir@
|
|
man1dir = $(mandir)/man1
|
|
man2dir = $(mandir)/man2
|
|
man3dir = $(mandir)/man3
|
|
man4dir = $(mandir)/man4
|
|
man5dir = $(mandir)/man5
|
|
man6dir = $(mandir)/man6
|
|
man7dir = $(mandir)/man7
|
|
man8dir = $(mandir)/man8
|
|
man9dir = $(mandir)/man9
|
|
|
|
INSTALL = @INSTALL@
|
|
INSTALL_PROGRAM = @INSTALL_PROGRAM@
|
|
INSTALL_SCRIPT = @INSTALL_SCRIPT@
|
|
INSTALL_DATA = @INSTALL_DATA@
|
|
LN = @LN@
|
|
LN_S = @LN_S@
|
|
MAINT = @MAINT@
|
|
MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@
|
|
MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@
|
|
|
|
# -------------------------------------------------
|
|
# Miscellaneous non-standard autoconf-set variables
|
|
# -------------------------------------------------
|
|
|
|
# The gcc driver likes to know the arguments it was configured with.
|
|
TOPLEVEL_CONFIGURE_ARGUMENTS=@TOPLEVEL_CONFIGURE_ARGUMENTS@
|
|
|
|
tooldir = @tooldir@
|
|
build_tooldir = @build_tooldir@
|
|
|
|
# This is the name of the environment variable used for the path to
|
|
# the libraries.
|
|
RPATH_ENVVAR = @RPATH_ENVVAR@
|
|
|
|
# On targets where RPATH_ENVVAR is PATH, a subdirectory of the GCC build path
|
|
# is used instead of the directory itself to avoid including built
|
|
# executables in PATH.
|
|
GCC_SHLIB_SUBDIR = @GCC_SHLIB_SUBDIR@
|
|
|
|
# Build programs are put under this directory.
|
|
BUILD_SUBDIR = @build_subdir@
|
|
# This is set by the configure script to the arguments to use when configuring
|
|
# directories built for the build system.
|
|
BUILD_CONFIGARGS = @build_configargs@ --with-build-subdir="$(BUILD_SUBDIR)"
|
|
|
|
# Linker flags to use on the host, for stage1 or when not
|
|
# bootstrapping.
|
|
STAGE1_LDFLAGS = @stage1_ldflags@
|
|
|
|
# Libraries to use on the host, for stage1 or when not bootstrapping.
|
|
STAGE1_LIBS = @stage1_libs@
|
|
|
|
# Linker flags to use for stage2 and later.
|
|
POSTSTAGE1_LDFLAGS = @poststage1_ldflags@
|
|
|
|
# Libraries to use for stage2 and later.
|
|
POSTSTAGE1_LIBS = @poststage1_libs@
|
|
|
|
# This is the list of variables to export in the environment when
|
|
# configuring any subdirectory. It must also be exported whenever
|
|
# recursing into a build directory in case that directory's Makefile
|
|
# re-runs configure.
|
|
BASE_EXPORTS = \
|
|
FLEX="$(FLEX)"; export FLEX; \
|
|
LEX="$(LEX)"; export LEX; \
|
|
BISON="$(BISON)"; export BISON; \
|
|
YACC="$(YACC)"; export YACC; \
|
|
M4="$(M4)"; export M4; \
|
|
SED="$(SED)"; export SED; \
|
|
AWK="$(AWK)"; export AWK; \
|
|
MAKEINFO="$(MAKEINFO)"; export MAKEINFO;
|
|
|
|
# This is the list of variables to export in the environment when
|
|
# configuring subdirectories for the build system.
|
|
BUILD_EXPORTS = \
|
|
$(BASE_EXPORTS) \
|
|
AR="$(AR_FOR_BUILD)"; export AR; \
|
|
AS="$(AS_FOR_BUILD)"; export AS; \
|
|
CC="$(CC_FOR_BUILD)"; export CC; \
|
|
CFLAGS="$(CFLAGS_FOR_BUILD)"; export CFLAGS; \
|
|
CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
|
|
CXX="$(CXX_FOR_BUILD)"; export CXX; \
|
|
CXXFLAGS="$(CXXFLAGS_FOR_BUILD)"; export CXXFLAGS; \
|
|
GCJ="$(GCJ_FOR_BUILD)"; export GCJ; \
|
|
GFORTRAN="$(GFORTRAN_FOR_BUILD)"; export GFORTRAN; \
|
|
GOC="$(GOC_FOR_BUILD)"; export GOC; \
|
|
GOCFLAGS="$(GOCFLAGS_FOR_BUILD)"; export GOCFLAGS; \
|
|
DLLTOOL="$(DLLTOOL_FOR_BUILD)"; export DLLTOOL; \
|
|
LD="$(LD_FOR_BUILD)"; export LD; \
|
|
LDFLAGS="$(LDFLAGS_FOR_BUILD)"; export LDFLAGS; \
|
|
NM="$(NM_FOR_BUILD)"; export NM; \
|
|
RANLIB="$(RANLIB_FOR_BUILD)"; export RANLIB; \
|
|
WINDRES="$(WINDRES_FOR_BUILD)"; export WINDRES; \
|
|
WINDMC="$(WINDMC_FOR_BUILD)"; export WINDMC;
|
|
|
|
# These variables must be set on the make command line for directories
|
|
# built for the build system to override those in BASE_FLAGS_TO_PASSS.
|
|
EXTRA_BUILD_FLAGS = \
|
|
CFLAGS="$(CFLAGS_FOR_BUILD)" \
|
|
LDFLAGS="$(LDFLAGS_FOR_BUILD)"
|
|
|
|
# This is the list of directories to built for the host system.
|
|
SUBDIRS = @configdirs@
|
|
TARGET_CONFIGDIRS = @target_configdirs@
|
|
# This is set by the configure script to the arguments to use when configuring
|
|
# directories built for the host system.
|
|
HOST_CONFIGARGS = @host_configargs@
|
|
# Host programs are put under this directory, which is . except if building
|
|
# with srcdir=..
|
|
HOST_SUBDIR = @host_subdir@
|
|
# This is the list of variables to export in the environment when
|
|
# configuring subdirectories for the host system. We need to pass
|
|
# some to the GCC configure because of its hybrid host/target nature.
|
|
HOST_EXPORTS = \
|
|
$(BASE_EXPORTS) \
|
|
CC="$(CC)"; export CC; \
|
|
ADA_CFLAGS="$(ADA_CFLAGS)"; export ADA_CFLAGS; \
|
|
CFLAGS="$(CFLAGS)"; export CFLAGS; \
|
|
CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
|
|
CXX="$(CXX)"; export CXX; \
|
|
CXXFLAGS="$(CXXFLAGS)"; export CXXFLAGS; \
|
|
GCJ="$(GCJ)"; export GCJ; \
|
|
GFORTRAN="$(GFORTRAN)"; export GFORTRAN; \
|
|
GOC="$(GOC)"; export GOC; \
|
|
AR="$(AR)"; export AR; \
|
|
AS="$(AS)"; export AS; \
|
|
CC_FOR_BUILD="$(CC_FOR_BUILD)"; export CC_FOR_BUILD; \
|
|
DLLTOOL="$(DLLTOOL)"; export DLLTOOL; \
|
|
LD="$(LD)"; export LD; \
|
|
LDFLAGS="$(STAGE1_LDFLAGS) $(LDFLAGS)"; export LDFLAGS; \
|
|
NM="$(NM)"; export NM; \
|
|
RANLIB="$(RANLIB)"; export RANLIB; \
|
|
WINDRES="$(WINDRES)"; export WINDRES; \
|
|
WINDMC="$(WINDMC)"; export WINDMC; \
|
|
OBJCOPY="$(OBJCOPY)"; export OBJCOPY; \
|
|
OBJDUMP="$(OBJDUMP)"; export OBJDUMP; \
|
|
READELF="$(READELF)"; export READELF; \
|
|
AR_FOR_TARGET="$(AR_FOR_TARGET)"; export AR_FOR_TARGET; \
|
|
AS_FOR_TARGET="$(AS_FOR_TARGET)"; export AS_FOR_TARGET; \
|
|
GCC_FOR_TARGET="$(GCC_FOR_TARGET)"; export GCC_FOR_TARGET; \
|
|
LD_FOR_TARGET="$(LD_FOR_TARGET)"; export LD_FOR_TARGET; \
|
|
NM_FOR_TARGET="$(NM_FOR_TARGET)"; export NM_FOR_TARGET; \
|
|
OBJDUMP_FOR_TARGET="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP_FOR_TARGET; \
|
|
RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)"; export RANLIB_FOR_TARGET; \
|
|
READELF_FOR_TARGET="$(READELF_FOR_TARGET)"; export READELF_FOR_TARGET; \
|
|
TOPLEVEL_CONFIGURE_ARGUMENTS="$(TOPLEVEL_CONFIGURE_ARGUMENTS)"; export TOPLEVEL_CONFIGURE_ARGUMENTS; \
|
|
HOST_LIBS="$(STAGE1_LIBS)"; export HOST_LIBS; \
|
|
GMPLIBS="$(HOST_GMPLIBS)"; export GMPLIBS; \
|
|
GMPINC="$(HOST_GMPINC)"; export GMPINC; \
|
|
ISLINC="$(HOST_ISLINC)"; export ISLINC; \
|
|
CLOOGLIBS="$(HOST_CLOOGLIBS)"; export CLOOGLIBS; \
|
|
CLOOGINC="$(HOST_CLOOGINC)"; export CLOOGINC; \
|
|
LIBELFLIBS="$(HOST_LIBELFLIBS)" ; export LIBELFLIBS; \
|
|
LIBELFINC="$(HOST_LIBELFINC)" ; export LIBELFINC; \
|
|
@if gcc-bootstrap
|
|
$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
|
|
@endif gcc-bootstrap
|
|
$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR);
|
|
|
|
POSTSTAGE1_CXX_EXPORT = \
|
|
CXX='$(CXX)'; export CXX; \
|
|
CXX_FOR_BUILD='$(CXX_FOR_BUILD)'; export CXX_FOR_BUILD;
|
|
@if target-libstdc++-v3-bootstrap
|
|
# Override the above if we're bootstrapping C++.
|
|
POSTSTAGE1_CXX_EXPORT = \
|
|
CXX="$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/prev-gcc/g++$(exeext) \
|
|
-B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/ -nostdinc++ \
|
|
-B$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs \
|
|
-B$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs \
|
|
-I$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/include/$(TARGET_SUBDIR) \
|
|
-I$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/include \
|
|
-I$$s/libstdc++-v3/libsupc++ \
|
|
-L$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/src/.libs \
|
|
-L$$r/prev-$(TARGET_SUBDIR)/libstdc++-v3/libsupc++/.libs"; \
|
|
export CXX; \
|
|
CXX_FOR_BUILD="$$CXX"; export CXX_FOR_BUILD;
|
|
@endif target-libstdc++-v3-bootstrap
|
|
|
|
# Similar, for later GCC stages.
|
|
POSTSTAGE1_HOST_EXPORTS = \
|
|
$(HOST_EXPORTS) \
|
|
CC="$(STAGE_CC_WRAPPER) $$r/$(HOST_SUBDIR)/prev-gcc/xgcc$(exeext) \
|
|
-B$$r/$(HOST_SUBDIR)/prev-gcc/ -B$(build_tooldir)/bin/ \
|
|
$(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \
|
|
CC_FOR_BUILD="$$CC"; export CC_FOR_BUILD; \
|
|
$(POSTSTAGE1_CXX_EXPORT) \
|
|
GNATBIND="$$r/$(HOST_SUBDIR)/prev-gcc/gnatbind"; export GNATBIND; \
|
|
LDFLAGS="$(POSTSTAGE1_LDFLAGS) $(BOOT_LDFLAGS)"; export LDFLAGS; \
|
|
HOST_LIBS="$(POSTSTAGE1_LIBS)"; export HOST_LIBS;
|
|
|
|
# Target libraries are put under this directory:
|
|
TARGET_SUBDIR = @target_subdir@
|
|
# This is set by the configure script to the arguments to use when configuring
|
|
# directories built for the target.
|
|
TARGET_CONFIGARGS = @target_configargs@ --with-target-subdir="$(TARGET_SUBDIR)"
|
|
# This is the list of variables to export in the environment when
|
|
# configuring subdirectories for the target system.
|
|
BASE_TARGET_EXPORTS = \
|
|
$(BASE_EXPORTS) \
|
|
AR="$(AR_FOR_TARGET)"; export AR; \
|
|
AS="$(COMPILER_AS_FOR_TARGET)"; export AS; \
|
|
CC="$(CC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CC; \
|
|
CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
|
|
CONFIG_SHELL="$(SHELL)"; export CONFIG_SHELL; \
|
|
CPPFLAGS="$(CPPFLAGS_FOR_TARGET)"; export CPPFLAGS; \
|
|
CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
|
|
GCJ="$(GCJ_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GCJ; \
|
|
GFORTRAN="$(GFORTRAN_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GFORTRAN; \
|
|
GOC="$(GOC_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export GOC; \
|
|
DLLTOOL="$(DLLTOOL_FOR_TARGET)"; export DLLTOOL; \
|
|
LD="$(COMPILER_LD_FOR_TARGET)"; export LD; \
|
|
LDFLAGS="$(LDFLAGS_FOR_TARGET)"; export LDFLAGS; \
|
|
LIPO="$(LIPO_FOR_TARGET)"; export LIPO; \
|
|
NM="$(COMPILER_NM_FOR_TARGET)"; export NM; \
|
|
OBJDUMP="$(OBJDUMP_FOR_TARGET)"; export OBJDUMP; \
|
|
RANLIB="$(RANLIB_FOR_TARGET)"; export RANLIB; \
|
|
READELF="$(READELF_FOR_TARGET)"; export READELF; \
|
|
STRIP="$(STRIP_FOR_TARGET)"; export STRIP; \
|
|
WINDRES="$(WINDRES_FOR_TARGET)"; export WINDRES; \
|
|
WINDMC="$(WINDMC_FOR_TARGET)"; export WINDMC; \
|
|
@if gcc-bootstrap
|
|
$(RPATH_ENVVAR)=`echo "$(TARGET_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
|
|
@endif gcc-bootstrap
|
|
$(RPATH_ENVVAR)=`echo "$(HOST_LIB_PATH)$$$(RPATH_ENVVAR)" | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`; export $(RPATH_ENVVAR); \
|
|
TARGET_CONFIGDIRS="$(TARGET_CONFIGDIRS)"; export TARGET_CONFIGDIRS;
|
|
|
|
RAW_CXX_TARGET_EXPORTS = \
|
|
$(BASE_TARGET_EXPORTS) \
|
|
CXX_FOR_TARGET="$(RAW_CXX_FOR_TARGET)"; export CXX_FOR_TARGET; \
|
|
CXX="$(RAW_CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
|
|
|
|
NORMAL_TARGET_EXPORTS = \
|
|
$(BASE_TARGET_EXPORTS) \
|
|
CXX="$(CXX_FOR_TARGET) $(XGCC_FLAGS_FOR_TARGET) $$TFLAGS"; export CXX;
|
|
|
|
# Where to find GMP
|
|
HOST_GMPLIBS = @gmplibs@
|
|
HOST_GMPINC = @gmpinc@
|
|
|
|
# Where to find ISL
|
|
HOST_ISLINC = @islinc@
|
|
|
|
# Where to find CLOOG
|
|
HOST_CLOOGLIBS = @clooglibs@
|
|
HOST_CLOOGINC = @clooginc@
|
|
|
|
# Where to find libelf
|
|
HOST_LIBELFLIBS = @libelflibs@
|
|
HOST_LIBELFINC = @libelfinc@
|
|
|
|
EXTRA_CONFIGARGS_LIBJAVA = @EXTRA_CONFIGARGS_LIBJAVA@
|
|
|
|
# ----------------------------------------------
|
|
# Programs producing files for the BUILD machine
|
|
# ----------------------------------------------
|
|
|
|
SHELL = @SHELL@
|
|
|
|
# pwd command to use. Allow user to override default by setting PWDCMD in
|
|
# the environment to account for automounters. The make variable must not
|
|
# be called PWDCMD, otherwise the value set here is passed to make
|
|
# subprocesses and overrides the setting from the user's environment.
|
|
# Don't use PWD since it is a common shell environment variable and we
|
|
# don't want to corrupt it.
|
|
PWD_COMMAND = $${PWDCMD-pwd}
|
|
|
|
# compilers to use to create programs which must be run in the build
|
|
# environment.
|
|
AR_FOR_BUILD = @AR_FOR_BUILD@
|
|
AS_FOR_BUILD = @AS_FOR_BUILD@
|
|
CC_FOR_BUILD = @CC_FOR_BUILD@
|
|
CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
|
|
CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@
|
|
CXX_FOR_BUILD = @CXX_FOR_BUILD@
|
|
DLLTOOL_FOR_BUILD = @DLLTOOL_FOR_BUILD@
|
|
GCJ_FOR_BUILD = @GCJ_FOR_BUILD@
|
|
GFORTRAN_FOR_BUILD = @GFORTRAN_FOR_BUILD@
|
|
GOC_FOR_BUILD = @GOC_FOR_BUILD@
|
|
LDFLAGS_FOR_BUILD = @LDFLAGS_FOR_BUILD@
|
|
LD_FOR_BUILD = @LD_FOR_BUILD@
|
|
NM_FOR_BUILD = @NM_FOR_BUILD@
|
|
RANLIB_FOR_BUILD = @RANLIB_FOR_BUILD@
|
|
WINDMC_FOR_BUILD = @WINDMC_FOR_BUILD@
|
|
WINDRES_FOR_BUILD = @WINDRES_FOR_BUILD@
|
|
|
|
# Special variables passed down in EXTRA_GCC_FLAGS. They are defined
|
|
# here so that they can be overridden by Makefile fragments.
|
|
BUILD_PREFIX = @BUILD_PREFIX@
|
|
BUILD_PREFIX_1 = @BUILD_PREFIX_1@
|
|
|
|
# Flags to pass to stage2 and later makes. They are defined
|
|
# here so that they can be overridden by Makefile fragments.
|
|
BOOT_CFLAGS= -g -O2
|
|
BOOT_LDFLAGS=
|
|
BOOT_ADAFLAGS=-gnatpg -gnata
|
|
|
|
AWK = @AWK@
|
|
SED = @SED@
|
|
BISON = @BISON@
|
|
YACC = @YACC@
|
|
FLEX = @FLEX@
|
|
LEX = @LEX@
|
|
M4 = @M4@
|
|
MAKEINFO = @MAKEINFO@
|
|
EXPECT = @EXPECT@
|
|
RUNTEST = @RUNTEST@
|
|
|
|
# This just becomes part of the MAKEINFO definition passed down to
|
|
# sub-makes. It lets flags be given on the command line while still
|
|
# using the makeinfo from the object tree.
|
|
# (Default to avoid splitting info files by setting the threshold high.)
|
|
MAKEINFOFLAGS = --split-size=5000000
|
|
|
|
# ---------------------------------------------
|
|
# Programs producing files for the HOST machine
|
|
# ---------------------------------------------
|
|
|
|
AS = @AS@
|
|
AR = @AR@
|
|
AR_FLAGS = rc
|
|
CC = @CC@
|
|
CXX = @CXX@
|
|
DLLTOOL = @DLLTOOL@
|
|
LD = @LD@
|
|
LIPO = @LIPO@
|
|
NM = @NM@
|
|
OBJDUMP = @OBJDUMP@
|
|
RANLIB = @RANLIB@
|
|
READELF = @READELF@
|
|
STRIP = @STRIP@
|
|
WINDRES = @WINDRES@
|
|
WINDMC = @WINDMC@
|
|
|
|
GNATBIND = @GNATBIND@
|
|
GNATMAKE = @GNATMAKE@
|
|
|
|
CFLAGS = @CFLAGS@
|
|
LDFLAGS = @LDFLAGS@
|
|
LIBCFLAGS = $(CFLAGS)
|
|
CXXFLAGS = @CXXFLAGS@
|
|
LIBCXXFLAGS = $(CXXFLAGS) -fno-implicit-templates
|
|
GOCFLAGS = $(CFLAGS)
|
|
|
|
TFLAGS =
|
|
|
|
# Defaults for all stages; some are overridden below.
|
|
|
|
STAGE_CFLAGS = $(BOOT_CFLAGS)
|
|
STAGE_TFLAGS = $(TFLAGS)
|
|
STAGE_CONFIGURE_FLAGS=@stage2_werror_flag@
|
|
|
|
[+ FOR bootstrap-stage +]
|
|
# Defaults for stage [+id+]; some are overridden below.
|
|
STAGE[+id+]_CFLAGS = $(STAGE_CFLAGS)
|
|
STAGE[+id+]_CXXFLAGS = $(CXXFLAGS)
|
|
@if target-libstdc++-v3-bootstrap
|
|
# Override the above if we're bootstrapping C++.
|
|
STAGE[+id+]_CXXFLAGS = $(STAGE[+id+]_CFLAGS)
|
|
@endif target-libstdc++-v3-bootstrap
|
|
STAGE[+id+]_TFLAGS = $(STAGE_TFLAGS)
|
|
STAGE[+id+]_CONFIGURE_FLAGS = $(STAGE_CONFIGURE_FLAGS)
|
|
[+ ENDFOR bootstrap-stage +]
|
|
|
|
# Only build the C compiler for stage1, because that is the only one that
|
|
# we can guarantee will build with the native compiler, and also it is the
|
|
# only thing useful for building stage2. STAGE1_CFLAGS (via CFLAGS),
|
|
# MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them
|
|
# overrideable (for a bootstrap build stage1 also builds gcc.info).
|
|
|
|
STAGE1_CFLAGS = @stage1_cflags@
|
|
STAGE1_CHECKING = @stage1_checking@
|
|
STAGE1_LANGUAGES = @stage1_languages@
|
|
# * We force-disable intermodule optimizations, even if
|
|
# --enable-intermodule was passed, since the installed compiler
|
|
# probably can't handle them. Luckily, autoconf always respects
|
|
# the last argument when conflicting --enable arguments are passed.
|
|
# * Likewise, we force-disable coverage flags, since the installed
|
|
# compiler probably has never heard of them.
|
|
STAGE1_CONFIGURE_FLAGS = --disable-intermodule $(STAGE1_CHECKING) \
|
|
--disable-coverage --enable-languages="$(STAGE1_LANGUAGES)"
|
|
|
|
STAGEprofile_CFLAGS = $(STAGE2_CFLAGS) -fprofile-generate
|
|
STAGEprofile_TFLAGS = $(STAGE2_TFLAGS)
|
|
|
|
STAGEfeedback_CFLAGS = $(STAGE3_CFLAGS) -fprofile-use
|
|
STAGEfeedback_TFLAGS = $(STAGE3_TFLAGS)
|
|
|
|
do-compare = @do_compare@
|
|
do-compare3 = $(do-compare)
|
|
|
|
# -----------------------------------------------
|
|
# Programs producing files for the TARGET machine
|
|
# -----------------------------------------------
|
|
|
|
AR_FOR_TARGET=@AR_FOR_TARGET@
|
|
AS_FOR_TARGET=@AS_FOR_TARGET@
|
|
CC_FOR_TARGET=$(STAGE_CC_WRAPPER) @CC_FOR_TARGET@
|
|
|
|
# If GCC_FOR_TARGET is not overriden on the command line, then this
|
|
# variable is passed down to the gcc Makefile, where it is used to
|
|
# build libgcc2.a. We define it here so that it can itself be
|
|
# overridden on the command line.
|
|
GCC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCC_FOR_TARGET@
|
|
CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @CXX_FOR_TARGET@
|
|
RAW_CXX_FOR_TARGET=$(STAGE_CC_WRAPPER) @RAW_CXX_FOR_TARGET@
|
|
GCJ_FOR_TARGET=$(STAGE_CC_WRAPPER) @GCJ_FOR_TARGET@
|
|
GFORTRAN_FOR_TARGET=$(STAGE_CC_WRAPPER) @GFORTRAN_FOR_TARGET@
|
|
GOC_FOR_TARGET=$(STAGE_CC_WRAPPER) @GOC_FOR_TARGET@
|
|
DLLTOOL_FOR_TARGET=@DLLTOOL_FOR_TARGET@
|
|
LD_FOR_TARGET=@LD_FOR_TARGET@
|
|
|
|
LIPO_FOR_TARGET=@LIPO_FOR_TARGET@
|
|
NM_FOR_TARGET=@NM_FOR_TARGET@
|
|
OBJDUMP_FOR_TARGET=@OBJDUMP_FOR_TARGET@
|
|
RANLIB_FOR_TARGET=@RANLIB_FOR_TARGET@
|
|
READELF_FOR_TARGET=@READELF_FOR_TARGET@
|
|
STRIP_FOR_TARGET=@STRIP_FOR_TARGET@
|
|
WINDRES_FOR_TARGET=@WINDRES_FOR_TARGET@
|
|
WINDMC_FOR_TARGET=@WINDMC_FOR_TARGET@
|
|
|
|
COMPILER_AS_FOR_TARGET=@COMPILER_AS_FOR_TARGET@
|
|
COMPILER_LD_FOR_TARGET=@COMPILER_LD_FOR_TARGET@
|
|
COMPILER_NM_FOR_TARGET=@COMPILER_NM_FOR_TARGET@
|
|
|
|
CFLAGS_FOR_TARGET = @CFLAGS_FOR_TARGET@
|
|
CXXFLAGS_FOR_TARGET = @CXXFLAGS_FOR_TARGET@
|
|
|
|
LIBCFLAGS_FOR_TARGET = $(CFLAGS_FOR_TARGET)
|
|
LIBCXXFLAGS_FOR_TARGET = $(CXXFLAGS_FOR_TARGET) -fno-implicit-templates
|
|
LDFLAGS_FOR_TARGET = @LDFLAGS_FOR_TARGET@
|
|
GOCFLAGS_FOR_TARGET = -O2 -g
|
|
|
|
FLAGS_FOR_TARGET = @FLAGS_FOR_TARGET@
|
|
SYSROOT_CFLAGS_FOR_TARGET = @SYSROOT_CFLAGS_FOR_TARGET@
|
|
DEBUG_PREFIX_CFLAGS_FOR_TARGET = @DEBUG_PREFIX_CFLAGS_FOR_TARGET@
|
|
|
|
XGCC_FLAGS_FOR_TARGET = $(FLAGS_FOR_TARGET) $(SYSROOT_CFLAGS_FOR_TARGET) $(DEBUG_PREFIX_CFLAGS_FOR_TARGET)
|
|
|
|
# ------------------------------------
|
|
# Miscellaneous targets and flag lists
|
|
# ------------------------------------
|
|
|
|
# The first rule in the file had better be this one. Don't put any above it.
|
|
# This lives here to allow makefile fragments to contain dependencies.
|
|
all:
|
|
|
|
#### host and target specific makefile fragments come in here.
|
|
@target_makefile_frag@
|
|
@alphaieee_frag@
|
|
@ospace_frag@
|
|
@host_makefile_frag@
|
|
###
|
|
|
|
# This is the list of directories that may be needed in RPATH_ENVVAR
|
|
# so that programs built for the target machine work.
|
|
TARGET_LIB_PATH = [+ FOR target_modules +][+
|
|
IF lib_path +]$(TARGET_LIB_PATH_[+module+])[+ ENDIF lib_path +][+
|
|
ENDFOR target_modules +]$(HOST_LIB_PATH_gcc)
|
|
[+ FOR target_modules +][+ IF lib_path +]
|
|
@if target-[+module+]
|
|
TARGET_LIB_PATH_[+module+] = $$r/$(TARGET_SUBDIR)/[+module+]/[+lib_path+]:
|
|
@endif target-[+module+]
|
|
[+ ENDIF lib_path +][+ ENDFOR target_modules +]
|
|
|
|
|
|
# This is the list of directories that may be needed in RPATH_ENVVAR
|
|
# so that programs built for the host machine work.
|
|
HOST_LIB_PATH = [+ FOR host_modules +][+
|
|
IF lib_path +]$(HOST_LIB_PATH_[+module+])[+ ENDIF lib_path +][+
|
|
ENDFOR host_modules +]
|
|
|
|
# Define HOST_LIB_PATH_gcc here, for the sake of TARGET_LIB_PATH, ouch
|
|
@if gcc
|
|
HOST_LIB_PATH_gcc = $$r/$(HOST_SUBDIR)/gcc$(GCC_SHLIB_SUBDIR):$$r/$(HOST_SUBDIR)/prev-gcc$(GCC_SHLIB_SUBDIR):
|
|
@endif gcc
|
|
|
|
[+ FOR host_modules +][+ IF lib_path +]
|
|
@if [+module+]
|
|
HOST_LIB_PATH_[+module+] = \
|
|
$$r/$(HOST_SUBDIR)/[+module+]/[+lib_path+]:[+ IF bootstrap
|
|
+]$$r/$(HOST_SUBDIR)/prev-[+module+]/[+lib_path+]:[+ ENDIF bootstrap +]
|
|
@endif [+module+]
|
|
[+ ENDIF lib_path +][+ ENDFOR host_modules +]
|
|
|
|
CXX_FOR_TARGET_FLAG_TO_PASS = \
|
|
"CXX_FOR_TARGET=$(CXX_FOR_TARGET)"
|
|
@if target-libstdc++-v3
|
|
# CXX_FOR_TARGET is tricky to get right for target libs that require a
|
|
# functional C++ compiler. When we recurse, if we expand
|
|
# CXX_FOR_TARGET before configuring libstdc++-v3, we won't get
|
|
# libstdc++ include flags from the script. Instead, we get an
|
|
# -funconfigured-* word, so that we'll get errors if this invalid C++
|
|
# command line is used for anything, but also so that we can use the
|
|
# word to decide whether or not to pass on this CXX_FOR_TARGET. If we
|
|
# don't pass it on, sub-make will use the default definition, that
|
|
# re-expands it at the time of use, so we'll get it right when we need
|
|
# it. One potential exception is the expansion of CXX_FOR_TARGET
|
|
# passed down as part of CXX within TARGET_FLAGS, but this wouldn't
|
|
# really work, for C++ host programs can't depend on the current-stage
|
|
# C++ target library.
|
|
CXX_FOR_TARGET_FLAG_TO_PASS = \
|
|
$(shell if echo "$(CXX_FOR_TARGET)" | grep " -funconfigured-" > /dev/null; then :; else echo '"CXX_FOR_TARGET=$(CXX_FOR_TARGET)"'; fi)
|
|
@endif target-libstdc++-v3
|
|
|
|
# Flags to pass down to all sub-makes.
|
|
BASE_FLAGS_TO_PASS =[+ FOR flags_to_pass +][+ IF optional +] \
|
|
"`echo '[+flag+]=$([+flag+])' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"[+ ELSE optional +] \
|
|
"[+flag+]=$([+flag+])"[+ ENDIF optional+][+ ENDFOR flags_to_pass +][+ FOR bootstrap-stage +] \
|
|
"STAGE[+id+]_CFLAGS=$(STAGE[+id+]_CFLAGS)" \
|
|
"STAGE[+id+]_CXXFLAGS=$(STAGE[+id+]_CXXFLAGS)" \
|
|
"STAGE[+id+]_TFLAGS=$(STAGE[+id+]_TFLAGS)"[+ ENDFOR bootstrap-stage +] \
|
|
$(CXX_FOR_TARGET_FLAG_TO_PASS) \
|
|
"TFLAGS=$(TFLAGS)" \
|
|
"CONFIG_SHELL=$(SHELL)" \
|
|
"MAKEINFO=$(MAKEINFO) $(MAKEINFOFLAGS)"
|
|
|
|
# We leave this in just in case, but it is not needed anymore.
|
|
RECURSE_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS)
|
|
|
|
# Flags to pass down to most sub-makes, in which we're building with
|
|
# the host environment.
|
|
EXTRA_HOST_FLAGS = \
|
|
'AR=$(AR)' \
|
|
'AS=$(AS)' \
|
|
'CC=$(CC)' \
|
|
'CXX=$(CXX)' \
|
|
'DLLTOOL=$(DLLTOOL)' \
|
|
'GCJ=$(GCJ)' \
|
|
'GFORTRAN=$(GFORTRAN)' \
|
|
'GOC=$(GOC)' \
|
|
'LD=$(LD)' \
|
|
'LIPO=$(LIPO)' \
|
|
'NM=$(NM)' \
|
|
'OBJDUMP=$(OBJDUMP)' \
|
|
'RANLIB=$(RANLIB)' \
|
|
'READELF=$(READELF)' \
|
|
'STRIP=$(STRIP)' \
|
|
'WINDRES=$(WINDRES)' \
|
|
'WINDMC=$(WINDMC)'
|
|
|
|
FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS)
|
|
|
|
# Flags to pass to stage2 and later makes.
|
|
|
|
POSTSTAGE1_FLAGS_TO_PASS = \
|
|
CC="$${CC}" CC_FOR_BUILD="$${CC_FOR_BUILD}" \
|
|
CXX="$${CXX}" CXX_FOR_BUILD="$${CXX_FOR_BUILD}" \
|
|
GNATBIND="$${GNATBIND}" \
|
|
LDFLAGS="$${LDFLAGS}" \
|
|
HOST_LIBS="$${HOST_LIBS}" \
|
|
"`echo 'ADAFLAGS=$(BOOT_ADAFLAGS)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
|
|
|
|
# Flags to pass down to makes which are built with the target environment.
|
|
# The double $ decreases the length of the command line; those variables
|
|
# are set in BASE_FLAGS_TO_PASS, and the sub-make will expand them. The
|
|
# *_CFLAGS_FOR_TARGET variables are not passed down and most often empty,
|
|
# so we expand them here.
|
|
EXTRA_TARGET_FLAGS = \
|
|
'AR=$$(AR_FOR_TARGET)' \
|
|
'AS=$(COMPILER_AS_FOR_TARGET)' \
|
|
'CC=$$(CC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
|
|
'CFLAGS=$$(CFLAGS_FOR_TARGET)' \
|
|
'CXX=$$(CXX_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
|
|
'CXXFLAGS=$$(CXXFLAGS_FOR_TARGET)' \
|
|
'DLLTOOL=$$(DLLTOOL_FOR_TARGET)' \
|
|
'GCJ=$$(GCJ_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
|
|
'GFORTRAN=$$(GFORTRAN_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
|
|
'GOC=$$(GOC_FOR_TARGET) $$(XGCC_FLAGS_FOR_TARGET) $$(TFLAGS)' \
|
|
'GOCFLAGS=$$(GOCFLAGS_FOR_TARGET)' \
|
|
'LD=$(COMPILER_LD_FOR_TARGET)' \
|
|
'LDFLAGS=$$(LDFLAGS_FOR_TARGET)' \
|
|
'LIBCFLAGS=$$(LIBCFLAGS_FOR_TARGET)' \
|
|
'LIBCXXFLAGS=$$(LIBCXXFLAGS_FOR_TARGET)' \
|
|
'NM=$(COMPILER_NM_FOR_TARGET)' \
|
|
'OBJDUMP=$$(OBJDUMP_FOR_TARGET)' \
|
|
'RANLIB=$$(RANLIB_FOR_TARGET)' \
|
|
'READELF=$$(READELF_FOR_TARGET)' \
|
|
'WINDRES=$$(WINDRES_FOR_TARGET)' \
|
|
'WINDMC=$$(WINDMC_FOR_TARGET)' \
|
|
'XGCC_FLAGS_FOR_TARGET=$(XGCC_FLAGS_FOR_TARGET)' \
|
|
"TFLAGS=$$TFLAGS"
|
|
|
|
TARGET_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS)
|
|
|
|
# Flags to pass down to gcc. gcc builds a library, libgcc.a, so it
|
|
# unfortunately needs the native compiler and the target ar and
|
|
# ranlib.
|
|
# If any variables are added here, they must be added to do-*, below.
|
|
# The BUILD_* variables are a special case, which are used for the gcc
|
|
# cross-building scheme.
|
|
EXTRA_GCC_FLAGS = \
|
|
"GCC_FOR_TARGET=$(GCC_FOR_TARGET)" \
|
|
"`echo 'STMP_FIXPROTO=$(STMP_FIXPROTO)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`" \
|
|
"`echo 'LIMITS_H_TEST=$(LIMITS_H_TEST)' | sed -e s'/[^=][^=]*=$$/XFOO=/'`"
|
|
|
|
GCC_FLAGS_TO_PASS = $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS) $(EXTRA_GCC_FLAGS)
|
|
|
|
@if gcc
|
|
BUILD_CONFIG = @BUILD_CONFIG@
|
|
ifneq ($(BUILD_CONFIG),)
|
|
include $(foreach CONFIG, $(BUILD_CONFIG), $(srcdir)/config/$(CONFIG).mk)
|
|
endif
|
|
@endif gcc
|
|
|
|
.PHONY: configure-host
|
|
configure-host: [+
|
|
FOR host_modules +] \
|
|
maybe-configure-[+module+][+
|
|
ENDFOR host_modules +]
|
|
.PHONY: configure-target
|
|
configure-target: [+
|
|
FOR target_modules +] \
|
|
maybe-configure-target-[+module+][+
|
|
ENDFOR target_modules +]
|
|
|
|
# The target built for a native non-bootstrap build.
|
|
.PHONY: all
|
|
all:
|
|
@if gcc-bootstrap
|
|
[ -f stage_final ] || echo stage3 > stage_final
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(MAKE) $(RECURSE_FLAGS_TO_PASS) `cat stage_final`-bubble
|
|
@endif gcc-bootstrap
|
|
@: $(MAKE); $(unstage)
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
@if gcc-bootstrap
|
|
if [ -f stage_last ]; then \
|
|
TFLAGS="$(STAGE$(shell test ! -f stage_last || sed s,^stage,, stage_last)_TFLAGS)"; \
|
|
$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target; \
|
|
else \
|
|
@endif gcc-bootstrap
|
|
$(MAKE) $(RECURSE_FLAGS_TO_PASS) all-host all-target \
|
|
@if gcc-bootstrap
|
|
; \
|
|
fi \
|
|
@endif gcc-bootstrap
|
|
&& :
|
|
|
|
.PHONY: all-build
|
|
[+ FOR build_modules +]
|
|
all-build: maybe-all-build-[+module+][+ ENDFOR build_modules +]
|
|
|
|
.PHONY: all-host
|
|
[+ FOR host_modules +][+ IF bootstrap +]
|
|
@if [+module+]-no-bootstrap[+ ENDIF bootstrap +]
|
|
all-host: maybe-all-[+module+][+ IF bootstrap +]
|
|
@endif [+module+]-no-bootstrap[+ ENDIF bootstrap +][+ ENDFOR host_modules +]
|
|
|
|
.PHONY: all-target
|
|
[+ FOR target_modules +][+ IF bootstrap +]
|
|
@if target-[+module+]-no-bootstrap[+ ENDIF bootstrap +]
|
|
all-target: maybe-all-target-[+module+][+ IF bootstrap +]
|
|
@endif target-[+module+]-no-bootstrap[+
|
|
ENDIF bootstrap +][+ ENDFOR target_modules +]
|
|
|
|
# Do a target for all the subdirectories. A ``make do-X'' will do a
|
|
# ``make X'' in all subdirectories (because, in general, there is a
|
|
# dependency (below) of X upon do-X, a ``make X'' will also do this,
|
|
# but it may do additional work as well).
|
|
[+ FOR recursive_targets +]
|
|
.PHONY: do-[+make_target+]
|
|
do-[+make_target+]:
|
|
@: $(MAKE); $(unstage)
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(MAKE) $(RECURSE_FLAGS_TO_PASS) [+make_target+]-host \
|
|
[+make_target+]-target
|
|
|
|
|
|
.PHONY: [+make_target+]-host
|
|
[+ FOR host_modules +]
|
|
[+make_target+]-host: maybe-[+make_target+]-[+module+][+ ENDFOR host_modules +]
|
|
|
|
.PHONY: [+make_target+]-target
|
|
[+ FOR target_modules +]
|
|
[+make_target+]-target: maybe-[+make_target+]-target-[+module+][+ ENDFOR target_modules +]
|
|
[+ ENDFOR recursive_targets +]
|
|
|
|
# Here are the targets which correspond to the do-X targets.
|
|
|
|
.PHONY: info installcheck dvi pdf html
|
|
.PHONY: install-info install-pdf install-html
|
|
.PHONY: clean distclean mostlyclean maintainer-clean realclean
|
|
.PHONY: local-clean local-distclean local-maintainer-clean
|
|
info: do-info
|
|
installcheck: do-installcheck
|
|
dvi: do-dvi
|
|
pdf: do-pdf
|
|
html: do-html
|
|
|
|
# Make sure makeinfo is built before we do a `make info', if we're
|
|
# in fact building texinfo.
|
|
do-info: maybe-all-texinfo
|
|
|
|
install-info: do-install-info dir.info
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
if [ -f dir.info ] ; then \
|
|
$(INSTALL_DATA) dir.info $(DESTDIR)$(infodir)/dir.info ; \
|
|
else true ; fi
|
|
|
|
install-pdf: do-install-pdf
|
|
|
|
install-html: do-install-html
|
|
|
|
local-clean:
|
|
-rm -f *.a TEMP errs core *.o *~ \#* TAGS *.E *.log
|
|
|
|
local-distclean:
|
|
-rm -f Makefile config.status config.cache mh-frag mt-frag
|
|
-rm -f maybedep.tmp serdep.tmp
|
|
-if [ "$(TARGET_SUBDIR)" != "." ]; then \
|
|
rm -rf $(TARGET_SUBDIR); \
|
|
else true; fi
|
|
-rm -rf $(BUILD_SUBDIR)
|
|
-if [ "$(HOST_SUBDIR)" != "." ]; then \
|
|
rm -rf $(HOST_SUBDIR); \
|
|
else true; fi
|
|
-rm -f texinfo/po/Makefile texinfo/po/Makefile.in texinfo/info/Makefile
|
|
-rm -f texinfo/doc/Makefile texinfo/po/POTFILES
|
|
-rmdir texinfo/doc texinfo/info texinfo/intl texinfo/lib 2>/dev/null
|
|
-rmdir texinfo/makeinfo texinfo/po texinfo/util 2>/dev/null
|
|
-rmdir fastjar gcc libiberty texinfo zlib 2>/dev/null
|
|
-find . -name config.cache -exec rm -f {} \; \; 2>/dev/null
|
|
|
|
local-maintainer-clean:
|
|
@echo "This command is intended for maintainers to use;"
|
|
@echo "it deletes files that may require special tools to rebuild."
|
|
|
|
clean: do-clean local-clean
|
|
mostlyclean: do-mostlyclean local-clean
|
|
distclean: do-distclean local-clean local-distclean
|
|
maintainer-clean: local-maintainer-clean do-maintainer-clean local-clean
|
|
maintainer-clean: local-distclean
|
|
realclean: maintainer-clean
|
|
|
|
# Check target.
|
|
|
|
.PHONY: check do-check
|
|
check: do-check
|
|
|
|
# Only include modules actually being configured and built.
|
|
.PHONY: check-host
|
|
check-host: [+
|
|
FOR host_modules +] \
|
|
maybe-check-[+module+][+
|
|
ENDFOR host_modules +]
|
|
|
|
.PHONY: check-target
|
|
check-target: [+
|
|
FOR target_modules +] \
|
|
maybe-check-target-[+module+][+
|
|
ENDFOR target_modules +]
|
|
|
|
do-check:
|
|
@: $(MAKE); $(unstage)
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(MAKE) $(RECURSE_FLAGS_TO_PASS) check-host check-target
|
|
|
|
# Automated reporting of test results.
|
|
|
|
warning.log: build.log
|
|
$(srcdir)/contrib/warn_summary build.log > $@
|
|
|
|
mail-report.log:
|
|
if test x'$(BOOT_CFLAGS)' != x''; then \
|
|
BOOT_CFLAGS='$(BOOT_CFLAGS)'; export BOOT_CFLAGS; \
|
|
fi; \
|
|
$(srcdir)/contrib/test_summary -t >$@
|
|
chmod +x $@
|
|
echo If you really want to send e-mail, run ./$@ now
|
|
|
|
mail-report-with-warnings.log: warning.log
|
|
if test x'$(BOOT_CFLAGS)' != x''; then \
|
|
BOOT_CFLAGS='$(BOOT_CFLAGS)'; export BOOT_CFLAGS; \
|
|
fi; \
|
|
$(srcdir)/contrib/test_summary -t -i warning.log >$@
|
|
chmod +x $@
|
|
echo If you really want to send e-mail, run ./$@ now
|
|
|
|
# Installation targets.
|
|
|
|
.PHONY: install uninstall
|
|
install:
|
|
@: $(MAKE); $(unstage)
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(MAKE) $(RECURSE_FLAGS_TO_PASS) installdirs install-host install-target
|
|
|
|
.PHONY: install-host-nogcc
|
|
install-host-nogcc: [+
|
|
FOR host_modules +][+ IF (not (= (get "module") "gcc")) +] \
|
|
maybe-install-[+module+][+ ENDIF +][+
|
|
ENDFOR host_modules +]
|
|
|
|
.PHONY: install-host
|
|
install-host: [+
|
|
FOR host_modules +] \
|
|
maybe-install-[+module+][+
|
|
ENDFOR host_modules +]
|
|
|
|
.PHONY: install-target
|
|
install-target: [+
|
|
FOR target_modules +] \
|
|
maybe-install-target-[+module+][+
|
|
ENDFOR target_modules +]
|
|
|
|
uninstall:
|
|
@echo "the uninstall target is not supported in this tree"
|
|
|
|
.PHONY: install.all
|
|
install.all: install-no-fixedincludes
|
|
@if [ -f ./gcc/Makefile ] ; then \
|
|
r=`${PWD_COMMAND}` ; export r ; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(HOST_EXPORTS) \
|
|
(cd ./gcc && \
|
|
$(MAKE) $(FLAGS_TO_PASS) install-headers) ; \
|
|
else \
|
|
true ; \
|
|
fi
|
|
|
|
# install-no-fixedincludes is used to allow the elaboration of binary packages
|
|
# suitable for distribution, where we cannot include the fixed system header
|
|
# files.
|
|
.PHONY: install-no-fixedincludes
|
|
install-no-fixedincludes: installdirs install-host-nogcc \
|
|
install-target gcc-install-no-fixedincludes
|
|
|
|
.PHONY: install-strip
|
|
install-strip:
|
|
@: $(MAKE); $(unstage)
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(MAKE) $(RECURSE_FLAGS_TO_PASS) installdirs install-strip-host install-strip-target
|
|
|
|
.PHONY: install-strip-host
|
|
install-strip-host: [+
|
|
FOR host_modules +] \
|
|
maybe-install-strip-[+module+][+
|
|
ENDFOR host_modules +]
|
|
|
|
.PHONY: install-strip-target
|
|
install-strip-target: [+
|
|
FOR target_modules +] \
|
|
maybe-install-strip-target-[+module+][+
|
|
ENDFOR target_modules +]
|
|
|
|
|
|
### other supporting targets
|
|
|
|
MAKEDIRS= \
|
|
$(DESTDIR)$(prefix) \
|
|
$(DESTDIR)$(exec_prefix)
|
|
.PHONY: installdirs
|
|
installdirs: mkinstalldirs
|
|
$(SHELL) $(srcdir)/mkinstalldirs $(MAKEDIRS)
|
|
|
|
dir.info: do-install-info
|
|
if [ -f $(srcdir)/texinfo/gen-info-dir ] ; then \
|
|
$(srcdir)/texinfo/gen-info-dir $(DESTDIR)$(infodir) $(srcdir)/texinfo/dir.info-template > dir.info.new ; \
|
|
mv -f dir.info.new dir.info ; \
|
|
else true ; \
|
|
fi
|
|
|
|
dist:
|
|
@echo "Building a full distribution of this tree isn't done"
|
|
@echo "via 'make dist'. Check out the etc/ subdirectory"
|
|
|
|
etags tags: TAGS
|
|
|
|
# Right now this just builds TAGS in each subdirectory. emacs19 has the
|
|
# ability to use several tags files at once, so there is probably no need
|
|
# to combine them into one big TAGS file (like CVS 1.3 does). We could
|
|
# (if we felt like it) have this Makefile write a piece of elisp which
|
|
# the user could load to tell emacs19 where all the TAGS files we just
|
|
# built are.
|
|
TAGS: do-TAGS
|
|
|
|
# ------------------------------------
|
|
# Macros for configure and all targets
|
|
# ------------------------------------
|
|
|
|
[+ DEFINE configure +]
|
|
.PHONY: configure-[+prefix+][+module+] maybe-configure-[+prefix+][+module+]
|
|
maybe-configure-[+prefix+][+module+]:
|
|
@if gcc-bootstrap
|
|
configure-[+prefix+][+module+]: stage_current
|
|
@endif gcc-bootstrap
|
|
@if [+prefix+][+module+]
|
|
maybe-configure-[+prefix+][+module+]: configure-[+prefix+][+module+]
|
|
configure-[+prefix+][+module+]: [+ IF bootstrap +][+ ELSE +]
|
|
@: $(MAKE); $(unstage)[+ ENDIF bootstrap +]
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
[+ IF check_multilibs
|
|
+]echo "Checking multilib configuration for [+module+]..."; \
|
|
$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \
|
|
$(CC_FOR_TARGET) --print-multi-lib > [+subdir+]/[+module+]/multilib.tmp 2> /dev/null ; \
|
|
if test -r [+subdir+]/[+module+]/multilib.out; then \
|
|
if cmp -s [+subdir+]/[+module+]/multilib.tmp [+subdir+]/[+module+]/multilib.out; then \
|
|
rm -f [+subdir+]/[+module+]/multilib.tmp; \
|
|
else \
|
|
rm -f [+subdir+]/[+module+]/Makefile; \
|
|
mv [+subdir+]/[+module+]/multilib.tmp [+subdir+]/[+module+]/multilib.out; \
|
|
fi; \
|
|
else \
|
|
mv [+subdir+]/[+module+]/multilib.tmp [+subdir+]/[+module+]/multilib.out; \
|
|
fi; \
|
|
[+ ENDIF check_multilibs +]test ! -f [+subdir+]/[+module+]/Makefile || exit 0; \
|
|
$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \
|
|
[+exports+] [+extra_exports+] \
|
|
echo Configuring in [+subdir+]/[+module+]; \
|
|
cd "[+subdir+]/[+module+]" || exit 1; \
|
|
case $(srcdir) in \
|
|
/* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
|
|
*) topdir=`echo [+subdir+]/[+module+]/ | \
|
|
sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
|
|
esac; \
|
|
srcdiroption="--srcdir=$${topdir}/[+module+]"; \
|
|
libsrcdir="$$s/[+module+]"; \
|
|
[+ IF no-config-site +]rm -f no-such-file || : ; \
|
|
CONFIG_SITE=no-such-file [+ ENDIF +]$(SHELL) $${libsrcdir}/configure \
|
|
[+args+] --build=${build_alias} --host=[+host_alias+] \
|
|
--target=[+target_alias+] $${srcdiroption} [+extra_configure_flags+] \
|
|
|| exit 1
|
|
@endif [+prefix+][+module+]
|
|
|
|
[+ IF bootstrap +]
|
|
[+ FOR bootstrap_stage +]
|
|
.PHONY: configure-stage[+id+]-[+prefix+][+module+] maybe-configure-stage[+id+]-[+prefix+][+module+]
|
|
maybe-configure-stage[+id+]-[+prefix+][+module+]:
|
|
@if [+prefix+][+module+]-bootstrap
|
|
maybe-configure-stage[+id+]-[+prefix+][+module+]: configure-stage[+id+]-[+prefix+][+module+]
|
|
configure-stage[+id+]-[+prefix+][+module+]:
|
|
@[ $(current_stage) = stage[+id+] ] || $(MAKE) stage[+id+]-start
|
|
@$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+]
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
TFLAGS="$(STAGE[+id+]_TFLAGS)"; \
|
|
[+ IF check_multilibs
|
|
+]echo "Checking multilib configuration for [+module+]..."; \
|
|
$(CC_FOR_TARGET) --print-multi-lib > [+subdir+]/[+module+]/multilib.tmp 2> /dev/null ; \
|
|
if test -r [+subdir+]/[+module+]/multilib.out; then \
|
|
if cmp -s [+subdir+]/[+module+]/multilib.tmp [+subdir+]/[+module+]/multilib.out; then \
|
|
rm -f [+subdir+]/[+module+]/multilib.tmp; \
|
|
else \
|
|
rm -f [+subdir+]/[+module+]/Makefile; \
|
|
mv [+subdir+]/[+module+]/multilib.tmp [+subdir+]/[+module+]/multilib.out; \
|
|
fi; \
|
|
else \
|
|
mv [+subdir+]/[+module+]/multilib.tmp [+subdir+]/[+module+]/multilib.out; \
|
|
fi; \
|
|
[+ ENDIF check_multilibs +]test ! -f [+subdir+]/[+module+]/Makefile || exit 0; \
|
|
[+exports+][+ IF prev +] \
|
|
[+poststage1_exports+][+ ENDIF prev +][+ IF prefix +] \
|
|
CFLAGS="$(CFLAGS_FOR_TARGET)"; export CFLAGS; \
|
|
CXXFLAGS="$(CXXFLAGS_FOR_TARGET)"; export CXXFLAGS; \
|
|
LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"; export LIBCFLAGS;[+ ELSE prefix +] \
|
|
CFLAGS="$(STAGE[+id+]_CFLAGS)"; export CFLAGS; \
|
|
CXXFLAGS="$(STAGE[+id+]_CXXFLAGS)"; export CXXFLAGS;[+ IF prev +] \
|
|
LIBCFLAGS="$(STAGE[+id+]_CFLAGS)"[+ ELSE prev +] \
|
|
LIBCFLAGS="$(LIBCFLAGS)"[+ ENDIF prev +]; export LIBCFLAGS;[+
|
|
ENDIF prefix +] [+extra_exports+] \
|
|
echo Configuring stage [+id+] in [+subdir+]/[+module+] ; \
|
|
$(SHELL) $(srcdir)/mkinstalldirs [+subdir+]/[+module+] ; \
|
|
cd [+subdir+]/[+module+] || exit 1; \
|
|
case $(srcdir) in \
|
|
/* | [A-Za-z]:[\\/]*) topdir=$(srcdir) ;; \
|
|
*) topdir=`echo [+subdir+]/[+module+]/ | \
|
|
sed -e 's,\./,,g' -e 's,[^/]*/,../,g' `$(srcdir) ;; \
|
|
esac; \
|
|
srcdiroption="--srcdir=$${topdir}/[+module+]"; \
|
|
libsrcdir="$$s/[+module+]"; \
|
|
$(SHELL) $${libsrcdir}/configure \
|
|
[+args+] --build=${build_alias} --host=[+host_alias+] \
|
|
--target=[+target_alias+] $${srcdiroption} [+ IF prev +]\
|
|
--with-build-libsubdir=$(HOST_SUBDIR) [+ ENDIF prev +]\
|
|
$(STAGE[+id+]_CONFIGURE_FLAGS)[+ IF extra_configure_flags +] \
|
|
[+extra_configure_flags+][+ ENDIF extra_configure_flags +]
|
|
@endif [+prefix+][+module+]-bootstrap
|
|
[+ ENDFOR bootstrap_stage +]
|
|
[+ ENDIF bootstrap +]
|
|
[+ ENDDEF +]
|
|
|
|
[+ DEFINE all +]
|
|
.PHONY: all-[+prefix+][+module+] maybe-all-[+prefix+][+module+]
|
|
maybe-all-[+prefix+][+module+]:
|
|
@if gcc-bootstrap
|
|
all-[+prefix+][+module+]: stage_current
|
|
@endif gcc-bootstrap
|
|
@if [+prefix+][+module+]
|
|
TARGET-[+prefix+][+module+]=[+
|
|
IF all_target +][+all_target+][+ ELSE +]all[+ ENDIF all_target +]
|
|
maybe-all-[+prefix+][+module+]: all-[+prefix+][+module+]
|
|
all-[+prefix+][+module+]: configure-[+prefix+][+module+][+ IF bootstrap +][+ ELSE +]
|
|
@: $(MAKE); $(unstage)[+ ENDIF bootstrap +]
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
[+exports+] [+extra_exports+] \
|
|
(cd [+subdir+]/[+module+] && \
|
|
$(MAKE) $(BASE_FLAGS_TO_PASS) [+args+] [+extra_make_flags+] \
|
|
$(TARGET-[+prefix+][+module+]))
|
|
@endif [+prefix+][+module+]
|
|
|
|
[+ IF bootstrap +]
|
|
[+ FOR bootstrap_stage +]
|
|
.PHONY: all-stage[+id+]-[+prefix+][+module+] maybe-all-stage[+id+]-[+prefix+][+module+]
|
|
.PHONY: clean-stage[+id+]-[+prefix+][+module+] maybe-clean-stage[+id+]-[+prefix+][+module+]
|
|
maybe-all-stage[+id+]-[+prefix+][+module+]:
|
|
maybe-clean-stage[+id+]-[+prefix+][+module+]:
|
|
@if [+prefix+][+module+]-bootstrap
|
|
maybe-all-stage[+id+]-[+prefix+][+module+]: all-stage[+id+]-[+prefix+][+module+]
|
|
all-stage[+id+]: all-stage[+id+]-[+prefix+][+module+]
|
|
TARGET-stage[+id+]-[+prefix+][+module+] = $(TARGET-[+prefix+][+module+])
|
|
all-stage[+id+]-[+prefix+][+module+]: configure-stage[+id+]-[+prefix+][+module+]
|
|
@[ $(current_stage) = stage[+id+] ] || $(MAKE) stage[+id+]-start
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
TFLAGS="$(STAGE[+id+]_TFLAGS)"; \
|
|
[+exports+][+ IF prev +] \
|
|
[+poststage1_exports+][+ ENDIF prev +] [+extra_exports+] \
|
|
cd [+subdir+]/[+module+] && \
|
|
$(MAKE) $(BASE_FLAGS_TO_PASS)[+ IF prefix +] \
|
|
CFLAGS="$(CFLAGS_FOR_TARGET)" \
|
|
CXXFLAGS="$(CXXFLAGS_FOR_TARGET)" \
|
|
LIBCFLAGS="$(LIBCFLAGS_FOR_TARGET)"[+ ELSE prefix +] \
|
|
CFLAGS="$(STAGE[+id+]_CFLAGS)" \
|
|
CXXFLAGS="$(STAGE[+id+]_CXXFLAGS)"[+ IF prev +] \
|
|
LIBCFLAGS="$(STAGE[+id+]_CFLAGS)"[+ ELSE prev +] \
|
|
LIBCFLAGS="$(LIBCFLAGS)"[+ ENDIF prev +][+ ENDIF prefix +] \
|
|
CFLAGS_FOR_TARGET="$(CFLAGS_FOR_TARGET)" \
|
|
CXXFLAGS_FOR_TARGET="$(CXXFLAGS_FOR_TARGET)" \
|
|
LIBCFLAGS_FOR_TARGET="$(LIBCFLAGS_FOR_TARGET)" \
|
|
[+args+] [+
|
|
IF prev +][+poststage1_args+][+ ENDIF prev
|
|
+] [+extra_make_flags+] \
|
|
TFLAGS="$(STAGE[+id+]_TFLAGS)" \
|
|
$(TARGET-stage[+id+]-[+prefix+][+module+])
|
|
|
|
maybe-clean-stage[+id+]-[+prefix+][+module+]: clean-stage[+id+]-[+prefix+][+module+]
|
|
clean-stage[+id+]: clean-stage[+id+]-[+prefix+][+module+]
|
|
clean-stage[+id+]-[+prefix+][+module+]:
|
|
@if [ $(current_stage) = stage[+id+] ]; then \
|
|
[ -f [+subdir+]/[+module+]/Makefile ] || exit 0; \
|
|
else \
|
|
[ -f [+subdir+]/stage[+id+]-[+module+]/Makefile ] || exit 0; \
|
|
$(MAKE) stage[+id+]-start; \
|
|
fi; \
|
|
cd [+subdir+]/[+module+] && \
|
|
$(MAKE) [+args+] [+ IF prev +] \
|
|
[+poststage1_args+] [+ ENDIF prev +] \
|
|
[+extra_make_flags+] clean
|
|
@endif [+prefix+][+module+]-bootstrap
|
|
|
|
[+ ENDFOR bootstrap_stage +]
|
|
[+ ENDIF bootstrap +]
|
|
[+ ENDDEF +]
|
|
|
|
# --------------------------------------
|
|
# Modules which run on the build machine
|
|
# --------------------------------------
|
|
[+ FOR build_modules +]
|
|
[+ configure prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)"
|
|
host_alias=(get "host" "${build_alias}")
|
|
target_alias=(get "target" "${target_alias}")
|
|
args="$(BUILD_CONFIGARGS)" no-config-site=true +]
|
|
|
|
[+ all prefix="build-" subdir="$(BUILD_SUBDIR)" exports="$(BUILD_EXPORTS)"
|
|
args="$(EXTRA_BUILD_FLAGS)" +]
|
|
[+ ENDFOR build_module +]
|
|
|
|
# --------------------------------------
|
|
# Modules which run on the host machine
|
|
# --------------------------------------
|
|
[+ FOR host_modules +]
|
|
[+ configure prefix="" subdir="$(HOST_SUBDIR)"
|
|
exports="$(HOST_EXPORTS)"
|
|
poststage1_exports="$(POSTSTAGE1_HOST_EXPORTS)"
|
|
host_alias=(get "host" "${host_alias}")
|
|
target_alias=(get "target" "${target_alias}")
|
|
args="$(HOST_CONFIGARGS)" +]
|
|
|
|
[+ all prefix="" subdir="$(HOST_SUBDIR)"
|
|
exports="$(HOST_EXPORTS)"
|
|
poststage1_exports="$(POSTSTAGE1_HOST_EXPORTS)"
|
|
args="$(EXTRA_HOST_FLAGS)"
|
|
poststage1_args="$(POSTSTAGE1_FLAGS_TO_PASS)" +]
|
|
|
|
.PHONY: check-[+module+] maybe-check-[+module+]
|
|
maybe-check-[+module+]:
|
|
@if [+module+]
|
|
maybe-check-[+module+]: check-[+module+]
|
|
[+ IF no_check +]
|
|
check-[+module+]:
|
|
[+ ELIF no_check_cross +]
|
|
# This module is only tested in a native toolchain.
|
|
check-[+module+]:
|
|
@: $(MAKE); $(unstage)
|
|
@if [ '$(host)' = '$(target)' ] ; then \
|
|
r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(HOST_EXPORTS) \
|
|
(cd $(HOST_SUBDIR)/[+module+] && \
|
|
$(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] check); \
|
|
fi
|
|
[+ ELSE check +]
|
|
check-[+module+]:
|
|
@: $(MAKE); $(unstage)
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(HOST_EXPORTS) \
|
|
(cd $(HOST_SUBDIR)/[+module+] && \
|
|
$(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] check)
|
|
[+ ENDIF no_check +]
|
|
@endif [+module+]
|
|
|
|
.PHONY: install-[+module+] maybe-install-[+module+]
|
|
maybe-install-[+module+]:
|
|
@if [+module+]
|
|
maybe-install-[+module+]: install-[+module+]
|
|
[+ IF no_install +]
|
|
install-[+module+]:
|
|
[+ ELSE install +]
|
|
install-[+module+]: installdirs
|
|
@: $(MAKE); $(unstage)
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(HOST_EXPORTS) \
|
|
(cd $(HOST_SUBDIR)/[+module+] && \
|
|
$(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] install)
|
|
[+ ENDIF no_install +]
|
|
@endif [+module+]
|
|
|
|
.PHONY: install-strip-[+module+] maybe-install-strip-[+module+]
|
|
maybe-install-strip-[+module+]:
|
|
@if [+module+]
|
|
maybe-install-strip-[+module+]: install-strip-[+module+]
|
|
[+ IF no_install +]
|
|
install-strip-[+module+]:
|
|
[+ ELSE install +]
|
|
install-strip-[+module+]: installdirs
|
|
@: $(MAKE); $(unstage)
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(HOST_EXPORTS) \
|
|
(cd $(HOST_SUBDIR)/[+module+] && \
|
|
$(MAKE) $(FLAGS_TO_PASS) [+extra_make_flags+] install-strip)
|
|
[+ ENDIF no_install +]
|
|
@endif [+module+]
|
|
|
|
# Other targets (info, dvi, pdf, etc.)
|
|
[+ FOR recursive_targets +]
|
|
.PHONY: maybe-[+make_target+]-[+module+] [+make_target+]-[+module+]
|
|
maybe-[+make_target+]-[+module+]:
|
|
@if [+module+]
|
|
maybe-[+make_target+]-[+module+]: [+make_target+]-[+module+]
|
|
[+ IF (match-value? = "missing" (get "make_target") ) +]
|
|
# [+module+] doesn't support [+make_target+].
|
|
[+make_target+]-[+module+]:
|
|
[+ ELSE +]
|
|
[+make_target+]-[+module+]: [+
|
|
FOR depend +]\
|
|
[+depend+]-[+module+] [+
|
|
ENDFOR depend +]
|
|
@[+ IF bootstrap +][+ ELSE +]: $(MAKE); $(unstage)
|
|
@[+ ENDIF bootstrap +][ -f ./[+module+]/Makefile ] || exit 0; \
|
|
r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(HOST_EXPORTS) \
|
|
for flag in $(EXTRA_HOST_FLAGS) [+extra_make_flags+]; do \
|
|
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
|
|
done; \
|
|
echo "Doing [+make_target+] in [+module+]" ; \
|
|
(cd $(HOST_SUBDIR)/[+module+] && \
|
|
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
|
|
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
|
|
"RANLIB=$${RANLIB}" \
|
|
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
|
|
[+make_target+]) \
|
|
|| exit 1
|
|
[+ ENDIF +]
|
|
@endif [+module+]
|
|
[+ ENDFOR recursive_targets +]
|
|
[+ ENDFOR host_modules +]
|
|
|
|
# ---------------------------------------
|
|
# Modules which run on the target machine
|
|
# ---------------------------------------
|
|
[+ FOR target_modules +]
|
|
|
|
[+ IF raw_cxx +]
|
|
[+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
|
|
check_multilibs=true
|
|
exports="$(RAW_CXX_TARGET_EXPORTS)"
|
|
host_alias=(get "host" "${target_alias}")
|
|
target_alias=(get "target" "${target_alias}")
|
|
args="$(TARGET_CONFIGARGS)" no-config-site=true +]
|
|
|
|
[+ all prefix="target-" subdir="$(TARGET_SUBDIR)"
|
|
exports="$(RAW_CXX_TARGET_EXPORTS)"
|
|
args="$(EXTRA_TARGET_FLAGS) 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)'" +]
|
|
[+ ELSE +]
|
|
[+ configure prefix="target-" subdir="$(TARGET_SUBDIR)"
|
|
check_multilibs=true
|
|
exports="$(NORMAL_TARGET_EXPORTS)"
|
|
host_alias=(get "host" "${target_alias}")
|
|
target_alias=(get "target" "${target_alias}")
|
|
args="$(TARGET_CONFIGARGS)" no-config-site=true +]
|
|
|
|
[+ all prefix="target-" subdir="$(TARGET_SUBDIR)"
|
|
exports="$(NORMAL_TARGET_EXPORTS)"
|
|
args="$(EXTRA_TARGET_FLAGS)" +]
|
|
[+ ENDIF +]
|
|
|
|
.PHONY: check-target-[+module+] maybe-check-target-[+module+]
|
|
maybe-check-target-[+module+]:
|
|
@if target-[+module+]
|
|
maybe-check-target-[+module+]: check-target-[+module+]
|
|
[+ IF no_check +]
|
|
# Dummy target for uncheckable module.
|
|
check-target-[+module+]:
|
|
[+ ELSE check +]
|
|
check-target-[+module+]:
|
|
@: $(MAKE); $(unstage)
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \[+
|
|
IF raw_cxx +]
|
|
$(RAW_CXX_TARGET_EXPORTS) \[+
|
|
ELSE normal_cxx +]
|
|
$(NORMAL_TARGET_EXPORTS) \[+
|
|
ENDIF raw_cxx +]
|
|
(cd $(TARGET_SUBDIR)/[+module+] && \
|
|
$(MAKE) $(TARGET_FLAGS_TO_PASS) [+
|
|
IF raw_cxx
|
|
+] 'CXX=$$(RAW_CXX_FOR_TARGET)' 'CXX_FOR_TARGET=$$(RAW_CXX_FOR_TARGET)' [+
|
|
ENDIF raw_cxx
|
|
+] [+extra_make_flags+] check)
|
|
[+ ENDIF no_check +]
|
|
@endif target-[+module+]
|
|
|
|
.PHONY: install-target-[+module+] maybe-install-target-[+module+]
|
|
maybe-install-target-[+module+]:
|
|
@if target-[+module+]
|
|
maybe-install-target-[+module+]: install-target-[+module+]
|
|
[+ IF no_install +]
|
|
# Dummy target for uninstallable.
|
|
install-target-[+module+]:
|
|
[+ ELSE install +]
|
|
install-target-[+module+]: installdirs
|
|
@: $(MAKE); $(unstage)
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \[+
|
|
IF raw_cxx +]
|
|
$(RAW_CXX_TARGET_EXPORTS) \[+
|
|
ELSE normal_cxx +]
|
|
$(NORMAL_TARGET_EXPORTS) \[+
|
|
ENDIF raw_cxx +]
|
|
(cd $(TARGET_SUBDIR)/[+module+] && \
|
|
$(MAKE) $(TARGET_FLAGS_TO_PASS) [+extra_make_flags+] install)
|
|
[+ ENDIF no_install +]
|
|
@endif target-[+module+]
|
|
|
|
.PHONY: install-strip-target-[+module+] maybe-install-strip-target-[+module+]
|
|
maybe-install-strip-target-[+module+]:
|
|
@if target-[+module+]
|
|
maybe-install-strip-target-[+module+]: install-strip-target-[+module+]
|
|
[+ IF no_install +]
|
|
# Dummy target for uninstallable.
|
|
install-strip-target-[+module+]:
|
|
[+ ELSE install +]
|
|
install-strip-target-[+module+]: installdirs
|
|
@: $(MAKE); $(unstage)
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \[+
|
|
IF raw_cxx +]
|
|
$(RAW_CXX_TARGET_EXPORTS) \[+
|
|
ELSE normal_cxx +]
|
|
$(NORMAL_TARGET_EXPORTS) \[+
|
|
ENDIF raw_cxx +]
|
|
(cd $(TARGET_SUBDIR)/[+module+] && \
|
|
$(MAKE) $(TARGET_FLAGS_TO_PASS) [+extra_make_flags+] install-strip)
|
|
[+ ENDIF no_install +]
|
|
@endif target-[+module+]
|
|
|
|
# Other targets (info, dvi, pdf, etc.)
|
|
[+ FOR recursive_targets +]
|
|
.PHONY: maybe-[+make_target+]-target-[+module+] [+make_target+]-target-[+module+]
|
|
maybe-[+make_target+]-target-[+module+]:
|
|
@if target-[+module+]
|
|
maybe-[+make_target+]-target-[+module+]: [+make_target+]-target-[+module+]
|
|
[+ IF (match-value? = "missing" (get "make_target") ) +]
|
|
# [+module+] doesn't support [+make_target+].
|
|
[+make_target+]-target-[+module+]:
|
|
[+ ELSE +]
|
|
[+make_target+]-target-[+module+]: [+
|
|
FOR depend +]\
|
|
[+depend+]-target-[+module+] [+
|
|
ENDFOR depend +]
|
|
@: $(MAKE); $(unstage)
|
|
@[ -f $(TARGET_SUBDIR)/[+module+]/Makefile ] || exit 0 ; \
|
|
r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \[+
|
|
IF raw_cxx +]
|
|
$(RAW_CXX_TARGET_EXPORTS) \[+
|
|
ELSE normal_cxx +]
|
|
$(NORMAL_TARGET_EXPORTS) \[+
|
|
ENDIF raw_cxx +]
|
|
echo "Doing [+make_target+] in $(TARGET_SUBDIR)/[+module+]" ; \
|
|
for flag in $(EXTRA_TARGET_FLAGS); do \
|
|
eval `echo "$$flag" | sed -e "s|^\([^=]*\)=\(.*\)|\1='\2'; export \1|"`; \
|
|
done; \
|
|
(cd $(TARGET_SUBDIR)/[+module+] && \
|
|
$(MAKE) $(BASE_FLAGS_TO_PASS) "AR=$${AR}" "AS=$${AS}" \
|
|
"CC=$${CC}" "CXX=$${CXX}" "LD=$${LD}" "NM=$${NM}" \
|
|
"RANLIB=$${RANLIB}" \
|
|
"DLLTOOL=$${DLLTOOL}" "WINDRES=$${WINDRES}" "WINDMC=$${WINDMC}" \
|
|
[+extra_make_flags+] [+make_target+]) \
|
|
|| exit 1
|
|
[+ ENDIF +]
|
|
@endif target-[+module+]
|
|
[+ ENDFOR recursive_targets +]
|
|
[+ ENDFOR target_modules +]
|
|
|
|
@if target-libmudflap
|
|
.PHONY: check-target-libmudflap-c++
|
|
check-target-libmudflap-c++:
|
|
$(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) c++frags.exp" check-target-libmudflap
|
|
|
|
@endif target-libmudflap
|
|
|
|
@if target-libgomp
|
|
.PHONY: check-target-libgomp-c++
|
|
check-target-libgomp-c++:
|
|
$(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) c++.exp" check-target-libgomp
|
|
|
|
@endif target-libgomp
|
|
|
|
@if target-libitm
|
|
.PHONY: check-target-libitm-c++
|
|
check-target-libitm-c++:
|
|
$(MAKE) RUNTESTFLAGS="$(RUNTESTFLAGS) c++.exp" check-target-libitm
|
|
|
|
@endif target-libitm
|
|
|
|
# ----------
|
|
# GCC module
|
|
# ----------
|
|
|
|
@if gcc-no-bootstrap
|
|
.PHONY: cross
|
|
cross: all-build all-gas all-ld
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(HOST_EXPORTS) \
|
|
echo "Building the C and C++ compiler"; \
|
|
cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) LANGUAGES="c c++"
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}` ; export s; \
|
|
echo "Building runtime libraries"; \
|
|
$(MAKE) $(RECURSE_FLAGS_TO_PASS) LANGUAGES="c c++" all
|
|
@endif gcc-no-bootstrap
|
|
|
|
@if gcc
|
|
[+ FOR languages +]
|
|
.PHONY: check-gcc-[+language+] check-[+language+]
|
|
check-gcc-[+language+]:
|
|
r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(HOST_EXPORTS) \
|
|
(cd gcc && $(MAKE) $(GCC_FLAGS_TO_PASS) [+gcc-check-target+]);
|
|
check-[+language+]: check-gcc-[+language+][+ FOR lib-check-target +] [+ lib-check-target +][+ ENDFOR lib-check-target +]
|
|
[+ ENDFOR languages +]
|
|
|
|
# The gcc part of install-no-fixedincludes, which relies on an intimate
|
|
# knowledge of how a number of gcc internal targets (inter)operate. Delegate.
|
|
.PHONY: gcc-install-no-fixedincludes
|
|
gcc-install-no-fixedincludes:
|
|
@if [ -f ./gcc/Makefile ]; then \
|
|
r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(HOST_EXPORTS) \
|
|
(cd ./gcc \
|
|
&& $(MAKE) $(GCC_FLAGS_TO_PASS) install-no-fixedincludes); \
|
|
else true; fi
|
|
@endif gcc
|
|
|
|
# ---------------------
|
|
# GCC bootstrap support
|
|
# ---------------------
|
|
|
|
# We track the current stage (the one in 'gcc') in the stage_current file.
|
|
# stage_last instead tracks the stage that was built last. These targets
|
|
# are dummy when toplevel bootstrap is not active.
|
|
|
|
# While making host and target tools, symlinks to the final stage must be
|
|
# there, so $(unstage) should be run at various points. To avoid excessive
|
|
# recursive invocations of make, we "inline" them using a variable. These
|
|
# must be referenced as ": $(MAKE) ; $(unstage)" rather than "$(unstage)"
|
|
# to avoid warnings from the GNU Make job server.
|
|
|
|
unstage = :
|
|
stage = :
|
|
current_stage = ""
|
|
|
|
@if gcc-bootstrap
|
|
unstage = if [ -f stage_last ]; then [ -f stage_current ] || $(MAKE) `cat stage_last`-start || exit 1; else :; fi
|
|
stage = if [ -f stage_current ]; then $(MAKE) `cat stage_current`-end || exit 1; else :; fi
|
|
current_stage = "`cat stage_current 2> /dev/null`"
|
|
@endif gcc-bootstrap
|
|
|
|
.PHONY: unstage stage
|
|
unstage:
|
|
@: $(MAKE); $(unstage)
|
|
stage:
|
|
@: $(MAKE); $(stage)
|
|
|
|
# Disable commands for lean bootstrap.
|
|
LEAN = false
|
|
|
|
# We name the build directories for the various stages "stage1-gcc",
|
|
# "stage2-gcc","stage3-gcc", etc.
|
|
|
|
# Since the 'compare' process will fail (on debugging information) if any
|
|
# directory names are different, we need to link the gcc directory for
|
|
# the previous stage to a constant name ('prev-gcc'), and to make the name of
|
|
# the build directories constant as well. For the latter, we use naked names
|
|
# like 'gcc', because the scripts in that directory assume it. We use
|
|
# mv on platforms where symlinks to directories do not work or are not
|
|
# reliable.
|
|
|
|
# 'touch' doesn't work right on some platforms.
|
|
STAMP = echo timestamp >
|
|
|
|
# We only want to compare .o files, so set this!
|
|
objext = .o
|
|
|
|
[+ FOR bootstrap-stage +]
|
|
.PHONY: stage[+id+]-start stage[+id+]-end
|
|
|
|
stage[+id+]-start::
|
|
@: $(MAKE); $(stage); \
|
|
echo stage[+id+] > stage_current ; \
|
|
echo stage[+id+] > stage_last; \
|
|
$(SHELL) $(srcdir)/mkinstalldirs $(HOST_SUBDIR)[+
|
|
FOR host_modules +][+ IF bootstrap +]
|
|
@if [+ module +]
|
|
@cd $(HOST_SUBDIR); [ -d stage[+id+]-[+module+] ] || \
|
|
mkdir stage[+id+]-[+module+]; \
|
|
mv stage[+id+]-[+module+] [+module+] [+ IF prev +] ; \
|
|
mv stage[+prev+]-[+module+] prev-[+module+] || test -f stage[+prev+]-lean [+ ENDIF prev +]
|
|
@endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]
|
|
@[ -d stage[+id+]-$(TARGET_SUBDIR) ] || \
|
|
mkdir stage[+id+]-$(TARGET_SUBDIR); \
|
|
mv stage[+id+]-$(TARGET_SUBDIR) $(TARGET_SUBDIR) [+ IF prev +] ; \
|
|
mv stage[+prev+]-$(TARGET_SUBDIR) prev-$(TARGET_SUBDIR) || test -f stage[+prev+]-lean [+ ENDIF prev +]
|
|
|
|
stage[+id+]-end:: [+ FOR host_modules +][+ IF bootstrap +]
|
|
@if [+ module +]
|
|
@if test -d $(HOST_SUBDIR)/[+module+] ; then \
|
|
cd $(HOST_SUBDIR); mv [+module+] stage[+id+]-[+module+] [+ IF prev +]; \
|
|
mv prev-[+module+] stage[+prev+]-[+module+] ; : [+ ENDIF prev +] ; \
|
|
fi
|
|
@endif [+ module +][+ ENDIF bootstrap +][+ ENDFOR host_modules +]
|
|
@if test -d $(TARGET_SUBDIR) ; then \
|
|
mv $(TARGET_SUBDIR) stage[+id+]-$(TARGET_SUBDIR) [+ IF prev +] ; \
|
|
mv prev-$(TARGET_SUBDIR) stage[+prev+]-$(TARGET_SUBDIR) ; : [+ ENDIF prev +] ; \
|
|
fi
|
|
rm -f stage_current
|
|
|
|
# Bubble a bug fix through all the stages up to stage [+id+]. They are
|
|
# remade, but not reconfigured. The next stage (if any) will not be
|
|
# reconfigured either.
|
|
.PHONY: stage[+id+]-bubble
|
|
stage[+id+]-bubble:: [+ IF prev +]stage[+prev+]-bubble[+ ENDIF +]
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
if test -f stage[+id+]-lean [+
|
|
IF prev +]|| test -f stage[+prev+]-lean [+ ENDIF prev +] ; then \
|
|
echo Skipping rebuild of stage[+id+] ; \
|
|
else \
|
|
$(MAKE) stage[+id+]-start; \[+IF lean +]
|
|
if $(LEAN); then \
|
|
rm -rf stage[+lean+]-* ; \
|
|
$(STAMP) stage[+lean+]-lean ; \
|
|
fi; \[+ ENDIF lean +]
|
|
$(MAKE) $(RECURSE_FLAGS_TO_PASS) all-stage[+id+]; \
|
|
fi[+ IF compare-target +]
|
|
$(MAKE) $(RECURSE_FLAGS_TO_PASS) [+compare-target+][+ ENDIF compare-target +]
|
|
|
|
.PHONY: all-stage[+id+] clean-stage[+id+]
|
|
do-clean: clean-stage[+id+]
|
|
|
|
# FIXME: Will not need to be conditional when toplevel bootstrap is the
|
|
# only possibility, but now it conflicts with no-bootstrap rules
|
|
@if gcc-bootstrap
|
|
[+ IF compare-target +]
|
|
[+compare-target+]:
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
if test -f stage[+prev+]-lean; then \
|
|
echo Cannot compare object files as stage [+prev+] was deleted. ; \
|
|
exit 0 ; \
|
|
fi; \
|
|
: $(MAKE); $(stage); \
|
|
rm -f .bad_compare ; \
|
|
echo Comparing stages [+prev+] and [+id+] ; \
|
|
sed=`echo stage[+id+] | sed 's,^stage,,;s,.,.,g'`; \
|
|
files=`find stage[+id+]-* -name "*$(objext)" -print | \
|
|
sed -n s,^stage$$sed-,,p` ; \
|
|
for file in $${files} ; do \
|
|
f1=$$r/stage[+prev+]-$$file; f2=$$r/stage[+id+]-$$file; \
|
|
if test ! -f $$f1; then continue; fi; \
|
|
$(do-[+compare-target+]) > /dev/null 2>&1; \
|
|
if test $$? -eq 1; then \
|
|
case $$file in \
|
|
@compare_exclusions@) \
|
|
echo warning: $$file differs ;; \
|
|
*) \
|
|
echo $$file differs >> .bad_compare ;; \
|
|
esac ; \
|
|
fi ; \
|
|
done ; \
|
|
if [ -f .bad_compare ]; then \
|
|
echo "Bootstrap comparison failure!"; \
|
|
cat .bad_compare; \
|
|
exit 1; \
|
|
else \
|
|
echo Comparison successful.; \
|
|
fi ; \
|
|
$(STAMP) [+compare-target+][+ IF prev +]
|
|
if $(LEAN); then \
|
|
rm -rf stage[+prev+]-*; \
|
|
$(STAMP) stage[+prev+]-lean; \
|
|
fi[+ ENDIF prev +]
|
|
[+ ENDIF compare-target +]
|
|
|
|
[+ IF bootstrap-target +]
|
|
.PHONY: [+bootstrap-target+] [+bootstrap-target+]-lean
|
|
[+bootstrap-target+]:
|
|
echo stage[+id+] > stage_final
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(MAKE) $(RECURSE_FLAGS_TO_PASS) stage[+id+]-bubble
|
|
@: $(MAKE); $(unstage)
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
TFLAGS="$(STAGE[+id+]_TFLAGS)"; \
|
|
$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target
|
|
|
|
[+bootstrap-target+]-lean:
|
|
echo stage[+id+] > stage_final
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(MAKE) $(RECURSE_FLAGS_TO_PASS) LEAN=: stage[+id+]-bubble
|
|
@: $(MAKE); $(unstage)
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
TFLAGS="$(STAGE[+id+]_TFLAGS)"; \
|
|
$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target
|
|
[+ ENDIF bootstrap-target +]
|
|
|
|
# Rules to wipe a stage and all the following ones, also used for cleanstrap
|
|
[+ IF prev +]distclean-stage[+prev+]:: distclean-stage[+id+] [+ ENDIF prev +]
|
|
.PHONY: distclean-stage[+id+]
|
|
distclean-stage[+id+]::
|
|
@: $(MAKE); $(stage)
|
|
@test "`cat stage_last`" != stage[+id+] || rm -f stage_last
|
|
rm -rf stage[+id+]-* [+
|
|
IF compare-target +][+compare-target+] [+ ENDIF compare-target +]
|
|
|
|
[+ IF cleanstrap-target +]
|
|
.PHONY: [+cleanstrap-target+]
|
|
[+cleanstrap-target+]: do-distclean local-clean
|
|
echo stage[+id+] > stage_final
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(MAKE) $(RECURSE_FLAGS_TO_PASS) stage[+id+]-bubble
|
|
@: $(MAKE); $(unstage)
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
TFLAGS="$(STAGE[+id+]_TFLAGS)"; \
|
|
$(MAKE) $(TARGET_FLAGS_TO_PASS) all-host all-target
|
|
[+ ENDIF cleanstrap-target +]
|
|
@endif gcc-bootstrap
|
|
|
|
[+ ENDFOR bootstrap-stage +]
|
|
|
|
stageprofile-end::
|
|
$(MAKE) distclean-stagefeedback
|
|
|
|
stagefeedback-start::
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
for i in prev-*; do \
|
|
j=`echo $$i | sed s/^prev-//` ; \
|
|
cd $$r/$$i && \
|
|
{ find . -type d | sort | sed 's,.*,$(SHELL) '"$$s"'/mkinstalldirs "../'$$j'/&",' | $(SHELL) ; } && \
|
|
{ find . -name '*.*da' | sed 's,.*,$(LN) -f "&" "../'$$j'/&",' | $(SHELL) ; } ; \
|
|
done
|
|
|
|
@if gcc-bootstrap
|
|
do-distclean: distclean-stage1
|
|
|
|
# Provide a GCC build when we're building target libraries. This does
|
|
# not work as a dependency, just as the minimum necessary to avoid errors.
|
|
stage_last:
|
|
@r=`${PWD_COMMAND}`; export r; \
|
|
s=`cd $(srcdir); ${PWD_COMMAND}`; export s; \
|
|
$(MAKE) $(RECURSE_FLAGS_TO_PASS) stage1-bubble
|
|
|
|
# Same as unstage, but not phony and defaulting to stage1-start. We place
|
|
# it in the dependency so that for example `make -j3 all-gcc' works.
|
|
stage_current:
|
|
@if test -f stage_last; then $(unstage); else $(MAKE) stage1-start; fi
|
|
|
|
.PHONY: restrap
|
|
restrap::
|
|
@: $(MAKE); $(stage)
|
|
rm -rf stage1-$(TARGET_SUBDIR)[+ FOR bootstrap-stage +][+ IF prev
|
|
+] stage[+id+]-*[+ ENDIF prev +][+ ENDFOR bootstrap-stage +]
|
|
restrap:: all
|
|
@endif gcc-bootstrap
|
|
|
|
# --------------------------------------
|
|
# Dependencies between different modules
|
|
# --------------------------------------
|
|
|
|
# Generic dependencies for target modules on host stuff, especially gcc
|
|
@if gcc-bootstrap[+ FOR target_modules +][+ IF bootstrap
|
|
+][+ FOR bootstrap_stage +]
|
|
configure-stage[+id+]-target-[+module+]: maybe-all-stage[+id+]-gcc[+
|
|
ENDFOR +][+ ELSE bootstrap +]
|
|
configure-target-[+module+]: stage_last[+
|
|
ENDIF bootstrap +][+ ENDFOR target_modules +]
|
|
@endif gcc-bootstrap
|
|
|
|
@if gcc-no-bootstrap[+ FOR target_modules +]
|
|
configure-target-[+module+]: maybe-all-gcc[+
|
|
ENDFOR target_modules +]
|
|
@endif gcc-no-bootstrap
|
|
|
|
|
|
# There are two types of dependencies here: 'hard' dependencies, where one
|
|
# module simply won't build without the other; and 'soft' dependencies, where
|
|
# if the depended-on module is missing, the depending module will do without
|
|
# or find a substitute somewhere (perhaps installed). Soft dependencies
|
|
# are made here to depend on a 'maybe-' target. If you're not sure,
|
|
# it's safer to use a soft dependency.
|
|
|
|
[+ ;; These Scheme functions build the bulk of the dependencies.
|
|
;; dep-target builds a string like "maybe-all-MODULE_KIND-gcc",
|
|
;; where "maybe-" is only included if HARD is not true, and all-gcc
|
|
;; is taken from VAR-NAME.
|
|
(define dep-target (lambda (module-kind var-name hard)
|
|
(string-append
|
|
(if hard "" "maybe-")
|
|
(dep-subtarget var-name)
|
|
module-kind
|
|
(dep-module var-name)
|
|
)))
|
|
|
|
;; make-dep builds a dependency from the MODULE and ON AutoGen vars.
|
|
(define make-dep (lambda (module-kind on-kind)
|
|
(string-append
|
|
(dep-target module-kind "module" #t) ": "
|
|
(dep-target on-kind "on" (exist? "hard")))))
|
|
|
|
;; dep-subtarget extracts everything up to the first dash in the given
|
|
;; AutoGen variable, for example it extracts "all-" out of "all-gcc".
|
|
(define dep-subtarget (lambda (var-name)
|
|
(substring (get var-name) 0 (+ 1 (string-index (get var-name) #\-)))))
|
|
|
|
;; dep-module extracts everything up to the first dash in the given
|
|
;; AutoGen variable, for example it extracts "gcc" out of "all-gcc".
|
|
(define dep-module (lambda (var-name)
|
|
(substring (get var-name) (+ 1 (string-index (get var-name) #\-)))))
|
|
|
|
;; dep-stage builds a string for the prefix of a bootstrap stage.
|
|
(define dep-stage (lambda ()
|
|
(string-append
|
|
"stage"
|
|
(get "id")
|
|
"-")))
|
|
|
|
;; dep-maybe is the same as the AutoGen expression "- hard 'maybe-'"
|
|
;; but is written in Scheme.
|
|
(define dep-maybe (lambda ()
|
|
(if (exist? "hard") "" "maybe-")))
|
|
|
|
;; dep-kind returns "normal" if the dependency is on an "install" target,
|
|
;; or if either module is not bootstrapped. It returns "bootstrap" for
|
|
;; configure or build dependencies between bootstrapped modules; it returns
|
|
;; "prebootstrap" for configure or build dependencies of bootstrapped
|
|
;; modules on a build module (e.g. all-gcc on all-build-bison). All this
|
|
;; is only necessary for host modules.
|
|
(define dep-kind (lambda ()
|
|
(if (and (hash-ref boot-modules (dep-module "module"))
|
|
(=* (dep-module "on") "build-"))
|
|
"prebootstrap"
|
|
|
|
(if (or (= (dep-subtarget "on") "install-")
|
|
(not (hash-ref boot-modules (dep-module "module")))
|
|
(not (hash-ref boot-modules (dep-module "on"))))
|
|
"normal"
|
|
"bootstrap"))))
|
|
|
|
;; We now build the hash table that is used by dep-kind.
|
|
(define boot-modules (make-hash-table 113))
|
|
+]
|
|
|
|
[+ FOR host_modules +][+
|
|
(if (exist? "bootstrap")
|
|
(hash-create-handle! boot-modules (get "module") #t))
|
|
"" +][+ ENDFOR host_modules +]
|
|
[+ FOR target_modules +][+
|
|
(if (exist? "bootstrap")
|
|
(hash-create-handle! boot-modules (string-append "target-" (get "module")) #t))
|
|
"" +][+ ENDFOR target_modules +]
|
|
|
|
# With all the machinery above in place, it is pretty easy to generate
|
|
# dependencies. Host dependencies are a bit more complex because we have
|
|
# to check for bootstrap/prebootstrap dependencies. To resolve
|
|
# prebootstrap dependencies, prebootstrap modules are gathered in
|
|
# a hash table.
|
|
[+ FOR dependencies +][+ (make-dep "" "") +]
|
|
[+ CASE (dep-kind) +]
|
|
[+ == "prebootstrap"
|
|
+][+ FOR bootstrap_stage +]
|
|
[+ (make-dep (dep-stage) "") +][+
|
|
ENDFOR bootstrap_stage +]
|
|
[+ == "bootstrap"
|
|
+][+ FOR bootstrap_stage +]
|
|
[+ (make-dep (dep-stage) (dep-stage)) +][+
|
|
ENDFOR bootstrap_stage +]
|
|
[+ ESAC +][+
|
|
ENDFOR dependencies +]
|
|
|
|
# Dependencies for target modules on other target modules are
|
|
# described by lang_env_dependencies; the defaults apply to anything
|
|
# not mentioned there.
|
|
[+
|
|
;; Predicate for whether LANG was specified in lang_env_dependencies.
|
|
(define lang-dep (lambda (lang)
|
|
(hash-ref lang-env-deps (string-append (get "module") "-" lang))))
|
|
|
|
;; Build the hash table we will need.
|
|
(define lang-env-deps (make-hash-table 7))
|
|
+][+ FOR lang_env_dependencies +][+
|
|
(if (exist? "cxx")
|
|
(hash-create-handle! lang-env-deps
|
|
(string-append (get "module") "-" "cxx") #t))
|
|
|
|
(if (exist? "no_c")
|
|
(hash-create-handle! lang-env-deps
|
|
(string-append (get "module") "-" "no_c") #t))
|
|
|
|
(if (exist? "no_gcc")
|
|
(hash-create-handle! lang-env-deps
|
|
(string-append (get "module") "-" "no_gcc") #t))
|
|
"" +][+ ENDFOR lang_env_dependencies +]
|
|
|
|
@if gcc-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_gcc"))
|
|
+][+ IF bootstrap +][+ FOR bootstrap_stage +]
|
|
configure-stage[+id+]-target-[+module+]: maybe-all-stage[+id+]-target-libgcc[+
|
|
ENDFOR +][+ ENDIF bootstrap +][+ ENDIF +][+ ENDFOR target_modules +]
|
|
@endif gcc-bootstrap
|
|
|
|
@if gcc-no-bootstrap[+ FOR target_modules +][+ IF (not (lang-dep "no_gcc")) +]
|
|
configure-target-[+module+]: maybe-all-target-libgcc[+
|
|
ENDIF +][+ ENDFOR target_modules +]
|
|
@endif gcc-no-bootstrap
|
|
|
|
[+ FOR target_modules +][+ IF (not (lang-dep "no_c")) +]
|
|
configure-target-[+module+]: maybe-all-target-newlib maybe-all-target-libgloss[+
|
|
ENDIF +][+ IF (lang-dep "cxx") +]
|
|
configure-target-[+module+]: maybe-all-target-libstdc++-v3[+
|
|
ENDIF +]
|
|
[+ ENDFOR target_modules +]
|
|
|
|
CONFIGURE_GDB_TK = @CONFIGURE_GDB_TK@
|
|
GDB_TK = @GDB_TK@
|
|
INSTALL_GDB_TK = @INSTALL_GDB_TK@
|
|
configure-gdb: $(CONFIGURE_GDB_TK)
|
|
all-gdb: $(gdbnlmrequirements) $(GDB_TK)
|
|
install-gdb: $(INSTALL_GDB_TK)
|
|
|
|
# Serialization dependencies. Host configures don't work well in parallel to
|
|
# each other, due to contention over config.cache. Target configures and
|
|
# build configures are similar.
|
|
@serialization_dependencies@
|
|
|
|
# --------------------------------
|
|
# Regenerating top level configury
|
|
# --------------------------------
|
|
|
|
# Rebuilding Makefile.in, using autogen.
|
|
AUTOGEN = autogen
|
|
$(srcdir)/Makefile.in: @MAINT@ $(srcdir)/Makefile.tpl $(srcdir)/Makefile.def
|
|
cd $(srcdir) && $(AUTOGEN) Makefile.def
|
|
|
|
# Rebuilding Makefile.
|
|
Makefile: $(srcdir)/Makefile.in config.status
|
|
CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
|
|
|
config.status: configure
|
|
CONFIG_SHELL="$(SHELL)" $(SHELL) ./config.status --recheck
|
|
|
|
# Rebuilding configure.
|
|
AUTOCONF = autoconf
|
|
$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(srcdir)/config/acx.m4 \
|
|
$(srcdir)/config/override.m4 $(srcdir)/config/proginstall.m4
|
|
cd $(srcdir) && $(AUTOCONF)
|
|
|
|
# ------------------------------
|
|
# Special directives to GNU Make
|
|
# ------------------------------
|
|
|
|
# Don't pass command-line variables to submakes.
|
|
.NOEXPORT:
|
|
MAKEOVERRIDES=
|
|
|
|
# end of Makefile.in
|