From 2ec544048ccc14a7aefa5372ee7286cff31e1b5f Mon Sep 17 00:00:00 2001 From: Aleksei Sidorov <> Date: Wed, 1 Jun 2022 23:57:24 +0300 Subject: [PATCH] Add build configs --- BUILD.gn | 170 +++++++++++++++++++++++++++++++++++++++++++++++++ CMakeLists.txt | 156 ++++++--------------------------------------- 2 files changed, 191 insertions(+), 135 deletions(-) create mode 100644 BUILD.gn diff --git a/BUILD.gn b/BUILD.gn new file mode 100644 index 0000000..81bbdab --- /dev/null +++ b/BUILD.gn @@ -0,0 +1,170 @@ +# Copyright (c) 2021-2022 Huawei Device Co., Ltd. +# 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. + +import("//ark/runtime_core/ark_config.gni") +import("//build/config/ohos/rules.gni") +import("//build/ohos.gni") + +config("asmjit_public_config") { + include_dirs = [ + "$ark_third_party_root/asmjit/src", + ] + if (ark_standalone_build) { + ldflags = [ "-lrt" ] + } +} + +config("asmjit_config") { + cflags_cc = [ + "-Wno-bitwise-instead-of-logical", + "-Wno-unused-but-set-variable", + "-Wno-deprecated-copy" + ] +} + +asmjit_sources = [ + "src/asmjit/asmjit.h", + + "src/asmjit/core.h", + "src/asmjit/core/api-build_p.h", + "src/asmjit/core/api-config.h", + "src/asmjit/core/arch.cpp", + "src/asmjit/core/arch.h", + "src/asmjit/core/assembler.cpp", + "src/asmjit/core/assembler.h", + "src/asmjit/core/builder.cpp", + "src/asmjit/core/builder.h", + "src/asmjit/core/callconv.cpp", + "src/asmjit/core/callconv.h", + "src/asmjit/core/codebuffer.h", + "src/asmjit/core/codebufferwriter_p.h", + "src/asmjit/core/codeholder.cpp", + "src/asmjit/core/codeholder.h", + "src/asmjit/core/compiler.cpp", + "src/asmjit/core/compiler.h", + "src/asmjit/core/constpool.cpp", + "src/asmjit/core/constpool.h", + "src/asmjit/core/cpuinfo.cpp", + "src/asmjit/core/cpuinfo.h", + "src/asmjit/core/datatypes.h", + "src/asmjit/core/emitter.cpp", + "src/asmjit/core/emitter.h", + "src/asmjit/core/emitterutils.cpp", + "src/asmjit/core/emitterutils_p.h", + "src/asmjit/core/environment.cpp", + "src/asmjit/core/environment.h", + "src/asmjit/core/errorhandler.cpp", + "src/asmjit/core/errorhandler.h", + "src/asmjit/core/features.h", + "src/asmjit/core/formatter.cpp", + "src/asmjit/core/formatter.h", + "src/asmjit/core/func.cpp", + "src/asmjit/core/func.h", + "src/asmjit/core/globals.cpp", + "src/asmjit/core/globals.h", + "src/asmjit/core/inst.cpp", + "src/asmjit/core/inst.h", + "src/asmjit/core/jitallocator.cpp", + "src/asmjit/core/jitallocator.h", + "src/asmjit/core/jitruntime.cpp", + "src/asmjit/core/jitruntime.h", + "src/asmjit/core/logger.cpp", + "src/asmjit/core/logger.h", + "src/asmjit/core/misc_p.h", + "src/asmjit/core/operand.cpp", + "src/asmjit/core/operand.h", + "src/asmjit/core/osutils.cpp", + "src/asmjit/core/osutils.h", + "src/asmjit/core/raassignment_p.h", + "src/asmjit/core/rabuilders_p.h", + "src/asmjit/core/radefs_p.h", + "src/asmjit/core/ralocal.cpp", + "src/asmjit/core/ralocal_p.h", + "src/asmjit/core/rapass.cpp", + "src/asmjit/core/rapass_p.h", + "src/asmjit/core/rastack.cpp", + "src/asmjit/core/rastack_p.h", + "src/asmjit/core/string.cpp", + "src/asmjit/core/string.h", + "src/asmjit/core/support.cpp", + "src/asmjit/core/support.h", + "src/asmjit/core/target.cpp", + "src/asmjit/core/target.h", + "src/asmjit/core/type.cpp", + "src/asmjit/core/type.h", + "src/asmjit/core/virtmem.cpp", + "src/asmjit/core/virtmem.h", + "src/asmjit/core/zone.cpp", + "src/asmjit/core/zone.h", + "src/asmjit/core/zonehash.cpp", + "src/asmjit/core/zonehash.h", + "src/asmjit/core/zonelist.cpp", + "src/asmjit/core/zonelist.h", + "src/asmjit/core/zonestack.cpp", + "src/asmjit/core/zonestack.h", + "src/asmjit/core/zonestring.h", + "src/asmjit/core/zonetree.cpp", + "src/asmjit/core/zonetree.h", + "src/asmjit/core/zonevector.cpp", + "src/asmjit/core/zonevector.h", + + "src/asmjit/x86.h", + "src/asmjit/x86/x86archdata.cpp", + "src/asmjit/x86/x86archdata_p.h", + "src/asmjit/x86/x86assembler.cpp", + "src/asmjit/x86/x86assembler.h", + "src/asmjit/x86/x86builder.cpp", + "src/asmjit/x86/x86builder.h", + "src/asmjit/x86/x86callconv.cpp", + "src/asmjit/x86/x86callconv_p.h", + "src/asmjit/x86/x86compiler.cpp", + "src/asmjit/x86/x86compiler.h", + "src/asmjit/x86/x86emitter.h", + "src/asmjit/x86/x86features.cpp", + "src/asmjit/x86/x86features.h", + "src/asmjit/x86/x86formatter.cpp", + "src/asmjit/x86/x86formatter_p.h", + "src/asmjit/x86/x86globals.h", + "src/asmjit/x86/x86internal.cpp", + "src/asmjit/x86/x86internal_p.h", + "src/asmjit/x86/x86instdb.cpp", + "src/asmjit/x86/x86instdb.h", + "src/asmjit/x86/x86instdb_p.h", + "src/asmjit/x86/x86instapi.cpp", + "src/asmjit/x86/x86instapi_p.h", + "src/asmjit/x86/x86operand.cpp", + "src/asmjit/x86/x86operand.h", + "src/asmjit/x86/x86rapass.cpp", + "src/asmjit/x86/x86rapass_p.h", +] + +asmjit_configs = [ + ":asmjit_public_config", + "$ark_root:ark_config", + "$ark_root/libpandabase:arkbase_public_config", + ":asmjit_config", +] + +ohos_static_library("libasmjit") { + sources = asmjit_sources + configs = asmjit_configs + deps = [ "$ark_root/libpandabase:libarkbase" ] + subsystem_name = "ark" +} + +ohos_static_library("libasmjit_frontend_static") { + sources = asmjit_sources + configs = asmjit_configs + deps = [ "$ark_root/libpandabase:libarkbase_frontend_static" ] + subsystem_name = "ark" +} diff --git a/CMakeLists.txt b/CMakeLists.txt index e033c3f..37a1593 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,21 +52,12 @@ if (NOT DEFINED ASMJIT_BUILD_X86) set(ASMJIT_BUILD_X86 FALSE) endif() -if (NOT DEFINED ASMJIT_TEST) - set(ASMJIT_TEST FALSE) -endif() - -if (NOT DEFINED ASMJIT_NO_NATVIS) - set(ASMJIT_NO_NATVIS FALSE) -endif() - # EMBED implies STATIC. if (ASMJIT_EMBED AND NOT ASMJIT_STATIC) set(ASMJIT_STATIC TRUE) endif() set(ASMJIT_DIR "${CMAKE_CURRENT_LIST_DIR}" CACHE PATH "Location of 'asmjit'") -set(ASMJIT_TEST ${ASMJIT_TEST} CACHE BOOL "Build 'asmjit' test applications") set(ASMJIT_EMBED ${ASMJIT_EMBED} CACHE BOOL "Embed 'asmjit' library (no targets)") set(ASMJIT_STATIC ${ASMJIT_STATIC} CACHE BOOL "Build 'asmjit' library as static") set(ASMJIT_SANITIZE ${ASMJIT_SANITIZE} CACHE STRING "Build with sanitizers: 'address', 'undefined', etc...") @@ -133,11 +124,7 @@ function(asmjit_add_target target target_type) set(multi_val SOURCES LIBRARIES CFLAGS CFLAGS_DBG CFLAGS_REL) cmake_parse_arguments("X" "" "${single_val}" "${multi_val}" ${ARGN}) - if ("${target_type}" MATCHES "^(EXECUTABLE|TEST)$") - add_executable(${target} ${X_SOURCES}) - else() - add_library(${target} ${target_type} ${X_SOURCES}) - endif() + add_library(${target} ${target_type} ${X_SOURCES}) target_link_libraries(${target} PRIVATE ${X_LIBRARIES}) @@ -154,10 +141,6 @@ function(asmjit_add_target target target_type) set_property(TARGET ${target} PROPERTY CXX_EXTENSIONS NO) set_property(TARGET ${target} PROPERTY CXX_VISIBILITY_PRESET hidden) target_compile_options(${target} PRIVATE ${X_CFLAGS} ${ASMJIT_SANITIZE_CFLAGS} $<$:${X_CFLAGS_DBG}> $<$>:${X_CFLAGS_REL}>) - - if ("${target_type}" STREQUAL "TEST") - add_test(NAME ${target} COMMAND ${target}) - endif() endfunction() # ============================================================================= @@ -165,7 +148,7 @@ endfunction() # ============================================================================= set(ASMJIT_INCLUDE_DIRS "${ASMJIT_DIR}/src") # Include directory is the same as source dir. -set(ASMJIT_DEPS "") # AsmJit dependencies (libraries) for the linker. +set(ASMJIT_DEPS "arkbase") # AsmJit dependencies (libraries) for the linker. set(ASMJIT_LIBS "") # Dependencies of libs/apps that want to use AsmJit. set(ASMJIT_CFLAGS "") # Public compiler flags. set(ASMJIT_PRIVATE_CFLAGS "") # Private compiler flags independent of build type. @@ -178,25 +161,11 @@ set(ASMJIT_SANITIZE_LFLAGS "") # Linker flags required by curr set(ASMJIT_INCLUDE_DIR "${ASMJIT_INCLUDE_DIRS}") if (NOT ASMJIT_NO_CUSTOM_FLAGS) - if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC") - list(APPEND ASMJIT_PRIVATE_CFLAGS - -MP # [+] Multi-Process Compilation. - -GF # [+] Eliminate duplicate strings. - -Zc:inline # [+] Remove unreferenced COMDAT. - -Zc:strictStrings # [+] Strict const qualification of string literals. - -Zc:threadSafeInit- # [-] Thread-safe statics. - -W4) # [+] Warning level 4. - - list(APPEND ASMJIT_PRIVATE_CFLAGS_DBG - -GS) # [+] Buffer security-check. - - list(APPEND ASMJIT_PRIVATE_CFLAGS_REL - -GS- # [-] Buffer security-check. - -O2 # [+] Favor speed over size. - -Oi) # [+] Generate intrinsic functions. - elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "^(GNU|Clang|AppleClang)$") - list(APPEND ASMJIT_PRIVATE_CFLAGS -Wall -Wextra -Wconversion) + if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "^(GNU|Clang|AppleClang)$") + # disabled because of arkbase allocators integration + #list(APPEND ASMJIT_PRIVATE_CFLAGS -Wall -Wextra -Wconversion) list(APPEND ASMJIT_PRIVATE_CFLAGS -fno-math-errno) + list(APPEND ASMJIT_PRIVATE_CFLAGS -Wno-shadow) list(APPEND ASMJIT_PRIVATE_CFLAGS_REL -O2) asmjit_detect_cflags(ASMJIT_PRIVATE_CFLAGS @@ -220,20 +189,14 @@ if (ASMJIT_SANITIZE) set(ASMJIT_SANITIZE_LFLAGS ${ASMJIT_SANITIZE_CFLAGS}) # Don't omit frame pointer if sanitizers are enabled. - if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC") - list(APPEND ASMJIT_SANITIZE_CFLAGS -Oy-) - else() - list(APPEND ASMJIT_SANITIZE_CFLAGS -fno-omit-frame-pointer -g) - endif() + list(APPEND ASMJIT_SANITIZE_CFLAGS -fno-omit-frame-pointer -g) list(APPEND ASMJIT_PRIVATE_CFLAGS ${ASMJIT_SANITIZE_CFLAGS}) list(APPEND ASMJIT_PRIVATE_LFLAGS ${ASMJIT_SANITIZE_LFLAGS}) endif() endif() -if (NOT WIN32) - list(APPEND ASMJIT_DEPS pthread) -endif() +list(APPEND ASMJIT_DEPS pthread) if ("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") list(APPEND ASMJIT_DEPS rt) @@ -274,12 +237,6 @@ endforeach() # [AsmJit - Linker Support] # ============================================================================= -if (WIN32) - if(CMAKE_LINKER MATCHES "link\\.exe" OR CMAKE_LINKER MATCHES "lld-link\\.exe") - set(ASMJIT_LINKER_SUPPORTS_NATVIS TRUE) - endif() -endif() - # ============================================================================= # [AsmJit - Source] # ============================================================================= @@ -400,20 +357,10 @@ set(ASMJIT_SRC_LIST asmjit/x86/x86rapass_p.h ) -if (MSVC AND NOT ASMJIT_NO_NATVIS) - list(APPEND ASMJIT_SRC_LIST asmjit.natvis) -endif() - set(ASMJIT_SRC "") foreach(src_file ${ASMJIT_SRC_LIST}) set(src_file "${ASMJIT_DIR}/src/${src_file}") list(APPEND ASMJIT_SRC ${src_file}) - - if ("${src_file}" MATCHES "\\.natvis") - if (ASMJIT_LINKER_SUPPORTS_NATVIS) - list(APPEND ASMJIT_PRIVATE_LFLAGS "-natvis:${src_file}") - endif() - endif() endforeach() if (NOT ${CMAKE_VERSION} VERSION_LESS "3.8.0") @@ -424,16 +371,18 @@ endif() # [AsmJit - Summary] # ============================================================================= -message("** AsmJit Summary **") -message(" ASMJIT_DIR=${ASMJIT_DIR}") -message(" ASMJIT_TEST=${ASMJIT_TEST}") -message(" ASMJIT_TARGET_TYPE=${ASMJIT_TARGET_TYPE}") -message(" ASMJIT_DEPS=${ASMJIT_DEPS}") -message(" ASMJIT_LIBS=${ASMJIT_LIBS}") -message(" ASMJIT_CFLAGS=${ASMJIT_CFLAGS}") -message(" ASMJIT_PRIVATE_CFLAGS=${ASMJIT_PRIVATE_CFLAGS}") -message(" ASMJIT_PRIVATE_CFLAGS_DBG=${ASMJIT_PRIVATE_CFLAGS_DBG}") -message(" ASMJIT_PRIVATE_CFLAGS_REL=${ASMJIT_PRIVATE_CFLAGS_REL}") +set(ASMJIT_SUMMARY FALSE) +if (ASMJIT_SUMMARY) + message("** AsmJit Summary **") + message(" ASMJIT_DIR=${ASMJIT_DIR}") + message(" ASMJIT_TARGET_TYPE=${ASMJIT_TARGET_TYPE}") + message(" ASMJIT_DEPS=${ASMJIT_DEPS}") + message(" ASMJIT_LIBS=${ASMJIT_LIBS}") + message(" ASMJIT_CFLAGS=${ASMJIT_CFLAGS}") + message(" ASMJIT_PRIVATE_CFLAGS=${ASMJIT_PRIVATE_CFLAGS}") + message(" ASMJIT_PRIVATE_CFLAGS_DBG=${ASMJIT_PRIVATE_CFLAGS_DBG}") + message(" ASMJIT_PRIVATE_CFLAGS_REL=${ASMJIT_PRIVATE_CFLAGS_REL}") +endif() # ============================================================================= # [AsmJit - Targets] @@ -449,6 +398,7 @@ if (NOT ASMJIT_EMBED) CFLAGS_REL ${ASMJIT_PRIVATE_CFLAGS_REL}) target_include_directories(asmjit BEFORE INTERFACE ${ASMJIT_INCLUDE_DIRS}) target_compile_options(asmjit INTERFACE ${ASMJIT_CFLAGS}) + set_target_properties(asmjit PROPERTIES POSITION_INDEPENDENT_CODE ON) add_library(AsmJit::AsmJit ALIAS asmjit) # Add AsmJit install instructions (library and public headers). @@ -463,70 +413,6 @@ if (NOT ASMJIT_EMBED) endif() endforeach() endif() - - # Add AsmJit tests. - if (ASMJIT_TEST) - enable_testing() - - # Special target that always uses embedded AsmJit. - asmjit_add_target(asmjit_test_unit TEST - SOURCES ${ASMJIT_SRC} - test/asmjit_test_unit.cpp - test/broken.cpp - test/broken.h - LIBRARIES ${ASMJIT_DEPS} - CFLAGS ${ASMJIT_PRIVATE_CFLAGS} - -DASMJIT_TEST - -DASMJIT_STATIC - CFLAGS_DBG ${ASMJIT_PRIVATE_CFLAGS_DBG} - CFLAGS_REL ${ASMJIT_PRIVATE_CFLAGS_REL}) - target_include_directories(asmjit_test_unit BEFORE PRIVATE ${ASMJIT_INCLUDE_DIRS}) - - foreach(_target asmjit_test_opcode - asmjit_test_x86_asm - asmjit_test_x86_sections) - asmjit_add_target(${_target} TEST - SOURCES test/${_target}.cpp - LIBRARIES AsmJit::AsmJit - CFLAGS ${ASMJIT_PRIVATE_CFLAGS} - CFLAGS_DBG ${ASMJIT_PRIVATE_CFLAGS_DBG} - CFLAGS_REL ${ASMJIT_PRIVATE_CFLAGS_REL}) - endforeach() - - if (NOT ASMJIT_NO_INTROSPECTION) - asmjit_add_target(asmjit_test_x86_instinfo TEST - SOURCES test/asmjit_test_x86_instinfo.cpp - LIBRARIES AsmJit::AsmJit - CFLAGS ${ASMJIT_PRIVATE_CFLAGS} - CFLAGS_DBG ${ASMJIT_PRIVATE_CFLAGS_DBG} - CFLAGS_REL ${ASMJIT_PRIVATE_CFLAGS_REL}) - endif() - - if (NOT (ASMJIT_NO_BUILDER OR ASMJIT_NO_COMPILER)) - # Vectorcall tests and XMM tests require at least SSE2 (required in 32-bit mode). - set(sse2_flags "") - if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC") - asmjit_detect_cflags(sse2_flags "-arch:SSE2") - else() - asmjit_detect_cflags(sse2_flags "-msse2") - endif() - asmjit_add_target(asmjit_test_x86_cc TEST - SOURCES test/asmjit_test_x86_cc.cpp - LIBRARIES AsmJit::AsmJit - CFLAGS ${ASMJIT_PRIVATE_CFLAGS} ${sse2_flags} - CFLAGS_DBG ${ASMJIT_PRIVATE_CFLAGS_DBG} - CFLAGS_REL ${ASMJIT_PRIVATE_CFLAGS_REL}) - endif() - - foreach(_target asmjit_bench_x86) - asmjit_add_target(${_target} EXECUTABLE - SOURCES test/${_target}.cpp - LIBRARIES AsmJit::AsmJit - CFLAGS ${ASMJIT_PRIVATE_CFLAGS} - CFLAGS_DBG ${ASMJIT_PRIVATE_CFLAGS_DBG} - CFLAGS_REL ${ASMJIT_PRIVATE_CFLAGS_REL}) - endforeach() - endif() endif() cmake_policy(POP) -- 2.17.1