Skip to content
Snippets Groups Projects
Commit a5c85349 authored by Nick Zavaritsky's avatar Nick Zavaritsky
Browse files

Merge branch 'bs-fixes'

Build system fixes on osx, +misc.
parents e03f6223 035ccd87
No related branches found
No related tags found
No related merge requests found
......@@ -80,10 +80,9 @@ set(CMAKE_REQUIRED_FLAGS "")
#
# Perform build type specific configuration.
#
if (CMAKE_COMPILER_IS_GNUCC)
check_c_compiler_flag("-ggdb" CC_HAS_GGDB)
if (CC_HAS_GGDB)
set (CC_DEBUG_OPT "-ggdb")
else()
set (CC_DEBUG_OPT "-g")
endif()
set (CMAKE_C_FLAGS_DEBUG
......
......@@ -129,52 +129,56 @@ message (STATUS "Use LuaJIT includes: ${LUAJIT_INCLUDE}")
message (STATUS "Use LuaJIT library: ${LUAJIT_LIB}")
macro(luajit_build)
set (luajit_buildoptions BUILDMODE=static)
set (luajit_copt "")
set (luajit_xcflags "")
set (luajit_cc ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1})
# Cmake rules concerning strings and lists of strings are weird.
# set (foo "1 2 3") defines a string, while
# set (foo 1 2 3) defines a list.
# Use separate_arguments() to turn a string into a list (splits at ws).
# It appears that variable expansion rules are context-dependent.
# With the current arrangement add_custom_command()
# does the right thing. We can even handle pathnames with
# spaces though a path with an embeded semicolon or a quotation mark
# will most certainly wreak havok.
#
# This stuff is extremely fragile, proceed with caution.
set (luajit_cflags ${CMAKE_C_FLAGS})
separate_arguments(luajit_cflags)
set (luajut_ldflags ${CMAKE_STATIC_LINKER_FLAGS})
separate_arguments(luajit_ldflags)
# Use external unwind on all platforms.
set (luajit_xcflags "-DLUAJIT_UNWIND_EXTERNAL=1")
# We are consciously ommiting debug info in RelWithDebugInfo mode
if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
set (luajit_buildoptions ${luajit_buildoptions} CCDEBUG=${CC_DEBUG_OPT})
set (luajit_copt ${luajit_copt} -O1)
set (luajit_ccopt -O0)
if (CC_HAS_GGDB)
set (luajit_ccdebug -g -ggdb)
else ()
set (luajit_ccdebug -g)
endif ()
set (luajit_xcflags ${luajit_xcflags}
-DLUA_USE_APICHECK -DLUA_USE_ASSERT)
else ()
set (luajit_copt ${luajit_copt} -O2)
set (luajit_cсopt -O2)
set (luajit_ccdbebug "")
endif()
# Pass sysroot settings on OSX
if (NOT "${CMAKE_OSX_SYSROOT}" STREQUAL "")
set (luajit_cflags ${luajit_cflags} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT})
set (luajit_ldflags ${luajit_ldlags} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT})
endif()
if (ENABLE_VALGRIND)
set (luajit_xcflags ${luajit_xcflags}
-DLUAJIT_USE_VALGRIND -DLUAJIT_USE_SYSMALLOC)
endif()
set (luajit_target_cc "${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1} ${CMAKE_C_FLAGS}")
# Use external unwind on all platforms.
set (luajit_target_cc "${luajit_target_cc} -DLUAJIT_UNWIND_EXTERNAL=1")
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL ${CMAKE_HOST_SYSTEM_PROCESSOR})
# Regular mode - use CMake compiler for building host utils.
set (luajit_host_cc ${CMAKE_C_COMPILER} ${CMAKE_C_COMPILER_ARG1} ${CMAKE_C_FLAGS})
else()
# Crosscompile mode - use a host CC compiler for building host utils.
# Since CMake does not support cross compilation properly
# we have to use system CC here.
set (luajit_host_cc "cc")
endif()
if (${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64" AND
${CMAKE_SIZEOF_VOID_P} EQUAL 4)
# The host compiler must have same pointer size as the target compiler.
set (luajit_host_cc "${luajit_host_cc} -m32")
endif()
set(luajit_ldflags "${CMAKE_SHARED_LINKER_FLAGS}")
separate_arguments(luajit_copt)
separate_arguments(luajit_ldflags)
separate_arguments(luajit_host_cc)
separate_arguments(luajit_target_cc)
set (luajit_buildoptions ${luajit_buildoptions}
CFLAGS=""
CXXFLAGS=""
set (luajit_buildoptions
BUILDMODE=static
CC="${luajit_cc}"
CFLAGS="${luajit_cflags}"
LDFLAGS="${luajit_ldflags}"
CCOPT="${luajit_ccopt}"
CCDEBUG="${luajit_ccdebug}"
XCFLAGS="${luajit_xcflags}"
CC="${luajit_host_cc}"
HOST_CC="${luajit_host_cc}"
TARGET_CC="${luajit_target_cc}"
CCOPT="${luajit_copt}")
set (luajit_buildoptions ${luajit_buildoptions} Q='' LDFLAGS="${luajit_ldflags}")
Q='')
if (${PROJECT_BINARY_DIR} STREQUAL ${PROJECT_SOURCE_DIR})
add_custom_command(OUTPUT ${PROJECT_BINARY_DIR}/third_party/luajit/src/libluajit.a
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/third_party/luajit
......
......@@ -2,6 +2,7 @@
function(rebuild_module_api)
set (dstfile "${CMAKE_CURRENT_BINARY_DIR}/tarantool.h")
set (tmpfile "${dstfile}.new")
set (errcodefile "${CMAKE_CURRENT_BINARY_DIR}/errcode.i")
set (headers)
# Get absolute path for header files (required of out-of-source build)
foreach (header ${ARGN})
......@@ -12,16 +13,24 @@ function(rebuild_module_api)
endif()
endforeach()
set (cflags ${CMAKE_C_FLAGS})
separate_arguments(cflags)
# Pass sysroot settings on OSX
if (NOT "${CMAKE_OSX_SYSROOT}" STREQUAL "")
set (cflags ${cflags} ${CMAKE_C_SYSROOT_FLAG} ${CMAKE_OSX_SYSROOT})
endif()
add_custom_command(OUTPUT ${dstfile}
COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/tarantool_header.h > ${tmpfile}
COMMAND cat ${headers} | ${CMAKE_SOURCE_DIR}/extra/apigen >> ${tmpfile}
COMMAND ${CMAKE_C_COMPILER}
${cflags}
-I ${CMAKE_SOURCE_DIR}/src -I ${CMAKE_BINARY_DIR}/src
-E ${CMAKE_SOURCE_DIR}/src/box/errcode.h |
grep "enum box_error_code" >> ${tmpfile}
-E ${CMAKE_SOURCE_DIR}/src/box/errcode.h > ${errcodefile}
COMMAND
grep "enum box_error_code" ${errcodefile} >> ${tmpfile}
COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/tarantool_footer.h >> ${tmpfile}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${tmpfile} ${dstfile}
COMMAND ${CMAKE_COMMAND} -E remove ${tmpfile}
COMMAND ${CMAKE_COMMAND} -E remove ${errcodefile} ${tmpfile}
DEPENDS ${srcfiles} ${CMAKE_SOURCE_DIR}/src/box/errcode.h
${CMAKE_CURRENT_SOURCE_DIR}/tarantool_header.h
${CMAKE_CURRENT_SOURCE_DIR}/tarantool_footer.h
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment