← Back to team overview

kicad-developers team mailing list archive

Parallel build errors on Windows using mingw32-make

 

I used to think these problems were solely down to mingw32-make, however
from the other cmake problem, perhaps some of them are not.

I've not seen this problem before, this is the first time I've come across
it, but it is repeatable. -j6 produces the attached output, and no a single
process results in a correct specctra_lexer.h file being generated.

The fix at the moment is to build without parallel processes, but that's
SLOW! Still, it only needs to be done to generate specctra_lexer.h. If that
doesn't need regenerating then parallel process builds should be fine.

If there's any further information I can provide to help, just let me know.
To cause the problem I can simply delete pcbnew/specctra_lexer.h and start
start a build with -j6.

Best Regards, Brian.
/* Do not modify this file it was automatically generated by the
 * TokenList2DsnLexer CMake script.
 */

#ifndef SPECCTRA_LEXER_H_
#define SPECCTRA_LEXER_H_

#include <dsnlexer.h>

/**
 * C++ does not put enum _values_ in separate namespaces unless the enum itself
 * is in a separate namespace.  All the token enums must be in separate namespaces
 * otherwise the C++ compiler will eventually complain if it sees more than one
 * DSNLEXER in the same compilation unit, say by mutliple header file inclusion.
 * Plus this also enables re-use of the same enum name T.  A typedef can always be used
 * to clarify which enum T is in play should that ever be a problem.  This is
 * unlikely since Parse() functions will usually only be exposed to one header
 * file like this one.  But if there is a problem, then use:
 *   typedef DSN::T T;
 * within that problem area.
 */
namespace DSN
{
    /// enum T contains all this lexer's tokens.
    enum T
    {
        // these first few are negative special ones for syntax, and are
        // inherited from DSNLEXER.
        T_NONE          = DSN_NONE,
        T_COMMENT       = DSN_COMMENT,
        T_STRING_QUOTE  = DSN_STRING_QUOTE,
        T_QUOTE_DEF     = DSN_QUOTE_DEF,
        T_DASH          = DSN_DASH,
        T_SYMBOL        = DSN_SYMBOL,
        T_NUMBER        = DSN_NUMBER,
        T_RIGHT         = DSN_RIGHT,        // right bracket: ')'
        T_LEFT          = DSN_LEFT,         // left bracket:  '('
        T_STRING        = DSN_STRING,       // a quoted string, stripped of the quotes
        T_EOF           = DSN_EOF,          // special case for end of file

        T_pair,
        T_absolute = 0        T_parallel,
,
        T_add_group        T_parallel_noise,
,
        T_add_pins        T_parallel_segment,
,
        T_added        T_parser,
,
        T_allow_antenna        T_part_library,
,
        T_allow_redundant_wiring        T_path,
,
        T_amp,
        T_pcb        T_ancestor,
,
        T_permit_orient        T_antipad,
,
        T_aperture_type        T_permit_side,
        T_array,
,
        T_physical        T_attach,
,
        T_attr        T_physical_part_mapping,
,
        T_average_pair_length        T_piggyback,
,
        T_back        T_pin,
,
        T_pin_allow        T_base_design,
,
        T_pin_cap_via,
        T_bbv_ctr2ctr        T_pin_via_cap,
,
        T_bend_keepout        T_pin_width_taper,
,
        T_pins        T_bond,
,
        T_pintype,
        T_both        T_place,
,
        T_place_boundary        T_bottom,
,
        T_place_control,
     T_bottom_layer_sel        T_place_keepout,
,
        T_boundary        T_place_rule,
,
        T_brickpat        T_placement,
,
        T_plan        T_bundle,
        T_plane,
,
        T_bus        T_pn,
,
        T_point        T_bypass,
,
        T_polygon,
        T_capacitance_resolution        T_polyline_path,
,
        T_capacitor        T_position,
,
        T_positive_diagonal        T_case_sensitive,
        T_power,
,
        T_cct1        T_power_dissipation,
,
        T_power_fanout        T_cct1a,
,
        T_prefix        T_center_center,
,
        T_primary,
        T_checking_trim_by_pin        T_priority,
,
        T_circ        T_property,
,
        T_protect        T_circle,
,
        T_qarc        T_circuit,
,
        T_quarter        T_class,
,
        T_radius        T_class_class,
,
        T_ratio        T_classes,
,
        T_ratio_tolerance        T_clear,
,
        T_rect        T_clearance,
,
        T_reduced        T_cluster,
,
        T_region        T_cm,
,
        T_color        T_region_class,
,
        T_colors,
        T_region_class_class        T_comment,
,
        T_comp        T_region_net,
,
        T_comp_edge_center        T_relative_delay,
        T_comp_order,
,
        T_relative_group_delay        T_component,
,
        T_relative_group_length        T_composite,
,
        T_conductance_resolution        T_relative_length,
,
        T_conductor,
        T_reorder        T_conflict,
,
        T_reroute_order_viols        T_connect,
,
        T_resistance_resolution        T_constant,
,
        T_resistor        T_contact,
,
        T_resolution        T_control,
,
        T_restricted_layer_length_factor        T_corner,
,
        T_room        T_corners,
,
        T_rotate        T_cost,
,
        T_rotate_first        T_created_time,
,
        T_round        T_cross,
,
        T_roundoff_rotation        T_crosstalk_model,
,
        T_current_resolution        T_route,
,
        T_delete_pins        T_route_to_fanout_only,
,
        T_deleted        T_routes,
,
        T_deleted_keepout        T_routes_include,
,
        T_delta        T_rule,
        T_diagonal,
,
        T_same_net_checking        T_direction,
,
        T_sample_window        T_directory,
,
        T_discrete        T_saturation_length,
        T_effective_via_length,
,
        T_sec        T_elongate_keepout,
,
        T_exclude        T_secondary,
,
        T_expose,
        T_self        T_extra_image_directory,
,
        T_sequence_number        T_family,
,
        T_session        T_family_family,
,
        T_set_color        T_family_family_spacing,
,
        T_set_pattern        T_fanout,
,
        T_shape        T_farad,
,
        T_shield        T_file,
,
        T_shield_gap        T_fit,
,
        T_shield_loop        T_fix,
,
        T_shield_tie_down_interval        T_flip_style,
,
        T_shield_width        T_floor_plan,
,
        T_side        T_footprint,
,
        T_signal,
        T_forbidden        T_site,
,
        T_force_to_terminal_point        T_small,
,
        T_forgotten        T_smd,
,
        T_free        T_snap,
,
        T_fromto        T_snap_angle,
,
        T_front        T_soft,
,
        T_front_only        T_source,
,
        T_gap        T_space_in_quoted_tokens,
,
        T_gate        T_spacing,
,
        T_gates        T_spare,
,
        T_generated_by_freeroute        T_spiral_via,
,
        T_global        T_square,
,
        T_grid        T_stack_via,
,
        T_group        T_stack_via_depth,
,
        T_group_set        T_standard,
,
        T_guide,
        T_starburst        T_hard,
,
        T_status        T_height,
,
        T_high        T_structure,
        T_history,
,
        T_structure_out        T_horizontal,
,
        T_subgate        T_host_cad,
,
        T_subgates        T_host_version,
,
        T_substituted        T_image,
,
        T_such        T_image_conductor,
,
        T_image_image        T_suffix,
,
        T_image_image_spacing        T_super_placement,
,
        T_image_outline_clearance,
        T_supply        T_image_set,
,
        T_supply_pin        T_image_type,
,
        T_swapping        T_inch,
        T_switch_window,
,
        T_include        T_system,
,
        T_include_pins_in_crosstalk        T_tandem_noise,
,
        T_inductance_resolution        T_tandem_segment,
,
        T_insert        T_tandem_shield_overhang,
,
        T_term_only        T_instcnfg,
,
        T_terminal        T_inter_layer_clearance,
,
        T_jumper        T_terminator,
,
        T_junction_type,
        T_test        T_keepout,
,
        T_test_points        T_kg,
,
        T_kohm        T_testpoint,
,
        T_large,
        T_threshold        T_large_large,
,
        T_time_length_factor        T_layer,
,
        T_layer_depth        T_time_resolution,
,
        T_layer_noise_weight,
        T_tjunction        T_layer_pair,
,
        T_tolerance        T_layer_rule,
,
        T_length        T_top,
,
        T_length_amplitude,
        T_topology        T_length_factor,
,
        T_total        T_length_gap,
,
        T_track_id        T_library,
,
        T_turret        T_library_out,
,
        T_type        T_limit,
,
        T_um        T_limit_bends,
,
        T_unassigned        T_limit_crossing,
,
        T_unconnects        T_limit_vias,
,
        T_unit        T_limit_way,
,
        T_up        T_linear,
,
        T_use_array        T_linear_interpolation,
,
        T_use_layer        T_load,
,
        T_lock_type        T_use_net,
,
        T_logical_part        T_use_via,
,
        T_value        T_logical_part_mapping,
,
        T_vertical,
        T_low        T_via,
,
        T_via_array_template        T_match_fromto_delay,
        T_via_at_smd,
        T_via_keepout,
,
        T_via_number        T_match_fromto_length,
,
        T_via_rotate_first        T_match_group_delay,
,
        T_via_site,
        T_match_group_length        T_via_size,
        T_match_net_delay,
,
        T_virtual_pin        T_match_net_length,
,
        T_volt        T_max_delay,
,
        T_max_len        T_voltage_resolution,
,
        T_max_length        T_was_is        T_max_noise,
,
        T_way        T_max_restricted_layer_length,
,
        T_weight        T_max_stagger,
        T_width,
,
        T_max_stub        T_window,
,
        T_max_total_delay        T_wire,
,
        T_max_total_length        T_wire_keepout,
,
        T_max_total_vias        T_wires,
,
        T_medium        T_wires_include,
,
        T_mhenry        T_wiring,
,
        T_mho,
        T_write_resolution        T_microvia,
,
        T_mid_driven        T_x,
,
        T_mil        T_xy,
        T_min_gap,
,
        T_y        T_mirror
,
        T_mirror_first,
        T_mixed,
        T_mm,
        T_negative_diagonalN


/**
 * Class SPECCTRA_LEXER
 * is an automatically generated class using the TokenList2DnsLexer.cmake
 * technology, based on keywords provided by file:
 *    C:/kicad-winbuilder-dev/kicad-winbuilder/src/kicad/pcbnew/specctra.keywords
 */
class SPECCTRA_LEXER : public DSNLEXER
{
    /// Auto generated lexer keywords table and length:
    static const KEYWORD  keywords[];
    static const unsigned keyword_count;

public:
    /**
     * Constructor ( const std::string&, const wxString& )
     * @param aSExpression is (utf8) text possibly from the clipboard that you want to parse.
     * @param aSource is a description of the origin of @a aSExpression, such as a filename.
     *   If left empty, then _(clipboard) is used.
     */
    SPECCTRA_LEXER( const std::string& aSExpression, const wxString& aSource = wxEmptyString ) :
        DSNLEXER( keywords, keyword_count, aSExpression, aSource )
    {
    }

