• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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