SPVM::Builder::Config(3)

NAME
SPVM::Builder::Config - Configurations of Compile and Link of Native Sources

DESCRIPTION
SPVM::Builder::Config is configuration of c/c++ compile and link.

FIELDS
Fields.

  ext
  my $ext = $config->ext;
  $config->ext($ext);

Get and set the extension of the SPVM native source.

The default is "undef".

Examples:

  # Foo/Bar.c
  $config->ext('c');

  # Foo/Bar.cpp
  $config->ext('cpp');

  cc
  my $cc = $config->cc;
  $config->cc($cc);

Get and set a compiler name. The default is the value of "cc" of Config module.

Examples:

  # gcc
  $config->cc('gcc');

  # g++ for C++
  $config->cc('g++');

  # nvcc for CUDA/GUP
  $config->cc('nvcc');

  # cc that compiled this Perl
  use Config;
  $config->cc($Config{cc});

  cc_each
  my $cc_each = $config->cc_each;
  $config->cc_each($cc_each);

Get and set a callback that returns the compiler name for each source file. The call back receives SPVM::Bulder::Config object and optional arguments as a hash reference.

Optional Arguments:

•   source_file

    Each source file.

•   class_name

    The class name

If "cc_each" is defined, the compiler use the return value of "cc_each" as the compiler name instead of "cc".

Examples:

  $config->cc_each(sub {
    my ($config, $args) = @_;

    # Source file
    my $source_file = $args->{source_file};

    # Class name
    my $class_name = $args->{class_name}

    my $cc;
    # C source file
    if ($source_file =~ /\.c$/) {
      $cc = 'gcc';
    }
    # C++ source file
    elsif ($source_file =~ /\.cpp$/) {
      $cc = 'g++';
    }

    return $cc;
  });

  include_dirs
  my $include_dirs = $config->include_dirs;
  $config->include_dirs($include_dirs);

Get and set header including directories of the compiler. This is same as "-I" option of "gcc".

The default value is "SPVM/Builder/include" of one up of directory that SPVM::Buidler::Config.pm is loaded.

At runtime, the "include" directory of the native module is added before "include_dirs".

  ccflags
  my $ccflags = $config->ccflags;
  $config->ccflags($ccflags);

Get and set compiler flags.

Default:

  # $Config{cccdlflags} has -fPIC.
  ['-fPIC']

  # Other
  []

  ccflags_each
  my $ccflags_each = $config->ccflags_each;
  $config->ccflags_each($ccflags_each);

Get and set a callback that returns the compiler flags for each source file. The call back receives SPVM::Bulder::Config object and optional arguments as a hash reference.

Optional Arguments:

•   source_file

    Each source file.

•   class_name

    The class name

•   cc

    The compiler name that is the value after the process of the process of cc or cc_each.

If "ccflags_each" is defined, the compiler use the return value of "ccflags_each" as the compiler flags instead of "ccflags".

Examples:

  $config->ccflags_each(sub {
    my ($config, $source_file) = @_;

    # Source file
    my $source_file = $args->{source_file};

    # Class name
    my $class_name = $args->{class_name}

    # The compiler name
    my $cc = $args->{cc};

    # ccflags
    my $config_ccflags = $config->ccflags;

    my $ccflags = [];
    # C source file
    if ($source_file =~ /\.c$/) {
      $ccflags = ['-DFoo', @$config_ccflags];
    }
    # C++ source file
    elsif ($source_file =~ /\.cpp$/) {
      $ccflags = ['-DBar', @$config_ccflags];
    }

    return $ccflags;
  });

  optimize
  my $optimize = $config->optimize;
  $config->optimize($optimize);

Get and set the option for optimization of the compiler.

The default is "-O3".

Examples:

  $config->optimize('-O3');
  $config->optimize('-O2');
  $config->optimize('-g3 -O0');

  optimize_each
  my $optimize_each = $config->optimize_each;
  $config->optimize_each($optimize_each);

Get and set a callback that returns the value of optimize for each source file. The callback receives SPVM::Bulder::Config object and optional arguments as a hash reference.

Optional Arguments:

•   source_file

    Each source file.

•   class_name

    The class name

•   cc

    The compiler name that is the value after the process of the process of cc or cc_each.

If "optimize_each" is defined, the compiler use the return value of "optimize_each" as the compiler flags instead of "optimize".

Examples:

  $config->optimize_each(sub {
    my ($config, $source_file) = @_;

    # Source file
    my $source_file = $args->{source_file};

    # Class name
    my $class_name = $args->{class_name}

    # The compiler name
    my $cc = $args->{cc};

    # optimize
    my $config_optimize = $config->optimize;

    my $optimize = [];
    # C source file
    if ($source_file =~ /\.c$/) {
      $optimize = '-O3';
    }
    # C++ source file
    elsif ($source_file =~ /\.cpp$/) {
      $optimize = '-O3';
    }

    return $optimize;
  });

  source_files
  my $source_files = $config->source_files;
  $config->source_files($source_files);

Get and get source files. These sourceraries are linked by the compiler.

Examples:

  $config->source_files(['foo.c', 'bar.c']);

  ld
  my $ld = $config->ld;
  $config->ld($ld);

Get and set a linker. Default is "ld" of Config module.

  lib_dirs
  my $lib_dirs = $config->lib_dirs;
  $config->lib_dirs($lib_dirs);

Get and set the directories that libraries are searched for by the linker. This is same as "-L" option of "gcc".

Default:

Windows

  The directory that perlxxx.dll exists

Not Windows

  empty list

  libs
  my $libs = $config->libs;
  $config->libs($libs);

