aboutsummaryrefslogtreecommitdiff
path: root/src/build_settings.cpp
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2023-06-07 02:20:06 +0100
committerGitHub <noreply@github.com>2023-06-07 02:20:06 +0100
commit907ef82d4b32b3ec1d4958a505c2b4445e219ee4 (patch)
tree5e2ca080af929ec750e0192ced8737e16c54e99c /src/build_settings.cpp
parent6a2ff3a3711e3da6bc9f2be9d9a67361b3ff9bd5 (diff)
parent7a1ab62987e2c980261f9d4fa10f5677d84dc4c9 (diff)
Merge pull request #2470 from odin-lang/separate-int-word-sizes
Separate int size from word/pointer size
Diffstat (limited to 'src/build_settings.cpp')
-rw-r--r--src/build_settings.cpp113
1 files changed, 74 insertions, 39 deletions
diff --git a/src/build_settings.cpp b/src/build_settings.cpp
index 8fe559309..92e0df38b 100644
--- a/src/build_settings.cpp
+++ b/src/build_settings.cpp
@@ -35,14 +35,12 @@ enum TargetArchKind : u16 {
TargetArch_arm32,
TargetArch_arm64,
TargetArch_wasm32,
- TargetArch_wasm64,
+ TargetArch_wasm64p32,
TargetArch_COUNT,
};
enum TargetEndianKind : u8 {
- TargetEndian_Invalid,
-
TargetEndian_Little,
TargetEndian_Big,
@@ -81,11 +79,10 @@ gb_global String target_arch_names[TargetArch_COUNT] = {
str_lit("arm32"),
str_lit("arm64"),
str_lit("wasm32"),
- str_lit("wasm64"),
+ str_lit("wasm64p32"),
};
gb_global String target_endian_names[TargetEndian_COUNT] = {
- str_lit(""),
str_lit("little"),
str_lit("big"),
};
@@ -97,7 +94,8 @@ gb_global String target_abi_names[TargetABI_COUNT] = {
};
gb_global TargetEndianKind target_endians[TargetArch_COUNT] = {
- TargetEndian_Invalid,
+ TargetEndian_Little,
+ TargetEndian_Little,
TargetEndian_Little,
TargetEndian_Little,
TargetEndian_Little,
@@ -116,7 +114,8 @@ gb_global String const ODIN_VERSION = str_lit(ODIN_VERSION_RAW);
struct TargetMetrics {
TargetOsKind os;
TargetArchKind arch;
- isize word_size;
+ isize ptr_size;
+ isize int_size;
isize max_align;
isize max_simd_align;
String target_triplet;
@@ -237,9 +236,10 @@ struct BuildContext {
TargetEndianKind endian_kind;
// In bytes
- i64 word_size; // Size of a pointer, must be >= 4
- i64 max_align; // max alignment, must be >= 1 (and typically >= word_size)
- i64 max_simd_align; // max alignment, must be >= 1 (and typically >= word_size)
+ i64 ptr_size; // Size of a pointer, must be >= 4
+ i64 int_size; // Size of a int/uint, must be >= 4
+ i64 max_align; // max alignment, must be >= 1 (and typically >= ptr_size)
+ i64 max_simd_align; // max alignment, must be >= 1 (and typically >= ptr_size)
CommandKind command_kind;
String command;
@@ -361,13 +361,13 @@ gb_internal isize MAX_ERROR_COLLECTOR_COUNT(void) {
gb_global TargetMetrics target_windows_i386 = {
TargetOs_windows,
TargetArch_i386,
- 4, 4, 8,
+ 4, 4, 4, 8,
str_lit("i386-pc-windows-msvc"),
};
gb_global TargetMetrics target_windows_amd64 = {
TargetOs_windows,
TargetArch_amd64,
- 8, 8, 16,
+ 8, 8, 8, 16,
str_lit("x86_64-pc-windows-msvc"),
str_lit("e-m:w-i64:64-f80:128-n8:16:32:64-S128"),
};
@@ -375,21 +375,21 @@ gb_global TargetMetrics target_windows_amd64 = {
gb_global TargetMetrics target_linux_i386 = {
TargetOs_linux,
TargetArch_i386,
- 4, 4, 8,
+ 4, 4, 4, 8,
str_lit("i386-pc-linux-gnu"),
};
gb_global TargetMetrics target_linux_amd64 = {
TargetOs_linux,
TargetArch_amd64,
- 8, 8, 16,
+ 8, 8, 8, 16,
str_lit("x86_64-pc-linux-gnu"),
str_lit("e-m:w-i64:64-f80:128-n8:16:32:64-S128"),
};
gb_global TargetMetrics target_linux_arm64 = {
TargetOs_linux,
TargetArch_arm64,
- 8, 8, 16,
+ 8, 8, 8, 16,
str_lit("aarch64-linux-elf"),
str_lit("e-m:o-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"),
};
@@ -397,7 +397,7 @@ gb_global TargetMetrics target_linux_arm64 = {
gb_global TargetMetrics target_linux_arm32 = {
TargetOs_linux,
TargetArch_arm32,
- 4, 4, 8,
+ 4, 4, 4, 8,
str_lit("arm-linux-gnu"),
str_lit("e-m:o-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"),
};
@@ -405,7 +405,7 @@ gb_global TargetMetrics target_linux_arm32 = {
gb_global TargetMetrics target_darwin_amd64 = {
TargetOs_darwin,
TargetArch_amd64,
- 8, 8, 16,
+ 8, 8, 8, 16,
str_lit("x86_64-apple-darwin"),
str_lit("e-m:o-i64:64-f80:128-n8:16:32:64-S128"),
};
@@ -413,7 +413,7 @@ gb_global TargetMetrics target_darwin_amd64 = {
gb_global TargetMetrics target_darwin_arm64 = {
TargetOs_darwin,
TargetArch_arm64,
- 8, 8, 16,
+ 8, 8, 8, 16,
str_lit("arm64-apple-macosx11.0.0"),
str_lit("e-m:o-i64:64-i128:128-n32:64-S128"),
};
@@ -421,14 +421,14 @@ gb_global TargetMetrics target_darwin_arm64 = {
gb_global TargetMetrics target_freebsd_i386 = {
TargetOs_freebsd,
TargetArch_i386,
- 4, 4, 8,
+ 4, 4, 4, 8,
str_lit("i386-unknown-freebsd-elf"),
};
gb_global TargetMetrics target_freebsd_amd64 = {
TargetOs_freebsd,
TargetArch_amd64,
- 8, 8, 16,
+ 8, 8, 8, 16,
str_lit("x86_64-unknown-freebsd-elf"),
str_lit("e-m:w-i64:64-f80:128-n8:16:32:64-S128"),
};
@@ -436,7 +436,7 @@ gb_global TargetMetrics target_freebsd_amd64 = {
gb_global TargetMetrics target_openbsd_amd64 = {
TargetOs_openbsd,
TargetArch_amd64,
- 8, 8, 16,
+ 8, 8, 8, 16,
str_lit("x86_64-unknown-openbsd-elf"),
str_lit("e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"),
};
@@ -444,7 +444,7 @@ gb_global TargetMetrics target_openbsd_amd64 = {
gb_global TargetMetrics target_essence_amd64 = {
TargetOs_essence,
TargetArch_amd64,
- 8, 8, 16,
+ 8, 8, 8, 16,
str_lit("x86_64-pc-none-elf"),
};
@@ -452,7 +452,7 @@ gb_global TargetMetrics target_essence_amd64 = {
gb_global TargetMetrics target_freestanding_wasm32 = {
TargetOs_freestanding,
TargetArch_wasm32,
- 4, 8, 16,
+ 4, 4, 8, 16,
str_lit("wasm32-freestanding-js"),
str_lit("e-m:e-p:32:32-i64:64-n32:64-S128"),
};
@@ -460,7 +460,7 @@ gb_global TargetMetrics target_freestanding_wasm32 = {
gb_global TargetMetrics target_js_wasm32 = {
TargetOs_js,
TargetArch_wasm32,
- 4, 8, 16,
+ 4, 4, 8, 16,
str_lit("wasm32-js-js"),
str_lit("e-m:e-p:32:32-i64:64-n32:64-S128"),
};
@@ -468,24 +468,42 @@ gb_global TargetMetrics target_js_wasm32 = {
gb_global TargetMetrics target_wasi_wasm32 = {
TargetOs_wasi,
TargetArch_wasm32,
- 4, 8, 16,
+ 4, 4, 8, 16,
str_lit("wasm32-wasi-js"),
str_lit("e-m:e-p:32:32-i64:64-n32:64-S128"),
};
-gb_global TargetMetrics target_js_wasm64 = {
+gb_global TargetMetrics target_freestanding_wasm64p32 = {
+ TargetOs_freestanding,
+ TargetArch_wasm64p32,
+ 4, 8, 8, 16,
+ str_lit("wasm32-freestanding-js"),
+ str_lit("e-m:e-p:32:32-i64:64-n32:64-S128"),
+};
+
+gb_global TargetMetrics target_js_wasm64p32 = {
TargetOs_js,
- TargetArch_wasm64,
- 8, 8, 16,
- str_lit("wasm64-js-js"),
- str_lit(""),
+ TargetArch_wasm64p32,
+ 4, 8, 8, 16,
+ str_lit("wasm32-js-js"),
+ str_lit("e-m:e-p:32:32-i64:64-n32:64-S128"),
};
+gb_global TargetMetrics target_wasi_wasm64p32 = {
+ TargetOs_wasi,
+ TargetArch_wasm32,
+ 4, 8, 8, 16,
+ str_lit("wasm32-wasi-js"),
+ str_lit("e-m:e-p:32:32-i64:64-n32:64-S128"),
+};
+
+
+
gb_global TargetMetrics target_freestanding_amd64_sysv = {
TargetOs_freestanding,
TargetArch_amd64,
- 8, 8, 16,
+ 8, 8, 8, 16,
str_lit("x86_64-pc-none-gnu"),
str_lit("e-m:w-i64:64-f80:128-n8:16:32:64-S128"),
TargetABI_SysV,
@@ -501,20 +519,29 @@ struct NamedTargetMetrics {
gb_global NamedTargetMetrics named_targets[] = {
{ str_lit("darwin_amd64"), &target_darwin_amd64 },
{ str_lit("darwin_arm64"), &target_darwin_arm64 },
+
{ str_lit("essence_amd64"), &target_essence_amd64 },
+
{ str_lit("linux_i386"), &target_linux_i386 },
{ str_lit("linux_amd64"), &target_linux_amd64 },
{ str_lit("linux_arm64"), &target_linux_arm64 },
{ str_lit("linux_arm32"), &target_linux_arm32 },
+
{ str_lit("windows_i386"), &target_windows_i386 },
{ str_lit("windows_amd64"), &target_windows_amd64 },
+
{ str_lit("freebsd_i386"), &target_freebsd_i386 },
{ str_lit("freebsd_amd64"), &target_freebsd_amd64 },
+
{ str_lit("openbsd_amd64"), &target_openbsd_amd64 },
+
{ str_lit("freestanding_wasm32"), &target_freestanding_wasm32 },
{ str_lit("wasi_wasm32"), &target_wasi_wasm32 },
{ str_lit("js_wasm32"), &target_js_wasm32 },
- // { str_lit("js_wasm64"), &target_js_wasm64 },
+
+ { str_lit("freestanding_wasm64p32"), &target_freestanding_wasm64p32 },
+ { str_lit("js_wasm64p32"), &target_js_wasm64p32 },
+ { str_lit("wasi_wasm64p32"), &target_wasi_wasm64p32 },
{ str_lit("freestanding_amd64_sysv"), &target_freestanding_amd64_sysv },
};
@@ -623,7 +650,7 @@ gb_internal bool find_library_collection_path(String name, String *path) {
gb_internal bool is_arch_wasm(void) {
switch (build_context.metrics.arch) {
case TargetArch_wasm32:
- case TargetArch_wasm64:
+ case TargetArch_wasm64p32:
return true;
}
return false;
@@ -641,7 +668,7 @@ gb_internal bool is_arch_x86(void) {
gb_internal bool allow_check_foreign_filepath(void) {
switch (build_context.metrics.arch) {
case TargetArch_wasm32:
- case TargetArch_wasm64:
+ case TargetArch_wasm64p32:
return false;
}
return true;
@@ -1164,16 +1191,24 @@ gb_internal void init_build_context(TargetMetrics *cross_target) {
GB_ASSERT(metrics->os != TargetOs_Invalid);
GB_ASSERT(metrics->arch != TargetArch_Invalid);
- GB_ASSERT(metrics->word_size > 1);
+ GB_ASSERT(metrics->ptr_size > 1);
+ GB_ASSERT(metrics->int_size > 1);
GB_ASSERT(metrics->max_align > 1);
GB_ASSERT(metrics->max_simd_align > 1);
+ GB_ASSERT(metrics->int_size >= metrics->ptr_size);
+ if (metrics->int_size > metrics->ptr_size) {
+ GB_ASSERT(metrics->int_size == 2*metrics->ptr_size);
+ }
+
+
bc->metrics = *metrics;
bc->ODIN_OS = target_os_names[metrics->os];
bc->ODIN_ARCH = target_arch_names[metrics->arch];
bc->endian_kind = target_endians[metrics->arch];
- bc->word_size = metrics->word_size;
+ bc->ptr_size = metrics->ptr_size;
+ bc->int_size = metrics->int_size;
bc->max_align = metrics->max_align;
bc->max_simd_align = metrics->max_simd_align;
bc->link_flags = str_lit(" ");
@@ -1257,9 +1292,9 @@ gb_internal void init_build_context(TargetMetrics *cross_target) {
// link_flags = gb_string_appendc(link_flags, "--export-all ");
// link_flags = gb_string_appendc(link_flags, "--export-table ");
link_flags = gb_string_appendc(link_flags, "--allow-undefined ");
- if (bc->metrics.arch == TargetArch_wasm64) {
- link_flags = gb_string_appendc(link_flags, "-mwasm64 ");
- }
+ // if (bc->metrics.arch == TargetArch_wasm64) {
+ // link_flags = gb_string_appendc(link_flags, "-mwasm64 ");
+ // }
if (bc->no_entry_point) {
link_flags = gb_string_appendc(link_flags, "--no-entry ");
}