Skip to content

Commit

Permalink
Define OSCompat module (facebook#49302)
Browse files Browse the repository at this point in the history
Summary:

# Changelog: [Internal]

Added OS-agnostic module that will implement 2 basic capabilities:
- Getting current process id
- Getting current thread id

Reviewed By: javache

Differential Revision: D69316093
  • Loading branch information
hoxyq authored and facebook-github-bot committed Feb 12, 2025
1 parent 1b066ba commit 6e1e52d
Show file tree
Hide file tree
Showing 9 changed files with 161 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ add_react_common_subdir(cxxreact)
add_react_common_subdir(jsc)
add_react_common_subdir(jsi)
add_react_common_subdir(callinvoker)
add_react_common_subdir(oscompat)
add_react_common_subdir(jsinspector-modern)
add_react_common_subdir(jsinspector-modern/tracing)
add_react_common_subdir(hermes/executor)
Expand Down Expand Up @@ -167,6 +168,7 @@ add_library(reactnative
$<TARGET_OBJECTS:jsireact>
$<TARGET_OBJECTS:logger>
$<TARGET_OBJECTS:mapbufferjni>
$<TARGET_OBJECTS:oscompat>
$<TARGET_OBJECTS:react_bridging>
$<TARGET_OBJECTS:react_codegen_rncore>
$<TARGET_OBJECTS:react_cxxreact>
Expand Down
14 changes: 14 additions & 0 deletions packages/react-native/ReactCommon/oscompat/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.

cmake_minimum_required(VERSION 3.13)
set(CMAKE_VERBOSE_MAKEFILE on)

add_compile_options(-fexceptions)

file(GLOB oscompat_SRC CONFIGURE_DEPENDS *.cpp)
add_library(oscompat OBJECT ${oscompat_SRC})

target_include_directories(oscompat PUBLIC .)
18 changes: 18 additions & 0 deletions packages/react-native/ReactCommon/oscompat/OSCompat.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/

#pragma once

#include <cstdint>

namespace facebook::react::oscompat {

uint64_t getCurrentProcessId();

uint64_t getCurrentThreadId();

} // namespace facebook::react::oscompat
63 changes: 63 additions & 0 deletions packages/react-native/ReactCommon/oscompat/OSCompatPosix.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/

#if defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) || \
defined(__ANDROID__)

#include "OSCompat.h"

#include <cassert>

#include <pthread.h>
#include <unistd.h>

#if defined(__MACH__)
#include <mach/mach.h>
#endif // defined(__MACH__)

#if defined(__linux__)
#include <sys/syscall.h>
#endif // defined(__linux__)

namespace facebook::react::oscompat {

uint64_t getCurrentProcessId() {
return getpid();
}

#if defined(__APPLE__) && defined(__MACH__)

uint64_t getCurrentThreadId() {
uint64_t tid = 0;
auto ret = pthread_threadid_np(nullptr, &tid);
assert(
ret == 0 &&
"Unexpected pthread_threadid_np failure while getting thread ID");
(void)ret;
return tid;
}

#elif defined(__ANDROID__)

uint64_t getCurrentThreadId() {
return gettid();
}

#elif defined(__linux__)

uint64_t getCurrentThreadId() {
return syscall(__NR_gettid);
}

#else
#error "getCurrentThreadID() is not supported on this platform"
#endif

} // namespace facebook::react::oscompat

#endif // defined(__linux__) || (defined(__APPLE__) && defined(__MACH__)) ||
// defined(__ANDROID__)
26 changes: 26 additions & 0 deletions packages/react-native/ReactCommon/oscompat/OSCompatWindows.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/

#if defined(_WIN32) || defined(_MSC_VER)

#include "OSCompat.h"

#include <windows.h>

namespace facebook::react::oscompat {

uint64_t getCurrentProcessId() {
return GetCurrentProcessId();
}

uint64_t getCurrentThreadId() {
return GetCurrentThreadId();
}

} // namespace facebook::react::oscompat

#endif // defined(_WIN32) || defined(_MSC_VER)
31 changes: 31 additions & 0 deletions packages/react-native/ReactCommon/oscompat/React-oscompat.podspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.

require "json"

package = JSON.parse(File.read(File.join(__dir__, "..", "..", "package.json")))
version = package['version']

source = { :git => 'https://github.com/facebook/react-native.git' }
if version == '1000.0.0'
# This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in.
source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1")
else
source[:tag] = "v#{version}"
end

Pod::Spec.new do |s|
s.name = "React-oscompat"
s.version = version
s.summary = "Small set of OS-level utilities for React Native"
s.homepage = "https://reactnative.dev/"
s.license = package["license"]
s.author = "Meta Platforms, Inc. and its affiliates"
s.platforms = min_supported_versions
s.source = source
s.source_files = "*.{cpp,h}"
s.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "" }
s.header_dir = "oscompat"
end
1 change: 1 addition & 0 deletions packages/react-native/scripts/cocoapods/utils.rb
Original file line number Diff line number Diff line change
Expand Up @@ -634,6 +634,7 @@ def self.react_native_pods
"React-jsiexecutor",
"React-jsinspector",
"React-logger",
"React-oscompat",
"React-perflogger",
"React-rncore",
"React-runtimeexecutor",
Expand Down
1 change: 1 addition & 0 deletions packages/react-native/scripts/react_native_pods.rb
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ def use_react_native! (
pod 'React-rendererdebug', :path => "#{prefix}/ReactCommon/react/renderer/debug"
pod 'React-rendererconsistency', :path => "#{prefix}/ReactCommon/react/renderer/consistency"
pod 'React-perflogger', :path => "#{prefix}/ReactCommon/reactperflogger"
pod 'React-oscompat', :path => "#{prefix}/ReactCommon/oscompat"
pod 'React-logger', :path => "#{prefix}/ReactCommon/logger"
pod 'ReactCommon/turbomodule/core', :path => "#{prefix}/ReactCommon", :modular_headers => true
pod 'React-NativeModulesApple', :path => "#{prefix}/ReactCommon/react/nativemodule/core/platform/ios", :modular_headers => true
Expand Down
5 changes: 5 additions & 0 deletions packages/rn-tester/Podfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1367,6 +1367,7 @@ PODS:
- React-runtimeexecutor
- ReactCommon/turbomodule/bridging
- ReactCommon/turbomodule/core
- React-oscompat (1000.0.0)
- React-perflogger (1000.0.0):
- DoubleConversion
- RCT-Folly (= 2024.11.18.00)
Expand Down Expand Up @@ -1743,6 +1744,7 @@ DEPENDENCIES:
- React-Mapbuffer (from `../react-native/ReactCommon`)
- React-microtasksnativemodule (from `../react-native/ReactCommon/react/nativemodule/microtasks`)
- React-NativeModulesApple (from `../react-native/ReactCommon/react/nativemodule/core/platform/ios`)
- React-oscompat (from `../react-native/ReactCommon/oscompat`)
- React-perflogger (from `../react-native/ReactCommon/reactperflogger`)
- React-performancetimeline (from `../react-native/ReactCommon/react/performance/timeline`)
- React-RCTActionSheet (from `../react-native/Libraries/ActionSheetIOS`)
Expand Down Expand Up @@ -1866,6 +1868,8 @@ EXTERNAL SOURCES:
:path: "../react-native/ReactCommon/react/nativemodule/microtasks"
React-NativeModulesApple:
:path: "../react-native/ReactCommon/react/nativemodule/core/platform/ios"
React-oscompat:
:path: "../react-native/ReactCommon/oscompat"
React-perflogger:
:path: "../react-native/ReactCommon/reactperflogger"
React-performancetimeline:
Expand Down Expand Up @@ -1976,6 +1980,7 @@ SPEC CHECKSUMS:
React-Mapbuffer: cd5e7720cb5fd9c0bc43ae71a952cc2a16711a5a
React-microtasksnativemodule: 6af4b5b26640a12f9abc421a014f300d2a02b789
React-NativeModulesApple: 612e7d0ccf461840f010689daa86fd058aec01c5
React-oscompat: 7133e0e945cda067ae36b22502df663d73002864
React-perflogger: 6f2b10b96094d29e1dca6be7689d975b98ba4166
React-performancetimeline: b91e898716885df30697e54eab3eb14f6b48766b
React-RCTActionSheet: 1bf8cc8086ad1c15da3407dfb7bc9dd94dc7595d
Expand Down

0 comments on commit 6e1e52d

Please sign in to comment.