mymake now works with Emscripten

This commit is contained in:
Zeno Rogue 2020-10-12 01:28:50 +02:00
parent 9a2b464778
commit 35d26d1595
6 changed files with 48 additions and 16 deletions

View File

@ -2,19 +2,14 @@
// This is the main file when the online version of HyperRogue is compiled with Emscripten.
// Copyright (C) 2011-2018 Zeno Rogue, see 'hyper.cpp' for details
#ifndef ISWEB
#define ISWEB 1
#define ISMINI 0
#define CAP_AUDIO 0
#define CAP_SDLGFX 0
#define CAP_PNG 0
#define CAP_TOUR 1
#define CAP_SDLTTF 0
#define CAP_SHMUP 0
#define CAP_RUG 1
#define CAP_INV 0
#define CAP_URL 1
#define GLES_ONLY
#define CAP_COMPLEX2 1
#define SCU
#endif
#if CAP_ROGUEVIZ
#define MAXMDIM 4
@ -53,7 +48,11 @@ namespace hr {
void offer_download(std::string sfilename, std::string smimetype);
}
#ifdef SCU
#include "hyper.cpp"
#else
#include "hyper.h"
#endif
namespace hr {
@ -72,7 +71,7 @@ string get_value(string name) {
return res;
}
void offer_download(string sfilename, string smimetype) {
EX void offer_download(string sfilename, string smimetype) {
EM_ASM({
var name = UTF8ToString($0, $1);
@ -105,7 +104,7 @@ extern "C" {
}
}
void offer_choose_file(reaction_t r) {
EX void offer_choose_file(reaction_t r) {
on_use_file = r;
EM_ASM({
fileElem.click();
@ -221,7 +220,7 @@ EM_BOOL fsc_callback(int eventType, const EmscriptenFullscreenChangeEvent *fulls
return true;
}
void initweb() {
EX void initweb() {
// toggleanim(false);
emscripten_set_fullscreenchange_callback(0, NULL, false, fsc_callback);
printf("showstartmenu = %d\n", showstartmenu);
@ -241,7 +240,7 @@ transmatrix getOrientation() {
}
#endif
void emscripten_get_commandline() {
EX void emscripten_get_commandline() {
#ifdef EMSCRIPTEN_FIXED_ARG
string s = EMSCRIPTEN_FIXED_ARG;
#else

View File

@ -62,7 +62,10 @@ struct fullnoun {
};
#if !CAP_TRANS
#if HDR
#define NUMEXTRA 11
extern const char* natchars[NUMEXTRA];
#endif
const char* natchars[NUMEXTRA] = {"°","é","á", "²", "½", "Θ", "δ", "π", "ϕ", "", ""};
#endif

View File

@ -638,6 +638,7 @@ EX void initConfig() {
multi::scs[5].uicolor = 0x00C0C0FF;
multi::scs[6].uicolor = 0xC0C0C0FF;
#if CAP_CONFIG
addsaver(multi::players, "mode-number of players");
addsaver(alwaysuse, "use configured keys");
// unfortunately we cannot use key names here because SDL is not yet initialized
@ -656,6 +657,7 @@ EX void initConfig() {
}
}
for(int i=0; i<7; i++) addsaver(multi::scs[i], "player"+its(i));
#endif
}
EX void handleInput(int delta) {

View File

@ -59,6 +59,19 @@ void set_win() {
standard = "";
}
void set_web() {
preprocessor = "/usr/lib/emscripten/em++ -E";
compiler = "/usr/lib/emscripten/em++ -c";
default_standard = standard = " -std=c++17";
opts = "-DISWEB=1";
linker =
"/usr/lib/emscripten/em++ -s USE_ZLIB=1 -s DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR=0 -s TOTAL_MEMORY=512MB "
"-s EXTRA_EXPORTED_RUNTIME_METHODS='[\"FS\",\"ccall\"]' "
"-s EXPORTED_FUNCTIONS=\"['_main', '_use_file']\" "
"-s DISABLE_EXCEPTION_CATCHING=0 -o mhyper.html";
libs = "";
}
vector<string> modules;
time_t get_file_time(const string s) {
@ -118,6 +131,12 @@ int main(int argc, char **argv) {
obj_dir += "/linux";
setdir += "../";
}
else if(s == "-web") {
set_web();
modules.push_back("hyperweb");
obj_dir += "/web";
setdir += "../";
}
else if(s.substr(0, 2) == "-f") {
opts += " " + s;
obj_dir += "/";

View File

@ -127,11 +127,11 @@ unsigned char fonttable[] = {
unsigned char *ftv = fonttable;
void resetTabFont() {
EX void resetTabFont() {
ftv = fonttable;
}
void loadCompressedChar(int &otwidth, int &otheight, unsigned char *tpix) {
EX void loadCompressedChar(int &otwidth, int &otheight, unsigned char *tpix) {
if(*ftv == 255) {
fprintf(stderr, "There is something wrong with the font table\n");
exit(1);

View File

@ -206,7 +206,7 @@
#endif
#ifndef CAP_TOUR
#define CAP_TOUR (!ISWEB && !ISMINI)
#define CAP_TOUR (!ISMINI)
#endif
#ifndef CAP_ROGUEVIZ
@ -285,7 +285,7 @@
#endif
#ifndef CAP_SHMUP
#define CAP_SHMUP 1
#define CAP_SHMUP (!ISWEB)
#endif
#ifndef CAP_BITFIELD
@ -403,6 +403,10 @@ extern "C" {
#define CAP_GLEW (CAP_GL && !ISMOBILE && !ISMAC && !ISLINUX && !ISWEB)
#endif
#if ISWEB
#define GLES_ONLY
#endif
#if CAP_GL
#if CAP_GLEW
#include <GL/glew.h>
@ -462,6 +466,11 @@ typedef unsigned GLuint;
#include <zlib.h>
#endif
#if ISWEB
#include <emscripten.h>
#include <emscripten/html5.h>
#endif
#if CAP_GMP
#include <gmpxx.h>
#endif