Emscripten compiles to WASM, which can be loaded via HTML / JavaScript. This allows you to play OpenTTD inside a browser. Co-authored-by: milek7 <me@milek7.pl>
		
			
				
	
	
		
			214 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			214 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 90dd4d4c6b1cedec338ff5b375fffca93700f7bc Mon Sep 17 00:00:00 2001
 | 
						|
From: milek7 <me@milek7.pl>
 | 
						|
Date: Tue, 8 Dec 2020 01:03:31 +0100
 | 
						|
Subject: [PATCH] Add liblzma port
 | 
						|
 | 
						|
---
 | 
						|
Source: https://github.com/emscripten-core/emscripten/pull/12990
 | 
						|
 | 
						|
Modifed by OpenTTD to have the bare minimum needed to work. Otherwise there
 | 
						|
are constantly conflicts when trying to apply this patch to different versions
 | 
						|
of emsdk.
 | 
						|
 | 
						|
diff --git a/embuilder.py b/embuilder.py
 | 
						|
index 818262190ed..ab7d5adb7b2 100755
 | 
						|
--- a/embuilder.py
 | 
						|
+++ b/embuilder.py
 | 
						|
@@ -60,6 +60,7 @@
 | 
						|
     'harfbuzz',
 | 
						|
     'icu',
 | 
						|
     'libjpeg',
 | 
						|
+    'liblzma',
 | 
						|
     'libpng',
 | 
						|
     'ogg',
 | 
						|
     'regal',
 | 
						|
@@ -197,6 +198,8 @@ def main():
 | 
						|
       build_port('ogg', libname('libogg'))
 | 
						|
     elif what == 'libjpeg':
 | 
						|
       build_port('libjpeg', libname('libjpeg'))
 | 
						|
+    elif what == 'liblzma':
 | 
						|
+      build_port('liblzma', libname('liblzma'))
 | 
						|
     elif what == 'libpng':
 | 
						|
       build_port('libpng', libname('libpng'))
 | 
						|
     elif what == 'sdl2':
 | 
						|
diff --git a/src/settings.js b/src/settings.js
 | 
						|
index 61cd98939ba..be6fcb678c6 100644
 | 
						|
--- a/src/settings.js
 | 
						|
+++ b/src/settings.js
 | 
						|
@@ -1197,6 +1197,9 @@ var USE_BZIP2 = 0;
 | 
						|
 // 1 = use libjpeg from emscripten-ports
 | 
						|
 var USE_LIBJPEG = 0;
 | 
						|
 | 
						|
+// 1 = use liblzma from emscripten-ports
 | 
						|
+var USE_LIBLZMA = 0;
 | 
						|
+
 | 
						|
 // 1 = use libpng from emscripten-ports
 | 
						|
 var USE_LIBPNG = 0;
 | 
						|
 | 
						|
diff --git a/tools/ports/liblzma.py b/tools/ports/liblzma.py
 | 
						|
new file mode 100644
 | 
						|
index 00000000000..e9567ef36ff
 | 
						|
--- /dev/null
 | 
						|
+++ b/tools/ports/liblzma.py
 | 
						|
@@ -0,0 +1,160 @@
 | 
						|
+# Copyright 2020 The Emscripten Authors.  All rights reserved.
 | 
						|
+# Emscripten is available under two separate licenses, the MIT license and the
 | 
						|
+# University of Illinois/NCSA Open Source License.  Both these licenses can be
 | 
						|
+# found in the LICENSE file.
 | 
						|
+
 | 
						|
+import os
 | 
						|
+import shutil
 | 
						|
+
 | 
						|
+VERSION = '5.2.5'
 | 
						|
+HASH = '7443674247deda2935220fbc4dfc7665e5bb5a260be8ad858c8bd7d7b9f0f868f04ea45e62eb17c0a5e6a2de7c7500ad2d201e2d668c48ca29bd9eea5a73a3ce'
 | 
						|
+
 | 
						|
+
 | 
						|
+def needed(settings):
 | 
						|
+  return settings.USE_LIBLZMA
 | 
						|
+
 | 
						|
+
 | 
						|
+def get(ports, settings, shared):
 | 
						|
+  libname = ports.get_lib_name('liblzma')
 | 
						|
+  ports.fetch_project('liblzma', 'https://tukaani.org/xz/xz-' + VERSION + '.tar.gz', 'xz-' + VERSION, sha512hash=HASH)
 | 
						|
+
 | 
						|
+  def create():
 | 
						|
+    ports.clear_project_build('liblzma')
 | 
						|
+
 | 
						|
