-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathwasm.cf
More file actions
128 lines (103 loc) · 3.83 KB
/
wasm.cf
File metadata and controls
128 lines (103 loc) · 3.83 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# ENVIRONMENT VARIABLES
EC_TOOLCHAIN_DIR := $(EC_SDK_SRC)/obj/$(HOST_PLATFORM).x32/
export LD_LIBRARY_PATH := $(EC_TOOLCHAIN_DIR)lib
# PREFIXES AND EXTENSIONS
EC := .ec
S := .sym
I := .imp
B := .bowl
C := .c
O := .o
A := .a
SO := .js
E := .wasm
OUT := $(if $(STATIC_LIBRARY_TARGET),$(A),$(if $(SHARED_LIBRARY_TARGET),$(SO)$(VER),$(if $(EXECUTABLE_TARGET),$(E),.x)))
LP := $(if $(WINDOWS_TARGET),$(if $(STATIC_LIBRARY_TARGET),lib,),lib)
HOST_E := $(if $(WINDOWS_HOST),.exe,)
HOST_SO := $(if $(WINDOWS_HOST),.dll,$(if $(OSX_HOST),.dylib,.so))
HOST_LP := $(if $(WINDOWS_HOST),$(if $(STATIC_LIBRARY_TARGET),lib,),lib)
.SUFFIXES: .c .ec .sym .imp .bowl $(O) $(A)
# TOOLCHAIN
# OPTIONS
ifndef STATIC_LIBRARY_TARGET
USE_RESOURCES_EAR := defined
endif
NOSTRIP := defined
# EXTENSIONS
OUT := $(if $(STATIC_LIBRARY_TARGET),$(A),$(if $(SHARED_LIBRARY_TARGET),$(SO)$(VER),$(if $(EXECUTABLE_TARGET),$(E),.x)))
CPP := $(CCACHE_COMPILE)$(DISTCC_COMPILE)$(GCC_PREFIX)emcc$(_SYSROOT)
CC := $(CCACHE_COMPILE)$(DISTCC_COMPILE)$(GCC_PREFIX)emcc -O2$(_SYSROOT)$(if $(GCC_CC_FLAGS),$(space)$(GCC_CC_FLAGS),)
CXX := $(CCACHE_COMPILE)$(DISTCC_COMPILE)$(GCC_PREFIX)em++$(_SYSROOT)$(if $(GCC_CXX_FLAGS),$(space)$(GCC_CXX_FLAGS),)
ECP := $(EC_TOOLCHAIN_DIR)bin/ecp32
ECC := $(EC_TOOLCHAIN_DIR)bin/ecc32$(if $(CROSS_TARGET), -t $(TARGET_PLATFORM),)
ECS := $(EC_TOOLCHAIN_DIR)bin/ecs32 -wasm$(if $(CROSS_TARGET), -t $(TARGET_PLATFORM),)$(if $(OUTPUT_POT), -outputpot,)$(if $(DISABLED_POOLING), -disabled-pooling,)
EAR := $(EC_TOOLCHAIN_DIR)bin/ear32
AS := $(GCC_PREFIX)as
LD := $(GCC_PREFIX)emcc -O2 -s ALLOW_MEMORY_GROWTH=1 -s ERROR_ON_UNDEFINED_SYMBOLS=1 -s EXPORT_ALL=1 -s WASM_BIGINT$(_SYSROOT)$(if $(GCC_LD_FLAGS),$(space)$(GCC_LD_FLAGS),)
AR := $(GCC_PREFIX)emar
STRIP := $(GCC_PREFIX)strip
ifdef WINDOWS_TARGET
WINDRES := $(GCC_PREFIX)windres
ifdef ARCH
ifeq ($(ARCH),x32)
WINDRES_FLAGS := -F pe-i386
else
ifeq ($(ARCH),x64)
WINDRES_FLAGS := -F pe-x86-64
endif
endif
endif
endif
UPX := upx
UPXFLAGS = -9
EARFLAGS =
ifndef ARCH
TARGET_ARCH :=$(shell $(CC) -dumpmachine)
ifdef WINDOWS_HOST
ifneq ($(filter x86_64%,$(TARGET_ARCH)),)
TARGET_ARCH := x86_64
else
TARGET_ARCH := i386
endif
endif
endif
# HARD CODED TARGET_PLATFORM-SPECIFIC OPTIONS
LDFLAGS +=$(if $(LINUX_TARGET), $(if $(__EMSCRIPTEN__),-Wl$(comma)--no-undefined,),)
LDFLAGS +=$(if $(OSX_TARGET), -framework cocoa -framework OpenGL,)
CFLAGS += -fmessage-length=0
ZLIB_ABSPATH := $(realpath $(dir $(EC_SDK_SRC)/deps/zlib/))
CFLAGS += -isystem $(call quote_path,$(ZLIB_ABSPATH)/src)
CFLAGS += -D__EMSCRIPTEN__ -DEMSCRIPTEN_WASM=1
LDFLAGS += -L$(call quote_path,$(ZLIB_ABSPATH)/obj/release.linux.$(COMPILER))
ifndef STATIC_LIBRARY_TARGET
ifndef EXECUTABLE_TARGET
LDFLAGS += -s MODULARIZE=1 -s EXPORT_ES6=1 -s EXPORT_NAME="$(MODULE)Module" -s EXPORTED_RUNTIME_METHODS="['cwrap', 'ccall', 'stringToUTF8', 'stackSave', 'stackRestore']"
endif
endif
# Avoid -shared being passed
SHAREDLIB :=
ECFLAGS += -t32
CFLAGS += -xc -msimd128
CXXFLAGS += -D__EMSCRIPTEN__ -DEMSCRIPTEN_WASM=1
ifdef WINDOWS_HOST
NULL_DEVICE := nul
else
NULL_DEVICE := /dev/null
endif
define check_flag
$(shell echo "int main(){}" | $(CC) -x c -o $(NULL_DEVICE) -c $(1) >$(NULL_DEVICE) 2>&1 && echo "yes" || echo "no")
endef
# This eC SDK is currently incompatible with C23, due to conflicting bool data type
CFLAGS += -fmessage-length=0 -std=gnu11
# The eC transpiler currently clears only the first member of unions assuming the entire union will be zeroed out
# GCC 15 is also being too agressive with strict aliasing optimizations breaking e.g., built-in container code generated by the compiler
ifeq ($(call check_flag,-fzero-init-padding-bits=unions),yes)
CFLAGS += -fzero-init-padding-bits=unions
endif
CFLAGS += -fno-strict-aliasing
OFLAGS += $(LDFLAGS)
ifdef ARCH_FLAGS
CFLAGS += $(ARCH_FLAGS)
CXXFLAGS += $(ARCH_FLAGS)
OFLAGS += $(ARCH_FLAGS)
endif