1From 2ec544048ccc14a7aefa5372ee7286cff31e1b5f Mon Sep 17 00:00:00 2001 2From: Aleksei Sidorov <> 3Date: Wed, 1 Jun 2022 23:57:24 +0300 4Subject: [PATCH] Add build configs 5 6--- 7 BUILD.gn | 170 +++++++++++++++++++++++++++++++++++++++++++++++++ 8 CMakeLists.txt | 156 ++++++--------------------------------------- 9 2 files changed, 191 insertions(+), 135 deletions(-) 10 create mode 100644 BUILD.gn 11 12diff --git a/BUILD.gn b/BUILD.gn 13new file mode 100644 14index 0000000..81bbdab 15--- /dev/null 16+++ b/BUILD.gn 17@@ -0,0 +1,170 @@ 18+# Copyright (c) 2021-2022 Huawei Device Co., Ltd. 19+# Licensed under the Apache License, Version 2.0 (the "License"); 20+# you may not use this file except in compliance with the License. 21+# You may obtain a copy of the License at 22+# 23+# http://www.apache.org/licenses/LICENSE-2.0 24+# 25+# Unless required by applicable law or agreed to in writing, software 26+# distributed under the License is distributed on an "AS IS" BASIS, 27+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 28+# See the License for the specific language governing permissions and 29+# limitations under the License. 30+ 31+import("//ark/runtime_core/ark_config.gni") 32+import("//build/config/ohos/rules.gni") 33+import("//build/ohos.gni") 34+ 35+config("asmjit_public_config") { 36+ include_dirs = [ 37+ "$ark_third_party_root/asmjit/src", 38+ ] 39+ if (ark_standalone_build) { 40+ ldflags = [ "-lrt" ] 41+ } 42+} 43+ 44+config("asmjit_config") { 45+ cflags_cc = [ 46+ "-Wno-bitwise-instead-of-logical", 47+ "-Wno-unused-but-set-variable", 48+ "-Wno-deprecated-copy" 49+ ] 50+} 51+ 52+asmjit_sources = [ 53+ "src/asmjit/asmjit.h", 54+ 55+ "src/asmjit/core.h", 56+ "src/asmjit/core/api-build_p.h", 57+ "src/asmjit/core/api-config.h", 58+ "src/asmjit/core/arch.cpp", 59+ "src/asmjit/core/arch.h", 60+ "src/asmjit/core/assembler.cpp", 61+ "src/asmjit/core/assembler.h", 62+ "src/asmjit/core/builder.cpp", 63+ "src/asmjit/core/builder.h", 64+ "src/asmjit/core/callconv.cpp", 65+ "src/asmjit/core/callconv.h", 66+ "src/asmjit/core/codebuffer.h", 67+ "src/asmjit/core/codebufferwriter_p.h", 68+ "src/asmjit/core/codeholder.cpp", 69+ "src/asmjit/core/codeholder.h", 70+ "src/asmjit/core/compiler.cpp", 71+ "src/asmjit/core/compiler.h", 72+ "src/asmjit/core/constpool.cpp", 73+ "src/asmjit/core/constpool.h", 74+ "src/asmjit/core/cpuinfo.cpp", 75+ "src/asmjit/core/cpuinfo.h", 76+ "src/asmjit/core/datatypes.h", 77+ "src/asmjit/core/emitter.cpp", 78+ "src/asmjit/core/emitter.h", 79+ "src/asmjit/core/emitterutils.cpp", 80+ "src/asmjit/core/emitterutils_p.h", 81+ "src/asmjit/core/environment.cpp", 82+ "src/asmjit/core/environment.h", 83+ "src/asmjit/core/errorhandler.cpp", 84+ "src/asmjit/core/errorhandler.h", 85+ "src/asmjit/core/features.h", 86+ "src/asmjit/core/formatter.cpp", 87+ "src/asmjit/core/formatter.h", 88+ "src/asmjit/core/func.cpp", 89+ "src/asmjit/core/func.h", 90+ "src/asmjit/core/globals.cpp", 91+ "src/asmjit/core/globals.h", 92+ "src/asmjit/core/inst.cpp", 93+ "src/asmjit/core/inst.h", 94+ "src/asmjit/core/jitallocator.cpp", 95+ "src/asmjit/core/jitallocator.h", 96+ "src/asmjit/core/jitruntime.cpp", 97+ "src/asmjit/core/jitruntime.h", 98+ "src/asmjit/core/logger.cpp", 99+ "src/asmjit/core/logger.h", 100+ "src/asmjit/core/misc_p.h", 101+ "src/asmjit/core/operand.cpp", 102+ "src/asmjit/core/operand.h", 103+ "src/asmjit/core/osutils.cpp", 104+ "src/asmjit/core/osutils.h", 105+ "src/asmjit/core/raassignment_p.h", 106+ "src/asmjit/core/rabuilders_p.h", 107+ "src/asmjit/core/radefs_p.h", 108+ "src/asmjit/core/ralocal.cpp", 109+ "src/asmjit/core/ralocal_p.h", 110+ "src/asmjit/core/rapass.cpp", 111+ "src/asmjit/core/rapass_p.h", 112+ "src/asmjit/core/rastack.cpp", 113+ "src/asmjit/core/rastack_p.h", 114+ "src/asmjit/core/string.cpp", 115+ "src/asmjit/core/string.h", 116+ "src/asmjit/core/support.cpp", 117+ "src/asmjit/core/support.h", 118+ "src/asmjit/core/target.cpp", 119+ "src/asmjit/core/target.h", 120+ "src/asmjit/core/type.cpp", 121+ "src/asmjit/core/type.h", 122+ "src/asmjit/core/virtmem.cpp", 123+ "src/asmjit/core/virtmem.h", 124+ "src/asmjit/core/zone.cpp", 125+ "src/asmjit/core/zone.h", 126+ "src/asmjit/core/zonehash.cpp", 127+ "src/asmjit/core/zonehash.h", 128+ "src/asmjit/core/zonelist.cpp", 129+ "src/asmjit/core/zonelist.h", 130+ "src/asmjit/core/zonestack.cpp", 131+ "src/asmjit/core/zonestack.h", 132+ "src/asmjit/core/zonestring.h", 133+ "src/asmjit/core/zonetree.cpp", 134+ "src/asmjit/core/zonetree.h", 135+ "src/asmjit/core/zonevector.cpp", 136+ "src/asmjit/core/zonevector.h", 137+ 138+ "src/asmjit/x86.h", 139+ "src/asmjit/x86/x86archdata.cpp", 140+ "src/asmjit/x86/x86archdata_p.h", 141+ "src/asmjit/x86/x86assembler.cpp", 142+ "src/asmjit/x86/x86assembler.h", 143+ "src/asmjit/x86/x86builder.cpp", 144+ "src/asmjit/x86/x86builder.h", 145+ "src/asmjit/x86/x86callconv.cpp", 146+ "src/asmjit/x86/x86callconv_p.h", 147+ "src/asmjit/x86/x86compiler.cpp", 148+ "src/asmjit/x86/x86compiler.h", 149+ "src/asmjit/x86/x86emitter.h", 150+ "src/asmjit/x86/x86features.cpp", 151+ "src/asmjit/x86/x86features.h", 152+ "src/asmjit/x86/x86formatter.cpp", 153+ "src/asmjit/x86/x86formatter_p.h", 154+ "src/asmjit/x86/x86globals.h", 155+ "src/asmjit/x86/x86internal.cpp", 156+ "src/asmjit/x86/x86internal_p.h", 157+ "src/asmjit/x86/x86instdb.cpp", 158+ "src/asmjit/x86/x86instdb.h", 159+ "src/asmjit/x86/x86instdb_p.h", 160+ "src/asmjit/x86/x86instapi.cpp", 161+ "src/asmjit/x86/x86instapi_p.h", 162+ "src/asmjit/x86/x86operand.cpp", 163+ "src/asmjit/x86/x86operand.h", 164+ "src/asmjit/x86/x86rapass.cpp", 165+ "src/asmjit/x86/x86rapass_p.h", 166+] 167+ 168+asmjit_configs = [ 169+ ":asmjit_public_config", 170+ "$ark_root:ark_config", 171+ "$ark_root/libpandabase:arkbase_public_config", 172+ ":asmjit_config", 173+] 174+ 175+ohos_static_library("libasmjit") { 176+ sources = asmjit_sources 177+ configs = asmjit_configs 178+ deps = [ "$ark_root/libpandabase:libarkbase" ] 179+ subsystem_name = "ark" 180+} 181+ 182+ohos_static_library("libasmjit_frontend_static") { 183+ sources = asmjit_sources 184+ configs = asmjit_configs 185+ deps = [ "$ark_root/libpandabase:libarkbase_frontend_static" ] 186+ subsystem_name = "ark" 187+} 188diff --git a/CMakeLists.txt b/CMakeLists.txt 189index e033c3f..37a1593 100644 190--- a/CMakeLists.txt 191+++ b/CMakeLists.txt 192@@ -52,21 +52,12 @@ if (NOT DEFINED ASMJIT_BUILD_X86) 193 set(ASMJIT_BUILD_X86 FALSE) 194 endif() 195 196-if (NOT DEFINED ASMJIT_TEST) 197- set(ASMJIT_TEST FALSE) 198-endif() 199- 200-if (NOT DEFINED ASMJIT_NO_NATVIS) 201- set(ASMJIT_NO_NATVIS FALSE) 202-endif() 203- 204 # EMBED implies STATIC. 205 if (ASMJIT_EMBED AND NOT ASMJIT_STATIC) 206 set(ASMJIT_STATIC TRUE) 207 endif() 208 209 set(ASMJIT_DIR "${CMAKE_CURRENT_LIST_DIR}" CACHE PATH "Location of 'asmjit'") 210-set(ASMJIT_TEST ${ASMJIT_TEST} CACHE BOOL "Build 'asmjit' test applications") 211 set(ASMJIT_EMBED ${ASMJIT_EMBED} CACHE BOOL "Embed 'asmjit' library (no targets)") 212 set(ASMJIT_STATIC ${ASMJIT_STATIC} CACHE BOOL "Build 'asmjit' library as static") 213 set(ASMJIT_SANITIZE ${ASMJIT_SANITIZE} CACHE STRING "Build with sanitizers: 'address', 'undefined', etc...") 214@@ -133,11 +124,7 @@ function(asmjit_add_target target target_type) 215 set(multi_val SOURCES LIBRARIES CFLAGS CFLAGS_DBG CFLAGS_REL) 216 cmake_parse_arguments("X" "" "${single_val}" "${multi_val}" ${ARGN}) 217 218- if ("${target_type}" MATCHES "^(EXECUTABLE|TEST)$") 219- add_executable(${target} ${X_SOURCES}) 220- else() 221- add_library(${target} ${target_type} ${X_SOURCES}) 222- endif() 223+ add_library(${target} ${target_type} ${X_SOURCES}) 224 225 target_link_libraries(${target} PRIVATE ${X_LIBRARIES}) 226 227@@ -154,10 +141,6 @@ function(asmjit_add_target target target_type) 228 set_property(TARGET ${target} PROPERTY CXX_EXTENSIONS NO) 229 set_property(TARGET ${target} PROPERTY CXX_VISIBILITY_PRESET hidden) 230 target_compile_options(${target} PRIVATE ${X_CFLAGS} ${ASMJIT_SANITIZE_CFLAGS} $<$<CONFIG:Debug>:${X_CFLAGS_DBG}> $<$<NOT:$<CONFIG:Debug>>:${X_CFLAGS_REL}>) 231- 232- if ("${target_type}" STREQUAL "TEST") 233- add_test(NAME ${target} COMMAND ${target}) 234- endif() 235 endfunction() 236 237 # ============================================================================= 238@@ -165,7 +148,7 @@ endfunction() 239 # ============================================================================= 240 241 set(ASMJIT_INCLUDE_DIRS "${ASMJIT_DIR}/src") # Include directory is the same as source dir. 242-set(ASMJIT_DEPS "") # AsmJit dependencies (libraries) for the linker. 243+set(ASMJIT_DEPS "arkbase") # AsmJit dependencies (libraries) for the linker. 244 set(ASMJIT_LIBS "") # Dependencies of libs/apps that want to use AsmJit. 245 set(ASMJIT_CFLAGS "") # Public compiler flags. 246 set(ASMJIT_PRIVATE_CFLAGS "") # Private compiler flags independent of build type. 247@@ -178,25 +161,11 @@ set(ASMJIT_SANITIZE_LFLAGS "") # Linker flags required by curr 248 set(ASMJIT_INCLUDE_DIR "${ASMJIT_INCLUDE_DIRS}") 249 250 if (NOT ASMJIT_NO_CUSTOM_FLAGS) 251- if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC") 252- list(APPEND ASMJIT_PRIVATE_CFLAGS 253- -MP # [+] Multi-Process Compilation. 254- -GF # [+] Eliminate duplicate strings. 255- -Zc:inline # [+] Remove unreferenced COMDAT. 256- -Zc:strictStrings # [+] Strict const qualification of string literals. 257- -Zc:threadSafeInit- # [-] Thread-safe statics. 258- -W4) # [+] Warning level 4. 259- 260- list(APPEND ASMJIT_PRIVATE_CFLAGS_DBG 261- -GS) # [+] Buffer security-check. 262- 263- list(APPEND ASMJIT_PRIVATE_CFLAGS_REL 264- -GS- # [-] Buffer security-check. 265- -O2 # [+] Favor speed over size. 266- -Oi) # [+] Generate intrinsic functions. 267- elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "^(GNU|Clang|AppleClang)$") 268- list(APPEND ASMJIT_PRIVATE_CFLAGS -Wall -Wextra -Wconversion) 269+ if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "^(GNU|Clang|AppleClang)$") 270+ # disabled because of arkbase allocators integration 271+ #list(APPEND ASMJIT_PRIVATE_CFLAGS -Wall -Wextra -Wconversion) 272 list(APPEND ASMJIT_PRIVATE_CFLAGS -fno-math-errno) 273+ list(APPEND ASMJIT_PRIVATE_CFLAGS -Wno-shadow) 274 list(APPEND ASMJIT_PRIVATE_CFLAGS_REL -O2) 275 276 asmjit_detect_cflags(ASMJIT_PRIVATE_CFLAGS 277@@ -220,20 +189,14 @@ if (ASMJIT_SANITIZE) 278 set(ASMJIT_SANITIZE_LFLAGS ${ASMJIT_SANITIZE_CFLAGS}) 279 280 # Don't omit frame pointer if sanitizers are enabled. 281- if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC") 282- list(APPEND ASMJIT_SANITIZE_CFLAGS -Oy-) 283- else() 284- list(APPEND ASMJIT_SANITIZE_CFLAGS -fno-omit-frame-pointer -g) 285- endif() 286+ list(APPEND ASMJIT_SANITIZE_CFLAGS -fno-omit-frame-pointer -g) 287 288 list(APPEND ASMJIT_PRIVATE_CFLAGS ${ASMJIT_SANITIZE_CFLAGS}) 289 list(APPEND ASMJIT_PRIVATE_LFLAGS ${ASMJIT_SANITIZE_LFLAGS}) 290 endif() 291 endif() 292 293-if (NOT WIN32) 294- list(APPEND ASMJIT_DEPS pthread) 295-endif() 296+list(APPEND ASMJIT_DEPS pthread) 297 298 if ("${CMAKE_SYSTEM_NAME}" MATCHES "Linux") 299 list(APPEND ASMJIT_DEPS rt) 300@@ -274,12 +237,6 @@ endforeach() 301 # [AsmJit - Linker Support] 302 # ============================================================================= 303 304-if (WIN32) 305- if(CMAKE_LINKER MATCHES "link\\.exe" OR CMAKE_LINKER MATCHES "lld-link\\.exe") 306- set(ASMJIT_LINKER_SUPPORTS_NATVIS TRUE) 307- endif() 308-endif() 309- 310 # ============================================================================= 311 # [AsmJit - Source] 312 # ============================================================================= 313@@ -400,20 +357,10 @@ set(ASMJIT_SRC_LIST 314 asmjit/x86/x86rapass_p.h 315 ) 316 317-if (MSVC AND NOT ASMJIT_NO_NATVIS) 318- list(APPEND ASMJIT_SRC_LIST asmjit.natvis) 319-endif() 320- 321 set(ASMJIT_SRC "") 322 foreach(src_file ${ASMJIT_SRC_LIST}) 323 set(src_file "${ASMJIT_DIR}/src/${src_file}") 324 list(APPEND ASMJIT_SRC ${src_file}) 325- 326- if ("${src_file}" MATCHES "\\.natvis") 327- if (ASMJIT_LINKER_SUPPORTS_NATVIS) 328- list(APPEND ASMJIT_PRIVATE_LFLAGS "-natvis:${src_file}") 329- endif() 330- endif() 331 endforeach() 332 333 if (NOT ${CMAKE_VERSION} VERSION_LESS "3.8.0") 334@@ -424,16 +371,18 @@ endif() 335 # [AsmJit - Summary] 336 # ============================================================================= 337 338-message("** AsmJit Summary **") 339-message(" ASMJIT_DIR=${ASMJIT_DIR}") 340-message(" ASMJIT_TEST=${ASMJIT_TEST}") 341-message(" ASMJIT_TARGET_TYPE=${ASMJIT_TARGET_TYPE}") 342-message(" ASMJIT_DEPS=${ASMJIT_DEPS}") 343-message(" ASMJIT_LIBS=${ASMJIT_LIBS}") 344-message(" ASMJIT_CFLAGS=${ASMJIT_CFLAGS}") 345-message(" ASMJIT_PRIVATE_CFLAGS=${ASMJIT_PRIVATE_CFLAGS}") 346-message(" ASMJIT_PRIVATE_CFLAGS_DBG=${ASMJIT_PRIVATE_CFLAGS_DBG}") 347-message(" ASMJIT_PRIVATE_CFLAGS_REL=${ASMJIT_PRIVATE_CFLAGS_REL}") 348+set(ASMJIT_SUMMARY FALSE) 349+if (ASMJIT_SUMMARY) 350+ message("** AsmJit Summary **") 351+ message(" ASMJIT_DIR=${ASMJIT_DIR}") 352+ message(" ASMJIT_TARGET_TYPE=${ASMJIT_TARGET_TYPE}") 353+ message(" ASMJIT_DEPS=${ASMJIT_DEPS}") 354+ message(" ASMJIT_LIBS=${ASMJIT_LIBS}") 355+ message(" ASMJIT_CFLAGS=${ASMJIT_CFLAGS}") 356+ message(" ASMJIT_PRIVATE_CFLAGS=${ASMJIT_PRIVATE_CFLAGS}") 357+ message(" ASMJIT_PRIVATE_CFLAGS_DBG=${ASMJIT_PRIVATE_CFLAGS_DBG}") 358+ message(" ASMJIT_PRIVATE_CFLAGS_REL=${ASMJIT_PRIVATE_CFLAGS_REL}") 359+endif() 360 361 # ============================================================================= 362 # [AsmJit - Targets] 363@@ -449,6 +398,7 @@ if (NOT ASMJIT_EMBED) 364 CFLAGS_REL ${ASMJIT_PRIVATE_CFLAGS_REL}) 365 target_include_directories(asmjit BEFORE INTERFACE ${ASMJIT_INCLUDE_DIRS}) 366 target_compile_options(asmjit INTERFACE ${ASMJIT_CFLAGS}) 367+ set_target_properties(asmjit PROPERTIES POSITION_INDEPENDENT_CODE ON) 368 add_library(AsmJit::AsmJit ALIAS asmjit) 369 370 # Add AsmJit install instructions (library and public headers). 371@@ -463,70 +413,6 @@ if (NOT ASMJIT_EMBED) 372 endif() 373 endforeach() 374 endif() 375- 376- # Add AsmJit tests. 377- if (ASMJIT_TEST) 378- enable_testing() 379- 380- # Special target that always uses embedded AsmJit. 381- asmjit_add_target(asmjit_test_unit TEST 382- SOURCES ${ASMJIT_SRC} 383- test/asmjit_test_unit.cpp 384- test/broken.cpp 385- test/broken.h 386- LIBRARIES ${ASMJIT_DEPS} 387- CFLAGS ${ASMJIT_PRIVATE_CFLAGS} 388- -DASMJIT_TEST 389- -DASMJIT_STATIC 390- CFLAGS_DBG ${ASMJIT_PRIVATE_CFLAGS_DBG} 391- CFLAGS_REL ${ASMJIT_PRIVATE_CFLAGS_REL}) 392- target_include_directories(asmjit_test_unit BEFORE PRIVATE ${ASMJIT_INCLUDE_DIRS}) 393- 394- foreach(_target asmjit_test_opcode 395- asmjit_test_x86_asm 396- asmjit_test_x86_sections) 397- asmjit_add_target(${_target} TEST 398- SOURCES test/${_target}.cpp 399- LIBRARIES AsmJit::AsmJit 400- CFLAGS ${ASMJIT_PRIVATE_CFLAGS} 401- CFLAGS_DBG ${ASMJIT_PRIVATE_CFLAGS_DBG} 402- CFLAGS_REL ${ASMJIT_PRIVATE_CFLAGS_REL}) 403- endforeach() 404- 405- if (NOT ASMJIT_NO_INTROSPECTION) 406- asmjit_add_target(asmjit_test_x86_instinfo TEST 407- SOURCES test/asmjit_test_x86_instinfo.cpp 408- LIBRARIES AsmJit::AsmJit 409- CFLAGS ${ASMJIT_PRIVATE_CFLAGS} 410- CFLAGS_DBG ${ASMJIT_PRIVATE_CFLAGS_DBG} 411- CFLAGS_REL ${ASMJIT_PRIVATE_CFLAGS_REL}) 412- endif() 413- 414- if (NOT (ASMJIT_NO_BUILDER OR ASMJIT_NO_COMPILER)) 415- # Vectorcall tests and XMM tests require at least SSE2 (required in 32-bit mode). 416- set(sse2_flags "") 417- if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC" OR "x${CMAKE_CXX_SIMULATE_ID}" STREQUAL "xMSVC") 418- asmjit_detect_cflags(sse2_flags "-arch:SSE2") 419- else() 420- asmjit_detect_cflags(sse2_flags "-msse2") 421- endif() 422- asmjit_add_target(asmjit_test_x86_cc TEST 423- SOURCES test/asmjit_test_x86_cc.cpp 424- LIBRARIES AsmJit::AsmJit 425- CFLAGS ${ASMJIT_PRIVATE_CFLAGS} ${sse2_flags} 426- CFLAGS_DBG ${ASMJIT_PRIVATE_CFLAGS_DBG} 427- CFLAGS_REL ${ASMJIT_PRIVATE_CFLAGS_REL}) 428- endif() 429- 430- foreach(_target asmjit_bench_x86) 431- asmjit_add_target(${_target} EXECUTABLE 432- SOURCES test/${_target}.cpp 433- LIBRARIES AsmJit::AsmJit 434- CFLAGS ${ASMJIT_PRIVATE_CFLAGS} 435- CFLAGS_DBG ${ASMJIT_PRIVATE_CFLAGS_DBG} 436- CFLAGS_REL ${ASMJIT_PRIVATE_CFLAGS_REL}) 437- endforeach() 438- endif() 439 endif() 440 441 cmake_policy(POP) 442-- 4432.17.1 444 445