diff --git a/ports/busybox/config b/ports/busybox/config index e2e3a4c..d4097db 100644 --- a/ports/busybox/config +++ b/ports/busybox/config @@ -31,7 +31,6 @@ CONFIG_FEATURE_SUID=y CONFIG_FEATURE_SUID_CONFIG=y CONFIG_FEATURE_SUID_CONFIG_QUIET=y CONFIG_FEATURE_PREFER_APPLETS=y -CONFIG_BUSYBOX_EXEC_PATH="/Applications/POSIX/bin/busybox" # CONFIG_SELINUX is not set # CONFIG_FEATURE_CLEAN_UP is not set # CONFIG_FEATURE_SYSLOG_INFO is not set diff --git a/ports/port.script b/ports/port.script index cf690e8..2203906 100644 --- a/ports/port.script +++ b/ports/port.script @@ -14,6 +14,10 @@ str crossDirectory; str rootDirectory; str compilerPath; +str posixDestDir; +str posixPrefix; +str posixRoot; + // GCC port only: bool buildCross #option; bool runningMakefiles #persist; @@ -40,13 +44,13 @@ void PortFFmpeg() { assert SystemShellExecuteWithWorkingDirectory("bin/build-ffmpeg", "../source/configure --disable-all --enable-cross-compile --disable-pthreads " - + "--cc=%toolchainPrefix%-gcc --cxx=%toolchainPrefix%-g++ --prefix=/Applications/POSIX " + + "--cc=%toolchainPrefix%-gcc --cxx=%toolchainPrefix%-g++ --prefix=%posixPrefix% " + "--enable-avcodec --enable-avformat --enable-swscale --enable-decoder=h264 --enable-parser=h264 " + "--enable-decoder=aac --enable-parser=aac --enable-demuxer=mov --enable-protocol=file "); // --disable-optimizations assert SystemShellExecuteWithWorkingDirectory("bin/build-ffmpeg", "make -j %processorCount%"); - assert SystemShellExecuteWithWorkingDirectory("bin/build-ffmpeg", "make DESTDIR=%rootDirectory% install"); + assert SystemShellExecuteWithWorkingDirectory("bin/build-ffmpeg", "make DESTDIR=%posixDestDir% install"); assert FileCopy("bin/source/LICENSE.md", "bin/FFmpeg License/LICENSE.md"); assert FileCopy("bin/source/COPYING.GPLv2", "bin/FFmpeg License/COPYING.GPLv2"); @@ -76,9 +80,9 @@ void PortNasm() { str version = "2.15.05"; get_source.Get("https://www.nasm.us/pub/nasm/releasebuilds/%version%/nasm-%version%.tar.xz", "nasm-%version%", "3caf6729c1073bf96629b57cee31eeb54f4f8129b01902c73428836550b30a3f"); - assert SystemShellExecuteWithWorkingDirectory("bin/source", "./configure --host=%toolchainPrefix% CC=%toolchainPrefix%-gcc CXX=%toolchainPrefix%-g++ --prefix=/Applications/POSIX"); + assert SystemShellExecuteWithWorkingDirectory("bin/source", "./configure --host=%toolchainPrefix% CC=%toolchainPrefix%-gcc CXX=%toolchainPrefix%-g++ --prefix=%posixPrefix%"); assert SystemShellExecuteWithWorkingDirectory("bin/source", "make -j %processorCount%"); - assert SystemShellExecuteWithWorkingDirectory("bin/source", "make install DESTDIR=%rootDirectory%"); + assert SystemShellExecuteWithWorkingDirectory("bin/source", "make install DESTDIR=%posixDestDir%"); assert FileCopy("bin/source/LICENSE", "bin/Nasm License.txt"); PathDeleteRecursively("bin/source"); } @@ -100,10 +104,10 @@ void PortBochs() { assert SystemShellExecuteWithWorkingDirectory("bin/source", "./configure --with-essence CC=%toolchainPrefix%-gcc CXX=%toolchainPrefix%-g++ " + "CFLAGS=\" -O2 -D_GNU_SOURCE \" CXXFLAGS=\" -O2 -D_GNU_SOURCE \" " - + "--host=%toolchainPrefix% --prefix=\"/Applications/POSIX\" --exec-prefix=\"/Applications/POSIX\" " + + "--host=%toolchainPrefix% --prefix=\"%posixPrefix%\" --exec-prefix=\"%posixPrefix%\" " + "--enable-cpu-level=6 --enable-x86-64 --enable-all-optimizations"); assert SystemShellExecuteWithWorkingDirectory("bin/source", "make -j %processorCount%"); - assert SystemShellExecuteWithWorkingDirectory("bin/source", "make DESTDIR=%rootDirectory% install"); + assert SystemShellExecuteWithWorkingDirectory("bin/source", "make DESTDIR=%posixDestDir% install"); PathDeleteRecursively("bin/source"); } @@ -117,10 +121,11 @@ void PortBusybox() { get_source.Get("https://www.busybox.net/downloads/busybox-%version%.tar.bz2", "busybox-%version%", "12cec6bd2b16d8a9446dd16130f2b92982f1819f6e1c5f5887b6db03f5660d28"); str[] config = StringSplitByCharacter(FileReadAll("ports/busybox/config"), "\n", true); + config:insert("CONFIG_BUSYBOX_EXEC_PATH=\"%posixPrefix%/bin/busybox\"", 34); config:insert("CONFIG_SYSROOT=\"%rootDirectory%\"", 51); assert FileWriteAll("bin/source/.config", StringJoin(config, "\n", false)); assert SystemShellExecuteWithWorkingDirectory("bin/source", "make -j %processorCount%"); - assert FileCopy("bin/source/busybox", "%rootDirectory%/Applications/POSIX/bin/busybox"); + assert FileCopy("bin/source/busybox", "%posixRoot%/bin/busybox"); assert FileCopy("bin/source/LICENSE", "bin/BusyBox License.txt"); PathDeleteRecursively("bin/source"); @@ -147,11 +152,11 @@ void PortMesa() { + "-Dosmesa=gallium -Ddefault_library=static -Dllvm=false"); assert SystemShellExecuteWithWorkingDirectory("bin/source", "ninja -C ../build-mesa -j %processorCount%"); - assert FileCopy("bin/build-mesa/subprojects/expat-2.2.5/libexpat.a", "root/Applications/POSIX/lib/libexpat.a"); - assert FileCopy("bin/build-mesa/subprojects/zlib-1.2.11/libz.a", "root/Applications/POSIX/lib/libz.a"); - assert FileCopy("bin/build-mesa/src/gallium/targets/osmesa/libOSMesa.a", "root/Applications/POSIX/lib/libOSMesa.a"); - assert PathCopyRecursively("bin/source/include/GL", "root/Applications/POSIX/include/GL"); - assert PathCopyRecursively("bin/source/include/KHR", "root/Applications/POSIX/include/KHR"); + assert FileCopy("bin/build-mesa/subprojects/expat-2.2.5/libexpat.a", "%posixRoot%/lib/libexpat.a"); + assert FileCopy("bin/build-mesa/subprojects/zlib-1.2.11/libz.a", "%posixRoot%/lib/libz.a"); + assert FileCopy("bin/build-mesa/src/gallium/targets/osmesa/libOSMesa.a", "%posixRoot%/lib/libOSMesa.a"); + assert PathCopyRecursively("bin/source/include/GL", "%posixRoot%/include/GL"); + assert PathCopyRecursively("bin/source/include/KHR", "%posixRoot%/include/KHR"); assert FileCopy("bin/source/docs/license.html", "bin/Mesa License.html"); PathDeleteRecursively("bin/source"); @@ -219,7 +224,7 @@ void PortGCC() { assert SystemShellExecute("gcc %libraryPath% -lmpfr bin/test.c -o bin/test"); // If this fails, install mpfr/libmpfr/libmpfr-dev. assert SystemShellExecute("gcc %libraryPath% -lgmp bin/test.c -o bin/test"); // If this fails, install gmp/libgmp/libgmp-dev. } else { - destDir = "DESTDIR=%rootDirectory%"; + destDir = "DESTDIR=%posixDestDir%"; } // Ask the user if they want to resume an incomplete build. @@ -333,19 +338,19 @@ void PortGCC() { // Build libraries. if !buildCross { assert SystemShellExecuteWithWorkingDirectory("bin/build-gmp", - "../gmp-src/configure --host=%toolchainPrefix% --prefix=\"/Applications/POSIX\" " + "../gmp-src/configure --host=%toolchainPrefix% --prefix=\"%posixPrefix%\" " + "--without-readline CC=%toolchainPrefix%-gcc CXX=%toolchainPrefix%-g++"); assert SystemShellExecuteWithWorkingDirectory("bin/build-gmp", "make -j %processorCount%"); assert SystemShellExecuteWithWorkingDirectory("bin/build-gmp", "make %destDir% install"); assert SystemShellExecuteWithWorkingDirectory("bin/build-mpfr", - "../mpfr-src/configure --host=%toolchainPrefix% --prefix=\"/Applications/POSIX\" " + "../mpfr-src/configure --host=%toolchainPrefix% --prefix=\"%posixPrefix%\" " + "CC=%toolchainPrefix%-gcc CXX=%toolchainPrefix%-g++"); assert SystemShellExecuteWithWorkingDirectory("bin/build-mpfr", "make -j %processorCount%"); assert SystemShellExecuteWithWorkingDirectory("bin/build-mpfr", "make %destDir% install"); assert SystemShellExecuteWithWorkingDirectory("bin/build-mpc", - "../mpc-src/configure --host=%toolchainPrefix% --prefix=\"/Applications/POSIX\" " + "../mpc-src/configure --host=%toolchainPrefix% --prefix=\"%posixPrefix%\" " + "CC=%toolchainPrefix%-gcc CXX=%toolchainPrefix%-g++"); assert SystemShellExecuteWithWorkingDirectory("bin/build-mpc", "make -j %processorCount%"); assert SystemShellExecuteWithWorkingDirectory("bin/build-mpc", "make %destDir% install"); @@ -354,13 +359,13 @@ void PortGCC() { // Run configure for Binutils and GCC. if !buildCross { assert SystemShellExecuteWithWorkingDirectory("bin/build-binutils", - "../binutils-src/configure --host=%toolchainPrefix% --prefix=\"/Applications/POSIX\" " - + "--with-local-prefix=\"/Applications/POSIX/local\" --with-build-sysroot=%rootDirectory% " + "../binutils-src/configure --host=%toolchainPrefix% --prefix=\"%posixPrefix%\" " + + "--with-local-prefix=\"%posixPrefix%/local\" --with-build-sysroot=%rootDirectory% " + "--without-isl --disable-nls --disable-werror --without-target-bdw-gc " + "CC=%toolchainPrefix%-gcc CXX=%toolchainPrefix%-g++"); assert SystemShellExecuteWithWorkingDirectory("bin/build-gcc", - "../gcc-src/configure --host=%toolchainPrefix% --target=%toolchainPrefix% --prefix=\"/Applications/POSIX\" " - + "--with-local-prefix=\"/Applications/POSIX/local\" --with-build-sysroot=%rootDirectory% " + "../gcc-src/configure --host=%toolchainPrefix% --target=%toolchainPrefix% --prefix=\"%posixPrefix%\" " + + "--with-local-prefix=\"%posixPrefix%/local\" --with-build-sysroot=%rootDirectory% " + "--without-isl --disable-nls --disable-werror --without-target-bdw-gc " + "--enable-languages=c,c++ " + "CC=%toolchainPrefix%-gcc CXX=%toolchainPrefix%-g++ LD=%toolchainPrefix%-ld"); @@ -433,9 +438,9 @@ void PortFreeType() { assert FileCopy("ports/freetype/patch-modules.cfg", "bin/freetype/modules.cfg"); } - if !PathExists("root/Applications/POSIX/include/ft2build.h") { - assert FileCopy("bin/freetype/include/ft2build.h", "root/Applications/POSIX/include/ft2build.h"); - assert PathCopyRecursively("bin/freetype/include/freetype", "root/Applications/POSIX/include/freetype"); + if !PathExists("%posixRoot%/include/ft2build.h") { + assert FileCopy("bin/freetype/include/ft2build.h", "%posixRoot%/include/ft2build.h"); + assert PathCopyRecursively("bin/freetype/include/freetype", "%posixRoot%/include/freetype"); } if !PathExists("bin/freetype/libfreetype_%targetName%.a") { @@ -448,7 +453,7 @@ void PortFreeType() { } else if targetName == "x86_32" { assert SystemShellExecuteWithWorkingDirectory("bin/freetype", "./configure --without-zlib --without-bzip2 --without-png --without-harfbuzz " - + "CFLAGS=\"-g -ffreestanding -Wno-unused-function -O3 -I../../root/Applications/POSIX/include\" " + + "CFLAGS=\"-g -ffreestanding -Wno-unused-function -O3 -I%posixRoot%/include\" " + "LDFLAGS=\"-nostdlib -lgcc\" CC=%toolchainPrefix%-gcc --host=%toolchainPrefix%"); assert SystemShellExecuteWithWorkingDirectory("bin/freetype", "sed -i '/define FT_USE_AUTOCONF_SIZEOF_TYPES/d' builds/unix/ftconfig.h"); @@ -460,7 +465,7 @@ void PortFreeType() { assert FileCopy("bin/freetype/objs/.libs/libfreetype.a", "bin/freetype/libfreetype_%targetName%.a"); } - assert FileCopy("bin/freetype/libfreetype_%targetName%.a", "root/Applications/POSIX/lib/libfreetype.a"); + assert FileCopy("bin/freetype/libfreetype_%targetName%.a", "%posixRoot%/lib/libfreetype.a"); } void PortHarfBuzz() { @@ -484,9 +489,9 @@ void PortHarfBuzz() { } } - if !PathExists("root/Applications/POSIX/include/harfbuzz") { - assert PathCreateLeadingDirectories("root/Applications/POSIX/include/harfbuzz"); - assert PathCopyFilteredInto("bin/harfbuzz/src", ["*.h"], -1, "root/Applications/POSIX/include/harfbuzz"); + if !PathExists("%posixRoot%/include/harfbuzz") { + assert PathCreateLeadingDirectories("%posixRoot%/include/harfbuzz"); + assert PathCopyFilteredInto("bin/harfbuzz/src", ["*.h"], -1, "%posixRoot%/include/harfbuzz"); } if !PathExists("bin/harfbuzz/libharfbuzz_%targetName%.a") { @@ -512,7 +517,7 @@ void PortHarfBuzz() { if tasks:len() == processorCount { tasks:find_and_delete(await tasks); } str command = "%toolchainPrefix%-gcc -c %sources[i]%.cc -o %sources[i]%.o " + "-DHAVE_CONFIG_H -I. -I.. -ffreestanding -fno-rtti -g -O3 -DHB_TINY -fno-exceptions -fno-threadsafe-statics " - + "-fvisibility-inlines-hidden -DHB_NO_PRAGMA_GCC_DIAGNOSTIC_ERROR -I../../../root/Applications/POSIX/include"; + + "-fvisibility-inlines-hidden -DHB_NO_PRAGMA_GCC_DIAGNOSTIC_ERROR -I%posixRoot%/include"; tasks:add(SystemShellExecuteWithWorkingDirectory:curry("bin/harfbuzz/src"):curry(command):assert():async()); link += sources[i] + ".o "; } @@ -523,7 +528,7 @@ void PortHarfBuzz() { assert FileCopy("bin/harfbuzz/src/libharfbuzz.a", "bin/harfbuzz/libharfbuzz_%targetName%.a"); } - assert FileCopy("bin/harfbuzz/libharfbuzz_%targetName%.a", "root/Applications/POSIX/lib/libharfbuzz.a"); + assert FileCopy("bin/harfbuzz/libharfbuzz_%targetName%.a", "%posixRoot%/lib/libharfbuzz.a"); } void PortMusl() { @@ -554,27 +559,27 @@ void PortMusl() { install = true; } - if !PathExists("root/Applications/POSIX/include/stdio.h") { + if !PathExists("%posixRoot%/include/stdio.h") { install = true; } if install { - assert PathCreateLeadingDirectories("root/Applications/POSIX/lib"); - assert PathCreateLeadingDirectories("root/Applications/POSIX/include"); + assert PathCreateLeadingDirectories("%posixRoot%/lib"); + assert PathCreateLeadingDirectories("%posixRoot%/include"); - assert FileCopy("ports/musl/libc.a", "root/Applications/POSIX/lib/libc.a"); - assert FileCopy("ports/musl/empty.a", "root/Applications/POSIX/lib/libm.a"); - assert FileCopy("ports/musl/empty.a", "root/Applications/POSIX/lib/libpthread.a"); - assert FileCopy("ports/musl/empty.a", "root/Applications/POSIX/lib/librt.a"); + assert FileCopy("ports/musl/libc.a", "%posixRoot%/lib/libc.a"); + assert FileCopy("ports/musl/empty.a", "%posixRoot%/lib/libm.a"); + assert FileCopy("ports/musl/empty.a", "%posixRoot%/lib/libpthread.a"); + assert FileCopy("ports/musl/empty.a", "%posixRoot%/lib/librt.a"); - assert PathCopyRecursively("bin/musl/include", "root/Applications/POSIX/include"); - assert PathCopyRecursively("bin/musl/arch/generic", "root/Applications/POSIX/include"); - assert PathCopyRecursively("ports/musl/obj_bits_%targetName%", "root/Applications/POSIX/include"); + assert PathCopyRecursively("bin/musl/include", "%posixRoot%/include"); + assert PathCopyRecursively("bin/musl/arch/generic", "%posixRoot%/include"); + assert PathCopyRecursively("ports/musl/obj_bits_%targetName%", "%posixRoot%/include"); if targetName == "x86_64" { - assert PathCopyRecursively("bin/musl/arch/x86_64", "root/Applications/POSIX/include"); + assert PathCopyRecursively("bin/musl/arch/x86_64", "%posixRoot%/include"); } else if targetName == "x86_32" { - assert PathCopyRecursively("bin/musl/arch/i386", "root/Applications/POSIX/include"); + assert PathCopyRecursively("bin/musl/arch/i386", "%posixRoot%/include"); } else { assert false; } @@ -589,18 +594,22 @@ void Start() { if processorCount > 16 processorCount = 16; } - // Create folders. - assert PathCreateLeadingDirectories("bin"); - assert PathCreateLeadingDirectories("root/Essence"); - assert PathCreateLeadingDirectories("root/Applications/POSIX/bin"); - assert PathCreateLeadingDirectories("root/Applications/POSIX/include"); - assert PathCreateLeadingDirectories("root/Applications/POSIX/lib"); - sourceTree = PathGetDefaultPrefix(); crossDirectory = sourceTree + "/cross"; rootDirectory = sourceTree + "/root"; compilerPath = crossDirectory + "/bin"; + posixDestDir = rootDirectory; + posixPrefix = "/Applications/POSIX"; + posixRoot = rootDirectory + posixPrefix; + + // Create folders. + assert PathCreateLeadingDirectories("bin"); + assert PathCreateLeadingDirectories("%rootDirectory%/Essence"); + assert PathCreateLeadingDirectories("%posixRoot%/bin"); + assert PathCreateLeadingDirectories("%posixRoot%/include"); + assert PathCreateLeadingDirectories("%posixRoot%/lib"); + str[] portNames = [ "ffmpeg", "uxn", "nasm", "bochs", "busybox", "mesa", "gcc", "freetype", "harfbuzz", "musl" ]; PortCallback[] portCallbacks = [ PortFFmpeg, PortUxn, PortNasm, PortBochs, PortBusybox, PortMesa, PortGCC, PortFreeType, PortHarfBuzz, PortMusl ]; diff --git a/util/build.c b/util/build.c index 49694cb..c147035 100644 --- a/util/build.c +++ b/util/build.c @@ -164,7 +164,7 @@ bool BuildAPIDependencies() { LoadOptions(); if (CheckDependencies("API Header")) { - CallSystem("bin/build_core headers"); + CallSystem("bin/build_core headers system root/Applications/POSIX/include/essence.h"); ParseDependencies("bin/dependency_files/api_header.d", "API Header", false); } diff --git a/util/build_core.c b/util/build_core.c index d0c7e39..d2bfdd8 100644 --- a/util/build_core.c +++ b/util/build_core.c @@ -215,7 +215,7 @@ const char *toolchainConvertSVG = "/Applications/POSIX/bin/render_svg"; const char *toolchainLinkerScripts = "/Applications/POSIX/lib"; const char *toolchainCRTObjects = "/Applications/POSIX/lib"; const char *toolchainCompilerObjects = "/Applications/POSIX/lib/gcc/x86_64-essence/" GCC_VERSION; -const char *target = "x86_64"; // TODO Don't hardcode the target. +const char *target = "x86_64"; // TODO Don't hard code the target. char *executeEnvironment[3] = { (char *) "PATH=/Applications/POSIX/bin", diff --git a/util/header_generator.c b/util/header_generator.c index 653e358..4a2bf5f 100644 --- a/util/header_generator.c +++ b/util/header_generator.c @@ -4,7 +4,6 @@ File output, outputAPIArray, outputSyscallArray, outputDependencies, outputEnumS char *buffer; int position; -#define DEST_OS "root/Applications/POSIX/include/essence.h" #define DEST_API_ARRAY "bin/generated_code/api_array.h" #define DEST_SYSCALL_ARRAY "bin/generated_code/syscall_array.h" #define DEST_ENUM_STRINGS_ARRAY "bin/generated_code/enum_strings_array.h" @@ -1204,11 +1203,12 @@ int HeaderGeneratorMain(int argc, char **argv) { if (argc == 3) { language = argv[1]; output = FileOpen(argv[2], 'w'); - } else if (argc == 1) { - output = FileOpen(DEST_OS, 'w'); - outputAPIArray = FileOpen(DEST_API_ARRAY, 'w'); - outputSyscallArray = FileOpen(DEST_SYSCALL_ARRAY, 'w'); - outputEnumStringsArray = FileOpen(DEST_ENUM_STRINGS_ARRAY, 'w'); + + if (0 == strcmp(argv[1], "system")) { + outputAPIArray = FileOpen(DEST_API_ARRAY, 'w'); + outputSyscallArray = FileOpen(DEST_SYSCALL_ARRAY, 'w'); + outputEnumStringsArray = FileOpen(DEST_ENUM_STRINGS_ARRAY, 'w'); + } } else { Log("Usage: %s \n", argv[0]); return 1; @@ -1309,7 +1309,7 @@ int HeaderGeneratorMain(int argc, char **argv) { } } - if (0 == strcmp(language, "c")) { + if (0 == strcmp(language, "c") || 0 == strcmp(language, "system")) { OutputC(&root); } else if (0 == strcmp(language, "odin")) { OutputOdin(&root); diff --git a/util/start.script b/util/start.script index 0f411df..311cb9c 100644 --- a/util/start.script +++ b/util/start.script @@ -67,6 +67,18 @@ void GenerateOVF() { assert FileWriteAll("bin/ova/Essence.ovf", result); } +void DeleteUnneededDirectoriesForDebugInfo() { + PathDeleteRecursively("cross"); + PathDeleteRecursively("Essence"); + PathDeleteRecursively("bin/ova"); + PathDeleteRecursively("bin/cache"); + PathDeleteRecursively("bin/freetype"); + PathDeleteRecursively("bin/harfbuzz"); + PathDeleteRecursively("bin/musl"); + PathDeleteRecursively("bin/root/Applications/POSIX/lib"); + PathDeleteRecursively(".git"); +} + void AutomationBuild() { // TODO: // Copy the source onto the drive for self hosting. @@ -160,15 +172,7 @@ void AutomationBuild() { assert SystemShellExecute("tar -cJf ../Essence.tar.xz Essence/"); // Compress the debug info. - PathDeleteRecursively("cross"); - PathDeleteRecursively("Essence"); - PathDeleteRecursively("bin/ova"); - PathDeleteRecursively("bin/cache"); - PathDeleteRecursively("bin/freetype"); - PathDeleteRecursively("bin/harfbuzz"); - PathDeleteRecursively("bin/musl"); - PathDeleteRecursively("bin/root/Applications/POSIX/lib"); - PathDeleteRecursively(".git"); + DeleteUnneededDirectoriesForDebugInfo(); assert SystemShellExecuteWithWorkingDirectory("..", "tar -cJf debug_info.tar.xz essence"); } @@ -201,12 +205,6 @@ void AutomationRunTests() { assert SystemShellExecute("bin/build build"); assert SystemShellExecute("bin/build build-port busybox"); assert SystemShellExecute("bin/build run-tests"); - PathDeleteRecursively("cross"); - PathDeleteRecursively("bin/cache"); - PathDeleteRecursively("bin/freetype"); - PathDeleteRecursively("bin/harfbuzz"); - PathDeleteRecursively("bin/musl"); - PathDeleteRecursively("bin/root/Applications/POSIX/lib"); - PathDeleteRecursively("bin/drive"); - PathDeleteRecursively(".git"); + DeleteUnneededDirectoriesForDebugInfo(); + PathDelete("bin/drive"); }