diff --git a/.gitignore b/.gitignore index 57b7e79a..7fdfd573 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,7 @@ artifacts/ _ReSharper.Caches/ DerivedData/ enc_temp_folder/ -projects/.build +projects/.build* # Installer releases/ diff --git a/CHANGELOG.md b/CHANGELOG.md index 47bf0c07..17876719 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Changelog +## [0.35.0] - 2023-11-27 +- Add 32 bits support for Windows. + ## [0.34.4] - 2023-11-09 - Add pattern zoomed view price change annotation. - Add support for `MEDIAN(set)` expression to compute the median of a set of values. diff --git a/CMakeLists.txt b/CMakeLists.txt index 69c5946f..f1b209d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -185,6 +185,9 @@ endif() # Set compiler specific flags if(MSVC) + # Define _WIN32_WINNT to > Windows 7 + add_compile_options(-D_WIN32_WINNT=0x0601) + # Enable multi-processor compilation add_compile_options(/MP) diff --git a/README.md b/README.md index 42d03172..e01a50aa 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,46 @@ Note that currently the `./run` scripts only supports the `Visual Studio 2022` g cmake --no-warn-unused-cli -DBUILD_MAX_JOB_THREADS=4 -DBUILD_MAX_QUERY_THREADS=8 -S./ -B./projects/.build -G "Visual Studio 16 2019" -A x64 ``` +#### Visual Studio 2022 x86 (32-bit) + +##### Build the glfw library for 32-bit using cmake + +```bash +cmake --no-warn-unused-cli -S./ -B.build32 -G "Visual Studio 17 2022" -A Win32 -DUSE_MSVC_RUNTIME_LIBRARY_DLL=OFF +``` + +##### Build the libcurl library for 32-bit using cmake + +First open the **x86 Native Tools Command Prompt for VS 2022** and then run the following commands: + +```bash +git clone git@github.com:wiimag/curl.git +cd curl +set RTLIBCFG=static +buildconf.bat +cd winbuild + +REM Build the debug version +nmake /f MakeFile.vc mode=static DEBUG=no +REM copy builds/libcurl-vc-x86-debug-static-ipv6-sspi-schannel/lib/libcurl_a_debug.lib libcurl_a_debug.lib + +REM Build the release version +nmake /f MakeFile.vc mode=static DEBUG=yes +REM copy builds/libcurl-vc-x86-release-static-ipv6-sspi-schannel/lib/libcurl_a.lib libcurl_a.lib +``` + +##### Generate the solution (note that it was generated in the `projects/.build32` folder): + +```bash +cmake --no-warn-unused-cli -DBUILD_ENABLE_BACKEND=ON -DBUILD_MAX_JOB_THREADS=4 -DBUILD_MAX_QUERY_THREADS=8 -S./ -B./projects/.build32 -G "Visual Studio 17 2022" -A Win32 +``` + +##### Open the solution: + +```bash +start ./projects/.build32/wallet.sln +``` + #### Xcode ```bash diff --git a/config/build.config b/config/build.config index 7135245b..50a04319 100644 --- a/config/build.config +++ b/config/build.config @@ -13,8 +13,8 @@ PRODUCT_VERSIONS_URL=https://wallet.wiimag.com/versions # Version info VERSION_MAJOR=0 -VERSION_MINOR=34 -VERSION_PATCH=4 +VERSION_MINOR=35 +VERSION_PATCH=0 # Build settings (Usually passed to Cmake) BUILD_SERVICE_EXE=OFF diff --git a/config/locales.sjson b/config/locales.sjson index fad3c380..9f443fd5 100644 --- a/config/locales.sjson +++ b/config/locales.sjson @@ -4228,55 +4228,50 @@ en = "Linear Trend" fr = "Tendance lin\xc3\xa9aire" } - { - hash = "8fe16641715f7a93" - en = "Modifier dans l'\xc3\xa9diteur" - fr = "@TODO" - } { hash = "710bc2ba51994885" en = "Min" - fr = "@TODO" + fr = "Min" } { hash = "33c3ec50db3fb613" en = "Max" - fr = "@TODO" + fr = "Max" } { hash = "1e53d36773c2a9f7" en = "Last" - fr = "@TODO" + fr = "Dernier" } { hash = "a9d9b99cae3cabb5" en = "Min %.2lf $" - fr = "@TODO" + fr = "Min %.2lf $" } { hash = "bb4805d69eeee74c" en = "Max %.2lf $" - fr = "@TODO" + fr = "Max %.2lf $" } { hash = "a4edba5216e536ec" en = "First" - fr = "@TODO" + fr = "Premier" } { hash = "92264e6da32d8bbe" en = "First %lf" - fr = "@TODO" + fr = "Premier %lf" } { hash = "234154a880576fe2" en = "Change: %.2lg %%" - fr = "@TODO" + fr = "Changement: %.2lg %%" } { hash = "bcd0bcbd057101ce" en = "Change: {0, short} %%" - fr = "@TODO" + fr = "Changement: {0, short} %%" } ] } \ No newline at end of file diff --git a/external/astc-encoder/CMakeLists.txt b/external/astc-encoder/CMakeLists.txt index 0b359cfb..48c50756 100644 --- a/external/astc-encoder/CMakeLists.txt +++ b/external/astc-encoder/CMakeLists.txt @@ -37,6 +37,18 @@ set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}") # Use linker flags from parent project set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}") +if (MSVC) + # Remove float fast math flags + string(REPLACE "/fp:fast" "" CMAKE_C_FLAGS ${CMAKE_C_FLAGS}) + string(REPLACE "/fp:fast" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) + + # If 32 bits define ASTCENC_AVX to 0 + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + add_definitions(-DASTCENC_AVX=0) + endif() + +endif() + # Create the bx library add_library(astc-encoder STATIC ${ASTC_SOURCES}) diff --git a/external/glfw/lib-vc2022-32/glfw3.lib b/external/glfw/lib-vc2022-32/glfw3.lib new file mode 100644 index 00000000..ff39e101 Binary files /dev/null and b/external/glfw/lib-vc2022-32/glfw3.lib differ diff --git a/external/libcurl/lib/win32/libcurl_a.lib b/external/libcurl/lib/win32/libcurl_a.lib new file mode 100644 index 00000000..91e931a5 Binary files /dev/null and b/external/libcurl/lib/win32/libcurl_a.lib differ diff --git a/external/libcurl/lib/win32/libcurl_a_debug.lib b/external/libcurl/lib/win32/libcurl_a_debug.lib new file mode 100644 index 00000000..ea5dc995 Binary files /dev/null and b/external/libcurl/lib/win32/libcurl_a_debug.lib differ diff --git a/external/libcurl/lib/libcurl_a.lib b/external/libcurl/lib/win64/libcurl_a.lib similarity index 100% rename from external/libcurl/lib/libcurl_a.lib rename to external/libcurl/lib/win64/libcurl_a.lib diff --git a/external/libcurl/lib/libcurl_a_debug.lib b/external/libcurl/lib/win64/libcurl_a_debug.lib similarity index 100% rename from external/libcurl/lib/libcurl_a_debug.lib rename to external/libcurl/lib/win64/libcurl_a_debug.lib diff --git a/framework/CMakeLists.txt b/framework/CMakeLists.txt index 9e5db50a..60c07080 100644 --- a/framework/CMakeLists.txt +++ b/framework/CMakeLists.txt @@ -192,10 +192,18 @@ endif() if (WIN32) # On Windows we use a #pragma comment(lib, "glfw3.lib") in the source code - target_link_directories(framework PUBLIC ${ROOT_DIR}/external/glfw/lib-vc2022-64) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + target_link_directories(framework PUBLIC ${ROOT_DIR}/external/glfw/lib-vc2022-64) + else() + target_link_directories(framework PUBLIC ${ROOT_DIR}/external/glfw/lib-vc2022-32) + endif() if (BUILD_SERVICE_EXE) - target_link_directories(service-framework PUBLIC ${ROOT_DIR}/external/glfw/lib-vc2022-64) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + target_link_directories(service-framework PUBLIC ${ROOT_DIR}/external/glfw/lib-vc2022-64) + else() + target_link_directories(service-framework PUBLIC ${ROOT_DIR}/external/glfw/lib-vc2022-32) + endif() endif() elseif(APPLE) @@ -222,10 +230,18 @@ endif() if (MSVC) # On Windows we use a #pragma comment(lib, "libcurl_a*.lib") in the source code - target_link_directories(framework PUBLIC ${ROOT_DIR}/external/libcurl/lib) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + target_link_directories(framework PUBLIC ${ROOT_DIR}/external/libcurl/lib/win64) + else() + target_link_directories(framework PUBLIC ${ROOT_DIR}/external/libcurl/lib/win32) + endif() if (BUILD_SERVICE_EXE) - target_link_directories(service-framework PUBLIC ${ROOT_DIR}/external/libcurl/lib) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + target_link_directories(service-framework PUBLIC ${ROOT_DIR}/external/libcurl/lib/win64) + else() + target_link_directories(service-framework PUBLIC ${ROOT_DIR}/external/libcurl/lib/win32) + endif() endif() elseif(APPLE) diff --git a/framework/about.h b/framework/about.h index 900155d9..2fffb083 100644 --- a/framework/about.h +++ b/framework/about.h @@ -19,7 +19,7 @@ constexpr const char EVENT_ABOUT_OPEN_WEBSITE[] = "ABOUT_OPEN_WEBSITE"; * * We use #FOUNDATION_LINKER_INCLUDE in order to force the linker to include the #about module. */ -FOUNDATION_EXTERN void FOUNDATION_LINKER_INCLUDE(about_initialize)(); +//FOUNDATION_EXTERN void FOUNDATION_LINKER_INCLUDE(about_initialize)(); /* Explicitly initialize the about module. */ void about_initialize(); diff --git a/framework/common.h b/framework/common.h index 74a32ab7..a557752a 100644 --- a/framework/common.h +++ b/framework/common.h @@ -636,7 +636,7 @@ template FOUNDATION_FORCEINLINE T to_opaque(void* ptr) { const auto v = (intptr_t)(ptr); - FOUNDATION_ASSERT(std::numeric_limits::min() <= v && v <= std::numeric_limits::max()); + FOUNDATION_ASSERT(std::numeric_limits::min() <= (T)v && (T)v <= std::numeric_limits::max()); return (T)v; } diff --git a/framework/config.cpp b/framework/config.cpp index 3365d9e5..bcfd5d94 100644 --- a/framework/config.cpp +++ b/framework/config.cpp @@ -932,7 +932,7 @@ void config_array_sort(const config_handle_t& array_handle, const functionvalues; config_value_t* p = &values[indexes[0]]; - for (int i = 1; i < element_count; ++i) + for (size_t i = 1; i < element_count; ++i) { config_index_t next = indexes[i]; p->sibling = next; @@ -1020,7 +1020,7 @@ bool config_is_undefined(const config_handle_t& h, const char* key /*= nullptr*/ FOUNDATION_STATIC FOUNDATION_FORCEINLINE void config_sjson_add_string(config_sjson_t& sjson, const char* str, size_t length) { const char* s = str; - for (int i = 0; i < length && *s; ++i, ++s) + for (size_t i = 0; i < length && *s; ++i, ++s) sjson = array_push(sjson, *s); } @@ -1064,7 +1064,7 @@ FOUNDATION_STATIC void config_sjson_write_string(config_sjson_t& sjson, string_c config_sjson_add_char(sjson, '"'); const char* s = value.str; - for (int i = 0; i < value.length && *s; ++i, ++s) + for (size_t i = 0; i < value.length && *s; ++i, ++s) { char c = *s; if (c == '"' || c == '\\') @@ -1152,7 +1152,7 @@ FOUNDATION_STATIC void config_sjson_write(const config_handle_t& value_handle, c FOUNDATION_STATIC bool config_sjson_is_simple_identifier(string_const_t value) { const char* s = value.str; - for (int i = 0; i < value.length && *s; ++i, ++s) + for (size_t i = 0; i < value.length && *s; ++i, ++s) { char c = *s; if (c >= '0' && c <= '9') @@ -1210,7 +1210,7 @@ FOUNDATION_STATIC size_t config_sjson_write_object_fields(const config_handle_t& } } - int element_index = 0; + size_t element_index = 0; const size_t element_count = config_size(obj_handle); for (auto e : obj_handle) { @@ -1294,7 +1294,7 @@ FOUNDATION_STATIC void config_sjson_write_array(const config_handle_t& array_han const bool simple_json = (array_handle.config->options & CONFIG_OPTION_WRITE_JSON) == 0; auto options = array_handle.config->options; - int element_index = 0; + size_t element_index = 0; const size_t element_count = config_size(array_handle); const config_value_t* values = array_handle.config->values; const config_value_t* item = &values[arr->child]; @@ -1364,7 +1364,7 @@ void config_sjson_deallocate(config_sjson_const_t sjson) bool config_parse_at_end(string_const_t json, int index) { - return index >= json.length; + return index >= (int)json.length; } void config_parse_skip_BOM(string_const_t json, int& index) @@ -1451,7 +1451,7 @@ FOUNDATION_STATIC bool config_parse_consume(string_const_t json, int& index, con int end = index; config_parse_skip_whitespace(json, end); const char* t = consume; - for (int i = 0; i < consume_length && *t; ++i, ++t) + for (size_t i = 0; i < consume_length && *t; ++i, ++t) { if (config_parse_next(json, end) != *t) { @@ -1520,7 +1520,7 @@ string_t config_parse_string(string_const_t json, int& index, config_option_flag throw config_parse_exception(json, index, "Invalid Unicode character or sequence"); const char* utf8c = utf8.value.str; - for (int i = 0; i < utf8.value.length && *utf8c; ++i, ++utf8c) + for (size_t i = 0; i < utf8.value.length && *utf8c; ++i, ++utf8c) s = array_push(s, *utf8c); index += 4; } @@ -1606,7 +1606,7 @@ FOUNDATION_STATIC string_t config_parse_identifier(string_const_t json, int& ind char* s = nullptr; array_reserve(s, 32); - while (index < json.length) + while (index < (int)json.length) { char c = config_parse_next(json, index); if (c == ' ' || c == '\t' || c == '\n' || c == '=' || c == ':') @@ -1932,10 +1932,10 @@ FOUNDATION_STATIC config_handle_t config_parse_yaml_object(stream_t* stream, con // Check level const size_t field_level = stream_skip_whitespace(stream); - if (field_level > level) + if ((int)field_level > level) return obj; - FOUNDATION_ASSERT(field_level <= level); + FOUNDATION_ASSERT((int)field_level <= level); if (field_level > 0 && stream_peek(stream) == '-') { @@ -1943,7 +1943,7 @@ FOUNDATION_STATIC config_handle_t config_parse_yaml_object(stream_t* stream, con return obj; // New array element at same level} } - if (field_level > 0 && field_level < level) + if (field_level > 0 && (int)field_level < level) { // End of object, set stream position back to start of line stream_seek(stream, pos, STREAM_SEEK_BEGIN); diff --git a/framework/config.h b/framework/config.h index ce3150ac..b7eae4a0 100644 --- a/framework/config.h +++ b/framework/config.h @@ -26,7 +26,7 @@ struct config_value_t; typedef char* config_sjson_t; typedef const char* config_sjson_const_t; -typedef unsigned int config_index_t; +typedef uint32_t config_index_t; /*! Config value primitive types. */ typedef enum : uint8_t { diff --git a/framework/console.cpp b/framework/console.cpp index 7a41ed97..ba0f8009 100644 --- a/framework/console.cpp +++ b/framework/console.cpp @@ -195,7 +195,7 @@ FOUNDATION_STATIC void console_render_logs(const ImRect& rect) { const float window_width = ImGui::GetWindowWidth(); const float item_available_width = ImGui::GetContentRegionAvail().x; - for (size_t i = clipper.DisplayStart; i < min(clipper.DisplayEnd, (int)array_size(_console_module->messages)); ++i) + for (int i = clipper.DisplayStart; i < min(clipper.DisplayEnd, (int)array_size(_console_module->messages)); ++i) { log_message_t& log = _console_module->messages[i]; @@ -313,7 +313,7 @@ FOUNDATION_STATIC void console_render_toolbar() const size_t filter_length = string_length(_console_module->search_filter); if (filter_length > 0) { - size_t log_count = array_size(_console_module->messages); + int log_count = to_int(array_size(_console_module->messages)); for (_console_module->filtered_message_count = 0; _console_module->filtered_message_count < log_count;) { const log_message_t& log = _console_module->messages[_console_module->filtered_message_count]; diff --git a/framework/expr.cpp b/framework/expr.cpp index fb9f9ad5..65ddece8 100644 --- a/framework/expr.cpp +++ b/framework/expr.cpp @@ -318,7 +318,7 @@ expr_result_t expr_eval_pair(const expr_result_t& key, const expr_result_t& valu expr_result_t expr_eval_get_set_arg(const vec_expr_t* args, size_t idx, const char* message) { - if (idx >= args->len) + if (to_int(idx) >= args->len) throw ExprError(EXPR_ERROR_INVALID_ARGUMENT, "Missing arguments: %s", message); expr_result_t value = expr_eval(&args->buf[idx]); @@ -336,7 +336,7 @@ expr_result_t expr_eval_get_set_arg(const vec_expr_t* args, size_t idx, const ch string_const_t expr_eval_get_string_arg(const vec_expr_t* args, size_t idx, const char* message) { - if (idx >= args->len) + if (to_int(idx) >= args->len) throw ExprError(EXPR_ERROR_INVALID_ARGUMENT, "Missing arguments: %s", message); const auto& value = expr_eval(&args->buf[idx]); diff --git a/framework/expr.h b/framework/expr.h index 1ec8d4bd..6a1a59bf 100644 --- a/framework/expr.h +++ b/framework/expr.h @@ -16,7 +16,11 @@ #define HASH_EXPR static_hash_string("expr", 4, 0xe44cd53772fb5e1eLL) -#define NO_INDEX (UINT64_MAX) +#if FOUNDATION_ARCH_X86_64 + #define NO_INDEX (UINT64_MAX) +#else + #define NO_INDEX (UINT32_MAX) +#endif #define EXPR_ZERO (expr_result_t(EXPR_RESULT_NULL)), (nullptr), (0) struct expr_t; @@ -168,6 +172,7 @@ typedef struct ExprError } expr_error_t; /*! Flags used to represent an expression result storing a pointer value. */ +#if FOUNDATION_ARCH_X86_64 enum EXPR_POINTER_CONTENT : uint64_t { EXPR_POINTER_NONE = 0, @@ -184,6 +189,24 @@ enum EXPR_POINTER_CONTENT : uint64_t EXPR_POINTER_ELEMENT_SIZE_SHIFT = 36ULL, EXPR_POINTER_ELEMENT_COUNT_SHIFT = 0ULL, }; +#else +enum EXPR_POINTER_CONTENT : uint32_t +{ + EXPR_POINTER_NONE = 0, + EXPR_POINTER_UNSAFE = (1U << 31U), + EXPR_POINTER_ARRAY = (1U << 30U), + EXPR_POINTER_ARRAY_FLOAT = (1U << 29U), // floats and double (when element size == 8) + EXPR_POINTER_ARRAY_INTEGER = (1U << 28U), + EXPR_POINTER_ARRAY_UNSIGNED = (EXPR_POINTER_ARRAY_INTEGER | (1U << 27U)), + + EXPR_POINTER_TYPE_MASK = 0xFF000000U, + EXPR_POINTER_ELEMENT_SIZE_MASK = 0x00FFFF00U, + EXPR_POINTER_ELEMENT_COUNT_MASK = 0x000000FFU, + + EXPR_POINTER_ELEMENT_SIZE_SHIFT = 8U, + EXPR_POINTER_ELEMENT_COUNT_SHIFT = 0U, +}; +#endif /* * Expression data types diff --git a/framework/jobs.cpp b/framework/jobs.cpp index a7507135..33ea0e09 100644 --- a/framework/jobs.cpp +++ b/framework/jobs.cpp @@ -104,11 +104,6 @@ void job_deallocate(job_t*& job) job->flags |= JOB_DEALLOCATE_AFTER_EXECUTION; } -job_t* job_execute(const job_handler_t& handler, void* payload /*= nullptr*/, job_flags_t flags /*= JOB_FLAGS_NONE*/) -{ - return job_execute(handler, payload, 0, flags); -} - job_t* job_execute(const job_handler_t& handler, void* payload, size_t payload_size, job_flags_t flags /*= JOB_FLAGS_NONE*/) { job_t* new_job = job_allocate(); diff --git a/framework/jobs.h b/framework/jobs.h index eff654eb..961e50d4 100644 --- a/framework/jobs.h +++ b/framework/jobs.h @@ -11,12 +11,12 @@ struct payload_t{}; typedef function job_handler_t; -typedef enum job_enum_flag_t : unsigned int { +typedef enum job_enum_flag_t : uint32_t { JOB_FLAGS_NONE = 0, JOB_DEALLOCATE_AFTER_EXECUTION = 1 << 10 } job_flag_t; -typedef unsigned int job_flags_t; +typedef uint32_t job_flags_t; struct job_t { @@ -38,8 +38,21 @@ job_t* job_allocate(); void job_deallocate(job_t*& job); -job_t* job_execute(const job_handler_t& handler, void* payload = nullptr, job_flags_t flags = JOB_FLAGS_NONE); +job_t* job_execute(const job_handler_t& handler, void* payload, size_t payload_size, job_flags_t flags); -job_t* job_execute(const job_handler_t& handler, void* payload, size_t payload_size, job_flags_t flags = JOB_FLAGS_NONE); +FOUNDATION_FORCEINLINE job_t* job_execute(const job_handler_t& handler) +{ + return job_execute(handler, nullptr, 0, JOB_FLAGS_NONE); +} + +FOUNDATION_FORCEINLINE job_t* job_execute(const job_handler_t& handler, void* payload) +{ + return job_execute(handler, payload, 0, JOB_FLAGS_NONE); +} + +FOUNDATION_FORCEINLINE job_t* job_execute(const job_handler_t& handler, void* payload, job_flags_t flags) +{ + return job_execute(handler, payload, 0, flags); +} bool job_completed(job_t* job); diff --git a/framework/string.cpp b/framework/string.cpp index 16a3c782..b018d46f 100644 --- a/framework/string.cpp +++ b/framework/string.cpp @@ -91,7 +91,7 @@ string_t string_utf8_unescape(char* buffer, size_t capacity, const char* s, size char utf_chars_buffer[4]; string_t utf_chars = string_convert_utf16(utf_chars_buffer, sizeof(utf_chars_buffer), &uc, 1); - for (int j = 0; j < utf_chars.length; ++j) + for (size_t j = 0; j < utf_chars.length; ++j) utf8.str[utf8.length++] = utf_chars_buffer[j]; c += 5; } diff --git a/framework/string_table.cpp b/framework/string_table.cpp index e55e80e8..1858492c 100644 --- a/framework/string_table.cpp +++ b/framework/string_table.cpp @@ -195,7 +195,7 @@ FOUNDATION_STATIC FOUNDATION_FORCEINLINE string_table_hash_length_t string_table uint32_t h = 0; const char* s = start; - for (int i = 0; i < length && *s; ++i, ++s) + for (size_t i = 0; i < length && *s; ++i, ++s) h = h ^ ((h << 5) + (h >> 2) + (unsigned char)*s); return string_table_hash_length_t { start, h, (int)(s - start) }; @@ -237,7 +237,7 @@ FOUNDATION_STATIC void string_table_rebuild_hash_table(string_table_t* st) void string_table_grow(string_table_t* st, int bytes) { - FOUNDATION_ASSERT(bytes >= st->allocated_bytes); + FOUNDATION_ASSERT((size_t)bytes >= st->allocated_bytes); const char* const old_strings = st->strings(); st->allocated_bytes = bytes; @@ -265,7 +265,7 @@ string_table_t* string_table_grow(string_table_t** out_st, int bytes /*= 0*/) string_table_t* st = *out_st; bytes = max(st->allocated_bytes * HASH_FACTOR, bytes); - FOUNDATION_ASSERT(bytes >= st->allocated_bytes); + FOUNDATION_ASSERT(bytes >= (int)st->allocated_bytes); size_t old_string_bytes = st->string_bytes; st->string_bytes = 0; @@ -320,7 +320,7 @@ FOUNDATION_STATIC int string_table_find_slot_index(const string_table_t* st, T* { const char* str = strs + ht[i]; const size_t strs_remaining_length = st->string_bytes - (str - strs); - if (key.length < strs_remaining_length && str[key.length] == '\0' && strncmp(key.s, str, key.length) == 0) + if ((size_t)key.length < strs_remaining_length && str[key.length] == '\0' && strncmp(key.s, str, key.length) == 0) return i; i = (i + 1) % st->num_hash_slots; } @@ -410,7 +410,7 @@ string_table_symbol_t string_table_to_symbol(string_table_t* st, const char* s, const string_table_symbol_t symbol = string_table_available_slot(st, length); - if ((size_t)symbol + length + 1 > string_table_available_string_bytes(st)) + if ((size_t)symbol + length + 1 > (size_t)string_table_available_string_bytes(st)) return STRING_TABLE_FULL; if (st->uses_16_bit_hash_slots) @@ -449,7 +449,7 @@ string_table_symbol_t string_table_find_symbol(const string_table_t* st, const c const char* string_table_to_string(string_table_t* st, string_table_symbol_t symbol) { - if (symbol > 0 && symbol <= st->string_bytes) + if (symbol > 0 && (size_t)symbol <= st->string_bytes) return st->strings(symbol); return nullptr; } diff --git a/framework/table.h b/framework/table.h index 76b934ca..e95b3e18 100644 --- a/framework/table.h +++ b/framework/table.h @@ -18,7 +18,7 @@ struct table_t; struct table_column_t; /*! Table flags that can define how table are displayed and what behavior they have. */ -typedef enum : size_t { +typedef enum : uint64_t { TABLE_DEFAULT_OPTIONS = 0, /*! If this flag is set, the table will display a summary row at the bottom. */ @@ -35,7 +35,7 @@ typedef enum : size_t { * The #fetch_value cell callback will be called with the column flag #COLUMN_ADD_NEW_ELEMENT */ TABLE_ADD_NEW_ROW = 1ULL << 35, } table_flag_t; -typedef size_t table_flags_t; +typedef uint64_t table_flags_t; /*! Column flags that can define how column are displayed and what behavior they have. */ typedef enum : unsigned int { diff --git a/framework/tests/config_tests.cpp b/framework/tests/config_tests.cpp index 90c6e0c5..cb9f11ad 100644 --- a/framework/tests/config_tests.cpp +++ b/framework/tests/config_tests.cpp @@ -1064,7 +1064,7 @@ TEST_SUITE("Configuration") CHECK_EQ(cv["b"].as_boolean(), true); CHECK_EQ(cv["c"]["n"].as_number(), 42.0); CHECK_EQ(cv["c"]["s"].as_string(), CTEXT("a string")); - CHECK_EQ(cv["c"]["a"][3]["a"].as_number(), 10.0); + CHECK_EQ(cv["c"]["a"][3UL]["a"].as_number(), 10.0); string_const_t s1 = cv["shader"].as_string(); string_const_t s2 = CTEXT("int main()\n{\n // Return red color\n gl_Color.xyz = vec3(1.0, 0.0, 0.0);\n}\n"); @@ -1084,7 +1084,7 @@ TEST_SUITE("Configuration") CHECK_EQ(cv["b"].as_boolean(), true); CHECK_EQ(cv["c"]["n"].as_number(), 42.0); CHECK_EQ(cv["c"]["s"].as_string(), CTEXT("a string")); - CHECK_EQ(cv["c"]["a"][3]["a"].as_number(), 10.0); + CHECK_EQ(cv["c"]["a"][3UL]["a"].as_number(), 10.0); config_deallocate(cv); } diff --git a/framework/tests/database_tests.cpp b/framework/tests/database_tests.cpp index 864e6659..fdfb3a1d 100644 --- a/framework/tests/database_tests.cpp +++ b/framework/tests/database_tests.cpp @@ -100,7 +100,7 @@ TEST_SUITE("Database") } } - for (int i = 0, r = 0; i < min(ARRAY_COUNT(random_numbers) - duplicates, start_capacity); ++i) + for (size_t i = 0, r = 0; i < min(ARRAY_COUNT(random_numbers) - duplicates, start_capacity); ++i) { if (random_numbers[r] != 0) { diff --git a/run b/run index 4532b778..25a3c0c6 100755 --- a/run +++ b/run @@ -22,9 +22,6 @@ SHORT_NAME=$(build_setting "PROJECT_ID") SOLUTION_DIR=projects/.build PROGRAM_NAME=$(basename $0) -# Precompute some paths -FULL_SOLUTION_DIR=$(convert_path_to_platform $(pwd)/$SOLUTION_DIR) - # # Parse common command line arguments # @@ -37,6 +34,7 @@ TESTS=() OPEN=0 OPEN_WORKSPACE=0 GENERATE=() +GENERATE_WIN32=0 PACKAGE=() START=() DIFF=() @@ -115,6 +113,14 @@ while [[ $# -gt 0 ]]; do GENERATE=($YES) COMMAND_NAME_ARGS="GENERATE" shift # past argument + + # Check if the solution should be generated for 32 bits + if [ $# -ne 0 ] && [ $1 = "win32" ]; then + GENERATE_WIN32=1 + SOLUTION_DIR=projects/.build-win32 + shift + fi + ;; p|package) COMMAND_COUNTER=$((COMMAND_COUNTER+1)) @@ -188,6 +194,9 @@ while [[ $# -gt 0 ]]; do esac done +# Precompute some paths +FULL_SOLUTION_DIR=$(convert_path_to_platform $(pwd)/$SOLUTION_DIR) + # If there is no arguments to ./run, then lets force start to be the default command if [ $COMMAND_COUNTER -eq 0 ]; then if [ ${#START[@]} -eq 0 ]; then @@ -303,6 +312,16 @@ if [ $VERBOSE -ge 1 ]; then echo "VERBOSE: $VERBOSE" fi +# +# Setup cmake variables +# +# Determine the architecture to generate the solution for +if [ $GENERATE_WIN32 -eq 1 ]; then + CMAKE_ARCH="-A Win32" +else + CMAKE_ARCH="-A x64" +fi + # # Generate the CMAKE solution # @@ -350,7 +369,7 @@ if [ ${#GENERATE[@]} -ge 1 ] && [ ${GENERATE[0]} -ge 1 ]; then fi if [ $machine == "MinGw" ]; then - cmake -G "Visual Studio 17 2022" -A x64 ../.. ${CMAKE_ARGS[@]} + cmake -G "Visual Studio 17 2022" ${CMAKE_ARCH} ../.. ${CMAKE_ARGS[@]} elif [ ${machine} == "Mac" ]; then cmake -G "Xcode" ../.. ${CMAKE_ARGS[@]} fi diff --git a/sources/CMakeLists.txt b/sources/CMakeLists.txt index 0d3b6426..8158e728 100644 --- a/sources/CMakeLists.txt +++ b/sources/CMakeLists.txt @@ -195,7 +195,12 @@ endif() if (MSVC) # Define PRODUCT_WINDOWS_FILENAME - add_compile_options(-DPRODUCT_WINDOWS_FILENAME="${AppId}.exe") + if(CMAKE_SIZEOF_VOID_P EQUAL 4) + set(PRODUCT_WINDOWS_FILENAME "${AppId}32") + else() + set(PRODUCT_WINDOWS_FILENAME "${AppId}") + endif() + add_compile_options(-DPRODUCT_WINDOWS_FILENAME="${PRODUCT_WINDOWS_FILENAME}.exe") # Create executable add_executable(${AppId} WIN32 @@ -206,6 +211,8 @@ if (MSVC) ${EXTERNAL_SOURCES} ) + set_target_properties(${AppId} PROPERTIES OUTPUT_NAME "${PRODUCT_WINDOWS_FILENAME}") + # Copy the config/*.sjson files to the build directory #file(COPY ${CONFIG_FILES} DESTINATION ${ROOT_DIR}/build) diff --git a/sources/app.cpp b/sources/app.cpp index 7bd5a75c..9269afae 100644 --- a/sources/app.cpp +++ b/sources/app.cpp @@ -151,9 +151,9 @@ extern int app_initialize(GLFWwindow* window) settings_initialize(); module_initialize(); - #if FOUNDATION_PLATFORM_MACOS + //#if FOUNDATION_PLATFORM_MACOS about_initialize(); - #endif + //#endif return 0; } diff --git a/sources/bulk.cpp b/sources/bulk.cpp index 685a47c2..05dd8783 100644 --- a/sources/bulk.cpp +++ b/sources/bulk.cpp @@ -796,7 +796,7 @@ FOUNDATION_STATIC void bulk_shutdown() config_write_file(selected_exchanges_file_path, [](config_handle_t selected_exchange_data) { const size_t selected_exchange_count = array_size(_bulk_module->exchanges); - for (int i = 0; i < selected_exchange_count; ++i) + for (size_t i = 0; i < selected_exchange_count; ++i) { const string_t& ex = _bulk_module->exchanges[i]; config_array_push(selected_exchange_data, STRING_ARGS(ex)); diff --git a/sources/eod.cpp b/sources/eod.cpp index 3b427866..568b62c0 100644 --- a/sources/eod.cpp +++ b/sources/eod.cpp @@ -493,7 +493,7 @@ FOUNDATION_STATIC void eod_show_login_dialog() ImGui::EndDisabled(); return true; - }, IM_SCALEF(330), IM_SCALEF(290), true, nullptr, nullptr); + }, IM_SCALEF(740), IM_SCALEF(540), true, nullptr, nullptr); } FOUNDATION_STATIC void eod_update_status(const json_object_t& json) diff --git a/sources/imwallet.cpp b/sources/imwallet.cpp index 4d9e7108..1df11999 100644 --- a/sources/imwallet.cpp +++ b/sources/imwallet.cpp @@ -42,7 +42,7 @@ FOUNDATION_STATIC void imwallet_fetch_exchange_list(const json_object_t& json) imwallet_exchange_t* exchanges = nullptr; array_reserve(exchanges, min(SIZE_C(1), exchange_count)); - for (int i = 0; i < exchange_count; ++i) + for (size_t i = 0; i < exchange_count; ++i) { imwallet_exchange_t ex{}; json_object_t ex_data = json[i]; diff --git a/sources/pattern.cpp b/sources/pattern.cpp index 68ccdff3..7d531f33 100644 --- a/sources/pattern.cpp +++ b/sources/pattern.cpp @@ -153,7 +153,7 @@ static pattern_activity_t* _activities{ nullptr }; FOUNDATION_STATIC pattern_t* pattern_get(pattern_handle_t handle) { const size_t pattern_count = array_size(_patterns); - if (handle < 0 || handle >= pattern_count) + if (handle < 0 || (size_t)handle >= pattern_count) return nullptr; return &_patterns[handle]; } @@ -984,7 +984,7 @@ FOUNDATION_STATIC pattern_graph_data_t const pattern_render_build_graph_data(pat } const size_t x_count = graph_data.x_count; - for (int i = 0; i < x_count; ++i) + for (size_t i = 0; i < x_count; ++i) { const bool is_valid = !math_real_is_nan(graph_data.y_data[i]); double xdd = !is_valid ? FIXED_MARKS[i] : graph_data.x_data[i]; @@ -1110,7 +1110,7 @@ FOUNDATION_STATIC void pattern_render_graph_trends(pattern_t* pattern, pattern_g size_t send = array_size(history); int yedi = idx + math_round(c->acc); - if (yedi >= send) + if (yedi >= (int)send) return ImPlotPoint(DNAN, DNAN); if (c->lx == 0) @@ -3766,7 +3766,7 @@ FOUNDATION_STATIC void pattern_shutdown() config_write_file(pattern_get_user_file_path(), [](config_handle_t patterns) { const size_t pattern_count = ::pattern_count(); - for (int i = 0; i < pattern_count; ++i) + for (size_t i = 0; i < pattern_count; ++i) { pattern_t& pattern = _patterns[i]; diff --git a/sources/report.cpp b/sources/report.cpp index 61c58f30..bde33591 100644 --- a/sources/report.cpp +++ b/sources/report.cpp @@ -553,7 +553,7 @@ FOUNDATION_STATIC void report_open_add_title_dialog(report_t* report) if (ImGui::IsWindowAppearing()) ImGui::SetKeyboardFocusHere(); return !symbols_render_search(L1(report_render_add_title_from_ui(report, _1))); - }, IM_SCALEF(800), IM_SCALEF(500), true, report, nullptr); + }, IM_SCALEF(700), IM_SCALEF(400), true, report, nullptr); } FOUNDATION_STATIC void report_column_title_header_render(report_handle_t report_handle, table_t* table, const table_column_t* column, int column_index) diff --git a/sources/symbols.cpp b/sources/symbols.cpp index 7b9561b9..8cf82424 100644 --- a/sources/symbols.cpp +++ b/sources/symbols.cpp @@ -99,7 +99,7 @@ FOUNDATION_STATIC void symbols_load( array_reserve(out_symbols, reserve_count); } - for (int i = 1; i < data.token_count; ++i) + for (size_t i = 1; i < data.token_count; ++i) { const json_token_t& t = data.tokens[i]; if (t.type != JSON_OBJECT) diff --git a/sources/wallet.cpp b/sources/wallet.cpp index 81ab86c2..4ec03445 100644 --- a/sources/wallet.cpp +++ b/sources/wallet.cpp @@ -243,7 +243,7 @@ FOUNDATION_STATIC void wallet_history_draw_toolbar(report_handle_t& selected_rep const size_t report_count = ::report_count(); if (ImGui::BeginCombo("##Report", !selected_report ? tr("None") : string_table_decode(selected_report->name), ImGuiComboFlags_None)) { - for (int i = 0; i < report_count; ++i) + for (unsigned int i = 0; i < (unsigned int)report_count; ++i) { report_t* report = report_get_at(i); if (report->wallet->track_history) @@ -293,7 +293,7 @@ FOUNDATION_STATIC report_handle_t wallet_history_select_initial_report() static report_handle_t selected_report_id = uuid_null(); if (uuid_is_null(selected_report_id)) { - for (int i = 0; i < report_count(); ++i) + for (unsigned int i = 0; i < report_count(); ++i) { report_t* report = report_get_at(i); if (report->wallet->track_history && array_size(report->wallet->history))