    /**
     * Constructor ( FILE* )
     * takes @a aFile already opened for reading and @a aFilename as parameters.
     * The opened file is assumed to be positioned at the beginning of the file
     * for purposes of accurate line number reporting in error messages.  The
     * FILE is closed by this instance when its destructor is called.
     * @param aFile is a FILE already opened for reading.
     * @param aFilename is the name of the opened file, needed for error reporting.
     */
    SPECCTRA_LEXER( FILE* aFile, const wxString& aFilename ) :
        DSNLEXER( keywords, keyword_count, aFile, aFilename )
    {
    }

    /**
     * Constructor ( LINE_READER* )
     * intializes a lexer and prepares to read from @a aLineReader which
     * is assumed ready, and may be in use by other DSNLEXERs also.  No ownership
     * is taken of @a aLineReader. This enables it to be used by other lexers also.
     * The transition between grammars in such a case, must happen on a text
     * line boundary, not within the same line of text.
     *
     * @param aLineReader is any subclassed instance of LINE_READER, such as
     *  STRING_LINE_READER or FILE_LINE_READER.  No ownership is taken of aLineReader.
     */
    SPECCTRA_LEXER( LINE_READER* aLineReader ) :
        DSNLEXER( keywords, keyword_count, aLineReader )
    {
    }

