# # Download sqlite3 amalgamation sources from https://www.sqlite.org/download.html # cmake_minimum_required(VERSION 3.10.3) #project(sqlite3) option(SQLITE_BUILD_STATIC "Build SQLite3 static library" ON) option(SQLITE_BUILD_SHARED "Build SQLite3 shared library" OFF) option(WITH_SQLITE_DEBUG "Build SQLite3 debug features" OFF) option(WITH_SQLITE_MEMDEBUG "Build SQLite3 memory debug features" OFF) option(WITH_SQLITE_RTREE "Build R*Tree index extension" OFF) option(WITH_SQLITE_THREADSAFE "Build SQLite3 threadsafe" OFF) #set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables") #set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries") #set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers") set(SQLITE3_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}) add_library(sqlite_int INTERFACE) # detect version file(STRINGS "${SQLITE3_SOURCE_DIR}/src/sqlite3.h" _sqlite_api_h_VER_STRING REGEX ".*#define[ ]+SQLITE_VERSION[ ]+") string(REGEX MATCH "[0-9\\.]+" SQLITE_VER_STRING ${_sqlite_api_h_VER_STRING}) string(REGEX MATCHALL "[0-9]+" _sqlite_ver_LIST "${SQLITE_VER_STRING}") list(LENGTH _sqlite_ver_LIST _sqlite_list_len) list(GET _sqlite_ver_LIST 0 SQLITE_VER_MAJOR) list(GET _sqlite_ver_LIST 1 SQLITE_VER_MINOR) list(GET _sqlite_ver_LIST 2 SQLITE_VER_PATCH) if(_sqlite_list_len EQUAL 4) list(GET _sqlite_ver_LIST 3 SQLITE_VER_PATCHLEVEL) message("Patch level: ${SQLITE_VER_PATCHLEVEL}") endif() message("SQLite3 version = ${SQLITE_VER_STRING}") set(SQLITE_DYN_NAME "sqlite${SQLITE_VER_MAJOR}") set(SQLITE_STATIC_NAME "bundled_${SQLITE_DYN_NAME}") # os specific if(WIN32) set(SQLITE_WIN_BUILD ON) else() set(SQLITE_WIN_BUILD OFF) # FIXME/REWORK: rework this, split into linux/unix/apple, cross-compile #set(CMAKE_SYSTEM_PROCESSOR i386) #message(STATUS "Forcing ${CMAKE_SYSTEM_PROCESSOR} to cross compile 32bit") #set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS OFF) #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m32") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32") #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32") #set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32 -ldl") #set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -m32 -ldl") #set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -ldl") # probably not needed #set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -ldl") target_link_libraries(sqlite_int INTERFACE dl) endif() if(MINGW OR UNIX) target_compile_options(sqlite_int INTERFACE "-Wno-attributes") # this is required for bundled 64bit sqlite3 lib # http://stackoverflow.com/questions/7216244/why-is-fpic-absolutely-necessary-on-64-and-not-on-32bit-platforms if(NOT CROSS_COMPILE32) # set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") target_compile_options(sqlite_int INTERFACE "-fPIC") # set_target_properties(sqlite_int PROPERTIES POSITION_INDEPENDENT_CODE ON) endif(NOT CROSS_COMPILE32) endif() # add include path for project target_include_directories(sqlite_int INTERFACE ${SQLITE3_SOURCE_DIR}/src) set(SRC_LIB_FILE ${SQLITE3_SOURCE_DIR}/src/sqlite${SQLITE_VER_MAJOR}.c) file(GLOB HDR_FILES ${SQLITE3_SOURCE_DIR}/src/*.h) # set explicit fast-math flag for sqlite3 (required for floating point support) set_source_files_properties(HDR_FILES PROPERTIES COMPILE_FLAGS -ffast-math) target_compile_definitions(sqlite_int INTERFACE SQLITE_HAVE_ISNAN=1) # required for -ffast-math with GCC # adding compilation flags depending on options if(WITH_SQLITE_DEBUG) target_compile_definitions(sqlite_int INTERFACE SQLITE_DEBUG) endif() if(WITH_SQLITE_MEMDEBUG) target_compile_definitions(sqlite_int INTERFACE SQLITE_MEMDEBUG) endif() if(WITH_SQLITE_RTREE) target_compile_definitions(sqlite_int INTERFACE SQLITE_ENABLE_RTREE) endif() if(WITH_SQLITE_THREADSAFE) target_compile_definitions(sqlite_int INTERFACE SQLITE_THREADSAFE=1) else() message("SQLite3 threadsafe is disabled") target_compile_definitions(sqlite_int INTERFACE SQLITE_THREADSAFE=0) endif() #if(SQLITE_BUILD_SHARED) # list(APPEND TO_INSTALL ${SQLITE_DYN_NAME}) #endif() #if(SQLITE_BUILD_STATIC) # list(APPEND TO_INSTALL ${SQLITE_STATIC_NAME}) #endif() if (SQLITE_BUILD_STATIC) # build static library add_library(${SQLITE_STATIC_NAME} STATIC ${SRC_LIB_FILE}) target_link_libraries(${SQLITE_STATIC_NAME} PUBLIC sqlite_int) endif() if (SQLITE_BUILD_SHARED) # build dynamic library add_library(${SQLITE_DYN_NAME} SHARED ${SRC_LIB_FILE}) if (SQLITE_WIN_BUILD) #then we do dll library, so need to export api set_target_properties(${SQLITE_DYN_NAME} PROPERTIES DEFINE_SYMBOL "SQLITE_API=__declspec(dllexport)") endif() target_link_libraries(${SQLITE_DYN_NAME} PUBLIC sqlite_int) endif() #install(TARGETS ${TO_INSTALL} # RUNTIME DESTINATION "${INSTALL_BIN_DIR}" # ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" # LIBRARY DESTINATION "${INSTALL_LIB_DIR}" ) #install(FILES ${HDR_FILES} DESTINATION "${INSTALL_INC_DIR}")