Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
emscripten-core
GitHub Repository: emscripten-core/emscripten
Path: blob/main/tools/ports/regal.py
4130 views
1
# Copyright 2015 The Emscripten Authors. All rights reserved.
2
# Emscripten is available under two separate licenses, the MIT license and the
3
# University of Illinois/NCSA Open Source License. Both these licenses can be
4
# found in the LICENSE file.
5
6
import os
7
8
TAG = 'version_7'
9
HASH = 'a921dab254f21cf5d397581c5efe58faf147c31527228b4fb34aed75164c736af4b3347092a8d9ec1249160230fa163309a87a20c2b9ceef8554566cc215de9d'
10
11
variants = {'regal-mt': {'PTHREADS': 1}}
12
13
14
def needed(settings):
15
return settings.USE_REGAL
16
17
18
def get_lib_name(settings):
19
return 'libregal' + ('-mt' if settings.PTHREADS else '') + '.a'
20
21
22
def get(ports, settings, shared):
23
ports.fetch_project('regal', f'https://github.com/emscripten-ports/regal/archive/{TAG}.zip', sha512hash=HASH)
24
25
def create(final):
26
source_path = ports.get_dir('regal', 'regal-' + TAG)
27
28
# copy sources
29
# only what is needed is copied: regal, boost, lookup3
30
source_path_src = os.path.join(source_path, 'src')
31
32
source_path_regal = os.path.join(source_path_src, 'regal')
33
source_path_boost = os.path.join(source_path_src, 'boost')
34
source_path_lookup3 = os.path.join(source_path_src, 'lookup3')
35
36
# includes
37
source_path_include = os.path.join(source_path, 'include', 'GL')
38
ports.install_headers(source_path_include, target='GL')
39
40
# build
41
srcs_regal = ['regal/RegalShaderInstance.cpp',
42
'regal/RegalIff.cpp',
43
'regal/RegalQuads.cpp',
44
'regal/Regal.cpp',
45
'regal/RegalLog.cpp',
46
'regal/RegalInit.cpp',
47
'regal/RegalBreak.cpp',
48
'regal/RegalUtil.cpp',
49
'regal/RegalEmu.cpp',
50
'regal/RegalEmuInfo.cpp',
51
'regal/RegalFrame.cpp',
52
'regal/RegalHelper.cpp',
53
'regal/RegalMarker.cpp',
54
'regal/RegalTexC.cpp',
55
'regal/RegalCacheShader.cpp',
56
'regal/RegalCacheTexture.cpp',
57
'regal/RegalConfig.cpp',
58
'regal/RegalContext.cpp',
59
'regal/RegalContextInfo.cpp',
60
'regal/RegalDispatch.cpp',
61
'regal/RegalStatistics.cpp',
62
'regal/RegalLookup.cpp',
63
'regal/RegalPlugin.cpp',
64
'regal/RegalShader.cpp',
65
'regal/RegalToken.cpp',
66
'regal/RegalDispatchGlobal.cpp',
67
'regal/RegalDispatcher.cpp',
68
'regal/RegalDispatcherGL.cpp',
69
'regal/RegalDispatcherGlobal.cpp',
70
'regal/RegalDispatchEmu.cpp',
71
'regal/RegalDispatchGLX.cpp',
72
'regal/RegalDispatchLog.cpp',
73
'regal/RegalDispatchCode.cpp',
74
'regal/RegalDispatchCache.cpp',
75
'regal/RegalDispatchError.cpp',
76
'regal/RegalDispatchLoader.cpp',
77
'regal/RegalDispatchDebug.cpp',
78
'regal/RegalDispatchPpapi.cpp',
79
'regal/RegalDispatchStatistics.cpp',
80
'regal/RegalDispatchStaticES2.cpp',
81
'regal/RegalDispatchStaticEGL.cpp',
82
'regal/RegalDispatchTrace.cpp',
83
'regal/RegalDispatchMissing.cpp',
84
'regal/RegalPixelConversions.cpp',
85
'regal/RegalHttp.cpp',
86
'regal/RegalDispatchHttp.cpp',
87
'regal/RegalJson.cpp',
88
'regal/RegalFavicon.cpp',
89
'regal/RegalMac.cpp',
90
'regal/RegalSo.cpp',
91
'regal/RegalFilt.cpp',
92
'regal/RegalXfer.cpp',
93
'regal/RegalX11.cpp',
94
'regal/RegalDllMain.cpp']
95
96
srcs_regal = [os.path.join(source_path_src, s) for s in srcs_regal]
97
98
flags = [
99
'-DNDEBUG',
100
'-DREGAL_LOG=0', # Set to 1 if you need to have some logging info
101
'-DREGAL_MISSING=0', # Set to 1 if you don't want to crash in case of missing GL implementation
102
'-std=gnu++14',
103
'-fno-rtti',
104
'-fno-exceptions', # Disable exceptions (in STL containers mostly), as they are not used at all
105
'-O3',
106
'-I' + source_path_regal,
107
'-I' + source_path_lookup3,
108
'-I' + source_path_boost,
109
'-Wno-deprecated-register',
110
'-Wno-unused-parameter',
111
'-Wno-nontrivial-memaccess',
112
'-fdelayed-template-parsing',
113
]
114
if settings.PTHREADS:
115
flags += ['-pthread']
116
117
ports.build_port(source_path_src, final, 'regal', srcs=srcs_regal, flags=flags)
118
119
return [shared.cache.get_lib(get_lib_name(settings), create, what='port')]
120
121
122
def clear(ports, settings, shared):
123
shared.cache.erase_lib(get_lib_name(settings))
124
125
126
def linker_setup(ports, settings):
127
settings.FULL_ES2 = 1
128
129
130
def show():
131
return 'regal (-sUSE_REGAL=1 or --use-port=regal; Regal license)'
132
133