Skip to content
Yuki Kimoto edited this page Oct 4, 2024 · 3 revisions

Config

How to dump resource information

Use spvmcc --resource-info option

spvmcc -I lib/SPVM --resource-info myapp.spvm

An Output Example:

[MyExe]
# t/04_spvmcc/lib/SPVM/MyExe.config
# Loaded Resources:
#   TestCase::Resource::Mylib1
#   TestCase::Resource::Mylib2
#   Fn::Resource
use strict;
use warnings;
use Data::Dumper;
use FindBin;
use File::Basename 'dirname';

use lib dirname(__FILE__) . "/../../../02_vm/lib";

use SPVM::Builder::Config::Exe;

my $config = SPVM::Builder::Config::Exe->new_gnu99(file => __FILE__);

$config->add_lib_dir('../..');

$config->add_lib('m');

$config->add_before_link_cb(sub {
  my ($config, $link_info) = @_;

  $main::MYEXE_LINK_INFO = $link_info;
});

$config->add_global_before_compile_cb(sub {
  my ($config, $compile_info) = @_;

  $main::MYEXE_COMPILE_INFO_GLOBAL_BEFORE_COMPILE ||= $compile_info;
});


$config->use_resource('TestCase::Resource::Mylib1');
$config->use_resource('TestCase::Resource::Mylib2');

$config->use_resource('Fn::Resource');

if (@ARGV) {
  warn "[Test Output]\@ARGV : @ARGV";
}

$config;

[TestCase::NativeAPI2]
# t/04_spvmcc/lib/SPVM/TestCase/NativeAPI2.config
# Loaded Resources:
#   TestCase::Resource::Mylib1
#   TestCase::Resource::Mylib2
#   Fn::Resource
use strict;
use warnings;

use SPVM::Builder::Config;

my $config = SPVM::Builder::Config->new_gnu99(file => __FILE__);

$config->optimize('-O2');

my @source_files = qw(
  foo.c
  bar.c
  baz/baz.c
);
$config->add_source_file(@source_files);

$config->use_resource('TestCase::Resource::Mylib1', mode => 'mode1', argv => ['args1', 'args2']);
$config->use_resource('TestCase::Resource::Mylib2');

$config->add_before_compile_cb(sub {
  my ($config, $compile_info) = @_;

  $main::MYEXE_COMPILE_INFO_BEFORE_COMPILE ||= $compile_info;
});

$config->use_resource('Fn::Resource');

$config;

Command Line Utilities

Use methods in the SPVM::Builder::Config::Info class.

The following is an one liner that dump resource information for the MyExe class.

perl -Mstrict -Mwarnings -MSPVM::Builder::Config::Info -E 'my $info = SPVM::Builder::Config::Info->new(class_name => "MyExe"); for my $class_name (grep { $info->is_resource_loader($_) } @{$info->get_class_names}) { my $config_file = $info->get_config_file($class_name); say "[$class_name]\n# $config_file\n# Loaded Resources:"; for my $resource_name (@{$info->get_config($class_name)->get_resource_names}) { say "#   $resource_name"; } my $config_content = $info->get_config_content($class_name); say "$config_content"; }'
Clone this wiki locally