    /**
     * Function TokenName
     * returns the name of the token in ASCII form.
     */
    static const char* TokenName( DSN::T aTok );

    /**
     * Function NextTok
     * returns the next token found in the input file or T_EOF when reaching
     * the end of file.  Users should wrap this function to return an enum
     * to aid in grammar debugging while running under a debugger, but leave
     * this lower level function returning an int (so the enum does not collide
     * with another usage).
     * @return DSN::T - the type of token found next.
     * @throw IO_ERROR - only if the LINE_READER throws it.
     */
    DSN::T NextTok() throw( IO_ERROR )
    {
        return (DSN::T) DSNLEXER::NextTok();
    }

    /**
     * Function NeedSYMBOL
     * calls NextTok() and then verifies that the token read in
     * satisfies bool IsSymbol().
     * If not, an IO_ERROR is thrown.
     * @return int - the actual token read in.
     * @throw IO_ERROR, if the next token does not satisfy IsSymbol()
     */
    DSN::T NeedSYMBOL() throw( IO_ERROR )
    {
        return (DSN::T) DSNLEXER::NeedSYMBOL();
    }

    /**
     * Function NeedSYMBOLorNUMBER
     * calls NextTok() and then verifies that the token read in
     * satisfies bool IsSymbol() or tok==T_NUMBER.
     * If not, an IO_ERROR is thrown.
     * @return int - the actual token read in.
     * @throw IO_ERROR, if the next token does not satisfy the above test
     */
    DSN::T NeedSYMBOLorNUMBER() throw( IO_ERROR )
    {
        return (DSN::T) DSNLEXER::NeedSYMBOLorNUMBER();
    }

    /**
     * Function CurTok
     * returns whatever NextTok() returned the last time it was called.
     */
    DSN::T CurTok()
    {
        return (DSN::T) DSNLEXER::CurTok();
    }

