Skip to content

Commit

Permalink
Merge pull request #115 from still-flow/mymake_mingw64
Browse files Browse the repository at this point in the history
Attempt to convince mymake to work on MinGW
  • Loading branch information
zenorogue committed Sep 25, 2020
2 parents b991b1a + d924b84 commit 872301c
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 15 deletions.
1 change: 1 addition & 0 deletions .github/workflows/test_simple.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ if [[ "$GH_OS" == "windows-latest" && "$GH_BUILDSYS" == "mymake" ]]; then
cat << ENDOFCMDS > .github/workflows/gdb_cmds.txt
run --version
backtrace
exit 1
ENDOFCMDS

gdb --batch -x .github/workflows/gdb_cmds.txt ./hyperrogue
Expand Down
42 changes: 27 additions & 15 deletions mymake.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ string linker;
string libs;

int batch_size = thread::hardware_concurrency() + 1;
bool mingw64 = false;

void set_linux() {
preprocessor = "g++ -E";
Expand All @@ -49,14 +50,14 @@ void set_mac() {
libs = " savepng.o -L/usr/local/lib -framework AppKit -framework OpenGL -lSDL -lSDLMain -lSDL_gfx -lSDL_mixer -lSDL_ttf -lpng -lpthread -lz";
}

void set_win() {
void set_mingw64() {
mingw64 = true;
preprocessor = "g++ -E";
compiler = "runbat bwin-g.bat -c";
linker = "runbat bwin-linker.bat";
opts = "-DFHS -DLINUX -I/usr/include/SDL";
libs = "";

standard = "";
compiler = "g++ -mwindows -march=native -W -Wall -Wextra -Werror -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-maybe-uninitialized -c";
linker = "g++ -o hyper";
opts = "-DWINDOWS -DCAP_GLEW=1 -DCAP_PNG=1";
libs = " savepng.o hyper.res -lopengl32 -lSDL -lSDL_gfx -lSDL_mixer -lSDL_ttf -lpthread -lz -lglew32 -lpng";
setvbuf(stdout, NULL, _IONBF, 0); // MinGW is quirky with output buffering
}

vector<string> modules;
Expand All @@ -73,6 +74,8 @@ string obj_dir = "mymake_files";
string setdir = "../";

int system(string cmdline) {
if (mingw64)
cmdline = "sh -c '" + cmdline + "'"; // because system(arg) passes arg to cmd.exe on MinGW
return system(cmdline.c_str());
}

Expand All @@ -84,13 +87,15 @@ int main(int argc, char **argv) {
#if defined(MAC)
set_mac();
#elif defined(WINDOWS)
set_win();
set_mingw64();
#else
set_linux();
#endif
int retval = 0; // for storing return values of some function calls
for(string fname: {"Makefile.loc", "Makefile.simple", "Makefile"})
if(file_exists(fname)) {
system("make -f " + fname + " language-data.cpp autohdr.h savepng.o");
retval = system("make -f " + fname + " language-data.cpp autohdr.h savepng.o");
if (retval) { printf("error during preparation!\n"); exit(retval); }
break;
}
for(int i=1; i<argc; i++) {
Expand All @@ -103,9 +108,9 @@ int main(int argc, char **argv) {
if(!isalnum(c)) obj_dir += "_";
else obj_dir += c;
}
else if(s == "-win") {
set_win();
obj_dir += "/win";
else if(s == "-mingw64") {
set_mingw64();
obj_dir += "/mingw64";
setdir += "../";
}
else if(s == "-mac") {
Expand Down Expand Up @@ -170,7 +175,8 @@ int main(int argc, char **argv) {
compiler += " " + standard;
ifstream fs("hyper.cpp");

system("mkdir -p " + obj_dir);
retval = system("mkdir -p " + obj_dir);
if (retval) { printf("unable to create output directory!\n"); exit(retval); }

ofstream fsm(obj_dir + "/hyper.cpp");
fsm << "#if REM\n#define INCLUDE(x)\n#endif\n";
Expand Down Expand Up @@ -267,8 +273,14 @@ int main(int argc, char **argv) {
}
else if (tasks_done == tasks_amt) { finished = true; break; }
} this_thread::sleep_for(quantum); }


if (mingw64) {
retval = system("windres hyper.rc -O coff -o hyper.res");
if (retval) { printf("windres error!\n"); exit(retval); }
}

printf("linking...\n");
system(linker + allobj + libs);
retval = system(linker + allobj + libs);
if (retval) { printf("linking error!\n"); exit(retval); }
return 0;
}

0 comments on commit 872301c

Please sign in to comment.