Tarantool development patches archive
 help / color / mirror / Atom feed
From: Maksim Kokryashkin via Tarantool-patches <tarantool-patches@dev.tarantool.org>
To: tarantool-patches@dev.tarantool.org, sergos@tarantool.org,
	skaplun@tarantool.org
Cc: Maksim Kokryashkin <max.kokryashkin@gmail.com>
Subject: [Tarantool-patches] [PATCH luajit 2/6] OSX: Fix build by hardcoding external frame unwinding.
Date: Mon, 26 Sep 2022 18:54:59 +0300	[thread overview]
Message-ID: <623a3c7c7aa9e8c5a2fdb68384c278825016f72e.1664207262.git.max.kokryashkin@gmail.com> (raw)
In-Reply-To: <cover.1664207262.git.max.kokryashkin@gmail.com>

Apparently they can't even get 'grep' right, let alone a keyboard.

(cherry picked from commit d4a554d6ee1507f7313641b26ed09bf1b518fa1f)

MacOS uses BSD grep, which is slightly different from GNU grep.
Because of that, the shell script determining whether external
unwinding is possible doesn't work right.

External unwinding is possible on MacOS, so this patch enables
it by default.

Maxim Kokryashkin:
* added the description for the problem

Needed for tarantool/tarantool#6096
Needed for tarantool/tarantool#7230
---
 .github/workflows/macos-x86_64.yml | 20 +-------------------
 cmake/SetTargetFlags.cmake         | 28 ++++++++++++++++------------
 src/Makefile.original              | 15 ++++++++-------
 3 files changed, 25 insertions(+), 38 deletions(-)

diff --git a/.github/workflows/macos-x86_64.yml b/.github/workflows/macos-x86_64.yml
index 840806e3..dafd1796 100644
--- a/.github/workflows/macos-x86_64.yml
+++ b/.github/workflows/macos-x86_64.yml
@@ -35,7 +35,7 @@ jobs:
       fail-fast: false
       matrix:
         BUILDTYPE: [Debug, Release]
-        GC64: [ON, OFF]
+        GC64: ON
         include:
           - BUILDTYPE: Debug
             CMAKEFLAGS: -DCMAKE_BUILD_TYPE=Debug -DLUA_USE_ASSERT=ON -DLUA_USE_APICHECK=ON
@@ -69,15 +69,6 @@ jobs:
       - name: test
         run: cmake --build . --parallel --target test
 
-  test-tarantool-debug-wo-GC64:
-    name: Tarantool Debug GC64:OFF
-    needs: test-luajit
-    uses: tarantool/tarantool/.github/workflows/luajit-integration.yml@master
-    with:
-      GC64: OFF
-      buildtype: Debug
-      host: macos-11
-      revision: ${{ github.sha }}
   test-tarantool-debug-w-GC64:
     name: Tarantool Debug GC64:ON
     needs: test-luajit
@@ -87,15 +78,6 @@ jobs:
       buildtype: Debug
       host: macos-11
       revision: ${{ github.sha }}
-  test-tarantool-release-wo-GC64:
-    name: Tarantool Release GC64:OFF
-    needs: test-luajit
-    uses: tarantool/tarantool/.github/workflows/luajit-integration.yml@master
-    with:
-      GC64: OFF
-      buildtype: RelWithDebInfo
-      host: macos-11
-      revision: ${{ github.sha }}
   test-tarantool-release-w-GC64:
     name: Tarantool Release GC64:ON
     needs: test-luajit
diff --git a/cmake/SetTargetFlags.cmake b/cmake/SetTargetFlags.cmake
index 36896aff..a5a3407f 100644
--- a/cmake/SetTargetFlags.cmake
+++ b/cmake/SetTargetFlags.cmake
@@ -15,18 +15,22 @@ endif()
 LuaJITTestArch(TESTARCH "${TARGET_C_FLAGS}")
 LuaJITArch(LUAJIT_ARCH "${TESTARCH}")
 