+    source_path = os.path.join(ports.get_dir(), 'liblzma', 'xz-' + VERSION)
 | 
						|
+    dest_path = os.path.join(ports.get_build_dir(), 'liblzma')
 | 
						|
+
 | 
						|
+    shared.try_delete(dest_path)
 | 
						|
+    os.makedirs(dest_path)
 | 
						|
+    shutil.rmtree(dest_path, ignore_errors=True)
 | 
						|
+    shutil.copytree(source_path, dest_path)
 | 
						|
+
 | 
						|
+    build_flags = ['-DHAVE_CONFIG_H', '-DTUKLIB_SYMBOL_PREFIX=lzma_', '-fvisibility=hidden']
 | 
						|
+    exclude_dirs = ['xzdec', 'xz', 'lzmainfo']
 | 
						|
+    exclude_files = ['crc32_small.c', 'crc64_small.c', 'crc32_tablegen.c', 'crc64_tablegen.c', 'price_tablegen.c', 'fastpos_tablegen.c'
 | 
						|
+                     'tuklib_exit.c', 'tuklib_mbstr_fw.c', 'tuklib_mbstr_width.c', 'tuklib_open_stdxxx.c', 'tuklib_progname.c']
 | 
						|
+    include_dirs_rel = ['../common', 'api', 'common', 'check', 'lz', 'rangecoder', 'lzma', 'delta', 'simple']
 | 
						|
+
 | 
						|
+    open(os.path.join(dest_path, 'src', 'config.h'), 'w').write(config_h)
 | 
						|
+
 | 
						|
+    final = os.path.join(dest_path, libname)
 | 
						|
+    include_dirs = [os.path.join(dest_path, 'src', 'liblzma', p) for p in include_dirs_rel]
 | 
						|
+    ports.build_port(os.path.join(dest_path, 'src'), final, flags=build_flags, exclude_dirs=exclude_dirs, exclude_files=exclude_files, includes=include_dirs)
 | 
						|
+
 | 
						|
+    ports.install_headers(os.path.join(dest_path, 'src', 'liblzma', 'api'), 'lzma.h')
 | 
						|
+    ports.install_headers(os.path.join(dest_path, 'src', 'liblzma', 'api', 'lzma'), '*.h', 'lzma')
 | 
						|
+
 | 
						|
+    return final
 | 
						|
+
 | 
						|
+  return [shared.Cache.get(libname, create, what='port')]
 | 
						|
+
 | 
						|
+
 | 
						|
+def clear(ports, settings, shared):
 | 
						|
+  shared.Cache.erase_file(ports.get_lib_name('liblzma'))
 | 
						|
+
 | 
						|
+
 | 
						|
+def process_args(ports):
 | 
						|
+  return []
 | 
						|
+
 | 
						|
+
 | 
						|
+def show():
 | 
						|
+  return 'liblzma (USE_LIBLZMA=1; public domain)'
 | 
						|
+
 | 
						|
+
 | 
						|