    /**
     * Function PrevTok
     * returns whatever NextTok() returned the 2nd to last time it was called.
     */
    DSN::T PrevTok()
    {
        return (DSN::T) DSNLEXER::PrevTok();
    }
};

// example usage

/**
 * Class _PARSER
 * holds data and functions pertinent to parsing a S-expression file .
 *
class SPECCTRA_PARSER : public SPECCTRA_LEXER
{

};
*/

#endif   // SPECCTRA_LEXER_H_
,
        T_net,
        T_net_number,
        T_net_out,
        T_net_pin_changes,
        T_nets,
        T_network,
        T_network_out,
        T_no,
        T_noexpose,
        T_noise_accumulation,
        T_noise_calculation,
        T_normal,
        T_object_type,
        T_off,
        T_off_grid,
        T_offset,
        T_on,
        T_open,
        T_opposite_side,
        T_order,
        T_orthogonal,
        T_outline,
        T_overlap,
        T_pad,
        T_pad_pad,
        T_padstack,
        T_pair,
        T_parallel,
        T_parallel_noise,
        T_parallel_segment,
        T_parser,
        T_part_library,
        T_path,
        T_pcb,
        T_permit_orient,
        T_permit_side,
        T_physical,
        T_physical_part_mapping,
        T_piggyback,
        T_pin,
        T_pin_allow,
        T_pin_cap_via,
        T_pin_via_cap,
        T_pin_width_taper,
        T_pins,
        T_pintype,
        T_place,
        T_place_boundary,
        T_place_control,
        T_place_keepout,
        T_place_rule,
        T_placement,
        T_plan,
        T_plane,
        T_pn,
        T_point,
        T_polygon,
        T_polyline_path,
        T_position,
        T_positive_diagonal,
        T_power,
        T_power_dissipation,
        T_power_fanout,
        T_prefix,
        T_primary,
        T_priority,
        T_property,
        T_protect,
        T_qarc,
        T_quarter,
        T_radius,
        T_ratio,
        T_ratio_tolerance,
        T_rect,
        T_reduced,
        T_region,
        T_region_class,
        T_region_class_class,
        T_region_net,
        T_relative_delay,
        T_relative_group_delay,
        T_relative_group_length,
        T_relative_length,
        T_reorder,
        T_reroute_order_viols,
        T_resistance_resolution,
        T_resistor,
        T_resolution,
        T_restricted_layer_length_factor,
        T_room,
        T_rotate,
        T_rotate_first,
        T_round,
        T_roundoff_rotation,
        T_route,
        T_route_to_fanout_only,
        T_routes,
        T_routes_include,
        T_rule,
        T_same_net_checking,
        T_sample_window,
        T_saturation_length,
        T_sec,
        T_secondary,
        T_self,
        T_sequence_number,
        T_session,
        T_set_color,
        T_set_pattern,
        T_shape,
        T_shield,
        T_shield_gap,
        T_shield_loop,
        T_shield_tie_down_interval,
        T_shield_width,
        T_side,
        T_signal,
        T_site,
        T_small,
        T_smd,
        T_snap,
        T_snap_angle,
        T_soft,
        T_source,
        T_space_in_quoted_tokens,
        T_spacing,
        T_spare,
        T_spiral_via,
        T_square,
        T_stack_via,
        T_stack_via_depth,
        T_standard,
        T_starburst,
        T_status,
        T_structure,
        T_structure_out,
        T_subgate,
        T_subgates,
        T_substituted,
        T_such,
        T_suffix,
        T_super_placement,
        T_supply,
        T_supply_pin,
        T_swapping,
        T_switch_window,
        T_system,
        T_tandem_noise,
        T_tandem_segment,
        T_tandem_shield_overhang,
        T_term_only,
        T_terminal,
        T_terminator,
        T_test,
        T_test_points,
        T_testpoint,
        T_threshold,
        T_time_length_factor,
        T_time_resolution,
        T_tjunction,
        T_tolerance,
        T_top,
        T_topology,
        T_total,
        T_track_id,
        T_turret,
        T_type,
        T_um,
        T_unassigned,
        T_unconnects,
        T_unit,
        T_up,
        T_use_array,
        T_use_layer,
        T_use_net,
        T_use_via,
        T_value,
        T_vertical,
        T_via,
        T_via_array_template,
        T_via_at_smd,
        T_via_keepout,
        T_via_number,
        T_via_rotate_first,
        T_via_site,
        T_via_size,
        T_virtual_pin,
        T_volt,
        T_voltage_resolution,
        T_was_is,
        T_way,
        T_weight,
        T_width,
        T_window,
        T_wire,
        T_wire_keepout,
        T_wires,
        T_wires_include,
        T_wiring,
        T_write_resolution,
        T_x,
        T_xy,
        T_y
    };
}   // namespace DSN


/**
 * Class SPECCTRA_LEXER
 * is an automatically generated class using the TokenList2DnsLexer.cmake
 * technology, based on keywords provided by file:
 *    C:/kicad-winbuilder-dev/kicad-winbuilder/src/kicad/pcbnew/specctra.keywords
 */
class SPECCTRA_LEXER : public DSNLEXER
{
    /// Auto generated lexer keywords table and length:
    static const KEYWORD  keywords[];
    static const unsigned keyword_count;

public:
    /**
     * Constructor ( const std::string&, const wxString& )
     * @param aSExpression is (utf8) text possibly from the clipboard that you want to parse.
     * @param aSource is a description of the origin of @a aSExpression, such as a filename.
     *   If left empty, then _(clipboard) is used.
     */
    SPECCTRA_LEXER( const std::string& aSExpression, const wxString& aSource = wxEmptyString ) :
        DSNLEXER( keywords, keyword_count, aSExpression, aSource )
    {
    }

