From cabbe3c8819165b088ddb1572cd420a0c067b95e Mon Sep 17 00:00:00 2001 From: Ruslan Golovinsky Date: Wed, 26 Jul 2023 15:28:49 +0400 Subject: [PATCH 1/7] Add CMake preset & toolchain --- CMakePresets.json | 22 ++++++++++++++----- cmake/presets/linux.json | 10 ++++----- cmake/presets/macos.json | 20 +++++++++++++++++ .../{clang_14.cmake => clang_14_x64.cmake} | 0 .../linux/{gcc_13.cmake => gcc_13_x64.cmake} | 0 cmake/toolchains/macos/clang_14_x64.cmake | 16 ++++++++++++++ cmake/tools/GetSystemInfo.cmake | 2 +- code/resman/CMakeLists.txt | 1 + code/resman/sources/platform/macos.inl | 9 +++----- 9 files changed, 63 insertions(+), 17 deletions(-) create mode 100644 cmake/presets/macos.json rename cmake/toolchains/linux/{clang_14.cmake => clang_14_x64.cmake} (100%) rename cmake/toolchains/linux/{gcc_13.cmake => gcc_13_x64.cmake} (100%) create mode 100644 cmake/toolchains/macos/clang_14_x64.cmake diff --git a/CMakePresets.json b/CMakePresets.json index 639724d..69da264 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -5,7 +5,8 @@ "cmake/presets/common.json", "cmake/presets/generators.json", "cmake/presets/windows.json", - "cmake/presets/linux.json" + "cmake/presets/linux.json", + "cmake/presets/macos.json" ], "configurePresets": [ { @@ -44,23 +45,34 @@ { "displayName": "[Ninja][Clang] Debug (x64)", "name": "ninja_unix_clang_x64_debug", - "inherits": [ "ninja", "linux_clang_14", "debug" ] + "inherits": [ "ninja", "linux_clang_14_x64", "debug" ] }, { "displayName": "[Ninja][Clang] Release (x64)", "name": "ninja_unix_clang_x64_release", - "inherits": [ "ninja", "linux_clang_14", "release" ] + "inherits": [ "ninja", "linux_clang_14_x64", "release" ] }, { "displayName": "[Ninja][GCC] Debug (x64)", "name": "ninja_unix_gcc_x64_debug", - "inherits": [ "ninja", "linux_gcc_13", "debug" ] + "inherits": [ "ninja", "linux_gcc_13_x64", "debug" ] }, { "displayName": "[Ninja][GCC] Release (x64)", "name": "ninja_unix_gcc_x64_release", - "inherits": [ "ninja", "linux_gcc_13", "release" ] + "inherits": [ "ninja", "linux_gcc_13_x64", "release" ] + }, + + { + "displayName": "[Ninja][Clang] Debug (x64)", + "name": "ninja_macos_clang_x64_debug", + "inherits": [ "ninja", "macos_clang_14_x64", "debug" ] + }, + { + "displayName": "[Ninja][Clang] Release (x64)", + "name": "ninja_macos_clang_x64_release", + "inherits": [ "ninja", "macos_clang_14_x64", "release" ] }, { diff --git a/cmake/presets/linux.json b/cmake/presets/linux.json index 2f20b32..5462b68 100644 --- a/cmake/presets/linux.json +++ b/cmake/presets/linux.json @@ -11,16 +11,16 @@ } }, { - "name": "linux_clang_14", + "name": "linux_clang_14_x64", "hidden": true, "inherits": [ "linux_default" ], - "toolchainFile": "${sourceDir}/cmake/toolchains/linux/clang_14.cmake" + "toolchainFile": "${sourceDir}/cmake/toolchains/linux/clang_14_x64.cmake" }, { - "name": "linux_gcc_13", + "name": "linux_gcc_13_x64", "hidden": true, "inherits": [ "linux_default" ], - "toolchainFile": "${sourceDir}/cmake/toolchains/linux/gcc_13.cmake" + "toolchainFile": "${sourceDir}/cmake/toolchains/linux/gcc_13_x64.cmake" } ] -} \ No newline at end of file +} diff --git a/cmake/presets/macos.json b/cmake/presets/macos.json new file mode 100644 index 0000000..7ba66fa --- /dev/null +++ b/cmake/presets/macos.json @@ -0,0 +1,20 @@ +{ + "version": 5, + "configurePresets": [ + { + "name": "macos_default", + "hidden": true, + "binaryDir": "${sourceDir}/build/${presetName}", + "condition": { "lhs": "${hostSystemName}", "type": "equals", "rhs": "Darwin" }, + "cacheVariables": { + "GRM_DEFINITIONS_INIT": "GRM_MACOS;GRM_UNIX" + } + }, + { + "name": "macos_clang_14_x64", + "hidden": true, + "inherits": [ "macos_default" ], + "toolchainFile": "${sourceDir}/cmake/toolchains/macos/clang_14_x64.cmake" + } + ] +} diff --git a/cmake/toolchains/linux/clang_14.cmake b/cmake/toolchains/linux/clang_14_x64.cmake similarity index 100% rename from cmake/toolchains/linux/clang_14.cmake rename to cmake/toolchains/linux/clang_14_x64.cmake diff --git a/cmake/toolchains/linux/gcc_13.cmake b/cmake/toolchains/linux/gcc_13_x64.cmake similarity index 100% rename from cmake/toolchains/linux/gcc_13.cmake rename to cmake/toolchains/linux/gcc_13_x64.cmake diff --git a/cmake/toolchains/macos/clang_14_x64.cmake b/cmake/toolchains/macos/clang_14_x64.cmake new file mode 100644 index 0000000..90058f9 --- /dev/null +++ b/cmake/toolchains/macos/clang_14_x64.cmake @@ -0,0 +1,16 @@ + +set(CMAKE_SYSTEM_NAME Darwin CACHE STRING "System name") +set(CMAKE_SYSTEM_PROCESSOR x86_64 CACHE STRING "System processor") +set(CMAKE_HOST_SYSTEM_PROCESSOR x86_64 CACHE STRING "Host system processor") + +set(CMAKE_C_COMPILER clang) +set(CMAKE_C_COMPILER_VERSION 14) +set(CMAKE_CXX_COMPILER clang++) +set(CMAKE_CXX_COMPILER_VERSION 14) + +find_program(ccache_program ccache) +if (NOT ${ccache_program} MATCHES "NOTFOUND") + set(CMAKE_C_COMPILER_LAUNCHER ccache) + set(CMAKE_CXX_COMPILER_LAUNCHER ccache) +endif() + diff --git a/cmake/tools/GetSystemInfo.cmake b/cmake/tools/GetSystemInfo.cmake index dc8f341..30f1715 100644 --- a/cmake/tools/GetSystemInfo.cmake +++ b/cmake/tools/GetSystemInfo.cmake @@ -21,7 +21,7 @@ function(get_system_info SYSTEM_NAME ARCHITECTURE) _get_arch(${ARCHITECTURE} ${SYSTEM_NAME}) elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin") - set(${SYSTEM_NAME} "macOS" PARENT_SCOPE) + set(${SYSTEM_NAME} "MacOS" PARENT_SCOPE) execute_process( COMMAND "sysctl" "-n" "machdep.cpu.brand_string" diff --git a/code/resman/CMakeLists.txt b/code/resman/CMakeLists.txt index b4d7ee9..866a5f2 100644 --- a/code/resman/CMakeLists.txt +++ b/code/resman/CMakeLists.txt @@ -26,5 +26,6 @@ add_library(golxzn::resman ALIAS golxzn_resman) target_include_directories(golxzn_resman PUBLIC ${GRM_CODE_DIR}/headers) target_compile_definitions(golxzn_resman PUBLIC ${GRM_DEFINITIONS}) set_target_properties(golxzn_resman PROPERTIES + LIBCXX_ENABLE_INCOMPLETE_FEATURES ON FOLDER "golxzn" ) diff --git a/code/resman/sources/platform/macos.inl b/code/resman/sources/platform/macos.inl index 8604367..aa26117 100644 --- a/code/resman/sources/platform/macos.inl +++ b/code/resman/sources/platform/macos.inl @@ -1,14 +1,11 @@ -#include "platform/unix.inl" +#include "unix.inl" namespace golxzn::details { std::wstring appdata_directory() { - if (auto home{ __unix_get_home(error) }; !home.empty()) { - std::wstring path{ std::begin(home), std::end(home) }; - return std::format(L"{}{}{}", - std::move(path), L"/Library/Application Support", appname - ); + if (auto home{ __unix_get_home() }; !home.empty()) { + return std::format(L"{}{}", path, L"/Library/Application Support"); } return L"~/Library/Application Support"; } From b1729ea888d5bc6c1e01f6136502e820ed13dfdb Mon Sep 17 00:00:00 2001 From: Ruslan Golovinsky Date: Wed, 26 Jul 2023 15:59:15 +0400 Subject: [PATCH 2/7] Add launch to support macos --- resman.code-workspace | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/resman.code-workspace b/resman.code-workspace index b4c04fe..8c1a4e6 100644 --- a/resman.code-workspace +++ b/resman.code-workspace @@ -17,13 +17,22 @@ }, { "name": "[GDB] Launch tests", + "type": "cppdbg", + "request": "launch", + "program": "${command:cmake.launchTargetPath}", "MIMode": "gdb", + "stopAtEntry": false, + "cwd": "${workspaceFolder}/bin", + }, + { + "name": "[LLDB] Launch tests", "type": "cppdbg", "request": "launch", "program": "${command:cmake.launchTargetPath}", "stopAtEntry": false, "cwd": "${workspaceFolder}/bin", - } + "MIMode": "lldb", + } ], }, "settings": { From 293f05912c999a782b86ad69d31765a9f6122717 Mon Sep 17 00:00:00 2001 From: Ruslan Golovinsky Date: Wed, 26 Jul 2023 16:06:29 +0400 Subject: [PATCH 3/7] Add CI presets & os --- .github/workflows/ci-test-static-lib.yml | 3 +-- CMakePresets.json | 22 ++++++++++++++++++++-- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci-test-static-lib.yml b/.github/workflows/ci-test-static-lib.yml index 2ae4fc5..a775b46 100644 --- a/.github/workflows/ci-test-static-lib.yml +++ b/.github/workflows/ci-test-static-lib.yml @@ -13,8 +13,7 @@ jobs: build: strategy: matrix: - os: [windows-2022, ubuntu-latest] # + macos-latest] To implement those platforms - # we need to create ci- presets for CMake. + os: [windows-2022, ubuntu-latest, macos-latest] runs-on: ${{ matrix.os }} diff --git a/CMakePresets.json b/CMakePresets.json index 69da264..3782556 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -77,11 +77,18 @@ { "name": "ci-windows", + "hidden": true, "inherits": "ninja_msvc_x64_release" }, { "name": "ci-ubuntu", + "hidden": true, "inherits": "ninja_unix_gcc_x64_release" + }, + { + "name": "ci-macos", + "hidden": true, + "inherits": "ninja_macos_clang_x64_release" } ], @@ -98,6 +105,13 @@ "inherits": "ci", "condition": { "lhs": "${hostSystemName}", "type": "equals", "rhs": "Linux" } }, + { + "name": "ci-macos", + "configurePreset": "ci-macos", + "inherits": "ci", + "condition": { "lhs": "${hostSystemName}", "type": "equals", "rhs": "Darwin" } + }, + { "name": "ci", @@ -119,8 +133,12 @@ "inherits": "ci", "condition": { "lhs": "${hostSystemName}", "type": "equals", "rhs": "Linux" } }, - - + { + "name": "ci-macos", + "configurePreset": "ci-macos", + "inherits": "ci", + "condition": { "lhs": "${hostSystemName}", "type": "equals", "rhs": "Darwin" } + }, { "name": "ci", From fb0c648b0fe023c5c7034db008d9e096a8f7e8cb Mon Sep 17 00:00:00 2001 From: Ruslan Golovinsky Date: Wed, 26 Jul 2023 16:07:41 +0400 Subject: [PATCH 4/7] Oops (remove hide flag) --- CMakePresets.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/CMakePresets.json b/CMakePresets.json index 3782556..5edd91e 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -77,17 +77,14 @@ { "name": "ci-windows", - "hidden": true, "inherits": "ninja_msvc_x64_release" }, { "name": "ci-ubuntu", - "hidden": true, "inherits": "ninja_unix_gcc_x64_release" }, { "name": "ci-macos", - "hidden": true, "inherits": "ninja_macos_clang_x64_release" } From f2c06738997b7cf0c5ae59a85c869dfaccbf8cd9 Mon Sep 17 00:00:00 2001 From: Ruslan Golovinsky Date: Wed, 26 Jul 2023 16:10:35 +0400 Subject: [PATCH 5/7] Fix macos CI failure & Up version --- CMakeLists.txt | 2 +- TODO.md | 6 +++--- code/resman/sources/resman.cpp | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2976034..eea7448 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.23) set(GRM_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) project(resman - VERSION 1.6.1 + VERSION 1.7.0 DESCRIPTION "golxzn resource manager" LANGUAGES CXX ) diff --git a/TODO.md b/TODO.md index 81ed3f7..37e309a 100644 --- a/TODO.md +++ b/TODO.md @@ -14,15 +14,15 @@ - [ ] Add `Android` platform support; - [ ] Implement tests for `MacOS` platform; -## Release v1.8.0: +## Release v1.8.0 (in progress): - [ ] Implement `lock`/`unlick` and `is_locked`/`is_unlocked` methods; - [ ] Implement `format` support for `load`/`save` methods; ## Release v1.7.0 (current): -- [ ] Add `MacOS` platform support; -- [ ] Implement tests for `MacOS` platform; +- [x] Add `MacOS` platform support; +- [x] Implement tests for `MacOS` platform; ## Release v1.6.1: diff --git a/code/resman/sources/resman.cpp b/code/resman/sources/resman.cpp index 440a587..9a97f9c 100644 --- a/code/resman/sources/resman.cpp +++ b/code/resman/sources/resman.cpp @@ -399,7 +399,8 @@ std::wstring resman::normalize(std::wstring_view str) { } std::vector parts; - parts.reserve(std::ranges::count_if(str, [](const auto &c){ return slash.find(c) != std::wstring_view::npos; }) + 1lu); + parts.reserve(std::count_if(std::begin(str), std::end(str), + [](const auto &c){ return slash.find(c) != std::wstring_view::npos; }) + 1lu); size_t prev_slash{}; size_t curr_slash{}; size_t next_slash{}; From 4a39199181762f735e1eb4280c99ddd0e766ec84 Mon Sep 17 00:00:00 2001 From: Ruslan Golovinsky Date: Wed, 26 Jul 2023 16:21:29 +0400 Subject: [PATCH 6/7] Tried to enable experimental library for clang --- cmake/toolchains/linux/clang_14_x64.cmake | 1 + cmake/toolchains/macos/clang_14_x64.cmake | 1 + code/resman/sources/resman.cpp | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/cmake/toolchains/linux/clang_14_x64.cmake b/cmake/toolchains/linux/clang_14_x64.cmake index e091a12..6e4bd2b 100644 --- a/cmake/toolchains/linux/clang_14_x64.cmake +++ b/cmake/toolchains/linux/clang_14_x64.cmake @@ -5,6 +5,7 @@ set(CMAKE_HOST_SYSTEM_PROCESSOR x86_64 CACHE STRING "Host system processor") set(CMAKE_C_COMPILER clang-15) set(CMAKE_CXX_COMPILER clang++-15) +set(CMAKE_CXX_FLAGS_INIT -fexperimental-library) find_program(ccache_program ccache) if (NOT ${ccache_program} MATCHES "NOTFOUND") diff --git a/cmake/toolchains/macos/clang_14_x64.cmake b/cmake/toolchains/macos/clang_14_x64.cmake index 90058f9..8080265 100644 --- a/cmake/toolchains/macos/clang_14_x64.cmake +++ b/cmake/toolchains/macos/clang_14_x64.cmake @@ -7,6 +7,7 @@ set(CMAKE_C_COMPILER clang) set(CMAKE_C_COMPILER_VERSION 14) set(CMAKE_CXX_COMPILER clang++) set(CMAKE_CXX_COMPILER_VERSION 14) +set(CMAKE_CXX_FLAGS_INIT -fexperimental-library) find_program(ccache_program ccache) if (NOT ${ccache_program} MATCHES "NOTFOUND") diff --git a/code/resman/sources/resman.cpp b/code/resman/sources/resman.cpp index 9a97f9c..0970d11 100644 --- a/code/resman/sources/resman.cpp +++ b/code/resman/sources/resman.cpp @@ -399,7 +399,7 @@ std::wstring resman::normalize(std::wstring_view str) { } std::vector parts; - parts.reserve(std::count_if(std::begin(str), std::end(str), + parts.reserve(std::ranges::count_if(str, [](const auto &c){ return slash.find(c) != std::wstring_view::npos; }) + 1lu); size_t prev_slash{}; size_t curr_slash{}; From f12353d960f7dd3ce1d7b96de354499df364b99b Mon Sep 17 00:00:00 2001 From: Ruslan Golovinsky Date: Wed, 26 Jul 2023 16:27:00 +0400 Subject: [PATCH 7/7] revert changes --- cmake/toolchains/linux/clang_14_x64.cmake | 7 ++++--- cmake/toolchains/macos/clang_14_x64.cmake | 3 +-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/cmake/toolchains/linux/clang_14_x64.cmake b/cmake/toolchains/linux/clang_14_x64.cmake index 6e4bd2b..afeb972 100644 --- a/cmake/toolchains/linux/clang_14_x64.cmake +++ b/cmake/toolchains/linux/clang_14_x64.cmake @@ -3,9 +3,10 @@ set(CMAKE_SYSTEM_NAME Linux CACHE STRING "System name") set(CMAKE_SYSTEM_PROCESSOR x86_64 CACHE STRING "System processor") set(CMAKE_HOST_SYSTEM_PROCESSOR x86_64 CACHE STRING "Host system processor") -set(CMAKE_C_COMPILER clang-15) -set(CMAKE_CXX_COMPILER clang++-15) -set(CMAKE_CXX_FLAGS_INIT -fexperimental-library) +set(CMAKE_C_COMPILER clang) +set(CMAKE_CXX_COMPILER clang++) +set(CMAKE_C_COMPILER_VERSION 14) +set(CMAKE_CXX_COMPILER_VERSION 14) find_program(ccache_program ccache) if (NOT ${ccache_program} MATCHES "NOTFOUND") diff --git a/cmake/toolchains/macos/clang_14_x64.cmake b/cmake/toolchains/macos/clang_14_x64.cmake index 8080265..0664c5f 100644 --- a/cmake/toolchains/macos/clang_14_x64.cmake +++ b/cmake/toolchains/macos/clang_14_x64.cmake @@ -4,10 +4,9 @@ set(CMAKE_SYSTEM_PROCESSOR x86_64 CACHE STRING "System processor") set(CMAKE_HOST_SYSTEM_PROCESSOR x86_64 CACHE STRING "Host system processor") set(CMAKE_C_COMPILER clang) -set(CMAKE_C_COMPILER_VERSION 14) set(CMAKE_CXX_COMPILER clang++) +set(CMAKE_C_COMPILER_VERSION 14) set(CMAKE_CXX_COMPILER_VERSION 14) -set(CMAKE_CXX_FLAGS_INIT -fexperimental-library) find_program(ccache_program ccache) if (NOT ${ccache_program} MATCHES "NOTFOUND")