Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/torch/luajit-rocks.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonan Collobert <ronan@collobert.com>2013-10-25 17:18:38 +0400
committerRonan Collobert <ronan@collobert.com>2013-10-25 17:18:38 +0400
commit53a8fa57eefd4e619b320d1091c326d8d95d7512 (patch)
tree136a7b20586ce35441ef0981e1e2080b86b9f0e7
parent3f881ec4059b9e47d6d40c2058506a2db7d1ec29 (diff)
cmake for luajit
-rw-r--r--luajit/CMakeLists.txt308
1 files changed, 308 insertions, 0 deletions
diff --git a/luajit/CMakeLists.txt b/luajit/CMakeLists.txt
new file mode 100644
index 0000000..f550b96
--- /dev/null
+++ b/luajit/CMakeLists.txt
@@ -0,0 +1,308 @@
+# This CMakeLists.txt has been first taken from LuaDist
+# Copyright (C) 2007-2011 LuaDist.
+# Created by Peter Drahoš
+# Redistribution and use of this file is allowed according to the terms of the MIT license.
+# Debugged and (now seriously) modified by Ronan Collobert, for Torch7
+
+project(LuaJIT C ASM)
+
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6 FATAL_ERROR)
+CMAKE_POLICY(VERSION 2.6)
+
+SET(INSTALL_BIN_SUBDIR "bin" CACHE STRING "installation executable subdirectory name")
+SET(INSTALL_LIB_SUBDIR "lib" CACHE STRING "installation library subdirectory name")
+SET(INSTALL_INCLUDE_SUBDIR "include" CACHE STRING "installation include subdirectory name")
+SET(INSTALL_LUA_PATH_SUBDIR "share/lua/5.1" CACHE STRING "installation library subdirectory name")
+SET(INSTALL_LUA_CPATH_SUBDIR "lib/lua/5.1" CACHE STRING "installation library subdirectory name")
+
+IF(UNIX)
+ IF(NOT CMAKE_INSTALL_PREFIX STREQUAL "/usr/local")
+ ADD_DEFINITIONS(-DLUA_ROOT="${CMAKE_INSTALL_PREFIX}")
+ ENDIF()
+ENDIF()
+
+# RPATH
+IF(UNIX)
+ OPTION(WITH_RPATH "Build library with executable rpaths" ON)
+
+ IF(WITH_RPATH)
+ SET(CMAKE_SKIP_BUILD_RPATH FALSE)
+ SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
+ SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
+ FILE(RELATIVE_PATH INSTALL_BIN2LIB
+ "${CMAKE_INSTALL_PREFIX}/${INSTALL_BIN_SUBDIR}" "${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_SUBDIR}")
+ IF(NOT APPLE)
+ OPTION(WITH_DYNAMIC_RPATH
+ "Build libraries with executable relative rpaths (\$ORIGIN)" ON )
+ ENDIF(NOT APPLE)
+ IF (WITH_DYNAMIC_RPATH OR APPLE)
+ SET(CMAKE_INSTALL_RPATH "\$ORIGIN/${INSTALL_BIN2LIB}")
+ ELSE (WITH_DYNAMIC_RPATH OR APPLE)
+ SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${INSTALL_LIB_SUBDIR}")
+ ENDIF (WITH_DYNAMIC_RPATH OR APPLE)
+ SET(CMAKE_INSTALL_NAME_DIR "@executable_path/${INSTALL_BIN2LIB}")
+ ENDIF(WITH_RPATH)
+ENDIF(UNIX)
+
+# Various includes
+INCLUDE(CheckLibraryExists)
+INCLUDE(CheckFunctionExists)
+INCLUDE(CheckCSourceCompiles)
+INCLUDE(CheckTypeSize)
+
+# LuaJIT specific
+option ( LUAJIT_DISABLE_FFI "Disable FFI." OFF )
+option ( LUAJIT_ENABLE_LUA52COMPAT "Enable Lua 5.2 compatibility." OFF )
+option ( LUAJIT_DISABLE_JIT "Disable JIT." OFF )
+option ( LUAJIT_CPU_SSE2 "Use SSE2 instead of x87 instructions." ON )
+option ( LUAJIT_CPU_NOCMOV "Disable NOCMOV." OFF )
+MARK_AS_ADVANCED(LUAJIT_DISABLE_FFI LUAJIT_ENABLE_LUA52COMPAT LUAJIT_DISABLE_JIT LUAJIT_CPU_SSE2 LUAJIT_CPU_NOCMOV)
+
+IF(LUAJIT_DISABLE_FFI)
+ ADD_DEFINITIONS(-DLUAJIT_DISABLE_FFI)
+ENDIF()
+
+IF(LUAJIT_ENABLE_LUA52COMPAT)
+ ADD_DEFINITIONS(-DLUAJIT_ENABLE_LUA52COMPAT)
+ENDIF()
+
+IF(LUAJIT_DISABLE_JIT)
+ ADD_DEFINITIONS(-DLUAJIT_DISABLE_JIT)
+ENDIF()
+
+IF(LUAJIT_CPU_SSE2)
+ ADD_DEFINITIONS(-DLUAJIT_CPU_SSE2)
+ENDIF()
+
+IF(LUAJIT_CPU_NOCMOV)
+ ADD_DEFINITIONS(-DLUAJIT_CPU_NOCMOV)
+ENDIF()
+######
+
+
+CHECK_TYPE_SIZE("void*" SIZEOF_VOID_P)
+IF(SIZEOF_VOID_P EQUAL 8)
+ ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE)
+ENDIF()
+
+if ( WIN32 AND NOT CYGWIN )
+ set(LUA_BUILD_AS_DLL 1)
+ add_definitions ( -DLUA_BUILD_AS_DLL -DLUAJIT_OS=LUAJIT_OS_WINDOWS)
+ set ( LJVM_MODE coffasm )
+elseif ( APPLE )
+ set ( CMAKE_EXE_LINKER_FLAGS "-pagezero_size 10000 -image_base 100000000 ${CMAKE_EXE_LINKER_FLAGS}" )
+ set ( LJVM_MODE machasm )
+else ()
+ set ( LJVM_MODE elfasm )
+endif ()
+
+IF(NOT WIN32)
+ FIND_LIBRARY(DL_LIBRARY "dl")
+ IF(DL_LIBRARY)
+ SET(CMAKE_REQUIRED_LIBRARIES ${DL_LIBRARY})
+ LIST(APPEND LIBS ${DL_LIBRARY})
+ ENDIF(DL_LIBRARY)
+ CHECK_FUNCTION_EXISTS(dlopen LUA_USE_DLOPEN)
+ IF(NOT LUA_USE_DLOPEN)
+ MESSAGE(FATAL_ERROR "Cannot compile a useful lua.
+Function dlopen() seems not to be supported on your platform.
+Apparently you are not on a Windows platform as well.
+So lua has no way to deal with shared libraries!")
+ ENDIF(NOT LUA_USE_DLOPEN)
+ENDIF(NOT WIN32)
+
+CHECK_LIBRARY_EXISTS(m sin "" LUA_USE_LIBM)
+if ( LUA_USE_LIBM )
+ list ( APPEND LIBS m )
+endif ()
+
+## SOURCES
+INSTALL(FILES src/luaconf.h src/lua.h src/lauxlib.h src/lualib.h
+ DESTINATION "${INSTALL_INCLUDE_SUBDIR}")
+
+MACRO(LJ_TEST_ARCH stuff)
+ CHECK_C_SOURCE_COMPILES("
+#undef ${stuff}
+#include \"lj_arch.h\"
+#if ${stuff}
+int main() { return 0; }
+#else
+#error \"not defined\"
+#endif
+" ${stuff})
+ENDMACRO()
+
+MACRO(LJ_TEST_ARCH_VALUE stuff value)
+ CHECK_C_SOURCE_COMPILES("
+#undef ${stuff}
+#include \"lj_arch.h\"
+#if ${stuff} == ${value}
+int main() { return 0; }
+#else
+#error \"not defined\"
+#endif
+" ${stuff}_${value})
+ENDMACRO()
+
+SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/src)
+FOREACH(arch X64 X86 ARM PPC PPCSPE MIPS)
+ LJ_TEST_ARCH(LJ_TARGET_${arch})
+ if(LJ_TARGET_${arch})
+ STRING(TOLOWER ${arch} TARGET_LJARCH)
+ MESSAGE(STATUS "LuaJIT Target: ${TARGET_LJARCH}")
+ BREAK()
+ ENDIF()
+ENDFOREACH()
+
+IF(NOT TARGET_LJARCH)
+ MESSAGE(FATAL_ERROR "architecture not supported")
+ELSE()
+ MESSAGE(STATUS "LuaJIT target ${TARGET_LJARCH}")
+ENDIF()
+
+SET(DASM_ARCH ${TARGET_LJARCH})
+SET(DASM_FLAGS)
+SET(TARGET_ARCH)
+LIST(APPEND TARGET_ARCH "LUAJIT_TARGET=LUAJIT_ARCH_${TARGET_LJARCH}")
+LJ_TEST_ARCH_VALUE(LJ_ARCH_BITS 64)
+IF(LJ_ARCH_BITS_64)
+ SET(DASM_FLAGS ${DASM_FLAGS} -D P64)
+ENDIF()
+LJ_TEST_ARCH_VALUE(LJ_HASJIT 1)
+IF(LJ_HASJIT_1)
+ SET(DASM_FLAGS ${DASM_FLAGS} -D JIT)
+ENDIF()
+LJ_TEST_ARCH_VALUE(LJ_HASFFI 1)
+IF(LJ_HASFFI_1)
+ SET(DASM_FLAGS ${DASM_FLAGS} -D FFI)
+ENDIF()
+LJ_TEST_ARCH_VALUE(LJ_DUALNUM 1)
+IF(LJ_DUALNUM_1)
+ SET(DASM_FLAGS ${DASM_FLAGS} -D DUALNUM)
+ENDIF()
+LJ_TEST_ARCH_VALUE(LJ_ARCH_HASFPU 1)
+IF(LJ_ARCH_HASFPU_1)
+ SET(DASM_FLAGS ${DASM_FLAGS} -D HASFPU)
+ LIST(APPEND TARGET_ARCH "LJ_ARCH_HASFPU=1")
+ELSE()
+ LIST(APPEND TARGET_ARCH "LJ_ARCH_HASFPU=0")
+ENDIF()
+LJ_TEST_ARCH_VALUE(LJ_ABI_SOFTFP 1)
+IF(NOT LJ_ABI_SOFTFP_1)
+ SET(DASM_FLAGS ${DASM_FLAGS} -D HFABI)
+ LIST(APPEND TARGET_ARCH "LJ_ABI_SOFTFP=0")
+ELSE()
+ LIST(APPEND TARGET_ARCH "LJ_ABI_SOFTFP=1")
+ENDIF()
+IF(WIN32)
+ SET(DASM_FLAGS ${DASM_FLAGS} -LN -D WIN)
+ENDIF()
+IF(TARGET_LJARCH STREQUAL "x86")
+ LJ_TEST_ARCH_VALUE(__SSE2__ 1)
+ IF(__SSE2__1)
+ SET(DASM_FLAGS ${DASM_FLAGS} -D SSE)
+ ENDIF()
+ENDIF()
+IF(TARGET_LJARCH STREQUAL "x64")
+ SET(DASM_ARCH "x86")
+ENDIF()
+IF(TARGET_LJARCH STREQUAL "ppc")
+ LJ_TEST_ARCH_VALUE(LJ_ARCH_SQRT 1)
+ IF(NOT LJ_ARCH_SQRT_1)
+ SET(DASM_FLAGS ${DASM_FLAGS} -D SQRT)
+ ENDIF()
+ LJ_TEST_ARCH_VALUE(LJ_ARCH_PPC64 1)
+ IF(NOT LJ_ARCH_PPC64_1)
+ SET(DASM_FLAGS ${DASM_FLAGS} -D GPR64)
+ ENDIF()
+ENDIF()
+
+add_executable(minilua src/host/minilua.c)
+SET_TARGET_PROPERTIES(minilua PROPERTIES COMPILE_DEFINITIONS "${TARGET_ARCH}")
+CHECK_LIBRARY_EXISTS(m sin "" MINILUA_USE_LIBM)
+if(MINILUA_USE_LIBM)
+ TARGET_LINK_LIBRARIES(minilua m)
+endif()
+
+add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/buildvm_arch.h
+ COMMAND minilua ${CMAKE_CURRENT_SOURCE_DIR}/dynasm/dynasm.lua ${DASM_FLAGS} -o ${CMAKE_CURRENT_BINARY_DIR}/buildvm_arch.h ${CMAKE_CURRENT_SOURCE_DIR}/src/vm_${DASM_ARCH}.dasc
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/dynasm/dynasm.lua minilua
+)
+
+SET(SRC_LJLIB src/lib_base.c src/lib_math.c src/lib_bit.c src/lib_string.c src/lib_table.c
+ src/lib_io.c src/lib_os.c src/lib_package.c src/lib_debug.c src/lib_jit.c src/lib_ffi.c)
+
+SET(SRC_LJCORE src/lj_gc.c src/lj_err.c src/lj_char.c src/lj_bc.c src/lj_obj.c
+ src/lj_str.c src/lj_tab.c src/lj_func.c src/lj_udata.c src/lj_meta.c src/lj_debug.c
+ src/lj_state.c src/lj_dispatch.c src/lj_vmevent.c src/lj_vmmath.c src/lj_strscan.c
+ src/lj_api.c src/lj_lex.c src/lj_parse.c src/lj_bcread.c src/lj_bcwrite.c src/lj_load.c
+ src/lj_ir.c src/lj_opt_mem.c src/lj_opt_fold.c src/lj_opt_narrow.c
+ src/lj_opt_dce.c src/lj_opt_loop.c src/lj_opt_split.c src/lj_opt_sink.c
+ src/lj_mcode.c src/lj_snap.c src/lj_record.c src/lj_crecord.c src/lj_ffrecord.c
+ src/lj_asm.c src/lj_trace.c src/lj_gdbjit.c
+ src/lj_ctype.c src/lj_cdata.c src/lj_cconv.c src/lj_ccall.c src/lj_ccallback.c
+ src/lj_carith.c src/lj_clib.c src/lj_cparse.c
+ src/lj_lib.c src/lj_alloc.c src/lib_aux.c
+ ${SRC_LJLIB} src/lib_init.c)
+
+SET(SRC_BUILDVM src/host/buildvm.c src/host/buildvm_asm.c
+src/host/buildvm_peobj.c src/host/buildvm_lib.c src/host/buildvm_fold.c
+${CMAKE_CURRENT_BINARY_DIR}/buildvm_arch.h)
+
+## GENERATE
+ADD_EXECUTABLE(buildvm ${SRC_BUILDVM})
+SET_TARGET_PROPERTIES(buildvm PROPERTIES COMPILE_DEFINITIONS "${TARGET_ARCH}")
+
+macro(add_buildvm_target _target _mode)
+ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${_target}
+ COMMAND buildvm ARGS -m ${_mode} -o ${CMAKE_CURRENT_BINARY_DIR}/${_target} ${ARGN}
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+ DEPENDS buildvm ${ARGN}
+ )
+endmacro(add_buildvm_target)
+
+if (MSVC)
+ add_buildvm_target ( lj_vm.obj peobj )
+ set (LJ_VM_SRC ${CMAKE_CURRENT_BINARY_DIR}/lj_vm.obj)
+else ()
+ add_buildvm_target ( lj_vm.s ${LJVM_MODE} )
+ set (LJ_VM_SRC ${CMAKE_CURRENT_BINARY_DIR}/lj_vm.s)
+endif ()
+add_buildvm_target ( lj_ffdef.h ffdef ${SRC_LJLIB} )
+add_buildvm_target ( lj_bcdef.h bcdef ${SRC_LJLIB} )
+add_buildvm_target ( lj_folddef.h folddef src/lj_opt_fold.c )
+add_buildvm_target ( lj_recdef.h recdef ${SRC_LJLIB} )
+add_buildvm_target ( lj_libdef.h libdef ${SRC_LJLIB} )
+add_buildvm_target ( vmdef.lua vmdef ${SRC_LJLIB} )
+
+SET(DEPS
+ ${LJ_VM_SRC}
+ ${CMAKE_CURRENT_BINARY_DIR}/lj_ffdef.h
+ ${CMAKE_CURRENT_BINARY_DIR}/lj_bcdef.h
+ ${CMAKE_CURRENT_BINARY_DIR}/lj_libdef.h
+ ${CMAKE_CURRENT_BINARY_DIR}/lj_recdef.h
+ ${CMAKE_CURRENT_BINARY_DIR}/lj_folddef.h
+ ${CMAKE_CURRENT_BINARY_DIR}/vmdef.lua
+ )
+
+## COMPILE
+include_directories(${CMAKE_CURRENT_BINARY_DIR} dynasm src)
+
+add_library(libluajit SHARED ${SRC_LJCORE} ${DEPS} )
+target_link_libraries (libluajit ${LIBS} )
+SET_TARGET_PROPERTIES(libluajit PROPERTIES
+ PREFIX "lib" IMPORT_PREFIX "lib" OUTPUT_NAME "luajit")
+
+add_executable(luajit src/luajit.c)
+target_link_libraries(luajit libluajit)
+
+INSTALL(TARGETS libluajit luajit
+ EXPORT torch-exports
+ RUNTIME DESTINATION "${INSTALL_BIN_SUBDIR}"
+ LIBRARY DESTINATION "${INSTALL_LIB_SUBDIR}"
+ ARCHIVE DESTINATION "${INSTALL_LIB_SUBDIR}")
+
+INSTALL(FILES
+ src/jit/bc.lua src/jit/v.lua src/jit/dump.lua src/jit/dis_x86.lua src/jit/dis_x64.lua src/jit/dis_arm.lua
+ src/jit/dis_ppc.lua src/jit/dis_mips.lua src/jit/dis_mipsel.lua src/jit/bcsave.lua ${CMAKE_CURRENT_BINARY_DIR}/vmdef.lua
+ DESTINATION "${INSTALL_LUA_PATH_SUBDIR}/jit")