Support building on Linux.

By default, Linux uses a locally-built version of core that is prepared
in an independent working copy of the realm-core git repository.

Support is also added for using an existing local build of core on both
OS X and Linux . This can be done by running
`cmake -DREALM_CORE_VERSION=/path/to/realm-core`. The generated build
system will invoke `sh build.sh build` within the given directory prior
to building the object store.
This commit is contained in:
Mark Rowe 2016-03-02 00:21:43 -08:00
parent 062db0e95d
commit 8c56d13382
3 changed files with 94 additions and 3 deletions

2
.gitignore vendored
View File

@ -9,5 +9,5 @@ cmake_install.cmake
rules.ninja rules.ninja
# Build products # Build products
librealm-object-store.dylib src/librealm-object-store.*
tests/tests tests/tests

View File

@ -1,5 +1,26 @@
include(ExternalProject) include(ExternalProject)
if(${CMAKE_GENERATOR} STREQUAL "Unix Makefiles")
set(MAKE_EQUAL_MAKE "MAKE=$(MAKE)")
endif()
if (${CMAKE_VERSION} VERSION_GREATER "3.4.0")
set(USES_TERMINAL_BUILD USES_TERMINAL_BUILD 1)
endif()
function(use_realm_core version_or_path_to_source)
if("${version_or_path_to_source}" MATCHES "^[0-9]+(\\.[0-9])+")
if(APPLE)
download_realm_core(${version_or_path_to_source})
else()
clone_and_build_realm_core("v${version_or_path_to_source}")
endif()
else()
build_existing_realm_core(${version_or_path_to_source})
endif()
set(REALM_CORE_INCLUDE_DIR ${REALM_CORE_INCLUDE_DIR} PARENT_SCOPE)
endfunction()
function(download_realm_core core_version) function(download_realm_core core_version)
set(core_url "https://static.realm.io/downloads/core/realm-core-${core_version}.tar.bz2") set(core_url "https://static.realm.io/downloads/core/realm-core-${core_version}.tar.bz2")
set(core_tarball_name "realm-core-${core_version}.tar.bz2") set(core_tarball_name "realm-core-${core_version}.tar.bz2")
@ -40,3 +61,72 @@ function(download_realm_core core_version)
set(REALM_CORE_INCLUDE_DIR ${core_directory}/include PARENT_SCOPE) set(REALM_CORE_INCLUDE_DIR ${core_directory}/include PARENT_SCOPE)
endfunction() endfunction()
function(clone_and_build_realm_core branch)
set(core_prefix_directory "${CMAKE_CURRENT_SOURCE_DIR}${CMAKE_FILES_DIRECTORY}/realm-core")
ExternalProject_Add(realm-core
GIT_REPOSITORY "git@github.com:realm/realm-core.git"
GIT_TAG ${branch}
PREFIX ${core_prefix_directory}
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND ""
BUILD_COMMAND ${MAKE_EQUAL_MAKE} sh build.sh build
INSTALL_COMMAND ""
${USES_TERMINAL_BUILD}
)
ExternalProject_Get_Property(realm-core SOURCE_DIR)
set(core_directory ${SOURCE_DIR})
set(core_library_debug ${core_directory}/src/realm/librealm-dbg${CMAKE_SHARED_LIBRARY_SUFFIX})
set(core_library_release ${core_directory}/src/realm/librealm${CMAKE_SHARED_LIBRARY_SUFFIX})
set(core_libraries ${core_library_debug} ${core_library_release})
ExternalProject_Add_Step(realm-core ensure-libraries
COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${core_libraries}
OUTPUT ${core_libraries}
DEPENDEES build
)
add_library(realm SHARED IMPORTED)
add_dependencies(realm realm-core)
set_property(TARGET realm PROPERTY IMPORTED_LOCATION_DEBUG ${core_library_debug})
set_property(TARGET realm PROPERTY IMPORTED_LOCATION_RELEASE ${core_library_release})
set_property(TARGET realm PROPERTY IMPORTED_LOCATION ${core_library_release})
set(REALM_CORE_INCLUDE_DIR ${core_directory}/src PARENT_SCOPE)
endfunction()
function(build_existing_realm_core core_directory)
get_filename_component(core_directory ${core_directory} ABSOLUTE)
ExternalProject_Add(realm-core
URL ""
PREFIX ${CMAKE_CURRENT_SOURCE_DIR}${CMAKE_FILES_DIRECTORY}/realm-core
SOURCE_DIR ${core_directory}
BUILD_IN_SOURCE 1
BUILD_ALWAYS 1
CONFIGURE_COMMAND ""
BUILD_COMMAND ${MAKE_EQUAL_MAKE} sh build.sh build
INSTALL_COMMAND ""
${USES_TERMINAL_BUILD}
)
set(core_library_debug ${core_directory}/src/realm/librealm-dbg${CMAKE_SHARED_LIBRARY_SUFFIX})
set(core_library_release ${core_directory}/src/realm/librealm${CMAKE_SHARED_LIBRARY_SUFFIX})
set(core_libraries ${core_library_debug} ${core_library_release})
ExternalProject_Add_Step(realm-core ensure-libraries
COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${core_libraries}
OUTPUT ${core_libraries}
DEPENDEES build
)
add_library(realm SHARED IMPORTED)
add_dependencies(realm realm-core)
set_property(TARGET realm PROPERTY IMPORTED_LOCATION_DEBUG ${core_library_debug})
set_property(TARGET realm PROPERTY IMPORTED_LOCATION_RELEASE ${core_library_release})
set_property(TARGET realm PROPERTY IMPORTED_LOCATION ${core_library_release})
set(REALM_CORE_INCLUDE_DIR ${core_directory}/src PARENT_SCOPE)
endfunction()

View File

@ -7,7 +7,8 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
include(CompilerFlags) include(CompilerFlags)
include(RealmCore) include(RealmCore)
download_realm_core(0.96.2) set(REALM_CORE_VERSION "0.96.2" CACHE STRING "")
use_realm_core(${REALM_CORE_VERSION})
include_directories(${REALM_CORE_INCLUDE_DIR} src external/pegtl) include_directories(${REALM_CORE_INCLUDE_DIR} src external/pegtl)