skunkworks-c/build.c

118 lines
2.8 KiB
C

#include "str.h"
#include "types.h"
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
void cmake(char *dep, char *libpath, char *lib, char *cmake_dir, char *params);
bool file_exists(char *dir);
void sys(char *cmd);
int main(int argc, char *argv[]) {
printf("SkunkWorks build system v0.0\n");
fflush(stdout);
chdir("build");
sys("if not exist deps md deps");
// system("cl ../src/*.c /I../include");
// system("copy ..\\subprojects\\zlib-1.2.13\\zconf.h.in zconf.h");
// putenv("CC=clang");
cmake("glfw-3.3.8", "src\\Release\\glfw3.lib", "glfw3.lib", "", "");
cmake("zlib-1.2.13", "Release\\zlibstatic.lib", "zlib.lib", "", "");
cmake(
"lpng1639",
"Release\\libpng16_static.lib",
"png.lib",
"",
"-D ZLIB_INCLUDE_DIR=../../subprojects/zlib-1.2.13 "
"-D ZLIB_LIBRARY=.. "
"-D CMAKE_C_FLAGS=/I\"../zlib-1.2.13\""
);
cmake(
"glew-2.1.0",
"lib\\Release\\libglew32.lib",
"glew.lib",
"build/cmake",
""
);
sys("cl /c /MD /O2 /Za "
"../src/*.c "
"/I../include "
"/I../subprojects/glew-2.1.0/include "
"/I../subprojects/glfw-3.3.8/include "
"/I../subprojects/lpng1639 "
"/I../subprojects/zlib-1.2.13 "
"/Ilpng1639 ");
sys("del skunkworks.lib ");
sys("lib "
"*.obj "
"deps/*.lib "
"/OUT:skunkworks.lib");
sys("cl /MD /O2 "
"../tools/skip.c "
"skunkworks.lib "
"/I../include ");
sys("cl /MD /O2 "
"../examples/gsa_simple.c "
"skunkworks.lib "
"/I../include "
"/I. ");
sys("del *.obj");
/*
system("clang "
"-static "
"-Wl,-nodefaultlib:msvcrt "
"../src/*.c "
"-D_CRT_SECURE_NO_WARNINGS "
"-oskunkworks.lib "
"-I../include "
"-I../subprojects/glew-2.1.0/include "
"-I../subprojects/glfw-3.3.8/include "
"-I../subprojects/lpng1639 "
"-I../subprojects/zlib-1.2.13 "
"-Ilpng1639 "
"-L. -lpng -lzlib -lglew -lglfw3 -lopengl32 -luser32 -lkernel32 "
"-lgdi32 -lshell32 "
"-llibcmt -llibvcruntime -llibucrt");
*/
return 0;
}
void cmake(char *dep, char *libpath, char *lib, char *cmake_dir, char *params) {
if(file_exists(sw_concat("deps\\", lib))) {
printf("%s already exists, not compiling dependency\n", lib);
return;
}
printf("compiling %s", lib);
sys(sw_concat("md ", dep));
chdir(dep);
sys(sw_concat4(
"cmake ",
params,
// "
//-DCMAKE_MSVC_RUNTIME_LIBRARY=\"MultiThreaded$<$<CONFIG:Debug>:Debug>"
// "\" "
" ../../subprojects/",
sw_concat3(dep, "/", cmake_dir)
));
sys("cmake --build . --config Release");
chdir("..");
sys(sw_concat4(sw_concat3("copy ", dep, "\\"), libpath, " deps\\", lib));
}
bool file_exists(char *dir) {
DWORD attrib = GetFileAttributes(dir);
return attrib != INVALID_FILE_ATTRIBUTES;
}
void sys(char *cmd) {
if(system(cmd) != 0) {
exit(-1);
}
}