    /**
     * Constructor ( FILE* )
     * takes @a aFile already opened for reading and @a aFilename as parameters.
     * The opened file is assumed to be positioned at the beginning of the file
     * for purposes of accurate line number reporting in error messages.  The
     * FILE is closed by this instance when its destructor is called.
     * @param aFile is a FILE already opened for reading.
     * @param aFilename is the name of the opened file, needed for error reporting.
     */
    SPECCTRA_LEXER( FILE* aFile, const wxString& aFilename ) :
        DSNLEXER( keywords, keyword_count, aFile, aFilename )
    {
    }

    /**
     * Constructor ( LINE_READER* )
     * intializes a lexer and prepares to read from @a aLineReader which
     * is assumed ready, and may be in use by other DSNLEXERs also.  No ownership
     * is taken of @a aLineReader. This enables it to be used by other lexers also.
     * The transition between grammars in such a case, must happen on a text
     * line boundary, not within the same line of text.
     *
     * @param aLineReader is any subclassed instance of LINE_READER, such as
     *  STRING_LINE_READER or FILE_LINE_READER.  No ownership is taken of aLineReader.
     */
    SPECCTRA_LEXER( LINE_READER* aLineReader ) :
        DSNLEXER( keywords, keyword_count, aLineReader )
    {
    }

    /**
     * Function TokenName
     * returns the name of the token in ASCII form.
     */
    static const char* TokenName( DSN::T aTok );

    /**
     * Function NextTok
     * returns the next token found in the input file or T_EOF when reaching
     * the end of file.  Users should wrap this function to return an enum
     * to aid in grammar debugging while running under a debugger, but leave
     * this lower level function returning an int (so the enum does not collide
     * with another usage).
     * @return DSN::T - the type of token found next.
     * @throw IO_ERROR - only if the LINE_READER throws it.
     */
    DSN::T NextTok() throw( IO_ERROR )
    {
        return (DSN::T) DSNLEXER::NextTok();
    }

    /**
     * Function NeedSYMBOL
     * calls NextTok() and then verifies that the token read in
     * satisfies bool IsSymbol().
     * If not, an IO_ERROR is thrown.
     * @return int - the actual token read in.
     * @throw IO_ERROR, if the next token does not satisfy IsSymbol()
     */
    DSN::T NeedSYMBOL() throw( IO_ERROR )
    {
        return (DSN::T) DSNLEXER::NeedSYMBOL();
    }

    /**
     * Function NeedSYMBOLorNUMBER
     * calls NextTok() and then verifies that the token read in
     * satisfies bool IsSymbol() or tok==T_NUMBER.
     * If not, an IO_ERROR is thrown.
     * @return int - the actual token read in.
     * @throw IO_ERROR, if the next token does not satisfy the above test
     */
    DSN::T NeedSYMBOLorNUMBER() throw( IO_ERROR )
    {
        return (DSN::T) DSNLEXER::NeedSYMBOLorNUMBER();
    }

    /**
     * Function CurTok
     * returns whatever NextTok() returned the last time it was called.
     */
    DSN::T CurTok()
    {
        return (DSN::T) DSNLEXER::CurTok();
    }

    /**
     * Function PrevTok
     * returns whatever NextTok() returned the 2nd to last time it was called.
     */
    DSN::T PrevTok()
    {
        return (DSN::T) DSNLEXER::PrevTok();
    }
};

// example usage

/**
 * Class _PARSER
 * holds data and functions pertinent to parsing a S-expression file .
 *
class SPECCTRA_PARSER : public SPECCTRA_LEXER
{

};
*/

#endif   // SPECCTRA_LEXER_H_

Follow ups