|
| 1 | +# Modfied from luajit.cmake Added LUA_ADD_EXECUTABLE Ryan Phillips <ryan at |
| 2 | +# trolocsis.com> This CMakeLists.txt has been first taken from LuaDist Copyright |
| 3 | +# (C) 2007-2011 LuaDist. Created by Peter Drahoš Redistribution and use of this |
| 4 | +# file is allowed according to the terms of the MIT license. Debugged and (now |
| 5 | +# seriously) modIFied by Ronan Collobert, for Torch7 |
| 6 | + |
| 7 | +if(NOT DEFINED BUNDLE_CMD) |
| 8 | + set(BUNDLE_CMD luajit CACHE STRING "Use lua to do lua file bundle") |
| 9 | +endif() |
| 10 | +if(NOT DEFINED BUNDLE_CMD_ARGS) |
| 11 | + set(BUNDLE_CMD_ARGS "" CACHE STRING "Bundle args for cross compile") |
| 12 | +endif() |
| 13 | +if(NOT DEFINED BUNDLE_USE_LUA2C) |
| 14 | + set(BUNDLE_USE_LUA2C OFF CACHE BOOL "Use bin2c.lua do lua file bundle") |
| 15 | +endif() |
| 16 | + |
| 17 | +include (TestBigEndian) |
| 18 | +TEST_BIG_ENDIAN(IS_BIG_ENDIAN) |
| 19 | +if(IS_BIG_ENDIAN) |
| 20 | + message(STATUS "BIG_ENDIAN") |
| 21 | +else() |
| 22 | + message(STATUS "LITTLE_ENDIAN") |
| 23 | +endif() |
| 24 | + |
| 25 | +if(BUNDLE_USE_LUA2C) |
| 26 | + file(COPY ${CMAKE_CURRENT_LIST_DIR}/lua2c.lua DESTINATION ${LUA_TARGET_PATH}) |
| 27 | +endif() |
| 28 | + |
| 29 | +macro(LUA_add_custom_commands luajit_target) |
| 30 | + set(target_srcs "") |
| 31 | + foreach(file ${ARGN}) |
| 32 | + if(${file} MATCHES ".*\\.lua$") |
| 33 | + if(NOT IS_ABSOLUTE ${file}) |
| 34 | + set(file "${CMAKE_CURRENT_SOURCE_DIR}/${file}") |
| 35 | + endif() |
| 36 | + set(source_file ${file}) |
| 37 | + string(LENGTH ${CMAKE_SOURCE_DIR} _luajit_source_dir_length) |
| 38 | + string(LENGTH ${file} _luajit_file_length) |
| 39 | + math(EXPR _begin "${_luajit_source_dir_length} + 1") |
| 40 | + math(EXPR _stripped_file_length |
| 41 | + "${_luajit_file_length} - ${_luajit_source_dir_length} - 1") |
| 42 | + string(SUBSTRING ${file} |
| 43 | + ${_begin} |
| 44 | + ${_stripped_file_length} |
| 45 | + stripped_file) |
| 46 | + |
| 47 | + set( |
| 48 | + generated_file |
| 49 | + "${CMAKE_BINARY_DIR}/luacode_tmp/${stripped_file}_${luajit_target}_generated.c" |
| 50 | + ) |
| 51 | + |
| 52 | + add_custom_command( |
| 53 | + OUTPUT ${generated_file} |
| 54 | + MAIN_DEPENDENCY ${source_file} |
| 55 | + DEPENDS ${LUA_TARGET} |
| 56 | + COMMAND ${BUNDLE_CMD} ARGS |
| 57 | + ${BUNDLE_CMD_ARGS} lua2c.lua ${source_file} ${generated_file} |
| 58 | + COMMENT "${BUNDLE_CMD} ${BUNDLE_CMD_ARGS} lua2c.lua ${source_file} ${generated_file}" |
| 59 | + WORKING_DIRECTORY ${LUA_TARGET_PATH}) |
| 60 | + |
| 61 | + get_filename_component(basedir ${generated_file} PATH) |
| 62 | + file(MAKE_DIRECTORY ${basedir}) |
| 63 | + |
| 64 | + set(target_srcs ${target_srcs} ${generated_file}) |
| 65 | + set_source_files_properties(${generated_file} |
| 66 | + properties |
| 67 | + generated |
| 68 | + true # to say that "it is OK that the obj- |
| 69 | + # files do not exist before build time" |
| 70 | + ) |
| 71 | + else() |
| 72 | + set(target_srcs ${target_srcs} ${file}) |
| 73 | + endif() |
| 74 | + endforeach() |
| 75 | +endmacro() |
| 76 | + |
| 77 | +if(NOT LJ_TARGET_ARCH) |
| 78 | +include(${CMAKE_CURRENT_LIST_DIR}/Modules/DetectArchitecture.cmake) |
| 79 | +detect_architecture(LJ_DETECTED_ARCH) |
| 80 | +if("${LJ_DETECTED_ARCH}" STREQUAL "x86") |
| 81 | + set(LJ_TARGET_ARCH "x86") |
| 82 | +elseif("${LJ_DETECTED_ARCH}" STREQUAL "x86_64") |
| 83 | + set(LJ_TARGET_ARCH "x64") |
| 84 | +elseif("${LJ_DETECTED_ARCH}" STREQUAL "AArch64") |
| 85 | + set(LJ_TARGET_ARCH "arm64") |
| 86 | +elseif("${LJ_DETECTED_ARCH}" STREQUAL "ARM") |
| 87 | + set(LJ_TARGET_ARCH "arm") |
| 88 | +elseif("${LJ_DETECTED_ARCH}" STREQUAL "Mips64") |
| 89 | + if(IS_BIG_ENDIAN) |
| 90 | + set(LJ_TARGET_ARCH "mips64") |
| 91 | + else() |
| 92 | + set(LJ_TARGET_ARCH "mips64el") |
| 93 | + endif() |
| 94 | +elseif("${LJ_DETECTED_ARCH}" STREQUAL "Mips") |
| 95 | + if(IS_BIG_ENDIAN) |
| 96 | + set(LJ_TARGET_ARCH "mips") |
| 97 | + else() |
| 98 | + set(LJ_TARGET_ARCH "mipsel") |
| 99 | + endif() |
| 100 | +elseif("${LJ_DETECTED_ARCH}" STREQUAL "PowerPC") |
| 101 | + if(LJ_64) |
| 102 | + set(LJ_TARGET_ARCH "ppc64") |
| 103 | + else() |
| 104 | + set(LJ_TARGET_ARCH "ppc") |
| 105 | + endif() |
| 106 | +else() |
| 107 | + message(FATAL_ERROR "Unsupported target architecture: '${LJ_DETECTED_ARCH}'") |
| 108 | +endif() |
| 109 | +endif() |
| 110 | + |
| 111 | +macro(LUAJIT_add_custom_commands luajit_target) |
| 112 | + set(target_srcs "") |
| 113 | + |
| 114 | + if(WIN32) |
| 115 | + set(LJDUMP_OPT -b -g -a ${LJ_TARGET_ARCH} -o windows) |
| 116 | + elseif(APPLE) |
| 117 | + set(LJDUMP_OPT -b -g -a ${LJ_TARGET_ARCH} -o osx) |
| 118 | + elseif(ANDROID OR ${CMAKE_SYSTEM_NAME} STREQUAL Linux) |
| 119 | + set(LJDUMP_OPT -b -g -a ${LJ_TARGET_ARCH} -o linux) |
| 120 | + else() |
| 121 | + set(LJDUMP_OPT -b -g -a ${LJ_TARGET_ARCH}) |
| 122 | + endif() |
| 123 | + |
| 124 | + foreach(file ${ARGN}) |
| 125 | + if(${file} MATCHES ".*\\.lua$") |
| 126 | + if(NOT IS_ABSOLUTE ${file}) |
| 127 | + set(file "${CMAKE_CURRENT_SOURCE_DIR}/${file}") |
| 128 | + endif() |
| 129 | + set(source_file ${file}) |
| 130 | + string(LENGTH ${CMAKE_SOURCE_DIR} _luajit_source_dir_length) |
| 131 | + string(LENGTH ${file} _luajit_file_length) |
| 132 | + math(EXPR _begin "${_luajit_source_dir_length} + 1") |
| 133 | + math(EXPR _stripped_file_length |
| 134 | + "${_luajit_file_length} - ${_luajit_source_dir_length} - 1") |
| 135 | + string(SUBSTRING ${file} |
| 136 | + ${_begin} |
| 137 | + ${_stripped_file_length} |
| 138 | + stripped_file) |
| 139 | + |
| 140 | + set( |
| 141 | + generated_file |
| 142 | + "${CMAKE_CURRENT_BINARY_DIR}/jitted_tmp/${stripped_file}_${luajit_target}_generated${CMAKE_C_OUTPUT_EXTENSION}" |
| 143 | + ) |
| 144 | + string(REPLACE ";" " " LJDUMP_OPT_STR "${LJDUMP_OPT}") |
| 145 | + |
| 146 | + add_custom_command( |
| 147 | + OUTPUT ${generated_file} |
| 148 | + MAIN_DEPENDENCY ${source_file} |
| 149 | + DEPENDS ${LUA_TARGET} |
| 150 | + COMMAND ${BUNDLE_CMD} ARGS |
| 151 | + ${BUNDLE_CMD_ARGS} |
| 152 | + ${LJDUMP_OPT} ${source_file} ${generated_file} |
| 153 | + COMMENT "${BUNDLE_CMD} ${BUNDLE_CMD_ARGS} ${LJDUMP_OPT_STR} ${source_file} ${generated_file}" |
| 154 | + WORKING_DIRECTORY ${LUA_TARGET_PATH}) |
| 155 | + get_filename_component(basedir ${generated_file} PATH) |
| 156 | + file(MAKE_DIRECTORY ${basedir}) |
| 157 | + |
| 158 | + set(target_srcs ${target_srcs} ${generated_file}) |
| 159 | + set_source_files_properties(${generated_file} |
| 160 | + properties |
| 161 | + external_object |
| 162 | + true # this is an object file |
| 163 | + generated |
| 164 | + true # to say that "it is OK that the obj- |
| 165 | + # files do not exist before build time" |
| 166 | + ) |
| 167 | + else() |
| 168 | + set(target_srcs ${target_srcs} ${file}) |
| 169 | + endif() |
| 170 | + endforeach() |
| 171 | +endmacro() |
| 172 | + |
| 173 | +if(BUNDLE_USE_LUA2C) |
| 174 | + |
| 175 | + macro(LUA_ADD_CUSTOM luajit_target) |
| 176 | + lua_add_custom_commands(${luajit_target} ${ARGN}) |
| 177 | + endmacro() |
| 178 | + |
| 179 | + macro(LUA_ADD_EXECUTABLE luajit_target) |
| 180 | + lua_add_custom_commands(${luajit_target} ${ARGN}) |
| 181 | + add_executable(${luajit_target} ${target_srcs}) |
| 182 | + endmacro() |
| 183 | + |
| 184 | +else() |
| 185 | + |
| 186 | + macro(LUA_ADD_CUSTOM luajit_target) |
| 187 | + luajit_add_custom_commands(${luajit_target} ${ARGN}) |
| 188 | + endmacro() |
| 189 | + |
| 190 | + macro(LUA_ADD_EXECUTABLE luajit_target) |
| 191 | + luajit_add_custom_commands(${luajit_target} ${ARGN}) |
| 192 | + add_executable(${luajit_target} ${target_srcs}) |
| 193 | + endmacro() |
| 194 | + |
| 195 | +endif() |
0 commit comments