diff --git a/scripts/buildsystems/vcpkg.cmake b/scripts/buildsystems/vcpkg.cmake index 1fc2bf4738b388..5c8dd6f0e9e950 100644 --- a/scripts/buildsystems/vcpkg.cmake +++ b/scripts/buildsystems/vcpkg.cmake @@ -382,6 +382,8 @@ elseif(CMAKE_SYSTEM_NAME STREQUAL "SunOS" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HO set(Z_VCPKG_TARGET_TRIPLET_PLAT solaris) elseif(CMAKE_SYSTEM_NAME STREQUAL "Android" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Android")) set(Z_VCPKG_TARGET_TRIPLET_PLAT android) +elseif(CMAKE_SYSTEM_NAME STREQUAL "OHOS") + set(Z_VCPKG_TARGET_TRIPLET_PLAT ohos) endif() if(EMSCRIPTEN) diff --git a/scripts/cmake/vcpkg_common_definitions.cmake b/scripts/cmake/vcpkg_common_definitions.cmake index d5da867a420e3f..4250b4bc3b5c67 100644 --- a/scripts/cmake/vcpkg_common_definitions.cmake +++ b/scripts/cmake/vcpkg_common_definitions.cmake @@ -28,6 +28,8 @@ elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Linux") set(VCPKG_TARGET_IS_LINUX ON) elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Android") set(VCPKG_TARGET_IS_ANDROID ON) +elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "OHOS") + set(VCPKG_TARGET_IS_OHOS ON) elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") set(VCPKG_TARGET_IS_FREEBSD ON) set(VCPKG_TARGET_IS_BSD ON) @@ -153,17 +155,17 @@ set(CMAKE_FIND_LIBRARY_PREFIXES "${VCPKG_FIND_LIBRARY_PREFIXES}" CACHE INTERNAL # The variable are just appended to permit to custom triplets define the variable # Platforms with libdl -if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OSX) +if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OHOS OR VCPKG_TARGET_IS_OSX) list(APPEND VCPKG_SYSTEM_LIBRARIES dl) endif() # Platforms with libm -if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_OPENBSD OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_MINGW) +if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OHOS OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_OPENBSD OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_MINGW) list(APPEND VCPKG_SYSTEM_LIBRARIES m) endif() # Platforms with pthread -if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_OPENBSD OR VCPKG_TARGET_IS_MINGW) +if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OHOS OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_OPENBSD OR VCPKG_TARGET_IS_MINGW) list(APPEND VCPKG_SYSTEM_LIBRARIES pthread) endif() @@ -177,13 +179,18 @@ if(VCPKG_TARGET_IS_OSX) list(APPEND VCPKG_SYSTEM_LIBRARIES [[c\+\+]]) endif() +# Platforms with libc++ (non-Apple) +if(VCPKG_TARGET_IS_OHOS) + list(APPEND VCPKG_SYSTEM_LIBRARIES [[c\+\+]]) +endif() + # Platforms with librt -if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_MINGW) +if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OHOS OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_MINGW) list(APPEND VCPKG_SYSTEM_LIBRARIES rt) endif() # Platforms with GCC libs -if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_OPENBSD OR VCPKG_TARGET_IS_MINGW) +if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OHOS OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_OPENBSD OR VCPKG_TARGET_IS_MINGW) list(APPEND VCPKG_SYSTEM_LIBRARIES gcc) list(APPEND VCPKG_SYSTEM_LIBRARIES gcc_s) endif() diff --git a/scripts/toolchains/ohos.cmake b/scripts/toolchains/ohos.cmake new file mode 100644 index 00000000000000..ab1a293645949f --- /dev/null +++ b/scripts/toolchains/ohos.cmake @@ -0,0 +1,83 @@ +set(CMAKE_SYSTEM_NAME OHOS CACHE STRING "") + +if(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64") + set(OHOS_ARCH "arm64-v8a" CACHE STRING "") +elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm") + set(OHOS_ARCH "armeabi-v7a" CACHE STRING "") +elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") + set(OHOS_ARCH "x86_64" CACHE STRING "") +else() + message(FATAL_ERROR "Unsupported VCPKG_TARGET_ARCHITECTURE for OHOS: ${VCPKG_TARGET_ARCHITECTURE}") +endif() + +if(VCPKG_CRT_LINKAGE STREQUAL "dynamic") + set(OHOS_STL "c++_shared" CACHE STRING "") +else() + set(OHOS_STL "c++_static" CACHE STRING "") +endif() + +if(DEFINED ENV{OHOS_SDK_ROOT}) + set(OHOS_SDK_ROOT "$ENV{OHOS_SDK_ROOT}") +else() + message(FATAL_ERROR + "Could not find the OHOS SDK. Set the OHOS_SDK_ROOT environment variable " + "to the root of the OpenHarmony SDK (e.g. ~/.local/opt/ohos/command-line-tools/sdk/default/openharmony)." + ) +endif() + +set(OHOS_NATIVE_ROOT "${OHOS_SDK_ROOT}/native") +set(OHOS_TOOLCHAIN_FILE "${OHOS_NATIVE_ROOT}/build/cmake/ohos.toolchain.cmake") +if(NOT EXISTS "${OHOS_TOOLCHAIN_FILE}") + message(FATAL_ERROR "Could not find OHOS toolchain file at ${OHOS_TOOLCHAIN_FILE}") +endif() + +include("${OHOS_TOOLCHAIN_FILE}") + +# The OHOS SDK sets CMAKE__COMPILER_EXTERNAL_TOOLCHAIN which CMake +# translates to --gcc-toolchain=. This flag is unused during compilation +# and causes Meson builds to fail with -Werror=unused-command-line-argument. +# The OHOS clang already knows its toolchain location, so this is not needed. +unset(CMAKE_C_COMPILER_EXTERNAL_TOOLCHAIN) +unset(CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN) +unset(CMAKE_ASM_COMPILER_EXTERNAL_TOOLCHAIN) + +if(NOT _VCPKG_OHOS_TOOLCHAIN) + set(_VCPKG_OHOS_TOOLCHAIN 1) + + if(POLICY CMP0056) + cmake_policy(SET CMP0056 NEW) + endif() + if(POLICY CMP0066) + cmake_policy(SET CMP0066 NEW) + endif() + if(POLICY CMP0067) + cmake_policy(SET CMP0067 NEW) + endif() + if(POLICY CMP0137) + cmake_policy(SET CMP0137 NEW) + endif() + list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES + VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE + VCPKG_C_FLAGS VCPKG_CXX_FLAGS + VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG + VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE + VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG + ) + + string(APPEND CMAKE_C_FLAGS " -fPIC ${VCPKG_C_FLAGS} ") + string(APPEND CMAKE_CXX_FLAGS " -fPIC ${VCPKG_CXX_FLAGS} ") + string(APPEND CMAKE_C_FLAGS_DEBUG " ${VCPKG_C_FLAGS_DEBUG} ") + string(APPEND CMAKE_CXX_FLAGS_DEBUG " ${VCPKG_CXX_FLAGS_DEBUG} ") + string(APPEND CMAKE_C_FLAGS_RELEASE " ${VCPKG_C_FLAGS_RELEASE} ") + string(APPEND CMAKE_CXX_FLAGS_RELEASE " ${VCPKG_CXX_FLAGS_RELEASE} ") + + string(APPEND CMAKE_MODULE_LINKER_FLAGS " ${VCPKG_LINKER_FLAGS} ") + string(APPEND CMAKE_SHARED_LINKER_FLAGS " ${VCPKG_LINKER_FLAGS} ") + string(APPEND CMAKE_EXE_LINKER_FLAGS " ${VCPKG_LINKER_FLAGS} ") + string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG " ${VCPKG_LINKER_FLAGS_DEBUG} ") + string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG " ${VCPKG_LINKER_FLAGS_DEBUG} ") + string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG " ${VCPKG_LINKER_FLAGS_DEBUG} ") + string(APPEND CMAKE_MODULE_LINKER_FLAGS_RELEASE " ${VCPKG_LINKER_FLAGS_RELEASE} ") + string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE " ${VCPKG_LINKER_FLAGS_RELEASE} ") + string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE " ${VCPKG_LINKER_FLAGS_RELEASE} ") +endif() diff --git a/triplets/community/arm-ohos.cmake b/triplets/community/arm-ohos.cmake new file mode 100644 index 00000000000000..12578f3b926c95 --- /dev/null +++ b/triplets/community/arm-ohos.cmake @@ -0,0 +1,8 @@ +set(VCPKG_ENV_PASSTHROUGH_UNTRACKED OHOS_SDK_ROOT) +set(VCPKG_TARGET_ARCHITECTURE arm) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE dynamic) +set(VCPKG_CMAKE_SYSTEM_NAME OHOS) +set(VCPKG_MAKE_BUILD_TRIPLET "--host=armv7-unknown-linux-ohos") +set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DOHOS_ARCH=armeabi-v7a -DCMAKE_PLATFORM_NO_VERSIONED_SONAME=ON) +set(VCPKG_BUILD_TYPE release) diff --git a/triplets/community/arm64-ohos.cmake b/triplets/community/arm64-ohos.cmake new file mode 100644 index 00000000000000..ac8aacb8ab9fc9 --- /dev/null +++ b/triplets/community/arm64-ohos.cmake @@ -0,0 +1,8 @@ +set(VCPKG_ENV_PASSTHROUGH_UNTRACKED OHOS_SDK_ROOT) +set(VCPKG_TARGET_ARCHITECTURE arm64) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE dynamic) +set(VCPKG_CMAKE_SYSTEM_NAME OHOS) +set(VCPKG_MAKE_BUILD_TRIPLET "--host=aarch64-unknown-linux-ohos") +set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DOHOS_ARCH=arm64-v8a -DCMAKE_PLATFORM_NO_VERSIONED_SONAME=ON) +set(VCPKG_BUILD_TYPE release) diff --git a/triplets/community/x64-ohos.cmake b/triplets/community/x64-ohos.cmake new file mode 100644 index 00000000000000..86dec79c0293ee --- /dev/null +++ b/triplets/community/x64-ohos.cmake @@ -0,0 +1,8 @@ +set(VCPKG_ENV_PASSTHROUGH_UNTRACKED OHOS_SDK_ROOT) +set(VCPKG_TARGET_ARCHITECTURE x64) +set(VCPKG_CRT_LINKAGE dynamic) +set(VCPKG_LIBRARY_LINKAGE dynamic) +set(VCPKG_CMAKE_SYSTEM_NAME OHOS) +set(VCPKG_MAKE_BUILD_TRIPLET "--host=x86_64-unknown-linux-ohos") +set(VCPKG_CMAKE_CONFIGURE_OPTIONS -DOHOS_ARCH=x86_64 -DCMAKE_PLATFORM_NO_VERSIONED_SONAME=ON) +set(VCPKG_BUILD_TYPE release)