-
Notifications
You must be signed in to change notification settings - Fork 14
Config
Yuki Kimoto edited this page Oct 4, 2024
·
3 revisions
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;
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"; }'