Skip to content

Commit

Permalink
chore(cmake): introduce GlobalPackages to improve project cohesion
Browse files Browse the repository at this point in the history
  • Loading branch information
medns authored and zoomchan-cxj committed Jun 21, 2022
1 parent b435496 commit 350e0a0
Show file tree
Hide file tree
Showing 5 changed files with 293 additions and 223 deletions.
11 changes: 10 additions & 1 deletion android/sdk/src/main/jni/CMakeLists.txt
Expand Up @@ -24,7 +24,7 @@ project("hippy")

get_filename_component(PROJECT_ROOT_DIR "${PROJECT_SOURCE_DIR}/../../../../.." REALPATH)

include("${PROJECT_ROOT_DIR}/buildconfig/cmake/InfraPackagesModule.cmake")
include("${PROJECT_ROOT_DIR}/buildconfig/cmake/GlobalPackagesModule.cmake")
include("${PROJECT_ROOT_DIR}/buildconfig/cmake/compiler_toolchain.cmake")

set(CMAKE_VERBOSE_MAKEFILE on)
Expand Down Expand Up @@ -52,6 +52,15 @@ add_subdirectory(${PROJECT_ROOT_DIR}/core ${CMAKE_CURRENT_BINARY_DIR}/core)
target_link_libraries(${PROJECT_NAME} PRIVATE core)
# endregion

# region v8
GlobalPackages_Add(v8)
target_link_libraries(${PROJECT_NAME} PRIVATE v8)
get_target_property(V8_WITHOUT_INSPECTOR v8 INTERFACE_V8_WITHOUT_INSPECTOR)
if (V8_WITHOUT_INSPECTOR)
target_compile_definitions(${PROJECT_NAME} PRIVATE "V8_WITHOUT_INSPECTOR")
endif ()
# endregion

# region source set
set(SOURCE_SET
src/bridge/entry.cc
Expand Down
67 changes: 67 additions & 0 deletions buildconfig/cmake/GlobalPackagesModule.cmake
@@ -0,0 +1,67 @@
#
# Tencent is pleased to support the open source community by making
# Hippy available.
#
# Copyright (C) 2022 THL A29 Limited, a Tencent company.
# All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

cmake_minimum_required(VERSION 3.14)

include("${CMAKE_CURRENT_LIST_DIR}/InfraPackagesModule.cmake")

function(GlobalPackages_Add_v8)
if (NOT TARGET v8)
if (NOT V8_COMPONENT)
message(FATAL_ERROR "The V8_COMPONENT variable must be set")
endif ()
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Android")
set(V8_REMOTE_FILENAME "android-${ANDROID_ARCH_NAME}.tgz")
elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
set(V8_REMOTE_FILENAME "windows-${ANDROID_ARCH_NAME}.zip")
elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
set(V8_REMOTE_FILENAME "macos-${ANDROID_ARCH_NAME}.tgz")
else ()
message(FATAL_ERROR "Unsupported system ${CMAKE_SYSTEM_NAME}")
endif ()

InfraPackage_Add(V8
REMOTE "global_packages/v8/${V8_COMPONENT}/${V8_REMOTE_FILENAME}"
LOCAL "${V8_COMPONENT}")

get_target_property(V8_AUX_DEPS v8 INTERFACE_V8_AUX_DEPS)
if (V8_AUX_DEPS)
foreach (__item IN LISTS V8_AUX_DEPS)
add_custom_command(
TARGET ${PROJECT_NAME} POST_BUILD
COMMAND ${CMAKE_COMMAND} -E
copy "${__item}" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}")
endforeach ()
endif ()
endif ()
endfunction()

function(GlobalPackages_Add_dom)
if (NOT TARGET dom)
InfraPackage_Add(DOM
LOCAL "${CMAKE_CURRENT_LIST_DIR}/../../dom")
endif ()
endfunction()

function(GlobalPackages_Add)
foreach (packageName IN LISTS ARGN)
cmake_language(CALL GlobalPackages_Add_${packageName})
endforeach ()
endfunction()
102 changes: 54 additions & 48 deletions buildconfig/cmake/InfraPackagesModule.cmake
Expand Up @@ -23,63 +23,69 @@ cmake_minimum_required(VERSION 3.14)
include(FetchContent)

if (NOT DEFINED INFA_PACKAGES_URL)
set(INFA_PACKAGES_URL "https://hippy-packages-1258344701.cos.accelerate.myqcloud.com")
endif()
set(INFA_PACKAGES_URL "https://hippy-packages-1258344701.cos.accelerate.myqcloud.com")
endif ()
if (NOT DEFINED DEFAULT_INFA_DOMAIN)
set(DEFAULT_INFA_DOMAIN "hippy")
endif()
set(DEFAULT_INFA_DOMAIN "hippy")
endif ()

macro(InfraPackage_Add packageName)
string(TOLOWER ${ARGV0} packageNameLower)
if("${packageNameLower}" STREQUAL "")
message(FATAL_ERROR "Empty packageName not allowed for InfaPackage_Add()")
endif()
string(TOLOWER ${ARGV0} packageNameLower)
if ("${packageNameLower}" STREQUAL "")
message(FATAL_ERROR "Empty packageName not allowed for InfaPackage_Add()")
endif ()

set(requiredValueArgs REMOTE LOCAL)
set(optionalValueArgs REMOTE_HASH REMOTE_DOMAIN)
set(requiredValueArgs REMOTE LOCAL)
set(optionalValueArgs REMOTE_HASH REMOTE_DOMAIN)

set(options "")
set(oneValueArgs ${requiredValueArgs} ${optionalValueArgs})
set(multiValueArgs "")
set(list_var "${ARGN}")
cmake_parse_arguments(ARG
"${options}" "${oneValueArgs}" "${multiValueArgs}" ${list_var})

if (NOT ARG_REMOTE_DOMAIN)
set(ARG_REMOTE_DOMAIN ${DEFAULT_INFA_DOMAIN})
endif()
foreach(__item IN LISTS requiredValueArgs)
if ("${ARG_${__item}}" STREQUAL "")
message(FATAL_ERROR "Missing ${__item} argument when calling InfaPackage_Add()")
endif()
endforeach()
set(options "")
set(oneValueArgs ${requiredValueArgs} ${optionalValueArgs})
set(multiValueArgs "")
set(list_var "${ARGN}")
cmake_parse_arguments(ARG
"${options}" "${oneValueArgs}" "${multiValueArgs}" ${list_var})

set(__return NO)
if (ARG_LOCAL)
set(ABSOLUTE_LOCAL_PATH "${ARG_LOCAL}")
if (NOT IS_ABSOLUTE "${ABSOLUTE_LOCAL_PATH}")
get_filename_component(ABSOLUTE_LOCAL_PATH "${ABSOLUTE_LOCAL_PATH}" ABSOLUTE)
endif()
get_filename_component(ABSOLUTE_LOCAL_PATH "${ABSOLUTE_LOCAL_PATH}" ABSOLUTE)
endif ()
if (EXISTS "${ABSOLUTE_LOCAL_PATH}")
# Pass variables back to the caller.
set(${packageNameLower}_SOURCE_DIR ${ABSOLUTE_LOCAL_PATH})
if ("${ABSOLUTE_LOCAL_PATH}" MATCHES "^${CMAKE_SOURCE_DIR}")
set(${packageNameLower}_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ARG_LOCAL}")
else()
set(${packageNameLower}_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/infa_packages/${packageNameLower}")
endif()
set(${contentNameLower}_POPULATED True)
# Pass variables back to the caller.
set(${packageNameLower}_SOURCE_DIR ${ABSOLUTE_LOCAL_PATH})
if ("${ABSOLUTE_LOCAL_PATH}" MATCHES "^${CMAKE_SOURCE_DIR}")
set(${packageNameLower}_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/${ARG_LOCAL}")
else ()
set(${packageNameLower}_BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/infa_packages/${packageNameLower}")
endif ()
set(${contentNameLower}_POPULATED True)

if (EXISTS "${ABSOLUTE_LOCAL_PATH}/CMakeLists.txt")
add_subdirectory(${ABSOLUTE_LOCAL_PATH} ${${packageNameLower}_BINARY_DIR})
endif ()
set(__return YES)
endif ()
endif ()

if (ARG_REMOTE AND NOT __return)
if (NOT ARG_REMOTE_DOMAIN)
set(ARG_REMOTE_DOMAIN ${DEFAULT_INFA_DOMAIN})
endif ()

# Prepare FetchContent_Declare() ARG
set(FetchContent_Declare_ARG ${packageNameLower}
URL "${INFA_PACKAGES_URL}/${ARG_REMOTE_DOMAIN}/${ARG_REMOTE}")
if (ARG_REMOTE_HASH)
list(APPEND FetchContent_Declare_ARG URL_HASH ${ARG_REMOTE_HASH})
endif ()

if (EXISTS "${ABSOLUTE_LOCAL_PATH}/CMakeLists.txt")
add_subdirectory(${ABSOLUTE_LOCAL_PATH} ${${packageNameLower}_BINARY_DIR})
endif()
else()
# Prepare FetchContent_Declare() ARG
set(FetchContent_Declare_ARG ${packageNameLower}
URL "${INFA_PACKAGES_URL}/${ARG_REMOTE_DOMAIN}/${ARG_REMOTE}")
if (ARG_REMOTE_HASH)
list(APPEND FetchContent_Declare_ARG URL_HASH ${ARG_REMOTE_HASH})
endif()
FetchContent_Declare(${FetchContent_Declare_ARG})
FetchContent_MakeAvailable(${packageNameLower})
set(__return True)
endif ()

FetchContent_Declare(${FetchContent_Declare_ARG})
FetchContent_MakeAvailable(${packageNameLower})
endif()
if (NOT __return)
message(FATAL_ERROR "At least one of the REMOTE or LOCAL argument needs to be set when calling InfaPackage_Add()")
endif ()
endmacro()
110 changes: 55 additions & 55 deletions buildconfig/cmake/compiler_toolchain.cmake
Expand Up @@ -19,59 +19,59 @@
#

if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set(COMPILE_OPTIONS
-fomit-frame-pointer
-fno-threadsafe-statics
-fno-strict-aliasing
-fno-short-enums
-fno-unique-section-names
-fno-trigraphs
-Werror
-Wall
-Wextra
-Wextra-semi
-Wconversion
-Wimplicit-fallthrough
-Wloop-analysis
-Wmissing-field-initializers
-Wunused-local-typedefs
-Wstring-conversion
-Wthread-safety
-Wtautological-overlap-compare
-Wunreachable-code
-Wenum-compare-conditional
-Wheader-hygiene
-Wshadow
-Wno-unused-parameter
-Wno-trigraphs
--param=ssp-buffer-size=4
-pipe
-Os)
set(COMPILE_OPTIONS
-fomit-frame-pointer
-fno-threadsafe-statics
-fno-strict-aliasing
-fno-short-enums
-fno-unique-section-names
-fno-trigraphs
-Werror
-Wall
-Wextra
-Wextra-semi
-Wconversion
-Wimplicit-fallthrough
-Wloop-analysis
-Wmissing-field-initializers
-Wunused-local-typedefs
-Wstring-conversion
-Wthread-safety
-Wtautological-overlap-compare
-Wunreachable-code
-Wenum-compare-conditional
-Wheader-hygiene
-Wshadow
-Wno-unused-parameter
-Wno-trigraphs
--param=ssp-buffer-size=4
-pipe
-Os)

if (ANDROID_NDK)
if (${ANDROID_ABI} STREQUAL "armeabi-v7a")
list(APPEND COMPILE_OPTIONS -mfloat-abi=softfp)
elseif(${ANDROID_ABI} STREQUAL "arm64-v8a")
# Before LLVM 14 [1],
# Outline atomics will crash on Samsung Exynos 9810 CPU [2]
# with big cores are ARMv8.2 and LITTLE are ARMv8.0.
# Since LSE is for ARMv8.1 and later, so it should be disabled.
#
# [1] https://reviews.llvm.org/rGcce4a7258b81159e57a411896011ee2742f17def
# [2] https://bugs.chromium.org/p/chromium/issues/detail?id=1272795
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 14)
list(APPEND COMPILE_OPTIONS -mno-outline-atomics)
endif()
elseif (${ANDROID_ABI} STREQUAL "x86")
list(APPEND COMPILE_OPTIONS
-m32
-mssse3
-mfpmath=sse)
elseif (${ANDROID_ABI} STREQUAL "x86_64")
list(APPEND COMPILE_OPTIONS
-m64
-mpopcnt
-msse4.2)
endif()
endif()
endif()
if (ANDROID_NDK)
if (${ANDROID_ABI} STREQUAL "armeabi-v7a")
list(APPEND COMPILE_OPTIONS -mfloat-abi=softfp)
elseif (${ANDROID_ABI} STREQUAL "arm64-v8a")
# Before LLVM 14 [1],
# Outline atomics will crash on Samsung Exynos 9810 CPU [2]
# with big cores are ARMv8.2 and LITTLE are ARMv8.0.
# Since LSE is for ARMv8.1 and later, so it should be disabled.
#
# [1] https://reviews.llvm.org/rGcce4a7258b81159e57a411896011ee2742f17def
# [2] https://bugs.chromium.org/p/chromium/issues/detail?id=1272795
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 14)
list(APPEND COMPILE_OPTIONS -mno-outline-atomics)
endif ()
elseif (${ANDROID_ABI} STREQUAL "x86")
list(APPEND COMPILE_OPTIONS
-m32
-mssse3
-mfpmath=sse)
elseif (${ANDROID_ABI} STREQUAL "x86_64")
list(APPEND COMPILE_OPTIONS
-m64
-mpopcnt
-msse4.2)
endif ()
endif ()
endif ()

0 comments on commit 350e0a0

Please sign in to comment.