Skip to content
Merged
114 changes: 114 additions & 0 deletions Build/libHttpClient.iOS.CMake/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
cmake_minimum_required(VERSION 3.14)

get_filename_component(PATH_TO_ROOT "../.." ABSOLUTE)

project("libHttpClient.iOS")

set(HC_WEBSOCKETS FALSE)

add_definitions(-D_NO_ASYNCRTIMP -D_NO_PPLXIMP -D_NO_XSAPIIMP -DXSAPI_BUILD -DHC_LINK_STATIC=1)

if(HC_WEBSOCKETS)
message(STATUS "websockets usage is on")
else()
message(STATUS "websockets usage is off")
add_definitions(-DHC_NOWEBSOCKETS)
endif()

###########################################
### Set up paths for source and include ###
###########################################

include("../libHttpClient.CMake/GetCommonHCSourceFiles.cmake")
get_common_hc_source_files(
PUBLIC_SOURCE_FILES
HC_COMMON_SOURCE_FILES
GLOBAL_SOURCE_FILES
PLATFORM_SOURCE_FILES
WEBSOCKET_SOURCE_FILES
TASK_SOURCE_FILES
MOCK_SOURCE_FILES
HTTP_SOURCE_FILES
LOGGER_SOURCE_FILES
"${PATH_TO_ROOT}"
)

set(COMMON_SOURCE_FILES
"${PUBLIC_SOURCE_FILES}"
"${HC_COMMON_SOURCE_FILES}"
"${GLOBAL_SOURCE_FILES}"
"${PLATFORM_SOURCE_FILES}"
"${WEBSOCKET_SOURCE_FILES}"
"${MOCK_SOURCE_FILES}"
"${HTTP_SOURCE_FILES}"
"${LOGGER_SOURCE_FILES}"
"${TASK_SOURCE_FILES}"
)

set(IOS_SOURCE_FILES
# Task
"${PATH_TO_ROOT}/Source/Task/ThreadPool_stl.cpp"
Comment thread
pablo-msft marked this conversation as resolved.
"${PATH_TO_ROOT}/Source/Task/WaitTimer_stl.cpp"
"${PATH_TO_ROOT}/Source/Task/iOS/ios_WaitTimer.mm"
"${PATH_TO_ROOT}/Source/Task/iOS/ios_WaitTimer_target.mm"
"${PATH_TO_ROOT}/Source/Task/iOS/ios_WaitTimer_target.h"
"${PATH_TO_ROOT}/Source/Task/iOS/ios_WaitTimerImpl.h"
# HTTP
"${PATH_TO_ROOT}/Source/HTTP/Apple/http_apple.mm"
"${PATH_TO_ROOT}/Source/HTTP/Apple/http_apple.h"
# Common
"${PATH_TO_ROOT}/Source/Common/Apple/utils_apple.mm"
"${PATH_TO_ROOT}/Source/Common/Apple/utils_apple.h"
# Platform
"${PATH_TO_ROOT}/Source/Platform/Apple/PlatformComponents_Apple.cpp"
"${PATH_TO_ROOT}/Source/Platform/Apple/PlatformTrace_Apple.cpp"
)

set(COMMON_INCLUDE_DIRS
"${PATH_TO_ROOT}/"
"${PATH_TO_ROOT}/Source/"
"${PATH_TO_ROOT}/Source/Common"
"${PATH_TO_ROOT}/Source/HTTP"
"${PATH_TO_ROOT}/Source/Logger"
"${PATH_TO_ROOT}/Source/Platform"
"${PATH_TO_ROOT}/Source/Task"
"${PATH_TO_ROOT}/Source/WebSocket"
"${PATH_TO_ROOT}/Include"
"${PATH_TO_ROOT}/Include/httpClient"
)

#########################
### Set up static lib ###
#########################

set(ALL_SOURCE_FILES ${COMMON_SOURCE_FILES} ${IOS_SOURCE_FILES})
list(SORT ALL_SOURCE_FILES)

add_library(
"${PROJECT_NAME}"
${ALL_SOURCE_FILES}
)

target_include_directories(
"${PROJECT_NAME}"
PRIVATE
"${COMMON_INCLUDE_DIRS}"
)

set_target_properties(
"${PROJECT_NAME}"
PROPERTIES
CXX_STANDARD 17
CXX_STANDARD_REQUIRED ON
)

set(IOS_MM_SOURCE_FILES
"${PATH_TO_ROOT}/Source/Task/iOS/ios_WaitTimer.mm"
"${PATH_TO_ROOT}/Source/Task/iOS/ios_WaitTimer_target.mm"
"${PATH_TO_ROOT}/Source/HTTP/Apple/http_apple.mm"
"${PATH_TO_ROOT}/Source/Common/Apple/utils_apple.mm"
)
set_source_files_properties(${IOS_MM_SOURCE_FILES} PROPERTIES COMPILE_FLAGS "-fobjc-arc")

message(STATUS "CMAKE_SYSTEM_VERSION='${CMAKE_SYSTEM_VERSION}'")
message(STATUS "CMAKE_SYSTEM_NAME='${CMAKE_SYSTEM_NAME}'")
11 changes: 8 additions & 3 deletions Source/Task/iOS/ios_WaitTimer.mm
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ uint64_t DueTimeFromDeadline(Deadline deadline) noexcept
}
}

