summaryrefslogtreecommitdiff
path: root/cmake/mbgl.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/mbgl.cmake')
-rw-r--r--cmake/mbgl.cmake236
1 files changed, 0 insertions, 236 deletions
diff --git a/cmake/mbgl.cmake b/cmake/mbgl.cmake
deleted file mode 100644
index 279ead6eb2..0000000000
--- a/cmake/mbgl.cmake
+++ /dev/null
@@ -1,236 +0,0 @@
-if (NOT MBGL_PLATFORM)
- if (CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
- set(MBGL_PLATFORM "macos")
- else()
- set(MBGL_PLATFORM "linux")
- endif()
-endif()
-
-if(MBGL_WITH_OPENGL)
- add_definitions(-DMBGL_RENDER_BACKEND_OPENGL=1)
-endif()
-
-if(WITH_NODEJS)
- find_program(NodeJS_EXECUTABLE NAMES nodejs node)
- if (NOT NodeJS_EXECUTABLE)
- message(FATAL_ERROR "Could not find Node.js")
- endif()
-
- find_program(npm_EXECUTABLE NAMES npm)
- if (NOT npm_EXECUTABLE)
- message(FATAL_ERROR "Could not find npm")
- endif()
-
- execute_process(
- COMMAND "${NodeJS_EXECUTABLE}" -e "process.stdout.write(process.versions.node)"
- RESULT_VARIABLE _STATUS_CODE
- OUTPUT_VARIABLE NodeJS_VERSION
- ERROR_VARIABLE _STATUS_MESSAGE
- )
- if(NOT _STATUS_CODE EQUAL 0)
- message(FATAL_ERROR "Could not detect Node.js version: ${_STATUS_MESSAGE}")
- endif()
-
- execute_process(
- COMMAND "${NodeJS_EXECUTABLE}" -e "process.stdout.write(process.versions.modules)"
- RESULT_VARIABLE _STATUS_CODE
- OUTPUT_VARIABLE NodeJS_ABI
- ERROR_VARIABLE _STATUS_MESSAGE
- )
- if(NOT _STATUS_CODE EQUAL 0)
- message(FATAL_ERROR "Could not detect Node.js ABI version: ${_STATUS_MESSAGE}")
- endif()
-
- function(_npm_install DIRECTORY NAME ADDITIONAL_DEPS)
- SET(NPM_INSTALL_FAILED FALSE)
- if("${DIRECTORY}/package.json" IS_NEWER_THAN "${DIRECTORY}/node_modules/.${NAME}.stamp")
- message(STATUS "Running 'npm install' for ${NAME}...")
- execute_process(
- COMMAND "${NodeJS_EXECUTABLE}" "${npm_EXECUTABLE}" install --verbose --ignore-scripts
- WORKING_DIRECTORY "${DIRECTORY}"
- RESULT_VARIABLE NPM_INSTALL_FAILED
- OUTPUT_VARIABLE NPM_OUTPUT
- ERROR_VARIABLE NPM_OUTPUT)
- message(STATUS "Finished 'npm install' for ${NAME}...")
- if(NOT NPM_INSTALL_FAILED)
- execute_process(COMMAND ${CMAKE_COMMAND} -E touch "${DIRECTORY}/node_modules/.${NAME}.stamp")
- else()
- message(FATAL_ERROR "NPM install failed:\n${NPM_OUTPUT}")
- endif()
- endif()
-
- add_custom_command(
- OUTPUT "${DIRECTORY}/node_modules/.${NAME}.stamp"
- COMMAND "${NodeJS_EXECUTABLE}" "${npm_EXECUTABLE}" install --ignore-scripts
- COMMAND ${CMAKE_COMMAND} -E touch "${DIRECTORY}/node_modules/.${NAME}.stamp"
- WORKING_DIRECTORY "${DIRECTORY}"
- DEPENDS ${ADDITIONAL_DEPS} "${DIRECTORY}/package.json"
- COMMENT "Running 'npm install' for ${NAME}...")
- endfunction()
-
- # Run submodule update
- set(MBGL_SUBMODULES mapbox-gl-js)
- if(MBGL_PLATFORM STREQUAL "ios")
- list(APPEND MBGL_SUBMODULES platform/ios/vendor/mapbox-events-ios)
- endif()
- if(MBGL_PLATFORM STREQUAL "ios" OR MBGL_PLATFORM STREQUAL "macos")
- list(APPEND MBGL_SUBMODULES platform/darwin/docs/theme)
- endif()
-
- message(STATUS "Updating submodules...")
- execute_process(
- COMMAND git submodule update --init ${MBGL_SUBMODULES}
- WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}")
-
- if(NOT EXISTS "${CMAKE_SOURCE_DIR}/mapbox-gl-js/node_modules")
- # Symlink mapbox-gl-js/node_modules so that the modules that are
- # about to be installed get cached between CI runs.
- execute_process(
- COMMAND ln -sF ../node_modules .
- WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/mapbox-gl-js")
- endif()
-
- # Add target for running submodule update during builds
- add_custom_target(
- update-submodules ALL
- COMMAND git submodule update --init ${MBGL_SUBMODULES}
- WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
- COMMENT "Updating submodules..."
- )
- set_target_properties(update-submodules PROPERTIES FOLDER "Misc")
-
- # Run npm install for both directories, and add custom commands, and a target that depends on them.
- _npm_install("${CMAKE_SOURCE_DIR}" mapbox-gl-native update-submodules)
- _npm_install("${CMAKE_SOURCE_DIR}/mapbox-gl-js/test/integration" mapbox-gl-js "${CMAKE_SOURCE_DIR}/node_modules/.mapbox-gl-native.stamp")
- add_custom_target(
- npm-install ALL
- DEPENDS "${CMAKE_SOURCE_DIR}/node_modules/.mapbox-gl-js.stamp"
- )
- set_target_properties(npm-install PROPERTIES FOLDER "Misc")
-endif()
-
-# Generate source groups so the files are properly sorted in IDEs like Xcode.
-function(create_source_groups target)
- get_target_property(type ${target} TYPE)
- if(type AND type STREQUAL "INTERFACE_LIBRARY")
- get_target_property(sources ${target} INTERFACE_SOURCES)
- else()
- get_target_property(sources ${target} SOURCES)
- endif()
- foreach(file ${sources})
- get_filename_component(file "${file}" ABSOLUTE)
- string(REGEX REPLACE "^${CMAKE_SOURCE_DIR}/" "" group "${file}")
- get_filename_component(group "${group}" DIRECTORY)
- string(REPLACE "/" "\\" group "${group}")
- source_group("${group}" FILES "${file}")
- endforeach()
-endfunction()
-
-function(load_sources_list VAR FILELIST)
- set(_FILES)
- file(READ "${FILELIST}" _LINES)
- # Note: this isn't really parsing JSON, but it's good enough for our purposes.
- set(_REGEX "(^|\n) *(\"([^\"]+)\" *: *)?\"([^\"]+)\",?(\n|$)")
- string(REGEX MATCHALL "${_REGEX}" _MATCHES "${_LINES}")
- foreach(_MATCH IN LISTS _MATCHES)
- string(REGEX MATCH "${_REGEX}" _FILE "${_MATCH}")
- if (_FILE AND NOT CMAKE_MATCH_3 STREQUAL "//")
- list(APPEND _FILES "${CMAKE_SOURCE_DIR}/${CMAKE_MATCH_4}")
- endif()
- endforeach()
- set(${VAR} "${_FILES}" PARENT_SCOPE)
- set_property(DIRECTORY "${CMAKE_SOURCE_DIR}" APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${FILELIST}")
-endfunction()
-
-function(target_sources_from_file TARGET TYPE FILELIST)
- load_sources_list(_FILELIST "${FILELIST}")
- target_sources(${TARGET} ${TYPE} "${_FILELIST}")
-endfunction()
-
-# Creates a library target for a vendored dependency
-function(add_vendor_target NAME TYPE)
- set(INCLUDE_TYPE "INTERFACE")
- set(SOURCE_TYPE "INTERFACE")
- if (TYPE STREQUAL "STATIC" OR TYPE STREQUAL "SHARED")
- add_library(${NAME} ${TYPE} "${CMAKE_CURRENT_SOURCE_DIR}/cmake/empty.cpp")
- set(INCLUDE_TYPE "PUBLIC")
- set(SOURCE_TYPE "PRIVATE")
- set_target_properties(${NAME} PROPERTIES SOURCES "")
- else()
- add_library(${NAME} ${TYPE})
- endif()
- set_target_properties(${NAME} PROPERTIES INTERFACE_SOURCES "")
- file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/vendor/${NAME}/files.txt" FILES)
- foreach(FILE IN LISTS FILES)
- target_sources(${NAME} ${SOURCE_TYPE} "${CMAKE_CURRENT_SOURCE_DIR}/vendor/${NAME}/${FILE}")
- endforeach()
- target_include_directories(${NAME} SYSTEM ${INCLUDE_TYPE} "${CMAKE_CURRENT_SOURCE_DIR}/vendor/${NAME}/include")
- create_source_groups(${NAME})
-endfunction()
-
-# This little macro lets you set any XCode specific property
-macro(set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
- set_property(TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
-endmacro (set_xcode_property)
-
-function(set_xcconfig_target_properties target)
- # Create a list of linked libraries for use in the xcconfig generation script.
- get_property(result TARGET ${target} PROPERTY INTERFACE_LINK_LIBRARIES)
- string(GENEX_STRIP "${result}" result)
- # Remove target names from the list of linker flags, since Xcode can't deal with them.
- set(link_flags)
- foreach(item IN LISTS result)
- if (NOT TARGET ${item})
- list(APPEND link_flags ${item})
- endif()
- endforeach()
- string(REGEX REPLACE "(^|;)-framework " "\\1-framework;" link_flags "${link_flags}")
- string(REPLACE ";" "\" \"" link_flags "${link_flags}")
- set_xcode_property(${target} XCCONFIG_LINK_LIBRARIES "${link_flags}")
-endfunction()
-
-# Set Xcode project build settings to be consistent with the CXX flags we're
-# using. (Otherwise, Xcode's defaults may override some of these.)
-function(initialize_xcode_cxx_build_settings target)
- # -Wall
- set_xcode_property(${target} GCC_WARN_SIGN_COMPARE YES)
- set_xcode_property(${target} GCC_WARN_UNINITIALIZED_AUTOS YES)
- set_xcode_property(${target} GCC_WARN_UNKNOWN_PRAGMAS YES)
- set_xcode_property(${target} GCC_WARN_UNUSED_FUNCTION YES)
- set_xcode_property(${target} GCC_WARN_UNUSED_LABEL YES)
- set_xcode_property(${target} GCC_WARN_UNUSED_PARAMETER YES)
- set_xcode_property(${target} GCC_WARN_UNUSED_VARIABLE YES)
-
- # -Wextra
- set_xcode_property(${target} CLANG_WARN_EMPTY_BODY YES)
- set_xcode_property(${target} GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS YES)
-
- # -Wshadow
- set_xcode_property(${target} GCC_WARN_SHADOW YES)
-
- # -Wnon-virtual-dtor
- set_xcode_property(${target} GCC_WARN_NON_VIRTUAL_DESTRUCTOR YES)
-
- # -Wnon-literal-conversion
- set_xcode_property(${target} CLANG_WARN_NON_LITERAL_NULL_CONVERSION YES)
-
- # -Wrange-loop-analysis
- set_xcode_property(${target} CLANG_WARN_RANGE_LOOP_ANALYSIS YES)
-
- # -flto
- set_xcode_property(${target} LLVM_LTO $<$<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>>:YES>)
-
- # Make all build configurations debuggable — except Release.
- set_xcode_property(${target} GCC_GENERATE_DEBUGGING_SYMBOLS $<$<NOT:$<CONFIG:Release>>:YES>)
-
- # -Wunguarded-availability
- set_xcode_property(${target} CLANG_WARN_UNGUARDED_AVAILABILITY YES_AGGRESSIVE)
-
- if (DEFINED ENV{CI})
- set_xcode_property(${target} COMPILER_INDEX_STORE_ENABLE NO)
- endif()
-endfunction()
-
-# CMake 3.1 does not have this yet.
-set(CMAKE_CXX14_STANDARD_COMPILE_OPTION "-std=c++14")
-set(CMAKE_CXX14_EXTENSION_COMPILE_OPTION "-std=gnu++14")