Get and set libraries. These libraries are linked by the linker.

If a dynamic link library is found from "lib_dirs", this is linked. Otherwise if a static link library is found from "lib_dirs", this is linked.

Examples:

  $config->libs(['gsl', 'png']);

If you want to link only dynamic link library, you can use the following hash reference as the value of the element instead of the library name.

  {type => 'dynamic', name => 'gsl'}

If you want to link only static link library, you can use the following hash reference as the value of the element instead of the library name.

  {type => 'static', name => 'gsl'}

  resources
  my $resources = $config->resources;
  $config->resources($resources);

Get and get resouce module names.

At runtime, each modules' native "include" directory is added before "include_dirs", and "lib" directory is added before "lib_dirs".

Examples:

  $config->resources(['SPVM::Resouce::Zlib::V1_15']);

  ldflags
  my ldflags = $config->ldflags;
  $config->ldflags(ldflags);

Get and set linker flags. The default is emtpy array reference.

Default:

Windows

  ['-mdll', '-s']

Non-Windows

  ['-shared']

  ld_optimize
  my $ld_optimize = $config->ld_optimize;
  $config->ld_optimize($ld_optimize);

Get and set the option for optimization of the linker such as "-O3", "-O2", "-g3 -O0".

The default is "-O2".

  force
  my $force = $config->force;
  $config->force($force);

Get and set the flag to force compiles and links without caching.

  before_link
  my $before_link = $config->before_link;
  $config->before_link($before_link);

Get and set the callback that is executed before the link. The callback receives SPVM::Builder::Config object and the array reference of SPVM::Builder::ObjectFileInfo objects.

This callback must be return the array reference of SPVM::Builder::ObjectFileInfo objects that is used by the linker.

Examples:

  $config->before_link(sub {
    my ($config, $object_infos) = @_;

    # Do something

    return $object_infos;
  });

  quiet
  my $quiet = $config->quiet;
  $config->quiet($quiet);

Get and set the flag if the compiler and the linker output the results.

The default is 1.

Methods

  new
  my $config = SPVM::Builder::Config->new;

Create SPVM::Builder::Config object.

  new_c
  my $config = SPVM::Builder::Config->new_c;

Create default build config with C settings. This is SPVM::Builder::Config object.

If you want to use the specific C version, use "set_std" method.

  $config->set_std('c99');

  new_c99
  my $config = SPVM::Builder::Config->new_gnu99;

Create default build config with C99 settings. This is SPVM::Builder::Config object.

  new_cpp
  my $config = SPVM::Builder::Config->new_cpp;

Create default build config with C++ settings. This is SPVM::Builder::Config object.

If you want to use the specific C++ version, use "set_std" method.

  $config->set_std('c++11');

  new_cpp11
  my $config = SPVM::Builder::Config->new_cpp11;

Create default build config with C++11 settings. This is SPVM::Builder::Config object.

  set_std
  $config->set_std($std);

Add the value that is converted to "-std=$std" after the last element of "ccflags" field.

Example:

  $config->set_std('gnu99');

  add_ccflags
  $config->add_ccflags(@ccflags);

Add values after the last element of "ccflags" field.

  add_ldflags
  $config->add_ldflags(@ldflags);

Add values after the last element of "ldflags" field.

  add_include_dirs
  $config->add_include_dirs(@include_dirs);

Add values after the last element of "include_dirs" field.

  add_lib_dirs
  $config->add_lib_dirs(@lib_dirs);

Add values after the last element of "lib_dirs" field.

  add_source_files
  $config->add_source_files(@source_files);

Add the values after the last element of "source_files" field.

  add_libs
  $config->add_libs(@libs);

Add the values after the last element of "libs" field.

Examples:

  $config->add_libs('gsl');

  add_static_libs
  $config->add_static_libs(@libs);

Add the values that each element is converted to the following hash reference after the last element of "libs" field.

  {type => 'static', name => $lib}

Examples:

  $config->add_static_libs('gsl');

  add_dynamic_libs
  $config->add_dynamic_libs(@libs);

Add the values that each element is converted to the following hash reference after the last element of "libs" field.

  {type => 'dynamic', name => $lib}

Examples:

  $config->add_dynamic_libs('gsl');

  use
  $config->use(@resources);

This method is the alias for "add_resources" to improve user experiences.

Examples:

  $config->use('SPVM::Resouce::Zlib::V1_15');

  add_resources
  $config->add_resources(@resources);

Add the values after the last element of "resources" field.

Examples:

  $config->add_resources('SPVM::Resouce::Zlib::V1_15');

  to_hash
  my $config = $config->to_hash;

Convert SPVM::Builder::Config to a hash reference.

  search_lib_dirs_from_cc_info
  my $lib_dirs = $config->search_lib_dirs_from_cc_info;

Get the library searching directories parsing the infomation the compiler has.

  search_lib_dirs_from_config_libpth
  my $lib_dirs = $config->search_lib_dirs_from_config_libpth;

Get the library searching directories parsing "libpth" of Config.

  search_include_dirs_from_config_incpth
  my $include_dirs = $config->search_include_dirs_from_config_incpth;

Get the header searching directories parsing "incpth" of Config.

  sub get_include_dir
  my $include_dir = $config->get_include_dir(__FILE__);

Get the header include directory from the config file name.

  get_src_dir
  my $src_dir = $config->get_src_dir(__FILE__);

Get the source directory from the config file name.

  get_lib_dir
  my $lib_dir = $config->get_lib_dir(__FILE__);

Get the library directory from the config file name.

  is_exe
  my $is_exe = $config->is_exe;

Check this config is used for creating executalbe file. Always 0.