-string(FIND ${TARGET_C_FLAGS} "LJ_NO_UNWIND 1" UNWIND_POS)
-if(UNWIND_POS EQUAL -1)
-  execute_process(
-    COMMAND bash -c "exec 2>/dev/null; echo 'extern void b(void);int a(void){b();return 0;}' | ${CMAKE_C_COMPILER} -c -x c - -o tmpunwind.o && grep -qa -e eh_frame -e __unwind_info tmpunwind.o && echo E; rm -f tmpunwind.o"
-    WORKING_DIRECTORY ${LUAJIT_SOURCE_DIR}
-    OUTPUT_VARIABLE TESTUNWIND
-    RESULT_VARIABLE TESTUNWIND_RC
-  )
-  if(TESTUNWIND_RC EQUAL 0)
-    string(FIND "${TESTUNWIND}" "E" UNW_TEST_POS)
-    if(NOT UNW_TEST_POS EQUAL -1)
-      AppendFlags(TARGET_C_FLAGS -DLUAJIT_UNWIND_EXTERNAL)
+if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+  AppendFlags(TARGET_C_FLAGS -DLUAJIT_UNWIND_EXTERNAL)
+else()
+  string(FIND ${TARGET_C_FLAGS} "LJ_NO_UNWIND 1" UNWIND_POS)
+  if(UNWIND_POS EQUAL -1)
+    execute_process(
+      COMMAND bash -c "exec 2>/dev/null; echo 'extern void b(void);int a(void){b();return 0;}' | ${CMAKE_C_COMPILER} -c -x c - -o tmpunwind.o && grep -qa -e eh_frame -e __unwind_info tmpunwind.o && echo E; rm -f tmpunwind.o"
+      WORKING_DIRECTORY ${LUAJIT_SOURCE_DIR}
+      OUTPUT_VARIABLE TESTUNWIND
+      RESULT_VARIABLE TESTUNWIND_RC
+    )
+    if(TESTUNWIND_RC EQUAL 0)
+      string(FIND "${TESTUNWIND}" "E" UNW_TEST_POS)
+      if(NOT UNW_TEST_POS EQUAL -1)
+        AppendFlags(TARGET_C_FLAGS -DLUAJIT_UNWIND_EXTERNAL)
+      endif()
     endif()
   endif()
 endif()
diff --git a/src/Makefile.original b/src/Makefile.original
index c9609700..d1373b40 100644
--- a/src/Makefile.original
+++ b/src/Makefile.original
@@ -320,18 +320,12 @@ else
 ifeq (,$(shell $(TARGET_CC) -o /dev/null -c -x c /dev/null -fno-stack-protector 2>/dev/null || echo 1))
   TARGET_XCFLAGS+= -fno-stack-protector
 endif
-ifeq (,$(findstring LJ_NO_UNWIND 1,$(TARGET_TESTARCH)))
-  # Find out whether the target toolchain always generates unwind tables.
-  TARGET_TESTUNWIND=$(shell exec 2>/dev/null; echo 'extern void b(void);int a(void){b();return 0;}' | $(TARGET_CC) -c -x c - -o tmpunwind.o && grep -qa -e eh_frame -e __unwind_info tmpunwind.o && echo E; rm -f tmpunwind.o)
-  ifneq (,$(findstring E,$(TARGET_TESTUNWIND)))
-    TARGET_XCFLAGS+= -DLUAJIT_UNWIND_EXTERNAL
-  endif
-endif
 ifeq (Darwin,$(TARGET_SYS))
   ifeq (,$(MACOSX_DEPLOYMENT_TARGET))
     export MACOSX_DEPLOYMENT_TARGET=10.4
   endif
   TARGET_STRIP+= -x
+  TARGET_XCFLAGS+= -DLUAJIT_UNWIND_EXTERNAL
   TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup -fPIC
   TARGET_DYNXLDOPTS=
   TARGET_XSHLDFLAGS+= -install_name $(TARGET_DYLIBPATH) -compatibility_version $(MAJVER).$(MINVER) -current_version $(MAJVER).$(MINVER).$(RELVER)
@@ -345,6 +339,13 @@ ifeq (iOS,$(TARGET_SYS))
     TARGET_XCFLAGS+= -fno-omit-frame-pointer
   endif
 else
+  ifeq (,$(findstring LJ_NO_UNWIND 1,$(TARGET_TESTARCH)))
+    # Find out whether the target toolchain always generates unwind tables.
+    TARGET_TESTUNWIND=$(shell exec 2>/dev/null; echo 'extern void b(void);int a(void){b();return 0;}' | $(TARGET_CC) -c -x c - -o tmpunwind.o && grep -qa -e eh_frame -e __unwind_info tmpunwind.o && echo E; rm -f tmpunwind.o)
+    ifneq (,$(findstring E,$(TARGET_TESTUNWIND)))
+      TARGET_XCFLAGS+= -DLUAJIT_UNWIND_EXTERNAL
+    endif
+  endif
   ifneq (SunOS,$(TARGET_SYS))
     ifneq (PS3,$(TARGET_SYS))
       TARGET_XLDFLAGS+= -Wl,-E
