diff --git a/cmake/utils.cmake b/cmake/utils.cmake
index 3fee04483fe82f72c02ff35b75b92dafc69f0da8..3ab2d3ff24611f8599789388c0d7339f1ce8ff57 100644
--- a/cmake/utils.cmake
+++ b/cmake/utils.cmake
@@ -39,9 +39,15 @@ endmacro(set_source_files_compile_flags)
 
 # A helper function to compile *.lua source into *.lua.c sources
 function(lua_source varname filename)
-    set (srcfile "${CMAKE_CURRENT_SOURCE_DIR}/${filename}")
-    set (tmpfile "${CMAKE_CURRENT_BINARY_DIR}/${filename}.new.c")
-    set (dstfile "${CMAKE_CURRENT_BINARY_DIR}/${filename}.c")
+    if (IS_ABSOLUTE "${filename}")
+        set (srcfile "${filename}")
+        set (tmpfile "${filename}.new.c")
+        set (dstfile "${filename}.c")
+    else(IS_ABSOLUTE "${filename}")
+        set (srcfile "${CMAKE_CURRENT_SOURCE_DIR}/${filename}")
+        set (tmpfile "${CMAKE_CURRENT_BINARY_DIR}/${filename}.new.c")
+        set (dstfile "${CMAKE_CURRENT_BINARY_DIR}/${filename}.c")
+    endif(IS_ABSOLUTE "${filename}")
     get_filename_component(module ${filename} NAME_WE)
     get_filename_component(_name ${dstfile} NAME)
     string(REGEX REPLACE "${_name}$" "" dstdir ${dstfile})
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index d9b2b88c8d51ce860d5a48ab6f686ae746c03432..10d6e179aac9ef994187c961e88f6be390908eac 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -32,18 +32,20 @@ lua_source(lua_sources lua/fio.lua)
 lua_source(lua_sources lua/strict.lua)
 lua_source(lua_sources ../third_party/luafun/fun.lua)
 # LuaJIT jit.* library
-lua_source(lua_sources ../third_party/luajit/src/jit/bc.lua)
-lua_source(lua_sources ../third_party/luajit/src/jit/bcsave.lua)
-lua_source(lua_sources ../third_party/luajit/src/jit/dis_x86.lua)
-lua_source(lua_sources ../third_party/luajit/src/jit/dis_x64.lua)
-lua_source(lua_sources ../third_party/luajit/src/jit/dump.lua)
-lua_source(lua_sources ../third_party/luajit/src/jit/vmdef.lua)
-lua_source(lua_sources ../third_party/luajit/src/jit/v.lua)
-if (EXISTS ${PROJECT_BINARY_DIR}/third_party/luajit/src/jit/p.lua)
-    # Profiler LuaJIT 2.1+
-    lua_source(lua_sources ../third_party/luajit/src/jit/p.lua)
-    lua_source(lua_sources ../third_party/luajit/src/jit/zone.lua)
-endif()
+if (EXISTS "${CMAKE_BINARY_DIR}/third_party/luajit/src/jit/")
+    lua_source(lua_sources "${CMAKE_BINARY_DIR}/third_party/luajit/src/jit/bc.lua")
+    lua_source(lua_sources "${CMAKE_BINARY_DIR}/third_party/luajit/src/jit/bcsave.lua")
+    lua_source(lua_sources "${CMAKE_BINARY_DIR}/third_party/luajit/src/jit/dis_x86.lua")
+    lua_source(lua_sources "${CMAKE_BINARY_DIR}/third_party/luajit/src/jit/dis_x64.lua")
+    lua_source(lua_sources "${CMAKE_BINARY_DIR}/third_party/luajit/src/jit/dump.lua")
+    lua_source(lua_sources "${CMAKE_BINARY_DIR}/third_party/luajit/src/jit/vmdef.lua")
+    lua_source(lua_sources "${CMAKE_BINARY_DIR}/third_party/luajit/src/jit/v.lua")
+    if (EXISTS "${PROJECT_BINARY_DIR}/third_party/luajit/src/jit/p.lua")
+        # Profiler LuaJIT 2.1+
+        lua_source(lua_sources "${CMAKE_BINARY_DIR}/third_party/luajit/src/jit/p.lua")
+        lua_source(lua_sources "${CMAKE_BINARY_DIR}/third_party/luajit/src/jit/zone.lua")
+    endif()
+endif(EXISTS "${CMAKE_BINARY_DIR}/third_party/luajit/src/jit/")
 
 add_custom_target(generate_lua_sources
     WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src/box