namespace OS
{

WaitTimerImpl::WaitTimerImpl()
: m_context(nullptr),
m_callback(nullptr),
Expand Down Expand Up @@ -97,7 +100,7 @@ uint64_t DueTimeFromDeadline(Deadline deadline) noexcept

HRESULT WaitTimer::Initialize(_In_opt_ void* context, _In_ WaitTimerCallback* callback) noexcept
{
if (m_impl != nullptr || callback == nullptr)
if (m_impl.load() != nullptr || callback == nullptr)
{
ASSERT(false);
return E_UNEXPECTED;
Expand All @@ -124,12 +127,12 @@ uint64_t DueTimeFromDeadline(Deadline deadline) noexcept

void WaitTimer::Start(_In_ uint64_t dueTime) noexcept
{
m_impl->Start(dueTime);
m_impl.load()->Start(dueTime);
}

void WaitTimer::Cancel() noexcept
{
m_impl->Cancel();
m_impl.load()->Cancel();
}

uint64_t WaitTimer::GetCurrentTime() noexcept
Expand All @@ -142,3 +145,5 @@ uint64_t DueTimeFromDeadline(Deadline deadline) noexcept
auto deadline = Clock::now() + std::chrono::milliseconds(msFromNow);
return DueTimeFromDeadline(deadline);
}

} // namespace OS
5 changes: 5 additions & 0 deletions Source/Task/iOS/ios_WaitTimerImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@
#include "../WaitTimer.h"
#include "ios_WaitTimer_target.h"

namespace OS
{

class WaitTimerImpl
{
public:
Expand All @@ -28,6 +31,8 @@ class WaitTimerImpl
NSTimer* m_timer;
};

} // namespace OS



#endif /* ios_WaitTimerImpl_h */
2 changes: 1 addition & 1 deletion Source/Task/iOS/ios_WaitTimer_target.mm
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ @implementation ios_WaitTimer_target
- (void)timerFireMethod:(NSTimer*)timer
{
auto value = (NSValue*)timer.userInfo;
auto impl = static_cast<WaitTimerImpl*>(value.pointerValue);
auto impl = static_cast<OS::WaitTimerImpl*>(value.pointerValue);
impl->TimerFired();
}

Expand Down
38 changes: 21 additions & 17 deletions Utilities/Pipelines/Tasks/ios-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,19 @@ parameters:

steps:
- template: checkout.yml

- task: Xcode@2

# Build the CMake static lib
- script: |
cmake -B Build/libHttpClient.iOS.CMake/build \
-S Build/libHttpClient.iOS.CMake \
-DCMAKE_SYSTEM_NAME=iOS \
-DCMAKE_OSX_ARCHITECTURES=arm64 \
-DCMAKE_BUILD_TYPE=${{ parameters.configuration }}
cmake --build Build/libHttpClient.iOS.CMake/build --config ${{ parameters.configuration }}
displayName: 'Clean build iOS CMake static lib'

# Build libHttpClient.Apple.C configurations
- task: Xcode@5
displayName: 'Clean build iOS static lib'
inputs:
actions: 'clean build'
Expand All @@ -14,9 +25,8 @@ steps:
xcWorkspacePath: Build/libHttpClient.Apple.C/libHttpClient.xcworkspace
scheme: 'libHttpClient_iOS'
packageApp: false
useXctool: false

- task: Xcode@2
- task: Xcode@5
displayName: 'Clean build iOS framework'
inputs:
actions: 'clean build'
Expand All @@ -25,9 +35,8 @@ steps:
xcWorkspacePath: Build/libHttpClient.Apple.C/libHttpClient.xcworkspace
scheme: 'libHttpClientFramework_iOS'
packageApp: false
useXctool: false

- task: Xcode@2
- task: Xcode@5
displayName: 'Clean build iOS_NOWEBSOCKETS static lib'
inputs:
actions: 'clean build'
Expand All @@ -36,9 +45,8 @@ steps:
xcWorkspacePath: Build/libHttpClient.Apple.C/libHttpClient.xcworkspace
scheme: 'libHttpClient_NOWEBSOCKETS_iOS'
packageApp: false
useXctool: false

- task: Xcode@2
- task: Xcode@5
displayName: 'Clean build iOS_NOWEBSOCKETS framework'
inputs:
actions: 'clean build'
Expand All @@ -47,9 +55,8 @@ steps:
xcWorkspacePath: Build/libHttpClient.Apple.C/libHttpClient.xcworkspace
scheme: 'libHttpClientFramework_NOWEBSOCKETS_iOS'
packageApp: false
useXctool: false

- task: Xcode@2
- task: Xcode@5
displayName: 'Clean build macOS static lib'
inputs:
actions: 'clean build'
Expand All @@ -58,9 +65,8 @@ steps:
xcWorkspacePath: Build/libHttpClient.Apple.C/libHttpClient.xcworkspace
scheme: 'libHttpClient_macOS'
packageApp: false
useXctool: false

- task: Xcode@2
- task: Xcode@5
displayName: 'Clean build macOS framework'
inputs:
actions: 'clean build'
Expand All @@ -69,9 +75,8 @@ steps:
xcWorkspacePath: Build/libHttpClient.Apple.C/libHttpClient.xcworkspace
scheme: 'libHttpClientFramework_macOS'
packageApp: false
useXctool: false

- task: Xcode@2
- task: Xcode@5
displayName: 'Clean build macOS_NOWEBSOCKETS static lib'
inputs:
actions: 'clean build'
Expand All @@ -80,9 +85,8 @@ steps:
xcWorkspacePath: Build/libHttpClient.Apple.C/libHttpClient.xcworkspace
scheme: 'libHttpClient_NOWEBSOCKETS_macOS'
packageApp: false
useXctool: false

- task: Xcode@2
- task: Xcode@5
displayName: 'Clean build macOS_NOWEBSOCKETS framework'
inputs:
actions: 'clean build'
Expand All @@ -91,4 +95,4 @@ steps:
xcWorkspacePath: Build/libHttpClient.Apple.C/libHttpClient.xcworkspace
scheme: 'libHttpClientFramework_NOWEBSOCKETS_macOS'
packageApp: false
useXctool: false