Mercurial > hg > Members > menikon > CbC_xv6
changeset 94:0956648d24e5
impl cmake on macos
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 23 Oct 2019 17:33:25 +0900 |
parents | 7d0ec88cdd22 |
children | 0ddcd561d975 |
files | src/CMakeLists.txt src/arm.c src/context.h src/gearsTools/pmake.pl src/usr/CMakeLists.txt |
diffstat | 5 files changed, 117 insertions(+), 77 deletions(-) [+] |
line wrap: on
line diff
--- a/src/CMakeLists.txt Sat Oct 19 18:44:57 2019 +0900 +++ b/src/CMakeLists.txt Wed Oct 23 17:33:25 2019 +0900 @@ -1,10 +1,23 @@ cmake_minimum_required(VERSION 3.8) -project(xv6cbc C ASM) +project(xv6cbc NONE) set(BUILD_DIR ${PROJECT_BINARY_DIR}) + + add_subdirectory(tools) add_subdirectory(usr) enable_language(C ASM) +if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(CMAKE_SYSROOT "${CBC_XV6_SYSROOT}") + set(CMAKE_OSX_SYSROOT "${CBC_XV6_SYSROOT}") + include_directories("${CMAKE_OSX_SYSROOT}") + include_directories("${CMAKE_OSX_SYSROOT}/usr/include") + include_directories("${CMAKE_OSX_SYSROOT}/usr/include/arm-linux-gnueabihf") + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +endif() set(USE_CUDA,0) # -DUSE_CUDA @@ -39,6 +52,8 @@ macro( GearsCommand ) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DXV6KERNEL") set(CMAKE_C_COMPILER "${CBC_COM}") + set(CMAKE_ASM_COMPILER "${CBC_COM}") + set(CMAKE_LINKER "${X_CMAKE_LINKER}") set(CMAKE_C_LINK_EXECUTABLE "${X_CMAKE_C_LINK_EXECUTABLE}") set( _OPTIONS_ARGS )
--- a/src/arm.c Sat Oct 19 18:44:57 2019 +0900 +++ b/src/arm.c Wed Oct 23 17:33:25 2019 +0900 @@ -125,3 +125,4 @@ } } +
--- a/src/context.h Sat Oct 19 18:44:57 2019 +0900 +++ b/src/context.h Wed Oct 23 17:33:25 2019 +0900 @@ -10,10 +10,18 @@ #include "helper_cuda.h" #endif -#include "types.h" -#include "use_context_numbers.h" -#include "fs.h" -#include "defs.h" +#ifndef NULL +# if defined __GNUG__ && \ + (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 8)) +# define NULL (__null) +# else +# if !defined(__cplusplus) +# define NULL ((void*)0) +# else +# define NULL (0) +# endif +# endif +#endif #ifdef XV6KERNEL #define calloc(a,b) kmalloc((a)*(b)) @@ -463,21 +471,8 @@ struct Context* lockContext; } SpinLock; /* CbCxv6 cbc_context*/ - struct Inode { - uint dev; // Device number - uint inum; // Inode number - int ref; // Reference count - int flags; // I_BUSY, I_VALID - - short type; // copy of disk inode - short major; - short minor; - short nlink; - uint size; - uint addrs[NDIRECT+1]; - } Inode; struct Uinteger { - uint value; + unsigned int value; } Uinteger; struct Short { short value; @@ -485,26 +480,6 @@ struct String { char* string; } String; - // fs.h --- - struct SuperBlock { - uint size; // Size of file system image (blocks) - uint nblocks; // Number of data blocks - uint ninodes; // Number of inodes. - uint nlog; // Number of log blocks - } SuperBlock; - struct Dinode { - short type; // copy of disk inode - short major; - short minor; - short nlink; - uint size; - uint addrs[NDIRECT+1]; - } Dinode; - struct Dirent { - ushort inum; - char name[DIRSIZ]; - } Dirent; - // --- fs.h }; // union Data end this is necessary for cbc_context generator typedef union Data Data;
--- a/src/gearsTools/pmake.pl Sat Oct 19 18:44:57 2019 +0900 +++ b/src/gearsTools/pmake.pl Wed Oct 23 17:33:25 2019 +0900 @@ -3,19 +3,67 @@ 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}; - $cflags = qq|-Wall -g -arch arm -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -Werror -I. -g -O0 - -Wno-macro-redefined -Wno-gnu-designator -Wno-sometimes-uninitialized -Wno-tautological-compare - -I/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/include - -Wno-nullability-completeness -Wno-expansion-to-defined"|; - $ldflags = qq|-B/mnt/dalmore-home/one/src/armgcc/cross/bin/arm-none-eabi- - -DCBCXV6=1 -fno-pic -static -fno-builtin -fno-strict-aliasing -Wall -I. -g -O0|; + $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; @@ -31,26 +79,27 @@ $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; } -$cflags =~ s/\n//g; -create_link_script(); -my $curdir = getcwd; -my $xv6_src_dir = $FindBin::Bin; -$xv6_src_dir =~ s|(.*)/gearsTools(.*)|$1|; +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); -print_exec_system($cmake, - "-DCBC_COM=$cc", - "-DPMAKE_ARGS=\"$cflags\"", - "-DCMAKE_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"); @@ -127,17 +176,3 @@ binary \ initcode \ fs.img - -__END__ - -=encoding utf-8 - -=head1 NAME - -pmake.pl - pmake is a wrapper at cmake in xv6. - -=head1 SYNOPSIS - - pmake.pl <build directory> <cbcxv6 src direcory> - -=cut
--- a/src/usr/CMakeLists.txt Sat Oct 19 18:44:57 2019 +0900 +++ b/src/usr/CMakeLists.txt Wed Oct 23 17:33:25 2019 +0900 @@ -2,16 +2,30 @@ set(CMAKE_C_COMPILER "/usr/bin/cc") project(usr C ASM) +if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(CMAKE_SYSROOT "${CBC_XV6_SYSROOT}") + set(CMAKE_OSX_SYSROOT "${CBC_XV6_SYSROOT}") + include_directories("${CMAKE_OSX_SYSROOT}") + include_directories(SYSTEM "${CMAKE_OSX_SYSROOT}/usr/include") + include_directories(SYSTEM "${CMAKE_OSX_SYSROOT}/usr/include/arm-linux-gnueabihf") + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) +endif() + set(CMAKE_C_FLAGS_DEBUG "-O0") add_definitions(${PMAKE_ARGS}) set(CMAKE_C_COMPILER "${CBC_COM}") +set(CMAKE_ASM_COMPILER "${CBC_COM}") #include_directories("..") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ") set(CMAKE_C_LINK_EXECUTABLE "${KERNEL_LINK_EXECUTABLE}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_LIB} -nostdlib") + macro( GearsCommand ) include_directories(${CMAKE_SOURCE_DIR}) include_directories(${CMAKE_SOURCE_DIR}/usr)