mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-09-06 04:06:58 +00:00
bit of cmake fuckery
This commit is contained in:
@@ -11,6 +11,7 @@ export IOS_SDK="$(xcrun --sdk iphoneos --show-sdk-path)"
|
|||||||
cmake -G Xcode -B build \
|
cmake -G Xcode -B build \
|
||||||
-DCMAKE_TOOLCHAIN_FILE="$WORK_DIR/.ci/ios/ios-toolchain.cmake" \
|
-DCMAKE_TOOLCHAIN_FILE="$WORK_DIR/.ci/ios/ios-toolchain.cmake" \
|
||||||
-DPLATFORM=OS64 \
|
-DPLATFORM=OS64 \
|
||||||
|
-DARCHS="arm64" \
|
||||||
-DDEPLOYMENT_TARGET=16.0 \
|
-DDEPLOYMENT_TARGET=16.0 \
|
||||||
-DCOCOA_LIBRARY="$IOS_SDK/System/Library/Frameworks/Cocoa.framework" \
|
-DCOCOA_LIBRARY="$IOS_SDK/System/Library/Frameworks/Cocoa.framework" \
|
||||||
-DCMAKE_C_COMPILER="$(xcrun --sdk iphoneos clang -arch arm64)" \
|
-DCMAKE_C_COMPILER="$(xcrun --sdk iphoneos clang -arch arm64)" \
|
||||||
@@ -19,6 +20,9 @@ cmake -G Xcode -B build \
|
|||||||
-DENABLE_UPDATE_CHECKER=OFF \
|
-DENABLE_UPDATE_CHECKER=OFF \
|
||||||
-DENABLE_QT=OFF \
|
-DENABLE_QT=OFF \
|
||||||
-DENABLE_OPENSSL=OFF \
|
-DENABLE_OPENSSL=OFF \
|
||||||
|
-DHTTPLIB_USE_OPENSSL=OFF \
|
||||||
|
-DCPPHTTPLIB_USE_OPENSSL=OFF \
|
||||||
|
-DHTTPLIB_USE_OPENSSL_IF_AVAILABLE=OFF \
|
||||||
-DENABLE_WEB_SERVICE=OFF \
|
-DENABLE_WEB_SERVICE=OFF \
|
||||||
-DENABLE_CUBEB=OFF \
|
-DENABLE_CUBEB=OFF \
|
||||||
-DYUZU_ROOM=OFF \
|
-DYUZU_ROOM=OFF \
|
||||||
|
|||||||
+4
-1
@@ -381,7 +381,10 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
|
|||||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
find_package(Threads REQUIRED)
|
find_package(Threads REQUIRED)
|
||||||
|
|
||||||
find_package(RenderDoc MODULE)
|
find_package(RenderDoc MODULE QUIET)
|
||||||
|
if (NOT RenderDoc_FOUND)
|
||||||
|
message(WARNING "RenderDoc not found. Some debugging features may be disabled.")
|
||||||
|
endif()
|
||||||
|
|
||||||
# openssl funniness
|
# openssl funniness
|
||||||
if (YUZU_USE_BUNDLED_OPENSSL)
|
if (YUZU_USE_BUNDLED_OPENSSL)
|
||||||
|
|||||||
+107
-6
@@ -116,18 +116,119 @@ std::string ReplaceAll(std::string result, const std::string& src, const std::st
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string UTF16ToUTF8(std::u16string_view input) {
|
std::string UTF16ToUTF8(std::u16string_view input) {
|
||||||
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert;
|
std::string result;
|
||||||
return convert.to_bytes(input.data(), input.data() + input.size());
|
result.reserve(input.size());
|
||||||
|
for (size_t i = 0; i < input.size(); ++i) {
|
||||||
|
uint32_t codepoint = input[i];
|
||||||
|
// Handle surrogate pairs
|
||||||
|
if (codepoint >= 0xD800 && codepoint <= 0xDBFF) {
|
||||||
|
if (i + 1 < input.size()) {
|
||||||
|
uint32_t low = input[i + 1];
|
||||||
|
if (low >= 0xDC00 && low <= 0xDFFF) {
|
||||||
|
codepoint = ((codepoint - 0xD800) << 10) + (low - 0xDC00) + 0x10000;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (codepoint <= 0x7F) {
|
||||||
|
result.push_back(static_cast<char>(codepoint));
|
||||||
|
} else if (codepoint <= 0x7FF) {
|
||||||
|
result.push_back(static_cast<char>(0xC0 | (codepoint >> 6)));
|
||||||
|
result.push_back(static_cast<char>(0x80 | (codepoint & 0x3F)));
|
||||||
|
} else if (codepoint <= 0xFFFF) {
|
||||||
|
result.push_back(static_cast<char>(0xE0 | (codepoint >> 12)));
|
||||||
|
result.push_back(static_cast<char>(0x80 | ((codepoint >> 6) & 0x3F)));
|
||||||
|
result.push_back(static_cast<char>(0x80 | (codepoint & 0x3F)));
|
||||||
|
} else {
|
||||||
|
result.push_back(static_cast<char>(0xF0 | (codepoint >> 18)));
|
||||||
|
result.push_back(static_cast<char>(0x80 | ((codepoint >> 12) & 0x3F)));
|
||||||
|
result.push_back(static_cast<char>(0x80 | ((codepoint >> 6) & 0x3F)));
|
||||||
|
result.push_back(static_cast<char>(0x80 | (codepoint & 0x3F)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::u16string UTF8ToUTF16(std::string_view input) {
|
std::u16string UTF8ToUTF16(std::string_view input) {
|
||||||
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert;
|
std::u16string result;
|
||||||
return convert.from_bytes(input.data(), input.data() + input.size());
|
size_t i = 0;
|
||||||
|
while (i < input.size()) {
|
||||||
|
uint32_t codepoint = 0;
|
||||||
|
unsigned char c = input[i];
|
||||||
|
size_t extra = 0;
|
||||||
|
if ((c & 0x80) == 0) {
|
||||||
|
codepoint = c;
|
||||||
|
extra = 0;
|
||||||
|
} else if ((c & 0xE0) == 0xC0) {
|
||||||
|
codepoint = c & 0x1F;
|
||||||
|
extra = 1;
|
||||||
|
} else if ((c & 0xF0) == 0xE0) {
|
||||||
|
codepoint = c & 0x0F;
|
||||||
|
extra = 2;
|
||||||
|
} else if ((c & 0xF8) == 0xF0) {
|
||||||
|
codepoint = c & 0x07;
|
||||||
|
extra = 3;
|
||||||
|
} else {
|
||||||
|
// Invalid UTF-8
|
||||||
|
++i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (i + extra >= input.size()) break;
|
||||||
|
for (size_t j = 1; j <= extra; ++j) {
|
||||||
|
if ((input[i + j] & 0xC0) != 0x80) {
|
||||||
|
codepoint = 0xFFFD;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
codepoint = (codepoint << 6) | (input[i + j] & 0x3F);
|
||||||
|
}
|
||||||
|
if (codepoint <= 0xFFFF) {
|
||||||
|
result.push_back(static_cast<char16_t>(codepoint));
|
||||||
|
} else {
|
||||||
|
codepoint -= 0x10000;
|
||||||
|
result.push_back(static_cast<char16_t>(0xD800 + (codepoint >> 10)));
|
||||||
|
result.push_back(static_cast<char16_t>(0xDC00 + (codepoint & 0x3FF)));
|
||||||
|
}
|
||||||
|
i += extra + 1;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::u32string UTF8ToUTF32(std::string_view input) {
|
std::u32string UTF8ToUTF32(std::string_view input) {
|
||||||
std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> convert;
|
std::u32string result;
|
||||||
return convert.from_bytes(input.data(), input.data() + input.size());
|
size_t i = 0;
|
||||||
|
while (i < input.size()) {
|
||||||
|
uint32_t codepoint = 0;
|
||||||
|
unsigned char c = input[i];
|
||||||
|
size_t extra = 0;
|
||||||
|
if ((c & 0x80) == 0) {
|
||||||
|
codepoint = c;
|
||||||
|
extra = 0;
|
||||||
|
} else if ((c & 0xE0) == 0xC0) {
|
||||||
|
codepoint = c & 0x1F;
|
||||||
|
extra = 1;
|
||||||
|
} else if ((c & 0xF0) == 0xE0) {
|
||||||
|
codepoint = c & 0x0F;
|
||||||
|
extra = 2;
|
||||||
|
} else if ((c & 0xF8) == 0xF0) {
|
||||||
|
codepoint = c & 0x07;
|
||||||
|
extra = 3;
|
||||||
|
} else {
|
||||||
|
// Invalid UTF-8
|
||||||
|
++i;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (i + extra >= input.size()) break;
|
||||||
|
for (size_t j = 1; j <= extra; ++j) {
|
||||||
|
if ((input[i + j] & 0xC0) != 0x80) {
|
||||||
|
codepoint = 0xFFFD;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
codepoint = (codepoint << 6) | (input[i + j] & 0x3F);
|
||||||
|
}
|
||||||
|
result.push_back(codepoint);
|
||||||
|
i += extra + 1;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
|||||||
@@ -1278,6 +1278,9 @@ endif()
|
|||||||
target_sources(core PRIVATE hle/service/ssl/ssl_backend_openssl.cpp)
|
target_sources(core PRIVATE hle/service/ssl/ssl_backend_openssl.cpp)
|
||||||
|
|
||||||
target_link_libraries(core PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
target_link_libraries(core PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
||||||
|
if (NOT IOS)
|
||||||
|
target_compile_definitions(core PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT)
|
||||||
|
endif()
|
||||||
|
|
||||||
# TODO
|
# TODO
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,9 @@ if (ENABLE_UPDATE_CHECKER)
|
|||||||
update_checker.cpp
|
update_checker.cpp
|
||||||
update_checker.h)
|
update_checker.h)
|
||||||
target_link_libraries(frontend_common PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
target_link_libraries(frontend_common PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
||||||
|
if (NOT IOS)
|
||||||
|
target_compile_definitions(frontend_common PUBLIC CPPHTTPLIB_OPENSSL_SUPPORT)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
create_target_directory_groups(frontend_common)
|
create_target_directory_groups(frontend_common)
|
||||||
|
|||||||
@@ -18,6 +18,10 @@ add_executable(eden-ios
|
|||||||
EmulationWindow.mm
|
EmulationWindow.mm
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Keep identifier as-is, for compatibility sake
|
||||||
|
set_property(TARGET eden-ios PROPERTY XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.yuzu-emu.yuzu")
|
||||||
|
set_property(TARGET eden-ios PROPERTY XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "YUZU1234")
|
||||||
|
|
||||||
target_link_libraries(eden-ios PRIVATE common core input_common frontend_common video_core glad)
|
target_link_libraries(eden-ios PRIVATE common core input_common frontend_common video_core glad)
|
||||||
target_link_libraries(eden-ios PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads)
|
target_link_libraries(eden-ios PRIVATE ${PLATFORM_LIBRARIES} Threads::Threads)
|
||||||
target_link_libraries(eden-ios PRIVATE SDL2::SDL2)
|
target_link_libraries(eden-ios PRIVATE SDL2::SDL2)
|
||||||
|
|||||||
@@ -57,6 +57,9 @@ if (USE_DISCORD_PRESENCE)
|
|||||||
|
|
||||||
if (YUZU_USE_BUNDLED_OPENSSL)
|
if (YUZU_USE_BUNDLED_OPENSSL)
|
||||||
target_link_libraries(qt_common PUBLIC OpenSSL::SSL OpenSSL::Crypto)
|
target_link_libraries(qt_common PUBLIC OpenSSL::SSL OpenSSL::Crypto)
|
||||||
|
if (NOT IOS)
|
||||||
|
target_compile_definitions(qt_common PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_compile_definitions(qt_common PUBLIC USE_DISCORD_PRESENCE)
|
target_compile_definitions(qt_common PUBLIC USE_DISCORD_PRESENCE)
|
||||||
|
|||||||
@@ -22,3 +22,27 @@ target_link_libraries(web_service PRIVATE common network nlohmann_json::nlohmann
|
|||||||
|
|
||||||
find_package(OpenSSL REQUIRED)
|
find_package(OpenSSL REQUIRED)
|
||||||
target_link_libraries(web_service PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
target_link_libraries(web_service PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
||||||
|
if (IOS)
|
||||||
|
# TODO: this is horrific
|
||||||
|
find_package(OpenSSL 3 QUIET)
|
||||||
|
if (OpenSSL_FOUND)
|
||||||
|
target_link_libraries(web_service PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
||||||
|
if (NOT IOS)
|
||||||
|
target_compile_definitions(web_service PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
find_package(OpenSSL 3 QUIET PATHS /usr/local/opt/openssl /opt/homebrew/opt/openssl NO_DEFAULT_PATH)
|
||||||
|
if (OpenSSL_FOUND)
|
||||||
|
target_link_libraries(web_service PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
||||||
|
if (NOT IOS)
|
||||||
|
target_compile_definitions(web_service PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
message(WARNING "OpenSSL not found or version is less than 3. Some features in web_service may be disabled.")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
find_package(OpenSSL REQUIRED)
|
||||||
|
target_link_libraries(web_service PRIVATE OpenSSL::SSL OpenSSL::Crypto)
|
||||||
|
target_compile_definitions(web_service PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT)
|
||||||
|
endif()
|
||||||
|
|||||||
Reference in New Issue
Block a user