From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id 6449B6EC58; Thu, 18 Feb 2021 12:57:33 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 6449B6EC58 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1613642253; bh=v7B5htv/kiJRcQuG5/UB+5NenyS8A+7e43K+qJU4HUo=; h=Date:To:References:In-Reply-To:Subject:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=Kd7IZdMwpNc/xpc5n0obPH/HHH8CMaIiqea+ylaNqIiT4uJuEND7WxNzefie83kKi oK5tjtUAtA4HjyvBrBquh3/NSoiTsLFgQWbVcAFZ2sF7Jz73nSpKEUz+pUn09DHOlH 2/i1nOJIL1VBvtb7RS9acm/qzs9muXEzSMrgsW+8= Received: from smtp30.i.mail.ru (smtp30.i.mail.ru [94.100.177.90]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 75C406EC58 for ; Thu, 18 Feb 2021 12:57:32 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 75C406EC58 Received: by smtp30.i.mail.ru with esmtpa (envelope-from ) id 1lCg3r-0008FJ-Qm; Thu, 18 Feb 2021 12:57:28 +0300 Date: Thu, 18 Feb 2021 12:56:43 +0300 To: Igor Munkin Message-ID: <20210218095643.GA6842@root> References: <7cd42be38d86c832ecd4ba0f3edd7ae83aead7ad.1612291495.git.imun@tarantool.org> <20210211192336.GC9361@root> <20210216152830.GL5448@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20210216152830.GL5448@tarantool.org> X-7564579A: B8F34718100C35BD X-77F55803: 4F1203BC0FB41BD975C3EC174F5669228C980786C9DBA186ED94931C77F7596E182A05F538085040A8F2AA7B6EDD42CEBFC6F7D45FAF9A9C19B3561A393FB07BB6A7DCC77B3184FF X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7BA0D57D3459E5640EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F790063715F166F2542EEE4C8638F802B75D45FF5571747095F342E8C7A0BC55FA0FE5FC934C8116CAAED66BD159AD465510ADDC3B65E1F67A46101A389733CBF5DBD5E913377AFFFEAFD269A417C69337E82CC2CC7F00164DA146DAFE8445B8C89999729449624AB7ADAF37F6B57BC7E64490611E7FA7ABCAF51C92A417C69337E82CC2CC7F00164DA146DA6F5DAA56C3B73B23C77107234E2CFBA567F23339F89546C55F5C1EE8F4F765FCB07C9E286C61B7F975ECD9A6C639B01BBD4B6F7A4D31EC0BC0CAF46E325F83A522CA9DD8327EE4930A3850AC1BE2E735262FEC7FBD7D1F5BB5C8C57E37DE458B4C7702A67D5C3316FA3894348FB808DBCF17F1EDFBC1FB573B503F486389A921A5CC5B56E945C8DA X-C1DE0DAB: 0D63561A33F958A589A6E1F641CF30E39A3050DA1CDEAD757E49A04EA7843D57D59269BC5F550898D99A6476B3ADF6B47008B74DF8BB9EF7333BD3B22AA88B938A852937E12ACA75448CF9D3A7B2C848410CA545F18667F91A7EA1CDA0B5A7A0 X-C8649E89: 4E36BF7865823D7055A7F0CF078B5EC49A30900B95165D3429538671E6527D328FD16354CEDE05C9B2E2139B3E08B47B75B011945F97B559C9EB28D0E92579B11D7E09C32AA3244C595678C29006E78826BBB4EE49FF1F513E8609A02908F271FACE5A9C96DEB163 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojspgX6BLqznMlDJNN0igc7Q== X-Mailru-Sender: 3B9A0136629DC91206CBC582EFEF4CB4973BA61AA5ACD454A46BDA37E5524DA4348EC3D22628D65AF2400F607609286E924004A7DEC283833C7120B22964430C52B393F8C72A41A89437F6177E88F7363CDA0F3B3F5B9367 X-Mras: Ok Subject: Re: [Tarantool-patches] [PATCH luajit 2/5] build: replace GNU Make with CMake X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Sergey Kaplun via Tarantool-patches Reply-To: Sergey Kaplun Cc: tarantool-patches@dev.tarantool.org Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" Igor, Thanks for the explanations! On 16.02.21, Igor Munkin wrote: > Sergey, > > Thanks for your review! > > On 11.02.21, Sergey Kaplun wrote: > > Hi, Igor! > > > > Thanks for the patch! > > > > Appreciate your hard work! Thanks for the verbose comments! > > The building process is faster now! > > I'm sorry: I can't see your GUI innovations, unfortunately. :( > > > > I've looked into branch version. > > Please consider my comments below. > > I've fixed all typos you've mentioned, so I left only those I haven't or > have changed in a different way. > > > > > On 02.02.21, Igor Munkin wrote: > > > In scope of this patch the LuaJIT build system is partially ported from > > > > Typo: s/In scope/In the scope/ > > I strongly doubt. Neither you, nor me: Within. It's picture-perfect: win-win. > > > > > > > > > old build system (see the recipe in the previous commit). > > > > This paragraph describes only supported OS. There is no description of > > supported build system options. > > IINM there is no cross-compiling support, stripping debug info, amalgam > > build for now, it should be mentioned in the commit message too. > > Here is the new wording for this section: > | Within this patch the LuaJIT build system is partially ported from GNU > | Make to CMake. These changes provide CMake build system for all > | supported host architectures but only for the following OS: GNU/Linux, Typo: s/architectures but/architectures, but/ > | OSX, FreeBSD. For other platrforms and specific builds (such as 'amalg', Typo: s/platrforms/platforms/ > | stripped binary and shared library, cross-compiling support) use the old > | build system (see the recipe in the previous commit). > > > > > > > > > Several components of the new build system such as automatic version > > > detection, source files list generation and some recipes for > > > CMakeLists.txt are taken verbatim or adapted from LuaVela repository. > > > > > > Part of tarantool/tarantool#4862 > > > > > > Signed-off-by: Igor Munkin > > > --- > > > > Side note: This is not related to the patch directly but what about > > Tarantool COPYRIGHT notice in the LuaJIT code and inside new cmake files > > in particular? > > We definitely need to make such activity, but I have no idea how to do > it a right way. Let's postpone it and discuss later, if you don't mind. Yes, of course. May be I create the ticket? > > > > > > .gitignore | 12 +- > > > CMakeLists.txt | 261 +++++++++++++++++++++++++ > > > cmake/LuaJITUtils.cmake | 31 +++ > > > cmake/MakeSourceList.cmake | 47 +++++ > > > cmake/SetDynASMFlags.cmake | 130 ++++++++++++ > > > cmake/SetTargetFlags.cmake | 42 ++++ > > > cmake/SetVersion.cmake | 45 +++++ > > > etc/CMakeLists.txt | 32 +++ > > > src/CMakeLists.txt | 391 +++++++++++++++++++++++++++++++++++++ > > > src/host/CMakeLists.txt | 61 ++++++ > > > tools/CMakeLists.txt | 77 ++++++++ > > > 11 files changed, 1128 insertions(+), 1 deletion(-) > > > create mode 100644 CMakeLists.txt > > > create mode 100644 cmake/LuaJITUtils.cmake > > > create mode 100644 cmake/MakeSourceList.cmake > > > create mode 100644 cmake/SetDynASMFlags.cmake > > > create mode 100644 cmake/SetTargetFlags.cmake > > > create mode 100644 cmake/SetVersion.cmake > > > create mode 100644 etc/CMakeLists.txt > > > create mode 100644 src/CMakeLists.txt > > > create mode 100644 src/host/CMakeLists.txt > > > create mode 100644 tools/CMakeLists.txt > > > diff --git a/CMakeLists.txt b/CMakeLists.txt > > > new file mode 100644 > > > index 0000000..0dba5d8 > > > --- /dev/null > > > +++ b/CMakeLists.txt > > > @@ -0,0 +1,261 @@ > > > +# XXX: Originally CMake machinery is introduced to make LuaJIT > > > +# testing self-sufficient. Since there are only few systems > > > > Typo: s/only few systems/only a few systems/ > > No, I want to emphasize the amount, so the article changes the meaning. Copy that, thank you! > > > > > > > +# --- Compilation flags setup -------------------------------------------------- > > > + > > > +if(NOT CMAKE_INSTALL_PREFIX STREQUAL "/usr/local") > > > + AppendFlags(TARGET_C_FLAGS -DLUA_ROOT='"${CMAKE_INSTALL_PREFIX}"') > > > > In Makefile.original I see the following check inside this branch: > > > > | ifneq (/usr,$(PREFIX)) > > | TARGET_DYNXLDOPTS= -Wl,-rpath,$(TARGET_LIBPATH) > > | endif > > > > Is it related to unsupported build systems? > > AFAICS, it is. Anyway, if you're having troubles, feel free to share. I've not found anyone. We will create an issue if necessary. > > > > > I've found some warnings on macOS in the configuration stage, that looks > > related: > > > > | CMake Warning (dev): > > | Policy CMP0042 is not set: MACOSX_RPATH is enabled by default. Run "cmake > > | --help-policy CMP0042" for policy details. Use the cmake_policy command to > > | set the policy and suppress this warning. > > | > > | MACOSX_RPATH is not specified for the following targets: > > | > > | libluajit_shared > > | > > | This warning is for project developers. Use -Wno-dev to suppress it. > > > > Version of macOS: > > | $ uname -a > > | Darwin MacBook-Pro.local 19.6.0 Darwin Kernel Version 19.6.0: Mon Aug 31 22:12:52 PDT 2020; root:xnu-6153.141.2~1/RELEASE_X86_64 x86_64 > > > > I've seen this warning, and have tried almost all combinations of the > MACOS_RPATH, CMP0042, and target options -- nothing has helped. BTW, > this warning breaks nothing for me (on my old Mac). If this bothers you, > please report your issues. If you have a solution, please share it. Hmm, it vanishes at the last branch version, congratulations :). > > > > +endif() > > > + > > > +if(CMAKE_LIBRARY_ARCHITECTURE) > > > + AppendFlags(TARGET_C_FLAGS -DLUA_MULTILIB='"lib/${CMAKE_LIBRARY_ARCHITECTURE}"') > > > +endif() > > > > What about `LUA_LMULTILIB`? > > > > Side note: should we provide `DESTDIR` or/and `MULTILIB` control variable > > like it does in Makefile.original? > > DESTDIR is supported out of the box in CMake. MULTILIB is "autodetected" > via CMake[1] (I hope, but never tried). Regardging LMULTILIB, I have no > idea what its purpose is. Do you? To configure default CPATH, IINM, see luaconf.h for details. > | option(LUAJIT_USE_VALGRIND "Valgrind support" OFF) | if(LUAJIT_USE_VALGRIND) | AppendFlags(TARGET_C_FLAGS -DLUAJIT_USE_VALGRIND) | endif() Nit: I see the compilation error (predictable) when this option is ON, but valgrind is not installed. May be add some checks at configuration phase? Feel free to ignore. > > > +# TODO: Implement a configuration option to enable ASAN. > > > +# There are two entries of LUAJIT_USE_ASAN define: > > > +# $ grep -rnF 'LUAJIT_USE_ASAN' . > > > +# ./src/lj_str.c:15:#if LUAJIT_USE_ASAN > > > +# ./src/host/buildvm.c:36:#if LUAJIT_USE_ASAN > > > +# At the same time this flag is not provided by LuaJIT original > > > +# build system (i.e. src/Makefile.original) so there are no > > > +# related compiler and linker flags passed. This should be done > > > +# the right way later. > > > > Good catch! I decide to check what else is missing. Here are some other > > options (sorry, for that dump, just want to save it anywhere): > > | $ grep -rnF 'LUAJIT_CTYPE_CHECK_ANCHOR' > > | src/lj_ctype.c:139:#ifdef LUAJIT_CTYPE_CHECK_ANCHOR > > | src/lj_ctype.c:159:#ifdef LUAJIT_CTYPE_CHECK_ANCHOR > > > > | $ grep -rnF 'LUAJIT_DEBUG_RA' > > | src/lj_asm.c:192:/* #define LUAJIT_DEBUG_RA */ > > | src/lj_asm.c:194:#ifdef LUAJIT_DEBUG_RA > > I tried only this one, while debugging the RENAME issue. > It would be nice to export it. > > > > > | $ grep -rnF 'LUAJIT_DISABLE_DEBUGINFO' > > | src/lj_parse.c:1397:#ifndef LUAJIT_DISABLE_DEBUGINFO > > | src/lj_parse.c:2700:#ifdef LUAJIT_DISABLE_DEBUGINFO > > | Binary file src/.lj_parse.c.swp matches > > | src/lj_memprof.c:102: ** -DLUAJIT_DISABLE_DEBUGINFO flag. > > > > | $ grep -rnF 'LUAJIT_DISABLE_PROFILE' > > | src/lj_arch.h:501:#if defined(LUAJIT_DISABLE_PROFILE) > > > > | $ grep -rnF 'LUAJIT_DISABLE_VMEVENT' > > | src/lj_trace.c:796:#ifndef LUAJIT_DISABLE_VMEVENT > > | src/lj_vmevent.h:33:#ifdef LUAJIT_DISABLE_VMEVENT > > | src/lib_jit.c:118:#ifdef LUAJIT_DISABLE_VMEVENT > > > > | $ grep -rnF 'LUAJIT_ENABLE_CHECKHOOK' > > | src/lj_record.c:2621:#ifdef LUAJIT_ENABLE_CHECKHOOK > > > > | $ grep -rnF 'LUAJIT_ENABLE_TABLE_BUMP' > > | src/lj_record.c:259:#ifdef LUAJIT_ENABLE_TABLE_BUMP > > | src/lj_record.c:1179:#ifdef LUAJIT_ENABLE_TABLE_BUMP > > | src/lj_record.c:1477:#ifdef LUAJIT_ENABLE_TABLE_BUMP > > | src/lj_record.c:1523:#ifdef LUAJIT_ENABLE_TABLE_BUMP > > | src/lj_record.c:1874:#ifdef LUAJIT_ENABLE_TABLE_BUMP > > | src/lj_record.c:2321:#ifdef LUAJIT_ENABLE_TABLE_BUMP > > | src/lj_record.c:2544:#ifdef LUAJIT_ENABLE_TABLE_BUMP > > | src/lj_jit.h:455:#ifdef LUAJIT_ENABLE_TABLE_BUMP > > > > | $ grep -rnF 'LUAJIT_NO_UNALIGNED' > > | src/lj_def.h:287:#if defined(_M_PPC) && defined(LUAJIT_NO_UNALIGNED) > > > > | $ grep -rnF 'LUAJIT_USE_PERFTOOLS' > > | src/lj_trace.c:85:#ifdef LUAJIT_USE_PERFTOOLS > > | src/lj_trace.c:163:#ifdef LUAJIT_USE_PERFTOOLS > > > > | $ grep -rnF 'LUAJIT_UNWIND_EXTERNAL' > > | doc/extensions.html:402:ARM -DLUAJIT_UNWIND_EXTERNAL > > | src/lj_err.c:53:** unwinding with -DLUAJIT_UNWIND_EXTERNAL. *All* C code must be compiled > > | src/lj_err.c:64:#if defined(__GNUC__) && (LJ_TARGET_X64 || defined(LUAJIT_UNWIND_EXTERNAL)) && !LJ_NO_UNWIND > > | src/lj_err.c:521: ** enabled LUAJIT_UNWIND_EXTERNAL and forgot to recompile *every* > > > > They not all related to debugging (AFAICT only `LUAJIT_USE_PERFTOOLS`, > > `LUAJIT_CTYPE_CHECK_ANCHOR` and `LUAJIT_DEBUG_RA`), more to configure. > > May be it is better to create separate issue(s) for all these options? > > Feel free to do it :) OK, after this patch set will be merged to master. > > > > > > > > > > > diff --git a/cmake/LuaJITUtils.cmake b/cmake/LuaJITUtils.cmake > > > new file mode 100644 > > > index 0000000..faaef6b > > > --- /dev/null > > > +++ b/cmake/LuaJITUtils.cmake > > > @@ -0,0 +1,31 @@ > > Nit: Also, it would be nice to see comments here, why do we use this > > approach instead use of CMAKE_HOST_SYSTEM_PROCESSOR variable (is set by > > `uname -p`). > > Feel free to ignore. > > I have no clear explanation of these and I definitely don't want to > write a bullshit in the comments, so I will either add TODO here if you > insist, or ignore this one. Add TODO, please. Just to mention this. > > > > + execute_process( > > > + COMMAND ${CMAKE_C_COMPILER} ${TEST_C_FLAGS} -E lj_arch.h -dM > > > > May be it will better to provide not default compiler here? > > It will be easier to adjust cross compiling with this. > > I don't get this, but as we discussed before cross compiling activity is > out of the scope of this issue. OK, good. > > > > > > + WORKING_DIRECTORY ${LUAJIT_SOURCE_DIR} > > > + OUTPUT_VARIABLE TESTARCH > > > + ) > > > + set(${outvar} ${TESTARCH} PARENT_SCOPE) > > > +endfunction() > > > + > > > +function(LuaJITArch outvar testarch) > > > + foreach(TRYARCH X64 X86 ARM ARM64 PPC MIPS64 MIPS) > > > > I occur the following error, when build inside Docker emulating > > aarch64 (`FROM arm64v8/centos`): > > > > | Error: pointer size mismatch in cross-build. > > | Try: make HOST_CC="gcc -m32" CROSS=... > > | > > | make[2]: *** [src/CMakeFiles/vm_static.dir/build.make:62: src/lj_vm.S] Error 1 > > | make[1]: *** [CMakeFiles/Makefile2:193: src/CMakeFiles/vm_static.dir/all] Error 2 > > | make[1]: *** Waiting for unfinished jobs.... > > | Error: pointer size mismatch in cross-build. > > | Try: make HOST_CC="gcc -m32" CROSS=... > > | > > | make[2]: *** [src/CMakeFiles/vm_shared.dir/build.make:62: src/lj_vm.S] Error 1 > > | make[1]: *** [CMakeFiles/Makefile2:394: src/CMakeFiles/vm_shared.dir/all] Error 2 > > > > All OK with the old Makefile: > > > > | $ make -f Makefile.original -j > > | ==== Building LuaJIT 2.1.0-beta3 ==== > > | ... > > | ==== Successfully built LuaJIT 2.1.0-beta3 ==== > > > > Content of : > > | src/host/buildvm_arch.h: dynasm/*.lua > > | @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --blue --bold --progress-dir=/luajit/CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Generating buildvm_arch.h" > > | cd /luajit/src/host && /luajit/src/host/minilua /luajit/dynasm/dynasm.lua -D ENDIAN_LE -D P64 -D JIT -D FFI -D DUALNUM -D FPU -D HFABI -D VER=80 -o buildvm_arch.h /luajit/src/vm_arm.dasc > > > > vm_arm.dasc instead vm_arm64.dasc here. > > Oops. > > > > > All because LJ_TARGET_ARM matched before LJ_TARGET_ARM64 in the line > > below. And it works for MIPS, because of different order :) > > Swap arches and leave comments about an order, please. > > Neat, many thanks for testing and investigation! Fixed, squashed, > force-pushed to the branch. Diff is below: > > ================================================================================ > > diff --git a/cmake/LuaJITUtils.cmake b/cmake/LuaJITUtils.cmake > index 1769675..0a662f7 100644 > --- a/cmake/LuaJITUtils.cmake > +++ b/cmake/LuaJITUtils.cmake > @@ -12,7 +12,7 @@ function(LuaJITTestArch outvar strflags) > endfunction() > > function(LuaJITArch outvar testarch) > - foreach(TRYARCH X64 X86 ARM ARM64 PPC MIPS64 MIPS) Please add a comment. Just to notice. > + foreach(TRYARCH X64 X86 ARM64 ARM PPC MIPS64 MIPS) > string(FIND "${testarch}" "LJ_TARGET_${TRYARCH}" FOUND) > if(FOUND EQUAL -1) > continue() > > ================================================================================ > > > + string(FIND "${testarch}" "LJ_TARGET_${TRYARCH}" FOUND) > > > + if(FOUND EQUAL -1) > > > + continue() > > > > `continue()` command was introduced in 3.2 CMake version > > according to [1]. So even 3.1 version is not enough. > > Shit, that can't be true... But thanks for checking it! > > > > > This is a result for verision 3.0.2. > > | CMake Error at cmake/LuaJITUtils.cmake:18 (continue): > > | Unknown CMake command "continue". > > | Call Stack (most recent call first): > > | cmake/SetTargetFlags.cmake:16 (LuaJITArch) > > | src/CMakeLists.txt:164 (include) > > | > > | > > | -- Configuring incomplete, errors occurred! > > > > Please, add `cmake_minimum_required()` command to the top, or do not use > > Hell no, I'll just rewrite this part and leave *non-toxic* comment about > it. When CMake will be updated in Tarantool next time, we'll refactor > this part. But not today. Yep, thank you! > > > `continue()` command. > > Reimplemented, squashed, force-pushed to the branch. Diff is below: > > ================================================================================ > > diff --git a/cmake/LuaJITUtils.cmake b/cmake/LuaJITUtils.cmake > index 0a662f7..2c4a27e 100644 > --- a/cmake/LuaJITUtils.cmake > +++ b/cmake/LuaJITUtils.cmake > @@ -14,12 +14,18 @@ endfunction() > function(LuaJITArch outvar testarch) > foreach(TRYARCH X64 X86 ARM64 ARM PPC MIPS64 MIPS) > string(FIND "${testarch}" "LJ_TARGET_${TRYARCH}" FOUND) > - if(FOUND EQUAL -1) > - continue() > + # FIXME: is introduced in CMake version 3.2, but > + # the minimum required version now is 3.1. This is not such a > + # vital feature, so it's not used now. However, when CMake > + # version is bumped next time, it's better to rewrite this > + # part using for "early return". > + # For more info see CMake Release notes for 3.2 version. Typo: s/For more info see/For more info, see/ > + # https://cmake.org/cmake/help/latest/release/3.2.html#commands > + if(NOT FOUND EQUAL -1) > + string(TOLOWER ${TRYARCH} LUAJIT_ARCH) > + set(${outvar} ${LUAJIT_ARCH} PARENT_SCOPE) > + return() > endif() > - string(TOLOWER ${TRYARCH} LUAJIT_ARCH) > - set(${outvar} ${LUAJIT_ARCH} PARENT_SCOPE) > - return() > endforeach() > message(FATAL_ERROR "[LuaJITArch] Unsupported target architecture") > endfunction() > > ================================================================================ > > > diff --git a/cmake/SetDynASMFlags.cmake b/cmake/SetDynASMFlags.cmake > > > new file mode 100644 > > > index 0000000..9a920c3 > > > --- /dev/null > > > +++ b/cmake/SetDynASMFlags.cmake > > > @@ -0,0 +1,130 @@ > > > +# This module exposes following variables to the project: > > > > Side note: Nice approach, I like it! > > > > > +# * HOST_C_FLAGS > > > +# * DYNASM_ARCH > > > +# * DYNASM_FLAGS > > > + > > > +# XXX: buildvm includes core headers and thus has to be built > > > +# with the same flags and defines as the LuaJIT core itself. > > > +set(HOST_C_FLAGS) > > > +set(DYNASM_ARCH) > > > +set(DYNASM_FLAGS) > > > + > > > +LuaJITTestArch(TESTARCH "${TARGET_C_FLAGS} ${HOST_CFLAGS}") > > > > Nit: Looks like it is necessary to use to define > > LUAJIT_TARGET directly? I think that should be mentioned in the commit > > message too. > > Sorry, don't get this one. The question was about way to declare -DLUAJIT_TARGET=LUAJIT_ARCH_X86. But it can be done with CMAKE_C_FLAGS, IINM. Never mind. > > > Feel free to ignore. > > > > > > > > > > diff --git a/cmake/SetTargetFlags.cmake b/cmake/SetTargetFlags.cmake > > > new file mode 100644 > > > index 0000000..260fc6b > > > --- /dev/null > > > +++ b/cmake/SetTargetFlags.cmake > I add some comments to the following chunk. | +if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") | + if(LUAJIT_ARCH STREQUAL "x64") Side note: I have a linking error with the original Makefile without `MACOSX_DEPLOYMENT_TARGET` specification: || LINK luajit || Undefined symbols for architecture x86_64: || "__Unwind_DeleteException", referenced from: || _lj_err_unwind_dwarf in libluajit.a(lj_err.o) || "__Unwind_GetCFA", referenced from: || _lj_err_unwind_dwarf in libluajit.a(lj_err.o) || "__Unwind_RaiseException", referenced from: || _lj_err_throw in libluajit.a(lj_err.o) || "__Unwind_SetGR", referenced from: || _lj_err_unwind_dwarf in libluajit.a(lj_err.o) || "__Unwind_SetIP", referenced from: || _lj_err_unwind_dwarf in libluajit.a(lj_err.o) || ld: symbol(s) not found for architecture x86_64 But nothing with CMake... Nonetheless, I suggest to safe the old Makefile behaviour to specify the minimum OS version (see [1]): =================================================================== diff --git a/cmake/SetTargetFlags.cmake b/cmake/SetTargetFlags.cmake index c8bcded..d54e295 100644 --- a/cmake/SetTargetFlags.cmake +++ b/cmake/SetTargetFlags.cmake @@ -25,6 +25,9 @@ if(LUAJIT_ARCH STREQUAL "x86") endif() if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") + if (NOT $ENV{MACOSX_DEPLOYMENT_TARGET}) + set(ENV{MACOSX_DEPLOYMENT_TARGET} 10.4) + endif() if(LUAJIT_ARCH STREQUAL "x64") AppendFlags(TARGET_BIN_FLAGS -pagezero_size 10000 -image_base 100000000) AppendFlags(TARGET_SHARED_FLAGS -image_base 7fff04c4a000) =================================================================== Feel free to ignore. | + AppendFlags(TARGET_BIN_FLAGS -pagezero_size 10000 -image_base 100000000) Here are description from Mike for this flags, please add this comment. || commit f76e5a311ba543ae174acd3b585fb672fde8a3b5 || Author: Mike Pall || Date: Thu Mar 4 16:27:42 2010 +0100 || || Allocate 32 bit memory on OSX/x64 with mmap() hinting. || || Must set -pagezero_size, otherwise the lower 4GB are blocked. | + AppendFlags(TARGET_SHARED_FLAGS -image_base 7fff04c4a000) Also I've found that this line produces warnings from linker like: || ld: warning: -seg1addr not 16384 byte aligned, rounding up So, I suggest the following solution for cmake and for the original Makefile (just add 8Kb): =================================================================== diff --git a/cmake/SetTargetFlags.cmake b/cmake/SetTargetFlags.cmake index c8bcded..d0eefab 100644 --- a/cmake/SetTargetFlags.cmake +++ b/cmake/SetTargetFlags.cmake @@ -27,7 +27,7 @@ endif() if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") if(LUAJIT_ARCH STREQUAL "x64") AppendFlags(TARGET_BIN_FLAGS -pagezero_size 10000 -image_base 100000000) - AppendFlags(TARGET_SHARED_FLAGS -image_base 7fff04c4a000) + AppendFlags(TARGET_SHARED_FLAGS -image_base 7fff04c4c000) endif() AppendFlags(TARGET_SHARED_FLAGS -single_module -undefined dynamic_lookup) else() # Linux and FreeBSD. diff --git a/src/Makefile.original b/src/Makefile.original index 502504c..34988db 100644 --- a/src/Makefile.original +++ b/src/Makefile.original @@ -328,7 +328,7 @@ ifeq (Darwin,$(TARGET_SYS)) TARGET_XSHLDFLAGS+= -install_name $(TARGET_DYLIBPATH) -compatibility_version $(MAJVER).$(MINVER) -current_version $(MAJVER).$(MINVER).$(RELVER) ifeq (x64,$(TARGET_LJARCH)) TARGET_XLDFLAGS+= -pagezero_size 10000 -image_base 100000000 - TARGET_XSHLDFLAGS+= -image_base 7fff04c4a000 + TARGET_XSHLDFLAGS+= -image_base 7fff04c4c000 endif else ifeq (iOS,$(TARGET_SYS)) =================================================================== | + endif() | + AppendFlags(TARGET_SHARED_FLAGS -single_module -undefined dynamic_lookup) > > > > > Are -dynamiclib and -fPIC flags forced set by CMake? > > Also, I don't find -install_name -compatibility_version -current_version > > flags. Are they insignificant? > > Could you please share the corresponding part of "make VERBOSE=1"? These > variables should be set by CMake. Thanks for the tip-off. Nothing is missing, but -compatibility_version is "2.0.0" instead of "2.1". Is that OK? > > > > > I got warnings from linker in the build stage on macOS: > > > > | $ uname -a > > | Darwin MacBook-Pro.local 19.6.0 Darwin Kernel Version 19.6.0: Mon Aug 31 22:12:52 PDT 2020; root:xnu-6153.141.2~1/RELEASE_X86_64 x86_64 > > > > | ld: warning: -seg1addr not 16384 byte aligned, rounding up > > | /Library/Developer/CommandLineTools/usr/bin/ranlib: file: libluajit.a(lj_opt_split.c.o) has no symbols > > | [ 98%] Built target libluajit_shared > > | /Library/Developer/CommandLineTools/usr/bin/ranlib: file: libluajit.a(lj_opt_split.c.o) has no symbols > > > > Is it related to this? > > No, you'll see this if you run with no suppressing its output. The > same issue is also presented for lj_gdbjit.c when GDBJIT support is > disabled. Thanks, please see the patch to suppress superfluous randlib warnings about "*.a" having no symbols on MacOSX. Mike just ignoring them by `2>/dev/null` :) =================================================================== diff --git a/cmake/SetTargetFlags.cmake b/cmake/SetTargetFlags.cmake index c8bcded..1fcdeea 100644 --- a/cmake/SetTargetFlags.cmake +++ b/cmake/SetTargetFlags.cmake @@ -30,6 +30,8 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin") AppendFlags(TARGET_SHARED_FLAGS -image_base 7fff04c4a000) endif() AppendFlags(TARGET_SHARED_FLAGS -single_module -undefined dynamic_lookup) + set(CMAKE_C_ARCHIVE_CREATE " rcusS ") + set(CMAKE_C_ARCHIVE_FINISH " -no_warning_for_no_symbols -c ") else() # Linux and FreeBSD. AppendFlags(TARGET_BIN_FLAGS -Wl,-E) list(APPEND TARGET_LIBS dl) =================================================================== But may be this is not the best plase for this (it is not about flags). Feel free to change and reword all these comments (here and above) on your own. > > > > > > diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt > > > new file mode 100644 > > > index 0000000..8ada1a4 > > > --- /dev/null > > > +++ b/src/CMakeLists.txt > > > @@ -0,0 +1,391 @@ > > > > > > > > > +make_source_list(SOURCES_UTILS > > > + SOURCES > > > + lj_alloc.c > > > + lj_char.c > > > + lj_utils_leb128.c > > > + lj_vmmath.c > > > + lj_wbuf.c > > > > Looks like there is no need to compile and > > , when the memory profiler is disabled. > > There is no need, but strictly saying both units are not strictly > related to memprof, but rather providing a standalone functionality. So, > I leave it unchanged. Good. > > > > > > > > > > | # handle this manually on his side. Hence check whether the > > | # targets used below are presented for the chosen build mode. > > | # See more info in CMake docs below: > > | # https://cmake.org/cmake/help/v3.1/prop_tgt/EXCLUDE_FROM_ALL.html > > > > This warnings are annoying (cmake version is 3.13.4): > > Did you try the latest version of the patchset? All these > rules are moved under condition after Timur comment. Yes, just check it again inside Docker with arm64. How can I provide more debug info? | # cmake . | ... | WARNING: Target "luajit_static" has EXCLUDE_FROM_ALL set and will not be built by default but an install rule has been provided for it. CMake does not define behavior for this case. | WARNING: Target "libluajit_static" has EXCLUDE_FROM_ALL set and will not be built by default but an install rule has been provided for it. CMake does not define behavior for this case. | WARNING: Target "libluajit_shared" has EXCLUDE_FROM_ALL set and will not be built by default but an install rule has been provided for it. CMake does not define behavior for this case. | ... > > > > > | -- Found assembler: /usr/bin/cc > > | -- Configuring done > > | WARNING: Target "luajit_static" has EXCLUDE_FROM_ALL set and will not be built by default but an install rule has been provided for it. CMake does not define behavior for this case. > > | WARNING: Target "libluajit_static" has EXCLUDE_FROM_ALL set and will not be built by default but an install rule has been provided for it. CMake does not define behavior for this case. > > | WARNING: Target "libluajit_shared" has EXCLUDE_FROM_ALL set and will not be built by default but an install rule has been provided for it. CMake does not define behavior for this case. > > | WARNING: Target "libluajit_shared" has EXCLUDE_FROM_ALL set and will not be built by default but an install rule has been provided for it. CMake does not define behavior for this case. > > > > Can we suppress them? > > > > > +install(TARGETS ${LUAJIT_DEPS} > > > > The development releases of LuaJIT deliberately are not installed like > > "luajit", but "luajit-2.1.0-beta3". Do we want to change this behaviour? > > What do you mean by that? Could you please provide an example? Sure. Instalation via CMake: | $ cmake -DCMAKE_INSTALL_PREFIX="/tmp/testinstall" . && make -j && make install | -- Installing: /tmp/testinstall/bin/luajit | -- Installing: /tmp/testinstall/lib/libluajit.a | -- Installing: /tmp/testinstall/lib/libluajit.so.2.1.0 | -- Up-to-date: /tmp/testinstall/lib/libluajit.so.2 | -- Up-to-date: /tmp/testinstall/lib/libluajit.so Via the original Makefile: | make -f Makefile.original install | cd src && install -m 0755 luajit /tmp/testinstall//bin/luajit-2.1.0-beta3 This is the difference ^^^^^^^^^^^^ | cd src && test -f libluajit.a && install -m 0644 libluajit.a /tmp/testinstall//lib/libluajit-5.1.a || : | rm -f /tmp/testinstall//lib/libluajit-5.1.so.2.1.0 /tmp/testinstall//lib/libluajit-5.1.so /tmp/testinstall//lib/libluajit-5.1.so.2 | cd src && test -f libluajit.so && \ | install -m 0755 libluajit.so /tmp/testinstall//lib/libluajit-5.1.so.2.1.0 && \ | ldconfig -n /tmp/testinstall//lib && \ | ln -sf libluajit-5.1.so.2.1.0 /tmp/testinstall//lib/libluajit-5.1.so && \ | ln -sf libluajit-5.1.so.2.1.0 /tmp/testinstall//lib/libluajit-5.1.so.2 || : Also there is the following note: | Note: the development releases deliberately do NOT install a symlink for luajit | You can do this now by running these commands (with sudo): | | ln -sf luajit-2.1.0-beta3 /tmp/testinstall//bin/luajit | ln -sf luajit-2.1.0-beta3-parse-memprof /tmp/testinstall//bin/luajit-parse-memprof Same for our memprof appendix. > > > > > > + RUNTIME > > > + DESTINATION bin > > > + COMPONENT luajit > > > +) > > > +install(TARGETS ${LIBLUAJIT_STATIC_DEPS} > > > + ARCHIVE > > > + DESTINATION lib > > > + COMPONENT luajit > > > +) > > > +install(TARGETS ${LIBLUAJIT_SHARED_DEPS} > > > + LIBRARY > > > + DESTINATION lib > > > + COMPONENT luajit > > > +) > > > + > > > > > + DESTINATION ${LUAJIT_DATAROOTDIR}/jit > > > + PERMISSIONS > > > + OWNER_READ OWNER_WRITE > > > + GROUP_READ > > > + WORLD_READ > > > + COMPONENT luajit > > > +) > > > > As I read from [4] CMake does not provide a default way to uninstall > > installed files. But fortunately there is an example how doing it > > in [4] directly. I think it is good to implement this part for > > backward compatibility (especially, we have all prerequisites). > > OK, but I adjusted it a bit: > > ================================================================================ > > diff --git a/.gitignore b/.gitignore > index a21ee1c..2103a30 100644 > --- a/.gitignore > +++ b/.gitignore > @@ -15,6 +15,7 @@ CMakeCache.txt > CMakeFiles > Makefile > cmake_install.cmake > +cmake_uninstall.cmake > compile_commands.json > install_manifest.txt > luajit-parse-memprof > diff --git a/CMakeLists.txt b/CMakeLists.txt > index 16a9d5b..6bba9f4 100644 > --- a/CMakeLists.txt > +++ b/CMakeLists.txt > @@ -261,3 +261,16 @@ add_subdirectory(etc) > # --- Tools -------------------------------------------------------------------- > > add_subdirectory(tools) > + > +# --- Misc rules --------------------------------------------------------------- > + > +# XXX: Implement target using the following recipe: > +# https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake > +if(NOT TARGET uninstall) > + configure_file(${CMAKE_MODULE_PATH}/cmake_uninstall.cmake.in > + cmake_uninstall.cmake @ONLY ESCAPE_QUOTES) > + > + add_custom_target(uninstall > + COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake > + ) > +endif() > diff --git a/cmake/cmake_uninstall.cmake.in b/cmake/cmake_uninstall.cmake.in > new file mode 100644 > index 0000000..fc3b885 > --- /dev/null > +++ b/cmake/cmake_uninstall.cmake.in > @@ -0,0 +1,24 @@ > +if(NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt") > + message(FATAL_ERROR "Cannot find install manifest: @CMAKE_BINARY_DIR@/install_manifest.txt") > +endif() > + > +# XXX: This loop removes only entries from install_manifest.txt, > +# but do nothing for the directories created while installation. Side note: original `make uninstall` looks similar -- leaves several amount of ghost-directories. > +# Honestly, the recipe is awful, but is better than nothing. We can refactor it later if you want. > > > diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt > > > new file mode 100644 > > > index 0000000..f9ffc5e > > > --- /dev/null > > > +++ b/tools/CMakeLists.txt > > > @@ -0,0 +1,77 @@ > > > +# Building tools for developing with uJIT. Nit: uJIT or LuaJIT? > > > +# Major portions taken verbatim or adapted from the uJIT. > > > +# Copyright (C) 2015-2019 IPONWEB Ltd. > > > + > > > +# See the rationale in the root CMakeLists.txt > > > +cmake_minimum_required(VERSION 3.1 FATAL_ERROR) > > > + > > > +set(LUAJIT_TOOLS_DEPS) > > > + > > > +if(LUAJIT_DISABLE_MEMPROF) > > > + message(STATUS "LuaJIT memory profiler support is disabled") > > > +else() > > > + # XXX: Can use genex here since the value need to be evaluated > > > + # on the configuration phase. Fortunately, we know the exact > > > > Typo: s/on/in/ > > Niether of these. 'at' or 'while' are fine (I chose the former). Perfect! > > > > > > + # path where LuaJIT binary is located. > > > + set(LUAJIT_TOOLS_BIN ${LUAJIT_BINARY_DIR}/${LUAJIT_CLI_NAME}) > > > + set(LUAJIT_TOOLS_DIR ${CMAKE_CURRENT_SOURCE_DIR}) > > > + configure_file(luajit-parse-memprof.in luajit-parse-memprof @ONLY ESCAPE_QUOTES) > > > + > > > > > > > > > + install(FILES > > > + ${CMAKE_CURRENT_SOURCE_DIR}/memprof.lua > > > + DESTINATION ${LUAJIT_DATAROOTDIR} > > > + PERMISSIONS > > > + OWNER_READ OWNER_WRITE > > > + GROUP_READ > > > + WORLD_READ > > > + COMPONENT tools-parse-memprof > > > + ) > > > + install(CODE > > > > Is it reasonable to install memrpof tooling for not supported arches? > > Yes, it's already working in that way, but maybe it is redundant. > > I see no problem: this part works fine on all hosts, so you can take the > binary dump and parse it anywhere. Only if symtab and memprof version is the same, but it's OK. > > > > > > + # XXX: Since the auxiliary script need to be configured in > > > + # other way it need to be reconfigured it prior to its > > > + # installation. Unfortunately, we need to manually specify > > > > Nit: I propose to reformulate and split the first sentence like the > > following: > > > > | XXX: The auxiliary script needs to be configured for use in > > | repository directly. In another way it needs to be reconfigured > > | prior to installation. > > > > Feel free to ignore. > > See the changes below. > > > > > > + # the installation path in command. > > > + # Hope this script will be gone as a result of the issue below > > > + # https://github.com/tarantool/tarantool/issues/5688. > > > + " > > > + set(LUAJIT_TOOLS_BIN ${CMAKE_INSTALL_PREFIX}/bin/${LUAJIT_CLI_NAME}) > > > + set(LUAJIT_TOOLS_DIR ${CMAKE_INSTALL_PREFIX}/${LUAJIT_DATAROOTDIR}) > > > + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/luajit-parse-memprof.in > > > + ${CMAKE_INSTALL_PREFIX}/bin/luajit-parse-memprof @ONLY ESCAPE_QUOTES) > > > + message(STATUS \"Installing: ${CMAKE_INSTALL_PREFIX}/bin/luajit-parse-memprof\") > > > + " > > > + COMPONENT tools-parse-memprof > > > + ) > > > > The result file is not executable. > > Shit. BTW, the one generated above in bindir is neither. You can't > imagine how I reproach myself about approving this file addition. It's > like a vermiform appendix that we can't cut off right now. I've made the > template executable though this is nonsense but I failed to find another > normal solution. Anyway, I left the comment regarding it, squashed with > the previous commit. Here is the diff for both comments above: There is no use to cry over spilt milk. Without this we probably would hear nothing from our dear customers about this feature. I reckon on doing this soon after integration of testing suite and memory profiler bugfixes. > > ================================================================================ > > diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt > index 60535cd..cb49bdc 100644 > --- a/tools/CMakeLists.txt > +++ b/tools/CMakeLists.txt > @@ -16,6 +16,13 @@ else() > # path where LuaJIT binary is located. > set(LUAJIT_TOOLS_BIN ${LUAJIT_BINARY_DIR}/${LUAJIT_CLI_NAME}) > set(LUAJIT_TOOLS_DIR ${CMAKE_CURRENT_SOURCE_DIR}) > + # XXX: Unfortunately, there is no convenient way to set > + # particular permissions to the output file via CMake. > + # Furthermore, I even failed to copy the given file to the same > + # path to change its permissions. After looking at the docs, I > + # realized that the valid solution would be too monstrous for > + # such a simple task. As a result I've made the template itself > + # executable, so the issue is resolved. *Kхъ* :). > configure_file(luajit-parse-memprof.in luajit-parse-memprof @ONLY ESCAPE_QUOTES) > > add_custom_target(tools-parse-memprof EXCLUDE_FROM_ALL DEPENDS > @@ -58,18 +65,24 @@ else() > COMPONENT tools-parse-memprof > ) > install(CODE > - # XXX: Since the auxiliary script need to be configured in > - # other way it need to be reconfigured it prior to its > - # installation. Unfortunately, we need to manually specify > - # the installation path in command. > - # Hope this script will be gone as a result of the issue below > + # XXX: The auxiliary script needs to be configured for to be > + # used in repository directly. It also need to be reconfigured Typo? s/repository/the repository/ Typo: s/need/needs/ > + # prior to its installation. The temporary > + # output is stored to the project build directory and removed Typo? s/to/in/ > + # later after being installed. This script will have gone as a > + # result of the issue: > # https://github.com/tarantool/tarantool/issues/5688. > " > + set(LJPM_INSTALL_PATH ${CMAKE_INSTALL_PREFIX}/bin/luajit-parse-memprof) See no usage of this variable. > set(LUAJIT_TOOLS_BIN ${CMAKE_INSTALL_PREFIX}/bin/${LUAJIT_CLI_NAME}) > set(LUAJIT_TOOLS_DIR ${CMAKE_INSTALL_PREFIX}/${LUAJIT_DATAROOTDIR}) > configure_file(${CMAKE_CURRENT_SOURCE_DIR}/luajit-parse-memprof.in > - ${CMAKE_INSTALL_PREFIX}/bin/luajit-parse-memprof @ONLY ESCAPE_QUOTES) > - message(STATUS \"Installing: ${CMAKE_INSTALL_PREFIX}/bin/luajit-parse-memprof\") > + ${PROJECT_BINARY_DIR}/luajit-parse-memprof @ONLY ESCAPE_QUOTES) > + file(INSTALL ${PROJECT_BINARY_DIR}/luajit-parse-memprof > + DESTINATION ${CMAKE_INSTALL_PREFIX}/bin > + USE_SOURCE_PERMISSIONS > + ) > + file(REMOVE ${PROJECT_BINARY_DIR}/luajit-parse-memprof) > " > COMPONENT tools-parse-memprof > ) > diff --git a/tools/luajit-parse-memprof.in b/tools/luajit-parse-memprof.in > old mode 100644 > new mode 100755 > > ================================================================================ > > > > > > +endif() > > > + > > > +add_custom_target(LuaJIT-tools DEPENDS ${LUAJIT_TOOLS_DEPS}) > > > > Side note: why don't you provide custom `tools` target for memprof like > > in the previous patch? > > For what? In the previous patch there was an additional work to do, that > is a dependency for the main targets, so I grouped it into a separate > target. OK, hope this problems will vanish with a -[tm] flag. This is a comment for the previous patch. Just place it here to avoid of spam messages. When I try `make -f Makefile.original -j`, I see the following warning: | make: Circular src/luajit <- tools dependency dropped. Also, I found that amalg build is broken. I propose the following patch: =================================================================== diff --git a/Makefile.original b/Makefile.original index 33dc2ed..8d8f4ff 100644 --- a/Makefile.original +++ b/Makefile.original @@ -123,9 +123,10 @@ endif INSTALL_DEP= src/luajit -default all $(INSTALL_DEP): tools +default all $(INSTALL_DEP): @echo "==== Building LuaJIT $(VERSION) ====" $(MAKE) -C src -f Makefile.original + $(MAKE) -f Makefile.original tools @echo "==== Successfully built LuaJIT $(VERSION) ====" install: $(INSTALL_DEP) @@ -185,9 +186,10 @@ uninstall: ############################################################################## -amalg: tools +amalg: @echo "Building LuaJIT $(VERSION)" $(MAKE) -C src -f Makefile.original amalg + $(MAKE) -f Makefile.original tools clean: $(RM) tools/$(FILE_TMEMPROF) diff --git a/src/Makefile.original b/src/Makefile.original index 502504c..031f077 100644 --- a/src/Makefile.original +++ b/src/Makefile.original @@ -606,14 +606,14 @@ default all: $(TARGET_T) amalg: @grep "^[+|]" ljamalg.c - $(MAKE) all "LJCORE_O=ljamalg.o" + $(MAKE) -f Makefile.original all "LJCORE_O=ljamalg.o" clean: $(HOST_RM) $(ALL_RM) libbc: ./$(LUAJIT_T) host/genlibbc.lua -o host/buildvm_libbc.h $(LJLIB_C) - $(MAKE) all + $(MAKE) -f Makefile.original all depend: @for file in $(ALL_HDRGEN); do \ =================================================================== > > > > > > -- > > > 2.25.0 > > > > > > > [1]: https://stackoverflow.com/questions/41773161/negate-boolean-variable-in-cmake > > [2]: https://cmake.org/pipermail/cmake/2015-July/061116.html > > [3]: https://cmake.org/cmake/help/latest/command/continue.html > > [4]: https://gitlab.kitware.com/cmake/community/-/wikis/FAQ#can-i-do-make-uninstall-with-cmake > > > > -- > > Best regards, > > Sergey Kaplun > > [1]: https://cmake.org/cmake/help/v3.1/variable/CMAKE_LIBRARY_ARCHITECTURE.html > > -- > Best regards, > IM [1]: https://cmake.org/cmake/help/v3.14/envvar/MACOSX_DEPLOYMENT_TARGET.html -- Best regards, Sergey Kaplun