-
Notifications
You must be signed in to change notification settings - Fork 10
/
build.h
175 lines (123 loc) · 5.74 KB
/
build.h
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/** @file build.h
* @author T J Atherton
*
* @brief Define constants that choose how Morpho is built
*/
/* **********************************************************************
* Version
* ********************************************************************** */
#define MORPHO_VERSIONSTRING "0.6.0"
#define MORPHO_VERSION_MAJOR 0
#define MORPHO_VERSION_MINOR 6
#define MORPHO_VERSION_PATCH 0
/* **********************************************************************
* Paths and file system
* ********************************************************************** */
#ifndef MORPHO_RESOURCESDIR
#define MORPHO_RESOURCESDIR "/usr/local"
#endif
#define MORPHO_HELPDIR "share/help" // Folder structure where help files are found
#define MORPHO_HELPEXTENSION "md" // File extension for help files
#define MORPHO_MODULEDIR "share/modules" // Folder structure where modules are found
#ifndef MORPHO_DYLIBEXTENSION
#define MORPHO_DYLIBEXTENSION "dylib" // File extension for extensions
#endif
#define MORPHO_EXTENSIONSDIR "lib" // Folder structure where extensions are found
#define MORPHO_MORPHOSUBDIR "morpho" // Morpho subdirectory
#define MORPHO_SEPARATOR '/' // File directory separator
#define MORPHO_EXTENSION "morpho" // File extension for morpho files
#define MORPHO_PACKAGELIST ".morphopackages" // File in $HOME that contains package locations
/* **********************************************************************
* Numeric tolerances
* ********************************************************************** */
/** Value used to detect zero */
#define MORPHO_EPS 1e-16
/* **********************************************************************
* Size limits
* ********************************************************************** */
/** @brief Maximum length of a Morpho error string. */
#define MORPHO_ERRORSTRINGSIZE 255
/** @brief Default size of input buffer. */
#define MORPHO_INPUTBUFFERDEFAULTSIZE 1024
/** @brief Maximum file name length. */
#define MORPHO_MAXIMUMFILENAMELENGTH 255
/** @brief Size of the call frame stack. */
#define MORPHO_CALLFRAMESTACKSIZE 255
/** @brief Size of the error handler stack. */
#define MORPHO_ERRORHANDLERSTACKSIZE 64
/** @brief Maximum number of object types */
#define MORPHO_MAXIMUMOBJECTDEFNS 64
/** @brief Type numbers in a value must be less than this value */
#define MORPHO_MAXIMUMVALUETYPES 8
/** @brief Maximum number of arguments */
#define MORPHO_MAXARGS 255 /** @warning Note that this cannot easily be adjusted >255 without changing the instruction encoding */
/** @brief Maximum number of constants */
#define MORPHO_MAXCONSTANTS 65536 /** @warning Note that this cannot easily be adjusted >65536 without changing the instruction encoding */
/* **********************************************************************
* Performance
* ********************************************************************** */
/** @brief Build Morpho VM with computed gotos */
#define MORPHO_COMPUTED_GOTO
/** @brief Build Morpho VM with small but hacky value type [NaN boxing] */
#ifndef _NO_NAN_BOXING
#define MORPHO_NAN_BOXING
#endif
/** @brief Number of bytes to bind before GC first runs */
#define MORPHO_GCINITIAL 1024;
/** It seems that DeltaBlue benefits strongly from garbage collecting while the heap is still fairly small */
/** @brief Controls how rapidly the GC tries to collect garbage */
#define MORPHO_GCGROWTHFACTOR 2
/** @brief Initial size of the stack */
#define MORPHO_STACKINITIALSIZE 256
/** @brief Controls how rapidly the stack grows */
#define MORPHO_STACKGROWTHFACTOR 2
/** @brief Limits size of statically allocated arrays on the C stack */
#define MORPHO_MAXIMUMSTACKALLOC 256
/** @brief Default number of threads */
#define MORPHO_DEFAULTTHREADNUMBER 0
/** @brief Size of L1 cache line */
#define _MORPHO_L1CACHELINESIZE 128 // M1/M2 is 128; most intel are 64
/** @brief Pad data structures involved in multiprocessing */
#define _MORPHO_PADDING char __padding[_MORPHO_L1CACHELINESIZE]
/* **********************************************************************
* Libraries
* ********************************************************************** */
/** Use Apple's accelerate library for dense linear algebra */
#define MORPHO_LINALG_USE_ACCELERATE
/** Use the LAPACKE library for dense linear algebra */
//#define MORPHO_LINALG_USE_LAPACKE
/** Use CSparse for sparse matrix */
#define MORPHO_LINALG_USE_CSPARSE
/* **********************************************************************
* Debugging
* ********************************************************************** */
/** @brief Include debugging features */
#define MORPHO_DEBUG
/** @brief Print each instruction executed by the VM. */
//#define MORPHO_DEBUG_PRINT_INSTRUCTIONS
/** @brief Display syntax tree after parsing */
//#define MORPHO_DEBUG_DISPLAYSYNTAXTREE
/** @brief Display register allocations during compilation */
//#define MORPHO_DEBUG_DISPLAYREGISTERALLOCATION
/** @brief Disables garbage collector */
//#define MORPHO_DEBUG_DISABLEGARBAGECOLLECTOR
/** @brief Stress test garbage collector */
#ifdef _DEBUG_STRESSGARBAGECOLLECTOR
#define MORPHO_DEBUG_STRESSGARBAGECOLLECTOR
#endif
/** @brief Log garbage collector */
//#define MORPHO_DEBUG_LOGGARBAGECOLLECTOR
/** @brief Check GC size tracking */
//#define MORPHO_DEBUG_GCSIZETRACKING
/** @brief Fill global constant table */
//#define MORPHO_DEBUG_FILLGLOBALCONSTANTTABLE
/** @brief Log optimizer */
//#define MORPHO_DEBUG_LOGOPTIMIZER
/** @brief Log help file parsing */
//#define MORPHO_DEBUG_LOGHELPFILES
/** @brief Debug symbol table */
//#define MORPHO_DEBUG_SYMBOLTABLE
/** @brief Diagnose opcode usage */
//#define MORPHO_OPCODE_USAGE
/** @brief Buiild with profile support */
#define MORPHO_PROFILER