- if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
- # clang does not understand __extern_always_inline but libc headers use it
- set(OTHER_FLAGS "${OTHER_FLAGS} \"-D__extern_always_inline=extern __always_inline\"")
- set(OTHER_FLAGS "${OTHER_FLAGS} -Wsign-compare")
+ if(APPLE AND USE_LUAJIT)
+ # required per http://luajit.org/install.html
+ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pagezero_size 10000 -image_base 100000000")
+ elseif(UNIX AND USE_LUAJIT)
+ check_c_source_compiles("#ifndef __aarch64__\n#error\n#endif\nint main(){}" IS_AARCH64)
+ if(IS_AARCH64)
+ # Move text segment below LuaJIT's 47-bit limit (see issue #9367)
+ if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+ # FreeBSD uses lld, and lld does not support -Ttext-segment, suggesting
+ # --image-base instead. Not sure if it's equivalent change for the purpose
+ # but at least if fixes build on FreeBSD/aarch64
+ # XXX: the condition should also be changed to check for lld regardless of
+ # os, bit CMake doesn't have anything like CMAKE_LINKER_IS_LLD yet
+ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--image-base=0x200000000")
+ else()
+ SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Ttext-segment=0x200000000")
+ endif()
+ endif()