+config_h = r'''
 | 
						|
+#define ASSUME_RAM 128
 | 
						|
+#define ENABLE_NLS 1
 | 
						|
+#define HAVE_CHECK_CRC32 1
 | 
						|
+#define HAVE_CHECK_CRC64 1
 | 
						|
+#define HAVE_CHECK_SHA256 1
 | 
						|
+#define HAVE_CLOCK_GETTIME 1
 | 
						|
+#define HAVE_DCGETTEXT 1
 | 
						|
+#define HAVE_DECL_CLOCK_MONOTONIC 1
 | 
						|
+#define HAVE_DECL_PROGRAM_INVOCATION_NAME 1
 | 
						|
+#define HAVE_DECODERS 1
 | 
						|
+#define HAVE_DECODER_ARM 1
 | 
						|
+#define HAVE_DECODER_ARMTHUMB 1
 | 
						|
+#define HAVE_DECODER_DELTA 1
 | 
						|
+#define HAVE_DECODER_IA64 1
 | 
						|
+#define HAVE_DECODER_LZMA1 1
 | 
						|
+#define HAVE_DECODER_LZMA2 1
 | 
						|
+#define HAVE_DECODER_POWERPC 1
 | 
						|
+#define HAVE_DECODER_SPARC 1
 | 
						|
+#define HAVE_DECODER_X86 1
 | 
						|
+#define HAVE_DLFCN_H 1
 | 
						|
+#define HAVE_ENCODERS 1
 | 
						|
+#define HAVE_ENCODER_ARM 1
 | 
						|
+#define HAVE_ENCODER_ARMTHUMB 1
 | 
						|
+#define HAVE_ENCODER_DELTA 1
 | 
						|
+#define HAVE_ENCODER_IA64 1
 | 
						|
+#define HAVE_ENCODER_LZMA1 1
 | 
						|
+#define HAVE_ENCODER_LZMA2 1
 | 
						|
+#define HAVE_ENCODER_POWERPC 1
 | 
						|
+#define HAVE_ENCODER_SPARC 1
 | 
						|
+#define HAVE_ENCODER_X86 1
 | 
						|
+#define HAVE_FCNTL_H 1
 | 
						|
+#define HAVE_FUTIMENS 1
 | 
						|
+#define HAVE_GETOPT_H 1
 | 
						|
+#define HAVE_GETOPT_LONG 1
 | 
						|
+#define HAVE_GETTEXT 1
 | 
						|
+#define HAVE_IMMINTRIN_H 1
 | 
						|
+#define HAVE_INTTYPES_H 1
 | 
						|
+#define HAVE_LIMITS_H 1
 | 
						|
+#define HAVE_MBRTOWC 1
 | 
						|
+#define HAVE_MEMORY_H 1
 | 
						|
+#define HAVE_MF_BT2 1
 | 
						|
+#define HAVE_MF_BT3 1
 | 
						|
+#define HAVE_MF_BT4 1
 | 
						|
+#define HAVE_MF_HC3 1
 | 
						|
+#define HAVE_MF_HC4 1
 | 
						|
+#define HAVE_OPTRESET 1
 | 
						|
+#define HAVE_POSIX_FADVISE 1
 | 
						|
+#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1
 | 
						|
+#define HAVE_PTHREAD_PRIO_INHERIT 1
 | 
						|
+#define HAVE_STDBOOL_H 1
 | 
						|
+#define HAVE_STDINT_H 1
 | 
						|
+#define HAVE_STDLIB_H 1
 | 
						|
+#define HAVE_STRINGS_H 1
 | 
						|
+#define HAVE_STRING_H 1
 | 
						|
+#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1
 | 
						|
+#define HAVE_SYS_PARAM_H 1
 | 
						|
+#define HAVE_SYS_STAT_H 1
 | 
						|
+#define HAVE_SYS_TIME_H 1
 | 
						|
+#define HAVE_SYS_TYPES_H 1
 | 
						|
+#define HAVE_UINTPTR_T 1
 | 
						|
+#define HAVE_UNISTD_H 1
 | 
						|
+#define HAVE_VISIBILITY 1
 | 
						|
+#define HAVE_WCWIDTH 1
 | 
						|
+#define HAVE__BOOL 1
 | 
						|
+#define HAVE___BUILTIN_ASSUME_ALIGNED 1
 | 
						|
+#define HAVE___BUILTIN_BSWAPXX 1
 | 
						|
+#define MYTHREAD_POSIX 1
 | 
						|
+#define NDEBUG 1
 | 
						|
+#define PACKAGE "xz"
 | 
						|
+#define PACKAGE_BUGREPORT "lasse.collin@tukaani.org"
 | 
						|
+#define PACKAGE_NAME "XZ Utils"
 | 
						|
+#define PACKAGE_STRING "XZ Utils 5.2.5"
 | 
						|
+#define PACKAGE_TARNAME "xz"
 | 
						|
+#define PACKAGE_VERSION "5.2.5"
 | 
						|
+#define SIZEOF_SIZE_T 4
 | 
						|
+#define STDC_HEADERS 1
 | 
						|
+#define TUKLIB_CPUCORES_SYSCONF 1
 | 
						|
+#define TUKLIB_FAST_UNALIGNED_ACCESS 1
 | 
						|
+#define TUKLIB_PHYSMEM_SYSCONF 1
 | 
						|
+#ifndef _ALL_SOURCE
 | 
						|
+# define _ALL_SOURCE 1
 | 
						|
+#endif
 | 
						|
+#ifndef _GNU_SOURCE
 | 
						|
+# define _GNU_SOURCE 1
 | 
						|
+#endif
 | 
						|
+#ifndef _POSIX_PTHREAD_SEMANTICS
 | 
						|
+# define _POSIX_PTHREAD_SEMANTICS 1
 | 
						|
+#endif
 | 
						|
+#ifndef _TANDEM_SOURCE
 | 
						|
+# define _TANDEM_SOURCE 1
 | 
						|
+#endif
 | 
						|
+#ifndef __EXTENSIONS__
 | 
						|
+# define __EXTENSIONS__ 1
 | 
						|
+#endif
 | 
						|
+#define VERSION "5.2.5"
 | 
						|
+'''
 |