-- 
2.32.1 (Apple Git-133)


  parent reply	other threads:[~2022-09-26 15:56 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-26 15:54 [Tarantool-patches] [PATCH luajit 0/6] Fix external unwinding on M1 Maksim Kokryashkin via Tarantool-patches
2022-09-26 15:54 ` [Tarantool-patches] [PATCH luajit 1/6] Cleanup and enable external unwinding for more platforms Maksim Kokryashkin via Tarantool-patches
2022-09-28  8:20   ` sergos via Tarantool-patches
2022-10-03  7:36   ` Sergey Kaplun via Tarantool-patches
2022-09-26 15:54 ` Maksim Kokryashkin via Tarantool-patches [this message]
2022-10-03 10:54   ` [Tarantool-patches] [PATCH luajit 2/6] OSX: Fix build by hardcoding external frame unwinding Sergey Kaplun via Tarantool-patches
2022-10-03 15:58   ` sergos via Tarantool-patches
2022-09-26 15:55 ` [Tarantool-patches] [PATCH luajit 3/6] OSX/ARM64: Disable external unwinding for now Maksim Kokryashkin via Tarantool-patches
2022-10-03 11:08   ` Sergey Kaplun via Tarantool-patches
2022-10-04  8:26   ` sergos via Tarantool-patches
2022-09-26 15:55 ` [Tarantool-patches] [PATCH luajit 4/6] ARM64: Reorder interpreter stack frame and fix unwinding Maksim Kokryashkin via Tarantool-patches
2022-10-04 15:48   ` sergos via Tarantool-patches
2022-09-26 15:55 ` [Tarantool-patches] [PATCH luajit 5/6] OSX/ARM64: Disable unwind info Maksim Kokryashkin via Tarantool-patches
2022-10-04 15:52   ` sergos via Tarantool-patches
2022-09-26 15:55 ` [Tarantool-patches] [PATCH luajit 6/6] OSX/ARM64: Fix external unwinding Maksim Kokryashkin via Tarantool-patches
2022-10-04 16:05   ` sergos via Tarantool-patches
2022-10-06  9:48 ` [Tarantool-patches] [PATCH luajit v2 0/6] Fix external unwinding on M1 Maksim Kokryashkin via Tarantool-patches
2022-10-06  9:48   ` [Tarantool-patches] [PATCH luajit v2 1/6] Cleanup and enable external unwinding for more platforms Maksim Kokryashkin via Tarantool-patches
2022-10-06  9:48   ` [Tarantool-patches] [PATCH luajit v2 2/6] OSX: Fix build by hardcoding external frame unwinding Maksim Kokryashkin via Tarantool-patches
2022-10-06  9:48   ` [Tarantool-patches] [PATCH luajit v2 3/6] OSX/ARM64: Disable external unwinding for now Maksim Kokryashkin via Tarantool-patches
2022-10-06  9:48   ` [Tarantool-patches] [PATCH luajit v2 4/6] ARM64: Reorder interpreter stack frame and fix unwinding Maksim Kokryashkin via Tarantool-patches
2022-10-06  9:48   ` [Tarantool-patches] [PATCH luajit v2 5/6] OSX/ARM64: Disable unwind info Maksim Kokryashkin via Tarantool-patches
2022-10-06  9:48   ` [Tarantool-patches] [PATCH luajit v2 6/6] OSX/ARM64: Fix external unwinding Maksim Kokryashkin via Tarantool-patches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=623a3c7c7aa9e8c5a2fdb68384c278825016f72e.1664207262.git.max.kokryashkin@gmail.com \
    --to=tarantool-patches@dev.tarantool.org \
    --cc=max.kokryashkin@gmail.com \
    --cc=sergos@tarantool.org \
    --cc=skaplun@tarantool.org \
    --subject='Re: [Tarantool-patches] [PATCH luajit 2/6] OSX: Fix build by hardcoding external frame unwinding.' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox