switched to build.cpp

master
Allen Webster 2016-10-28 17:25:16 -04:00
parent 1068a1de24
commit 92acc0bc08
3 changed files with 211 additions and 76 deletions

View File

@ -3503,7 +3503,7 @@ process_config_file(Application_Links *app){
int32_t size = ftell(file); int32_t size = ftell(file);
char *mem = (char*)push_block(&global_part, size+1); char *mem = (char*)push_block(&global_part, size+1);
fseek(file, 0, SEEK_SET); fseek(file, 0, SEEK_SET);
int32_t check_size = fread(mem, 1, size, file); int32_t check_size = (int32_t)fread(mem, 1, size, file);
if (check_size == size){ if (check_size == size){
mem[size] = 0; mem[size] = 0;
fclose(file); fclose(file);

View File

@ -11,7 +11,7 @@ SET BUILD_MODE=%1
if "%BUILD_MODE%" == "" (SET BUILD_MODE="/DDEV_BUILD") if "%BUILD_MODE%" == "" (SET BUILD_MODE="/DDEV_BUILD")
pushd ..\build pushd ..\build
cl %OPTS% ..\code\build.c /Zi /Febuild %BUILD_MODE% cl %OPTS% ..\code\build.cpp /Zi /Febuild %BUILD_MODE%
if %ERRORLEVEL% neq 0 (set FirstError=1) if %ERRORLEVEL% neq 0 (set FirstError=1)
popd popd

View File

@ -77,10 +77,10 @@ static uint64_t get_time();
static int32_t get_current_directory(char *buffer, int32_t max); static int32_t get_current_directory(char *buffer, int32_t max);
static void execute(char *dir, char *str); static void execute(char *dir, char *str);
static void make_folder_if_missing(char *folder); static void make_folder_if_missing(char *dir, char *folder);
static void clear_folder(char *folder); static void clear_folder(char *folder);
static void copy_file(char *path, char *file, char *folder, char *newname); static void copy_file(char *path, char *file, char *folder1, char *folder2, char *newname);
static void copy_all(char *source, char *folder); static void copy_all(char *source, char *tag, char *folder);
static void zip(char *parent, char *folder, char *dest); static void zip(char *parent, char *folder, char *dest);
#if defined(IS_WINDOWS) #if defined(IS_WINDOWS)
@ -108,11 +108,11 @@ typedef union _LARGE_INTEGER {
# define WINAPI # define WINAPI
#endif #endif
DWORD WINAPI GetCurrentDirectoryA(_In_ DWORD nBufferLength, _Out_ LPTSTR lpBuffer); extern "C" DWORD WINAPI GetCurrentDirectoryA(_In_ DWORD nBufferLength, _Out_ LPTSTR lpBuffer);
BOOL WINAPI QueryPerformanceCounter(_Out_ LARGE_INTEGER *lpPerformanceCount); extern "C" BOOL WINAPI QueryPerformanceCounter(_Out_ LARGE_INTEGER *lpPerformanceCount);
BOOL WINAPI QueryPerformanceFrequency(_Out_ LARGE_INTEGER *lpFrequency); extern "C" BOOL WINAPI QueryPerformanceFrequency(_Out_ LARGE_INTEGER *lpFrequency);
BOOL WINAPI CreateDirectoryA(_In_ LPCTSTR lpPathName, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes); extern "C" BOOL WINAPI CreateDirectoryA(_In_ LPCTSTR lpPathName, _In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes);
BOOL WINAPI CopyFileA(_In_ LPCTSTR lpExistingFileName, _In_ LPCTSTR lpNewFileName, _In_ BOOL bFailIfExists); extern "C" BOOL WINAPI CopyFileA(_In_ LPCTSTR lpExistingFileName, _In_ LPCTSTR lpNewFileName, _In_ BOOL bFailIfExists);
static uint64_t perf_frequency; static uint64_t perf_frequency;
@ -159,10 +159,19 @@ slash_fix(char *path){
} }
static void static void
make_folder_if_missing(char *folder){ make_folder_if_missing(char *dir, char *folder){
char *p = folder; slash_fix(dir);
slash_fix(folder);
char space[1024];
String path = make_fixed_width_string(space);
append_sc(&path, dir);
if (folder){
append_sc(&path, "\\");
append_sc(&path, folder);
}
terminate_with_null(&path);
char *p = path.str;
for (; *p; ++p){ for (; *p; ++p){
if (*p == '\\'){ if (*p == '\\'){
*p = 0; *p = 0;
@ -181,7 +190,7 @@ clear_folder(char *folder){
} }
static void static void
copy_file(char *path, char *file, char *folder, char *newname){ copy_file(char *path, char *file, char *folder1, char *folder2, char *newname){
char src[256], dst[256]; char src[256], dst[256];
String b = make_fixed_width_string(src); String b = make_fixed_width_string(src);
if (path){ if (path){
@ -192,8 +201,12 @@ copy_file(char *path, char *file, char *folder, char *newname){
terminate_with_null(&b); terminate_with_null(&b);
b = make_fixed_width_string(dst); b = make_fixed_width_string(dst);
append_sc(&b, folder); append_sc(&b, folder1);
append_sc(&b, "\\"); append_sc(&b, "\\");
if (folder2){
append_sc(&b, folder2);
append_sc(&b, "\\");
}
if (newname){ if (newname){
append_sc(&b, newname); append_sc(&b, newname);
} }
@ -209,10 +222,15 @@ copy_file(char *path, char *file, char *folder, char *newname){
} }
static void static void
copy_all(char *source, char *folder){ copy_all(char *source, char *tag, char *folder){
slash_fix(source); slash_fix(source);
slash_fix(folder); slash_fix(folder);
systemf("copy %s %s\\*", source, folder); if (source){
systemf("copy %s\\%s %s\\*", source, tag, folder);
}
else{
systemf("copy %s %s\\*", tag, folder);
}
} }
static void static void
@ -294,8 +312,13 @@ static void
slash_fix(char *path){} slash_fix(char *path){}
static void static void
make_folder_if_missing(char *folder){ make_folder_if_missing(char *dir, char *folder){
systemf("mkdir -p %s", folder); if (folder){
systemf("mkdir -p %s/%s", dir, folder);
}
else{
systemf("mkdir -p %s", dir);
}
} }
static void static void
@ -304,22 +327,37 @@ clear_folder(char *folder){
} }
static void static void
copy_file(char *path, char *file, char *folder, char *newname){ copy_file(char *path, char *file, char *folder1, char *folder2, char *newname){
if (!newname){ if (!newname){
newname = file; newname = file;
} }
if (path){ if (path){
systemf("cp %s/%s %s/%s", path, file, folder, newname); if (folder2){
systemf("cp %s/%s %s/%s/%s", path, file, folder1, folder2, newname);
}
else{
systemf("cp %s/%s %s/%s", path, file, folder1, newname);
}
} }
else{ else{
systemf("cp %s %s/%s", file, folder, newname); if (folder2){
systemf("cp %s %s/%s/%s", file, folder1, folder2, newname);
}
else{
systemf("cp %s %s/%s", file, folder1, newname);
}
} }
} }
static void static void
copy_all(char *source, char *folder){ copy_all(char *source, char *tag, char *folder){
systemf("cp -rf %s %s", source, folder); if (source){
systemf("cp -rf %s/%s %s", source, tag, folder);
}
else{
systemf("cp -rf %s %s", tag, folder);
}
} }
static void static void
@ -636,8 +674,101 @@ buildsuper(char *code_path, char *out_path, char *filename){
#endif #endif
} }
#define META_DIR "../meta" #define D_META_DIR "../meta"
#define BUILD_DIR "../build" #define D_META_FSM_DIR "../meta/fsmgen"
#define D_META_GEN_DIR "../meta/metagen"
#define D_BUILD_DIR "../build"
#define D_PACK_DIR "../distributions"
#define D_PACK_DATA_DIR "../data/dist_files"
#define D_DATA_DIR "../data/test"
#define D_PACK_ALPHA_PAR_DIR "../current_dist"
#define D_PACK_SUPER_PAR_DIR "../current_dist_super"
#define D_PACK_POWER_PAR_DIR "../current_dist_power"
#define D_PACK_ALPHA_DIR D_PACK_ALPHA_PAR_DIR"/4coder"
#define D_PACK_SUPER_DIR D_PACK_SUPER_PAR_DIR"/4coder"
#define D_PACK_POWER_DIR D_PACK_POWER_PAR_DIR"/power"
static char *META_DIR = 0;
static char *META_FSM_DIR = 0;
static char *META_GEN_DIR = 0;
static char *BUILD_DIR = 0;
static char *PACK_DIR = 0;
static char *PACK_DATA_DIR = 0;
static char *DATA_DIR = 0;
static char *PACK_ALPHA_PAR_DIR = 0;
static char *PACK_SUPER_PAR_DIR = 0;
static char *PACK_POWER_PAR_DIR = 0;
static char *PACK_ALPHA_DIR = 0;
static char *PACK_SUPER_DIR = 0;
static char *PACK_POWER_DIR = 0;
static char*
get_head(String builder){
return(builder.str + builder.size);
}
static void
init_global_strings(){
int32_t size = 1024;
char *base = (char*)malloc(size);
String builder = make_string_cap(base, 0, size);
String term = make_string("\0", 1);
META_DIR = get_head(builder);
append_sc(&builder, D_META_DIR);
append_ss(&builder, term);
META_FSM_DIR = get_head(builder);
append_sc(&builder, D_META_FSM_DIR);
append_ss(&builder, term);
META_GEN_DIR = get_head(builder);
append_sc(&builder, D_META_GEN_DIR);
append_ss(&builder, term);
BUILD_DIR = get_head(builder);
append_sc(&builder, D_BUILD_DIR);
append_ss(&builder, term);
PACK_DIR = get_head(builder);
append_sc(&builder, D_PACK_DIR);
append_ss(&builder, term);
PACK_DATA_DIR = get_head(builder);
append_sc(&builder, D_PACK_DATA_DIR);
append_ss(&builder, term);
DATA_DIR = get_head(builder);
append_sc(&builder, D_DATA_DIR);
append_ss(&builder, term);
PACK_ALPHA_PAR_DIR = get_head(builder);
append_sc(&builder, D_PACK_ALPHA_PAR_DIR);
append_ss(&builder, term);
PACK_SUPER_PAR_DIR = get_head(builder);
append_sc(&builder, D_PACK_SUPER_PAR_DIR);
append_ss(&builder, term);
PACK_POWER_PAR_DIR = get_head(builder);
append_sc(&builder, D_PACK_POWER_PAR_DIR);
append_ss(&builder, term);
PACK_ALPHA_DIR = get_head(builder);
append_sc(&builder, D_PACK_ALPHA_DIR);
append_ss(&builder, term);
PACK_SUPER_DIR = get_head(builder);
append_sc(&builder, D_PACK_SUPER_DIR);
append_ss(&builder, term);
PACK_POWER_DIR = get_head(builder);
append_sc(&builder, D_PACK_POWER_DIR);
append_ss(&builder, term);
}
#if defined(IS_WINDOWS) #if defined(IS_WINDOWS)
#define PLAT_LAYER "win32_4ed.cpp" #define PLAT_LAYER "win32_4ed.cpp"
@ -658,7 +789,7 @@ fsm_generator(char *cdir){
if (prev_error == 0){ if (prev_error == 0){
BEGIN_TIME_SECTION(); BEGIN_TIME_SECTION();
execute(cdir, META_DIR"/fsmgen"); execute(cdir, META_FSM_DIR);
END_TIME_SECTION("run fsm generator"); END_TIME_SECTION("run fsm generator");
} }
} }
@ -674,22 +805,35 @@ metagen(char *cdir){
if (prev_error == 0){ if (prev_error == 0){
BEGIN_TIME_SECTION(); BEGIN_TIME_SECTION();
execute(cdir, META_DIR"/metagen"); execute(cdir, META_GEN_DIR);
END_TIME_SECTION("run metagen"); END_TIME_SECTION("run metagen");
} }
} }
static void static void
do_buildsuper(char *cdir){ do_buildsuper(char *cdir){
char space[1024];
String str = make_fixed_width_string(space);
BEGIN_TIME_SECTION(); BEGIN_TIME_SECTION();
//buildsuper(cdir, BUILD_DIR, "../code/4coder_default_bindings.cpp"); //copy_sc(&str, "../code/4coder_default_bindings.cpp");
//terminate_with_null(&str);
//buildsuper(cdir, BUILD_DIR, str.str);
#if defined(IS_WINDOWS) #if defined(IS_WINDOWS)
buildsuper(cdir, BUILD_DIR, "../code/internal_4coder_tests.cpp"); copy_sc(&str, "../code/internal_4coder_tests.cpp");
terminate_with_null(&str);
buildsuper(cdir, BUILD_DIR, str.str);
#else #else
buildsuper(cdir, BUILD_DIR, "../code/power/4coder_experiments.cpp"); copy_sc(&str, "../code/power/4coder_experiments.cpp");
terminate_with_null(&str);
buildsuper(cdir, BUILD_DIR, str.str);
#endif #endif
//buildsuper(cdir, BUILD_DIR, "../code/power/4coder_casey.cpp"); //copy_sc(&str, "../code/power/4coder_casey.cpp");
//buildsuper(cdir, BUILD_DIR, "../4vim/4coder_chronal.cpp"); //terminate_with_null(&str);
//buildsuper(cdir, BUILD_DIR, str.str);
//copy_sc(&str, "../4vim/4coder_chronal.cpp");
//terminate_with_null(&str);
//buildsuper(cdir, BUILD_DIR, str.str);
END_TIME_SECTION("build custom"); END_TIME_SECTION("build custom");
} }
@ -718,23 +862,12 @@ standard_build(char *cdir, uint32_t flags){
build_main(cdir, flags); build_main(cdir, flags);
} }
#define PACK_DIR "../distributions"
#define PACK_DATA_DIR "../data/dist_files"
#define DATA_DIR "../data/test"
#define PACK_ALPHA_PAR_DIR "../current_dist"
#define PACK_SUPER_PAR_DIR "../current_dist_super"
#define PACK_POWER_PAR_DIR "../current_dist_power"
#define PACK_ALPHA_DIR PACK_ALPHA_PAR_DIR"/4coder"
#define PACK_SUPER_DIR PACK_SUPER_PAR_DIR"/4coder"
#define PACK_POWER_DIR PACK_POWER_PAR_DIR"/power"
static void static void
get_4coder_dist_name(String *zip_file, int32_t OS_specific, char *tier, char *ext){ get_4coder_dist_name(String *zip_file, int32_t OS_specific, char *tier, char *ext){
zip_file->size = 0; zip_file->size = 0;
append_sc(zip_file, PACK_DIR"/"); append_sc(zip_file, PACK_DIR);
append_sc(zip_file, "/");
append_sc(zip_file, tier); append_sc(zip_file, tier);
append_sc(zip_file, "/4coder-"); append_sc(zip_file, "/4coder-");
@ -777,16 +910,16 @@ package(char *cdir){
build_main(cdir, OPTIMIZATION | KEEP_ASSERT | DEBUG_INFO); build_main(cdir, OPTIMIZATION | KEEP_ASSERT | DEBUG_INFO);
clear_folder(PACK_ALPHA_PAR_DIR); clear_folder(PACK_ALPHA_PAR_DIR);
make_folder_if_missing(PACK_ALPHA_DIR"/3rdparty"); make_folder_if_missing(PACK_ALPHA_DIR, "3rdparty");
make_folder_if_missing(PACK_DIR"/alpha"); make_folder_if_missing(PACK_DIR, "alpha");
copy_file(BUILD_DIR, "4ed"EXE, PACK_ALPHA_DIR, 0); copy_file(BUILD_DIR, "4ed"EXE, PACK_ALPHA_DIR, 0, 0);
ONLY_WINDOWS(copy_file(BUILD_DIR, "4ed"PDB, PACK_ALPHA_DIR, 0)); ONLY_WINDOWS(copy_file(BUILD_DIR, "4ed"PDB, PACK_ALPHA_DIR, 0, 0));
copy_file(BUILD_DIR, "4ed_app"DLL, PACK_ALPHA_DIR, 0); copy_file(BUILD_DIR, "4ed_app"DLL, PACK_ALPHA_DIR, 0, 0);
ONLY_WINDOWS(copy_file(BUILD_DIR, "4ed_app"PDB, PACK_ALPHA_DIR, 0)); ONLY_WINDOWS(copy_file(BUILD_DIR, "4ed_app"PDB, PACK_ALPHA_DIR, 0, 0));
copy_all (PACK_DATA_DIR"/*", PACK_ALPHA_DIR); copy_all (PACK_DATA_DIR, "*", PACK_ALPHA_DIR);
copy_file(0, "README.txt", PACK_ALPHA_DIR, 0); copy_file(0, "README.txt", PACK_ALPHA_DIR, 0, 0);
copy_file(0, "TODO.txt", PACK_ALPHA_DIR, 0); copy_file(0, "TODO.txt", PACK_ALPHA_DIR, 0, 0);
copy_file(DATA_DIR, "config.4coder", PACK_ALPHA_DIR, 0); copy_file(DATA_DIR, "config.4coder", PACK_ALPHA_DIR, 0, 0);
get_4coder_dist_name(&str, 1, "alpha", "zip"); get_4coder_dist_name(&str, 1, "alpha", "zip");
zip(PACK_ALPHA_PAR_DIR, "4coder", str.str); zip(PACK_ALPHA_PAR_DIR, "4coder", str.str);
@ -795,36 +928,36 @@ package(char *cdir){
build_main(cdir, OPTIMIZATION | KEEP_ASSERT | DEBUG_INFO | SUPER); build_main(cdir, OPTIMIZATION | KEEP_ASSERT | DEBUG_INFO | SUPER);
clear_folder(PACK_SUPER_PAR_DIR); clear_folder(PACK_SUPER_PAR_DIR);
make_folder_if_missing(PACK_SUPER_DIR"/3rdparty"); make_folder_if_missing(PACK_SUPER_DIR, "3rdparty");
make_folder_if_missing(PACK_DIR"/super"); make_folder_if_missing(PACK_DIR, "super");
make_folder_if_missing(PACK_DIR"/super-docs"); make_folder_if_missing(PACK_DIR, "super-docs");
copy_file(BUILD_DIR, "4ed"EXE, PACK_SUPER_DIR, 0); copy_file(BUILD_DIR, "4ed"EXE, PACK_SUPER_DIR, 0, 0);
ONLY_WINDOWS(copy_file(BUILD_DIR, "4ed"PDB, PACK_SUPER_DIR, 0)); ONLY_WINDOWS(copy_file(BUILD_DIR, "4ed"PDB, PACK_SUPER_DIR, 0, 0));
copy_file(BUILD_DIR, "4ed_app"DLL, PACK_SUPER_DIR, 0); copy_file(BUILD_DIR, "4ed_app"DLL, PACK_SUPER_DIR, 0, 0);
ONLY_WINDOWS(copy_file(BUILD_DIR, "4ed_app"PDB, PACK_SUPER_DIR, 0)); ONLY_WINDOWS(copy_file(BUILD_DIR, "4ed_app"PDB, PACK_SUPER_DIR, 0, 0));
copy_all (PACK_DATA_DIR"/*", PACK_SUPER_DIR); copy_all (PACK_DATA_DIR, "/*", PACK_SUPER_DIR);
copy_file(0, "README.txt", PACK_SUPER_DIR, 0); copy_file(0, "README.txt", PACK_SUPER_DIR, 0, 0);
copy_file(0, "TODO.txt", PACK_SUPER_DIR, 0); copy_file(0, "TODO.txt", PACK_SUPER_DIR, 0, 0);
copy_file(DATA_DIR, "config.4coder", PACK_SUPER_DIR, 0); copy_file(DATA_DIR, "config.4coder", PACK_SUPER_DIR, 0, 0);
copy_all ("4coder_*.h", PACK_SUPER_DIR); copy_all (0, "4coder_*.h", PACK_SUPER_DIR);
copy_all ("4coder_*.cpp", PACK_SUPER_DIR); copy_all (0, "4coder_*.cpp", PACK_SUPER_DIR);
copy_all ("4cpp_*.h", PACK_SUPER_DIR); copy_all (0, "4cpp_*.h", PACK_SUPER_DIR);
copy_all ("4cpp_*.c", PACK_SUPER_DIR); copy_all (0, "4cpp_*.c", PACK_SUPER_DIR);
copy_file(0, "buildsuper"BAT, PACK_SUPER_DIR, 0); copy_file(0, "buildsuper"BAT, PACK_SUPER_DIR, 0, 0);
get_4coder_dist_name(&str, 0, "API", "html"); get_4coder_dist_name(&str, 0, "API", "html");
str2 = front_of_directory(str); str2 = front_of_directory(str);
copy_file(0, "4coder_API.html", PACK_DIR"/super-docs", str2.str); copy_file(0, "4coder_API.html", PACK_DIR, "super-docs", str2.str);
get_4coder_dist_name(&str, 1, "super", "zip"); get_4coder_dist_name(&str, 1, "super", "zip");
zip(PACK_SUPER_PAR_DIR, "4coder", str.str); zip(PACK_SUPER_PAR_DIR, "4coder", str.str);
// NOTE(allen): power // NOTE(allen): power
clear_folder(PACK_POWER_PAR_DIR); clear_folder(PACK_POWER_PAR_DIR);
make_folder_if_missing(PACK_POWER_DIR); make_folder_if_missing(PACK_POWER_DIR, 0);
make_folder_if_missing(PACK_DIR"/power"); make_folder_if_missing(PACK_DIR, "power");
copy_all("power/*", PACK_POWER_DIR); copy_all(0, "power/*", PACK_POWER_DIR);
get_4coder_dist_name(&str, 0, "power", "zip"); get_4coder_dist_name(&str, 0, "power", "zip");
zip(PACK_POWER_PAR_DIR, "power", str.str); zip(PACK_POWER_PAR_DIR, "power", str.str);
@ -835,6 +968,7 @@ package(char *cdir){
int main(int argc, char **argv){ int main(int argc, char **argv){
init_time_system(); init_time_system();
init_global_strings();
char cdir[256]; char cdir[256];
@ -852,6 +986,7 @@ int main(int argc, char **argv){
int main(int argc, char **argv){ int main(int argc, char **argv){
init_time_system(); init_time_system();
init_global_strings();
char cdir[256]; char cdir[256];