2018-04-04 23:44:29 +02:00
|
|
|
#!/usr/bin/env perl
|
2013-09-16 13:33:42 +02:00
|
|
|
|
2018-04-12 03:35:19 +02:00
|
|
|
# Generate main file, individual apps and solution files for MS Visual Studio
|
|
|
|
# 2010
|
2014-05-07 17:51:20 +02:00
|
|
|
#
|
2015-01-26 16:42:27 +01:00
|
|
|
# Must be run from mbedTLS root or scripts directory.
|
2014-05-07 17:51:20 +02:00
|
|
|
# Takes no argument.
|
2013-09-20 15:11:44 +02:00
|
|
|
|
2013-09-16 13:33:42 +02:00
|
|
|
use warnings;
|
|
|
|
use strict;
|
2014-05-09 12:27:49 +02:00
|
|
|
use Digest::MD5 'md5_hex';
|
2013-09-16 13:33:42 +02:00
|
|
|
|
2014-05-07 17:51:20 +02:00
|
|
|
my $vsx_dir = "visualc/VS2010";
|
2013-09-16 13:33:42 +02:00
|
|
|
my $vsx_ext = "vcxproj";
|
2014-05-07 17:51:20 +02:00
|
|
|
my $vsx_app_tpl_file = "scripts/data_files/vs2010-app-template.$vsx_ext";
|
2014-05-08 11:33:30 +02:00
|
|
|
my $vsx_main_tpl_file = "scripts/data_files/vs2010-main-template.$vsx_ext";
|
2015-01-26 16:42:27 +01:00
|
|
|
my $vsx_main_file = "$vsx_dir/mbedTLS.$vsx_ext";
|
2014-05-09 12:56:03 +02:00
|
|
|
my $vsx_sln_tpl_file = "scripts/data_files/vs2010-sln-template.sln";
|
2015-01-26 16:42:27 +01:00
|
|
|
my $vsx_sln_file = "$vsx_dir/mbedTLS.sln";
|
2014-05-07 17:51:20 +02:00
|
|
|
|
|
|
|
my $programs_dir = 'programs';
|
2015-03-09 18:05:11 +01:00
|
|
|
my $header_dir = 'include/mbedtls';
|
2014-05-08 11:33:30 +02:00
|
|
|
my $source_dir = 'library';
|
|
|
|
|
|
|
|
# Need windows line endings!
|
|
|
|
my $vsx_hdr_tpl = <<EOT;
|
2014-05-08 12:53:58 +02:00
|
|
|
<ClInclude Include="..\\..\\{NAME}" />\r
|
2014-05-08 11:33:30 +02:00
|
|
|
EOT
|
|
|
|
my $vsx_src_tpl = <<EOT;
|
2014-05-08 12:53:58 +02:00
|
|
|
<ClCompile Include="..\\..\\{NAME}" />\r
|
2014-05-08 11:33:30 +02:00
|
|
|
EOT
|
2013-09-16 13:33:42 +02:00
|
|
|
|
2014-05-09 12:56:03 +02:00
|
|
|
my $vsx_sln_app_entry_tpl = <<EOT;
|
|
|
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "{APPNAME}", "{APPNAME}.vcxproj", "{GUID}"\r
|
|
|
|
ProjectSection(ProjectDependencies) = postProject\r
|
|
|
|
{46CF2D25-6A36-4189-B59C-E4815388E554} = {46CF2D25-6A36-4189-B59C-E4815388E554}\r
|
|
|
|
EndProjectSection\r
|
|
|
|
EndProject\r
|
|
|
|
EOT
|
|
|
|
|
|
|
|
my $vsx_sln_conf_entry_tpl = <<EOT;
|
|
|
|
{GUID}.Debug|Win32.ActiveCfg = Debug|Win32\r
|
|
|
|
{GUID}.Debug|Win32.Build.0 = Debug|Win32\r
|
|
|
|
{GUID}.Debug|x64.ActiveCfg = Debug|x64\r
|
|
|
|
{GUID}.Debug|x64.Build.0 = Debug|x64\r
|
|
|
|
{GUID}.Release|Win32.ActiveCfg = Release|Win32\r
|
|
|
|
{GUID}.Release|Win32.Build.0 = Release|Win32\r
|
|
|
|
{GUID}.Release|x64.ActiveCfg = Release|x64\r
|
|
|
|
{GUID}.Release|x64.Build.0 = Release|x64\r
|
|
|
|
EOT
|
|
|
|
|
2013-09-16 13:33:42 +02:00
|
|
|
exit( main() );
|
|
|
|
|
2014-05-07 17:51:20 +02:00
|
|
|
sub check_dirs {
|
2015-05-14 13:04:03 +02:00
|
|
|
return -d $vsx_dir
|
2014-05-08 11:33:30 +02:00
|
|
|
&& -d $header_dir
|
|
|
|
&& -d $source_dir
|
2014-05-07 17:51:20 +02:00
|
|
|
&& -d $programs_dir;
|
|
|
|
}
|
|
|
|
|
2013-09-16 13:33:42 +02:00
|
|
|
sub slurp_file {
|
|
|
|
my ($filename) = @_;
|
|
|
|
|
|
|
|
local $/ = undef;
|
|
|
|
open my $fh, '<', $filename or die "Could not read $filename\n";
|
|
|
|
my $content = <$fh>;
|
|
|
|
close $fh;
|
|
|
|
|
|
|
|
return $content;
|
|
|
|
}
|
|
|
|
|
2014-05-09 13:00:18 +02:00
|
|
|
sub content_to_file {
|
|
|
|
my ($content, $filename) = @_;
|
|
|
|
|
|
|
|
open my $fh, '>', $filename or die "Could not write to $filename\n";
|
|
|
|
print $fh $content;
|
|
|
|
close $fh;
|
|
|
|
}
|
|
|
|
|
2014-05-09 12:27:49 +02:00
|
|
|
sub gen_app_guid {
|
|
|
|
my ($path) = @_;
|
|
|
|
|
2015-01-26 16:42:27 +01:00
|
|
|
my $guid = md5_hex( "mbedTLS:$path" );
|
2014-05-09 12:27:49 +02:00
|
|
|
$guid =~ s/(.{8})(.{4})(.{4})(.{4})(.{12})/\U{$1-$2-$3-$4-$5}/;
|
|
|
|
|
|
|
|
return $guid;
|
|
|
|
}
|
|
|
|
|
2013-09-16 13:33:42 +02:00
|
|
|
sub gen_app {
|
|
|
|
my ($path, $template, $dir, $ext) = @_;
|
|
|
|
|
2014-05-09 12:27:49 +02:00
|
|
|
my $guid = gen_app_guid( $path );
|
2013-09-16 13:33:42 +02:00
|
|
|
$path =~ s!/!\\!g;
|
|
|
|
(my $appname = $path) =~ s/.*\\//;
|
|
|
|
|
Merge mbedtls 2.16.6 into baremetal
Conflicts:
mbedtls.doxyfile - PROJECT_NAME - mbed TLS v2.16.6 chosen.
doc_mainpage.h - mbed TLS v2.16.6 version chosen.
hmac_drbg.h - line 260, extended description chosen.
- line 313, extended description chosen.
- line 338, extended description chosen.
version.h - 2.16.6 chosen.
CMakeLists.txt - 2.16.6 chosen.
test_suite_version.data - 2.16.6 chosen.
Makefile - 141 - manual correction - baremetal version of C_SOURCE_FILES
with variables for directories plus 2.16.6 CTAGS addition.
pkparse.c - lines 846 onwards - the asn1_get_nonzero_mpi implementation chosen.
ssl_tls.c - line 5269 - edited manually, left the ret=0, because baremetal has
a different behaviour since commit 87b5626, but added a debug
message that's new in 2.16.6.
all.sh:
- component_build_deprecated - chosen the refactored version from 2.16.6,
but with extra flags from baremetal.
- rest of the _no_xxx tests - merged make options to have PTHREAD=1 and
other changes from 2.16.6 (like -O1 instead of -O0).
- component_build_arm_none_eabi_gcc_no_64bit_multiplication - added
TINYCRYPT_BUILD=0 to the 2.16.6 version of make.
x509/req_app.c - left baremetal log but with mbedtls_exit( 0 ) call.
x509/crl_app.c - left baremetal log but with mbedtls_exit( 0 ) call.
x509/cert_app.c - left baremetal log but with mbedtls_exit( 0 ) call.
ssl/ssl_mail_client.c - left baremetal log but with mbedtls_exit( 0 ) call.
ssl/ssl_pthread_server.c - left baremetal log but with mbedtls_exit( 0 ) call.
ssl/ssl_fork_server.c - left baremetal log but with mbedtls_exit( 0 ) call.
ssl_client1.c - line 54 - left baremetal log but with mbedtls_exit( 0 ) call.
ssl_client2.c - line 54 - left baremetal log but with mbedtls_exit( 0 ) call.
- line 132 - new options of both branches added.
- skip close notify handled as in 2.16.6, but with `ssl` instead of `&ssl`.
- Merged the 2.16.6 usage split with additional baremetal usages.
- Merged options from baremetal and 2.16.6.
ssl_server.c - left baremetal log but with mbedtls_exit( 0 ) call.
ssl_server2.c - Merged the 2.16.6 usage split with additional baremetal usages.
config.pl - fixed missing defines from the documentation, removed duplicates,
and reorganised so that the documentation and excluded list
are ordered in the same way.
test_suite_x509parse.data - only added the two new pathlen tests.
x509_crt.c - change the return code by removing
MBEDTLS_ERR_X509_INVALID_EXTENSIONS, since it's added by
x509_crt_frame_parse_ext not by an "or", but by "+=".
Changelog - Assigned all entries to appropriate sections.
ssl-opt.sh - line 8263 - merged options.
- removed lines 1165 - 1176 - there was a duplicate test, probably
an artifact of previous merges.
check-files.py - sticked to old formatting.
Signed-off-by: Andrzej Kurek <andrzej.kurek@arm.com>
2020-05-18 17:47:25 +02:00
|
|
|
my $srcs = "<ClCompile Include=\"..\\..\\programs\\$path.c\" \/>";
|
2018-10-30 22:46:21 +01:00
|
|
|
if( $appname eq "ssl_client2" or $appname eq "ssl_server2" or
|
|
|
|
$appname eq "query_compile_time_config" ) {
|
Merge mbedtls 2.16.6 into baremetal
Conflicts:
mbedtls.doxyfile - PROJECT_NAME - mbed TLS v2.16.6 chosen.
doc_mainpage.h - mbed TLS v2.16.6 version chosen.
hmac_drbg.h - line 260, extended description chosen.
- line 313, extended description chosen.
- line 338, extended description chosen.
version.h - 2.16.6 chosen.
CMakeLists.txt - 2.16.6 chosen.
test_suite_version.data - 2.16.6 chosen.
Makefile - 141 - manual correction - baremetal version of C_SOURCE_FILES
with variables for directories plus 2.16.6 CTAGS addition.
pkparse.c - lines 846 onwards - the asn1_get_nonzero_mpi implementation chosen.
ssl_tls.c - line 5269 - edited manually, left the ret=0, because baremetal has
a different behaviour since commit 87b5626, but added a debug
message that's new in 2.16.6.
all.sh:
- component_build_deprecated - chosen the refactored version from 2.16.6,
but with extra flags from baremetal.
- rest of the _no_xxx tests - merged make options to have PTHREAD=1 and
other changes from 2.16.6 (like -O1 instead of -O0).
- component_build_arm_none_eabi_gcc_no_64bit_multiplication - added
TINYCRYPT_BUILD=0 to the 2.16.6 version of make.
x509/req_app.c - left baremetal log but with mbedtls_exit( 0 ) call.
x509/crl_app.c - left baremetal log but with mbedtls_exit( 0 ) call.
x509/cert_app.c - left baremetal log but with mbedtls_exit( 0 ) call.
ssl/ssl_mail_client.c - left baremetal log but with mbedtls_exit( 0 ) call.
ssl/ssl_pthread_server.c - left baremetal log but with mbedtls_exit( 0 ) call.
ssl/ssl_fork_server.c - left baremetal log but with mbedtls_exit( 0 ) call.
ssl_client1.c - line 54 - left baremetal log but with mbedtls_exit( 0 ) call.
ssl_client2.c - line 54 - left baremetal log but with mbedtls_exit( 0 ) call.
- line 132 - new options of both branches added.
- skip close notify handled as in 2.16.6, but with `ssl` instead of `&ssl`.
- Merged the 2.16.6 usage split with additional baremetal usages.
- Merged options from baremetal and 2.16.6.
ssl_server.c - left baremetal log but with mbedtls_exit( 0 ) call.
ssl_server2.c - Merged the 2.16.6 usage split with additional baremetal usages.
config.pl - fixed missing defines from the documentation, removed duplicates,
and reorganised so that the documentation and excluded list
are ordered in the same way.
test_suite_x509parse.data - only added the two new pathlen tests.
x509_crt.c - change the return code by removing
MBEDTLS_ERR_X509_INVALID_EXTENSIONS, since it's added by
x509_crt_frame_parse_ext not by an "or", but by "+=".
Changelog - Assigned all entries to appropriate sections.
ssl-opt.sh - line 8263 - merged options.
- removed lines 1165 - 1176 - there was a duplicate test, probably
an artifact of previous merges.
check-files.py - sticked to old formatting.
Signed-off-by: Andrzej Kurek <andrzej.kurek@arm.com>
2020-05-18 17:47:25 +02:00
|
|
|
$srcs .= "\r\n <ClCompile Include=\"..\\..\\programs\\ssl\\query_config.c\" \/>";
|
2018-10-30 22:46:21 +01:00
|
|
|
}
|
|
|
|
|
2013-09-16 13:33:42 +02:00
|
|
|
my $content = $template;
|
2018-10-30 22:46:21 +01:00
|
|
|
$content =~ s/<SOURCES>/$srcs/g;
|
2013-09-16 13:33:42 +02:00
|
|
|
$content =~ s/<APPNAME>/$appname/g;
|
2014-05-09 12:27:49 +02:00
|
|
|
$content =~ s/<GUID>/$guid/g;
|
2013-09-16 13:33:42 +02:00
|
|
|
|
2014-05-09 13:00:18 +02:00
|
|
|
content_to_file( $content, "$dir/$appname.$ext" );
|
2013-09-16 13:33:42 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
sub get_app_list {
|
2014-05-07 17:51:20 +02:00
|
|
|
my $app_list = `cd $programs_dir && make list`;
|
2013-09-16 13:33:42 +02:00
|
|
|
die "make list failed: $!\n" if $?;
|
|
|
|
|
|
|
|
return split /\s+/, $app_list;
|
|
|
|
}
|
|
|
|
|
2014-05-07 17:51:20 +02:00
|
|
|
sub gen_app_files {
|
2014-05-08 11:33:30 +02:00
|
|
|
my @app_list = @_;
|
|
|
|
|
2014-05-07 17:51:20 +02:00
|
|
|
my $vsx_tpl = slurp_file( $vsx_app_tpl_file );
|
2013-09-16 13:33:42 +02:00
|
|
|
|
2014-05-08 11:33:30 +02:00
|
|
|
for my $app ( @app_list ) {
|
2013-09-16 13:33:42 +02:00
|
|
|
gen_app( $app, $vsx_tpl, $vsx_dir, $vsx_ext );
|
|
|
|
}
|
2014-05-07 17:51:20 +02:00
|
|
|
}
|
|
|
|
|
2014-05-08 11:33:30 +02:00
|
|
|
sub gen_entry_list {
|
2014-05-08 12:53:58 +02:00
|
|
|
my ($tpl, @names) = @_;
|
2014-05-08 11:33:30 +02:00
|
|
|
|
|
|
|
my $entries;
|
2014-05-08 12:53:58 +02:00
|
|
|
for my $name (@names) {
|
|
|
|
(my $entry = $tpl) =~ s/{NAME}/$name/g;
|
2014-05-08 11:33:30 +02:00
|
|
|
$entries .= $entry;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $entries;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub gen_main_file {
|
|
|
|
my ($headers, $sources, $hdr_tpl, $src_tpl, $main_tpl, $main_out) = @_;
|
|
|
|
|
|
|
|
my $header_entries = gen_entry_list( $hdr_tpl, @$headers );
|
|
|
|
my $source_entries = gen_entry_list( $src_tpl, @$sources );
|
|
|
|
|
|
|
|
my $out = slurp_file( $main_tpl );
|
|
|
|
$out =~ s/SOURCE_ENTRIES\r\n/$source_entries/m;
|
|
|
|
$out =~ s/HEADER_ENTRIES\r\n/$header_entries/m;
|
|
|
|
|
2014-05-09 13:00:18 +02:00
|
|
|
content_to_file( $out, $main_out );
|
2014-05-08 11:33:30 +02:00
|
|
|
}
|
|
|
|
|
2014-05-09 12:56:03 +02:00
|
|
|
sub gen_vsx_solution {
|
|
|
|
my (@app_names) = @_;
|
|
|
|
|
|
|
|
my ($app_entries, $conf_entries);
|
|
|
|
for my $path (@app_names) {
|
|
|
|
my $guid = gen_app_guid( $path );
|
|
|
|
(my $appname = $path) =~ s!.*/!!;
|
|
|
|
|
|
|
|
my $app_entry = $vsx_sln_app_entry_tpl;
|
|
|
|
$app_entry =~ s/{APPNAME}/$appname/g;
|
|
|
|
$app_entry =~ s/{GUID}/$guid/g;
|
|
|
|
|
|
|
|
$app_entries .= $app_entry;
|
|
|
|
|
|
|
|
my $conf_entry = $vsx_sln_conf_entry_tpl;
|
|
|
|
$conf_entry =~ s/{GUID}/$guid/g;
|
|
|
|
|
|
|
|
$conf_entries .= $conf_entry;
|
|
|
|
}
|
|
|
|
|
|
|
|
my $out = slurp_file( $vsx_sln_tpl_file );
|
|
|
|
$out =~ s/APP_ENTRIES\r\n/$app_entries/m;
|
|
|
|
$out =~ s/CONF_ENTRIES\r\n/$conf_entries/m;
|
|
|
|
|
2014-05-09 13:00:18 +02:00
|
|
|
content_to_file( $out, $vsx_sln_file );
|
2014-05-09 12:56:03 +02:00
|
|
|
}
|
|
|
|
|
2018-01-11 20:51:27 +01:00
|
|
|
sub del_vsx_files {
|
|
|
|
unlink glob "'$vsx_dir/*.$vsx_ext'";
|
|
|
|
unlink $vsx_main_file;
|
|
|
|
unlink $vsx_sln_file;
|
|
|
|
}
|
|
|
|
|
2014-05-07 17:51:20 +02:00
|
|
|
sub main {
|
|
|
|
if( ! check_dirs() ) {
|
|
|
|
chdir '..' or die;
|
2015-01-26 16:42:27 +01:00
|
|
|
check_dirs or die "Must but run from mbedTLS root or scripts dir\n";
|
2014-05-07 17:51:20 +02:00
|
|
|
}
|
|
|
|
|
2018-01-11 20:51:27 +01:00
|
|
|
# Remove old files to ensure that, for example, project files from deleted
|
|
|
|
# apps are not kept
|
|
|
|
del_vsx_files();
|
|
|
|
|
2014-05-08 11:33:30 +02:00
|
|
|
my @app_list = get_app_list();
|
|
|
|
my @headers = <$header_dir/*.h>;
|
|
|
|
my @sources = <$source_dir/*.c>;
|
2019-09-11 07:50:34 +02:00
|
|
|
|
|
|
|
# exclude files from the sources
|
|
|
|
my @excluded_files = ("library/x509_create.c", "library/x509_crt.c", "library/x509_crl.c", "library/x509_csr.c", "library/x509write_crt.c", "library/x509write_csr.c");
|
|
|
|
my @tmp_sources;
|
|
|
|
my $add_to_array = 1;
|
|
|
|
for my $i ( @sources ) {
|
|
|
|
for my $x ( @excluded_files ) {
|
|
|
|
if( $i eq $x ) {
|
|
|
|
$add_to_array = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if( $add_to_array == 1 ) {
|
|
|
|
push(@tmp_sources, $i);
|
|
|
|
}
|
|
|
|
$add_to_array = 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2014-05-08 11:33:30 +02:00
|
|
|
map { s!/!\\!g } @headers;
|
2019-09-11 07:50:34 +02:00
|
|
|
map { s!/!\\!g } @tmp_sources;
|
2014-05-08 11:33:30 +02:00
|
|
|
|
|
|
|
gen_app_files( @app_list );
|
|
|
|
|
2019-09-11 07:50:34 +02:00
|
|
|
gen_main_file( \@headers, \@tmp_sources,
|
2014-05-08 11:33:30 +02:00
|
|
|
$vsx_hdr_tpl, $vsx_src_tpl,
|
|
|
|
$vsx_main_tpl_file, $vsx_main_file );
|
2013-09-16 13:33:42 +02:00
|
|
|
|
2014-05-09 12:56:03 +02:00
|
|
|
gen_vsx_solution( @app_list );
|
2014-05-08 12:53:58 +02:00
|
|
|
|
2013-09-16 13:33:42 +02:00
|
|
|
return 0;
|
|
|
|
}
|