view src/gearsTools/pmake.pl @ 94:d876c9a65239 default tip

impl mac os target
author anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp>
date Wed, 23 Oct 2019 14:31:38 +0900
parents dd1d9ea1b7b5
children
line wrap: on
line source

#!/usr/bin/env perl
use strict;
use warnings;
use FindBin;
use Cwd 'getcwd';
use File::Path 'rmtree';

my ($cc,$cflags,$asm,$ld,$ldflags,$libgcc,$cmake,$kernel_cflags,$kernel_ld_flags,$kernel_ld_command, $initcode_cflags, $initcode_ld_command);

my $curdir = getcwd;

if (@ARGV) {
  if ($ARGV[0] =~ /--delete/) {
    my @current_dir_file = glob "*";
    map { print "$_\n";} @current_dir_file;
    print "delete all files? > [y/n]\n";
    my $ans = <STDIN>;
    if ($ans =~ /y/) {
      print "delete ...\n";
      map { rmtree $_ } @current_dir_file;
    }
  }
}

$cmake = 'cmake';
my @cmake_arg = ();
my $xv6_src_dir = $FindBin::Bin;
$xv6_src_dir =~  s|(.*)/gearsTools(.*)|$1|;


if ($^O =~ /darwin/){
    $cc      = "$ENV{CBC_LANG_COMPILER}-7.0";
    $asm     = "$ENV{CBC_LANG_COMPILER}-7.0";
    $cflags  = qq|-Wall -g --target=armv6-linux-gnueabihf -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -DCBCXV6=1  -g -O0   -nodefaultlibs
             -Wno-macro-redefined -Wno-gnu-designator -Wno-sometimes-uninitialized -Wno-tautological-compare  
             -Wno-nullability-completeness -Wno-expansion-to-defined |;
    $cflags .= ' -B' . $ENV{HOME} .'/workspace/cr/arm_library/usr/lib/gcc/arm-linux-gnueabihf/6.3.0';
    $cflags .= ' --gcc-toolchain=arm-linux-gnueabihf-raspbian';
             #$ld = '/Users/anatofuz/workspace/compiler/llvm/llvm-project/build/bin/lld';
             #$ld = '/Users/anatofuz/workspace/compiler/llvm/llvm-project/build/bin/ld.lld';
    $ld = '/usr/local/linaro/arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-ld';

    #$libgcc = '/Users/anatofuz/workspace/cr/arm_library/usr/lib/gcc/arm-linux-gnueabihf/6.3.0/libgcc.a';
    $libgcc = '/usr/local/lib/gcc/arm-none-eabi/7.3.1/libgcc.a';
    #chomp($libgcc = `$cc --print-libgcc-file-name`);
    $ldflags = " -L. -T kernel-cmake.ld";
    $kernel_cflags   = '--target=armv6-linux-gnueabihf  -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -Werror -g -O0 -iquote ../   -c';
    # -DX_CMAKE_C_LINK_EXECUTABLE=\"$ld $ldflags  -o kernel.elf <OBJECTS> $libgcc   -b binary initcode usr/fs.img\"
    $kernel_ld_flags =  ' -L. -N -e main -Ttext 0 <OBJECTS> -o <TARGET> <LINK_LIBRARIES>  -L ../ ' . $libgcc;
    #$kernel_ld_flags =  ' -L. -N -e main -Ttext 0 <OBJECTS> -o <TARGET> <LINK_LIBRARIES>' ;
    $kernel_ld_command = "$ld $kernel_ld_flags";
    $initcode_cflags = '--target=armv6-linux-gnueabihf   -nostdinc  -c';
    $initcode_ld_command = "$ld -L.  -N -e start -Ttext 0 <OBJECTS> -o <TARGET> <LINK_LIBRARIES>";

    my $arm_library = '/Users/anatofuz/workspace/cr/arm_library';

    push(@cmake_arg,
      "-DCBC_XV6_SYSROOT=\"$arm_library\"",
      # "-DCMAKE_OSX_SYSROOT=\"$arm_library\"",
      #"-DCMAKE_AR=\"/Users/anatofuz/workspace/compiler/llvm/llvm-project/build/bin/llvm-ar\"",
      #"-DCMAKE_RANLIB=\"/Users/anatofuz/workspace/compiler/llvm/llvm-project/build/bin/llvm-ar\"",
      "-DCMAKE_AR=\"/usr/local/linaro/arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-ar\"",
      "-DCMAKE_RANLIB=\"/usr/local/linaro/arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-ranlib\"",
      # "-DCMAKE_OSX_XV6_INCLUDE_DIR=\"$arm_library/usr/include\"",
    );

} else {
    $cc     = '/mnt/dalmore-home/one/src/armgcc/cross/bin/arm-none-eabi-gcc';
    $asm    = $cc;
    $cflags = qq|-B/mnt/dalmore-home/one/src/armgcc/cross/bin/arm-none-eabi-  
             -DCBCXV6=1 -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall  -g -O0|;
    $ld     = '/mnt/dalmore-home/one/src/armgcc/cross/bin/arm-none-eabi-ld';
    chomp($libgcc = `$cc --print-libgcc-file-name`);
    $cmake  .= 3;
    $ldflags = " -L. -T kernel-cmake.ld";
    $kernel_cflags   = '-march=armv6 -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -Werror -g -O0 -iquote ../   -c';
    # -DX_CMAKE_C_LINK_EXECUTABLE=\"$ld $ldflags  -o kernel.elf <OBJECTS> $libgcc   -b binary initcode usr/fs.img\"
    $kernel_ld_flags =  ' -L. -N -e main -Ttext 0 <OBJECTS> -o <TARGET> <LINK_LIBRARIES>  -L ../ /mnt/dalmore-home/one/src/gcc-arm-none-eabi-6-2017-q2-update/bin/../lib/gcc/arm-none-eabi/6.3.1/libgcc.a';
    $kernel_ld_command = "$ld $kernel_ld_flags";
    $initcode_cflags = '-march=armv6   -nostdinc  -c';
    $initcode_ld_command = "$ld -L.  -N -e start -Ttext 0 <OBJECTS> -o <TARGET> <LINK_LIBRARIES>";

    $cflags =~ s/\n//g;
}

push(@cmake_arg,
   "-DCBC_COM=$cc",
   "-DPMAKE_ARGS=\"$cflags\"",
  "-DCBC_ASM_COMPILER=$cc",
  "-DX_CMAKE_LINKER=$ld",
  "-DX_CMAKE_C_LINK_EXECUTABLE=\"$ld $ldflags  -o kernel.elf <OBJECTS> $libgcc   -b binary initcode fs.img\"",
  "-DKERNEL_LINK_EXECUTABLE=\"$kernel_ld_command\"",
  "-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=TRUE",
  "-DINITOCDE_CFLAGS=\"$initcode_cflags\"",
  "-DINITOCDE_LINK_EXECUTABLE=\"$initcode_ld_command\"",
  "-S $xv6_src_dir",
  $curdir);

unshift(@cmake_arg, $cmake);

create_link_script();
print_exec_system(@cmake_arg);

system("make");
#system("sh","link.sh");

sub create_link_script {
  my @link_script;
  while (my $line = <DATA>){
    $line =~ s/LD/$ld/;
    $line =~ s/LIBGCC/$libgcc/;
    push @link_script,$line;
  }
  if ($^O =~ /darwin/){
    for (@link_script){
       s/CMakeFiles/build/;
       s|kernel\.dir/||;
    }
  }
  open my $fh, '>', 'link.sh';
  print $fh "@link_script";
}

sub print_exec_system {
  my @query = @_;
  print(join(' ',@query), "\n");
  system(join(' ',@query));
}



__DATA__
cp  initcode ./CMakeFiles/kernel.dir/initcode 
cp  fs.img ./CMakeFiles/kernel.dir/fs.img

LD \
-L. \
-T \
kernel-cmake.ld \
-o \
kernel.elf \
 \
CMakeFiles/kernel.dir/lib/string.c.o \
CMakeFiles/kernel.dir/arm.c.o \
CMakeFiles/kernel.dir/asm.S.o \
CMakeFiles/kernel.dir/bio.c.o \
CMakeFiles/kernel.dir/buddy.c.o \
CMakeFiles/kernel.dir/c/console.c.o \
CMakeFiles/kernel.dir/exec.c.o \
CMakeFiles/kernel.dir/c/file.c.o \
CMakeFiles/kernel.dir/fs.c.o \
CMakeFiles/kernel.dir/log.c.o \
CMakeFiles/kernel.dir/main.c.o \
CMakeFiles/kernel.dir/memide.c.o \
CMakeFiles/kernel.dir/c/pipe.c.o \
CMakeFiles/kernel.dir/c/proc.c.o \
CMakeFiles/kernel.dir/c/spinlock.c.o \
CMakeFiles/kernel.dir/start.c.o \
CMakeFiles/kernel.dir/swtch.S.o \
CMakeFiles/kernel.dir/c/syscall.c.o \
CMakeFiles/kernel.dir/c/sysfile.c.o \
CMakeFiles/kernel.dir/sysproc.c.o \
CMakeFiles/kernel.dir/trap_asm.S.o \
CMakeFiles/kernel.dir/trap.c.o \
CMakeFiles/kernel.dir/vm.c.o \
CMakeFiles/kernel.dir/device/picirq.c.o \
CMakeFiles/kernel.dir/device/timer.c.o \
CMakeFiles/kernel.dir/device/uart.c.o \
CMakeFiles/kernel.dir/entry.S.o \
CMakeFiles/kernel.dir/c/kernel-context.c.o \
 \
 \
LIBGCC \
 \
-b \
binary \
initcode \
fs.img