From fc48ca18018564e26f0498c4f59f77374c1cadbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Tue, 4 Jul 2017 14:19:25 +0200 Subject: [build] use CMake to generate Xcode schemes --- cmake/benchmark.cmake | 7 ++++ cmake/core.cmake | 2 + cmake/executable.xcscheme | 102 ++++++++++++++++++++++++++++++++++++++++++++++ cmake/glfw.cmake | 13 ++++++ cmake/library.xcscheme | 80 ++++++++++++++++++++++++++++++++++++ cmake/loop-darwin.cmake | 2 + cmake/loop-uv.cmake | 2 + cmake/node.cmake | 34 ++++++++++++++++ cmake/node.xcscheme | 95 ++++++++++++++++++++++++++++++++++++++++++ cmake/offline.cmake | 15 +++++++ cmake/render.cmake | 19 +++++++++ cmake/test.cmake | 11 +++++ cmake/xcode.cmake | 75 ++++++++++++++++++++++++++++++++++ 13 files changed, 457 insertions(+) create mode 100644 cmake/executable.xcscheme create mode 100644 cmake/library.xcscheme create mode 100644 cmake/node.xcscheme create mode 100644 cmake/xcode.cmake (limited to 'cmake') diff --git a/cmake/benchmark.cmake b/cmake/benchmark.cmake index f4c59fa01e..1dfca27e6c 100644 --- a/cmake/benchmark.cmake +++ b/cmake/benchmark.cmake @@ -25,3 +25,10 @@ target_add_mason_package(mbgl-benchmark PRIVATE vector-tile) mbgl_platform_benchmark() create_source_groups(mbgl-benchmark) + +xcode_create_scheme( + TARGET mbgl-benchmark + OPTIONAL_ARGS + "--benchmark_filter=Category.*" + "--benchmark_repetitions=1" +) diff --git a/cmake/core.cmake b/cmake/core.cmake index c4e4d2abc7..ff2b4ba53c 100644 --- a/cmake/core.cmake +++ b/cmake/core.cmake @@ -32,3 +32,5 @@ target_add_mason_package(mbgl-core PRIVATE vector-tile) mbgl_platform_core() create_source_groups(mbgl-core) + +xcode_create_scheme(TARGET mbgl-core) diff --git a/cmake/executable.xcscheme b/cmake/executable.xcscheme new file mode 100644 index 0000000000..44146a621d --- /dev/null +++ b/cmake/executable.xcscheme @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + ${XCSCHEME_COMMAND_LINE_ARGS} + + + + + + + + + + + + + + + + + + + diff --git a/cmake/glfw.cmake b/cmake/glfw.cmake index 744477e39a..b176fbb5bc 100644 --- a/cmake/glfw.cmake +++ b/cmake/glfw.cmake @@ -43,3 +43,16 @@ target_add_mason_package(mbgl-glfw PRIVATE variant) mbgl_platform_glfw() create_source_groups(mbgl-glfw) + +xcode_create_scheme( + TARGET mbgl-glfw + OPTIONAL_ARGS + "--style=file.json" + "--lon=0" + "--lat=0" + "--zoom=1" + "--bearing=0" + "--pitch=0" + "--fullscreen" + "--benchmark" +) diff --git a/cmake/library.xcscheme b/cmake/library.xcscheme new file mode 100644 index 0000000000..320a2f851f --- /dev/null +++ b/cmake/library.xcscheme @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/cmake/loop-darwin.cmake b/cmake/loop-darwin.cmake index 92ea631809..46511d2548 100644 --- a/cmake/loop-darwin.cmake +++ b/cmake/loop-darwin.cmake @@ -17,3 +17,5 @@ target_include_directories(mbgl-loop-darwin ) create_source_groups(mbgl-loop-darwin) + +xcode_create_scheme(TARGET mbgl-loop-darwin) \ No newline at end of file diff --git a/cmake/loop-uv.cmake b/cmake/loop-uv.cmake index 182b0d6f90..8840040963 100644 --- a/cmake/loop-uv.cmake +++ b/cmake/loop-uv.cmake @@ -19,3 +19,5 @@ target_link_libraries(mbgl-loop-uv ) create_source_groups(mbgl-loop-uv) + +xcode_create_scheme(TARGET mbgl-loop-uv) \ No newline at end of file diff --git a/cmake/node.cmake b/cmake/node.cmake index 6833cb983f..8626534271 100644 --- a/cmake/node.cmake +++ b/cmake/node.cmake @@ -53,3 +53,37 @@ add_custom_command( mbgl_platform_node() create_source_groups(mbgl-node) + +xcode_create_scheme( + TARGET mbgl-node +) + +xcode_create_scheme( + TARGET mbgl-node + TYPE node + NAME "node tests" + ARGS + "`npm bin tape`/tape platform/node/test/js/**/*.test.js" +) + +xcode_create_scheme( + TARGET mbgl-node + TYPE node + NAME "node render tests" + ARGS + "platform/node/test/render.test.js" + OPTIONAL_ARGS + "group" + "test" +) + +xcode_create_scheme( + TARGET mbgl-node + TYPE node + NAME "node query tests" + ARGS + "platform/node/test/query.test.js" + OPTIONAL_ARGS + "group" + "test" +) diff --git a/cmake/node.xcscheme b/cmake/node.xcscheme new file mode 100644 index 0000000000..0daffa46e6 --- /dev/null +++ b/cmake/node.xcscheme @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + ${XCSCHEME_COMMAND_LINE_ARGS} + + + + + + + + + + + + + + + + + + + diff --git a/cmake/offline.cmake b/cmake/offline.cmake index d0124e661f..1ec3f61e36 100644 --- a/cmake/offline.cmake +++ b/cmake/offline.cmake @@ -25,3 +25,18 @@ target_add_mason_package(mbgl-offline PRIVATE boost_libprogram_options) mbgl_platform_offline() create_source_groups(mbgl-offline) + +xcode_create_scheme( + TARGET mbgl-offline + OPTIONAL_ARGS + "--style=file.json" + "--north=37.2" + "--west=-122.8" + "--south=38.1" + "--east=-121.7" + "--minZoom=0.0" + "--maxZoom=15.0" + "--pixelRatio=1.0" + "--token=" + "--output=offline.db" +) diff --git a/cmake/render.cmake b/cmake/render.cmake index 023b3c21e3..407e1ca8ef 100644 --- a/cmake/render.cmake +++ b/cmake/render.cmake @@ -20,3 +20,22 @@ target_add_mason_package(mbgl-render PRIVATE boost_libprogram_options) mbgl_platform_render() create_source_groups(mbgl-render) + +xcode_create_scheme( + TARGET mbgl-render + OPTIONAL_ARGS + "--style=file.json" + "--lon=0" + "--lat=0" + "--zoom=0" + "--bearing=0" + "--pitch=0" + "--width=512" + "--height=512" + "--ratio=1" + "--token=" + "--debug" + "--output=out.png" + "--cache=cache.sqlite" + "--assets=." +) diff --git a/cmake/test.cmake b/cmake/test.cmake index 8a5233f5a5..5e404577ed 100644 --- a/cmake/test.cmake +++ b/cmake/test.cmake @@ -40,3 +40,14 @@ target_add_mason_package(mbgl-test PRIVATE shelf-pack) mbgl_platform_test() create_source_groups(mbgl-test) + +xcode_create_scheme( + TARGET mbgl-test + OPTIONAL_ARGS + "--gtest_filter=Category.*" + "--gtest_repeat=0" + "--gtest_shuffle=0" + "--gtest_break_on_failure=0" + "--gtest_throw_on_failure=0" + "--gtest_catch_exceptions=0" + ) diff --git a/cmake/xcode.cmake b/cmake/xcode.cmake new file mode 100644 index 0000000000..3537009330 --- /dev/null +++ b/cmake/xcode.cmake @@ -0,0 +1,75 @@ +function(get_target_filename OUTPUT TARGET) + get_target_property(_TYPE "${TARGET}" TYPE) + get_target_property(_PREFIX "${TARGET}" PREFIX) + if(NOT _PREFIX AND NOT _PREFIX STREQUAL "") + set(_PREFIX "${CMAKE_${_TYPE}_PREFIX}") + endif() + get_target_property(_BASENAME "${TARGET}" OUTPUT_NAME) + if(NOT _BASENAME) + get_target_property(_BASENAME "${TARGET}" NAME) + endif() + get_target_property(_SUFFIX "${TARGET}" SUFFIX) + if(NOT _SUFFIX AND NOT _SUFFIX STREQUAL "") + set(_SUFFIX "${CMAKE_${_TYPE}_SUFFIX}") + endif() + set(${OUTPUT} "${_PREFIX}${_BASENAME}${_SUFFIX}" PARENT_SCOPE) +endfunction() + +function(xcode_create_scheme) + if (NOT CMAKE_GENERATOR STREQUAL "Xcode") + return() + endif() + + cmake_parse_arguments(XCSCHEME "" "TARGET;TYPE;NAME" "ARGS;OPTIONAL_ARGS" ${ARGN}) + + if(XCSCHEME_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "xcode_create_scheme() called with unrecognized arguments: ${XCSCHEME_UNPARSED_ARGUMENTS}") + endif() + + if(NOT XCSCHEME_TARGET) + message(FATAL_ERROR "xcode_create_scheme() called without required argument TARGET") + endif() + + if(NOT XCSCHEME_TYPE) + get_target_property(_TYPE "${XCSCHEME_TARGET}" TYPE) + if (_TYPE MATCHES "^.*_LIBRARY$") + set(XCSCHEME_TYPE "library") + elseif(_TYPE STREQUAL "EXECUTABLE") + set(XCSCHEME_TYPE "executable") + else() + message(FATAL_ERROR "xcode_create_scheme() could not determine type of ${XCSCHEME_TARGET}") + endif() + endif() + + if(NOT XCSCHEME_NAME) + set(XCSCHEME_NAME "${XCSCHEME_TARGET}") + endif() + + set(XCODEPROJ_PATH "${PROJECT_BINARY_DIR}/${PROJECT_NAME}.xcodeproj") + set(XCSCHEME_OUTPUT_FILE "${XCODEPROJ_PATH}/xcshareddata/xcschemes/${XCSCHEME_NAME}.xcscheme") + + # Prevent overwriting of the scheme file on every CMake rerun. + if (EXISTS "${XCSCHEME_OUTPUT_FILE}") + return() + endif() + + file(RELATIVE_PATH XCSCHEME_CONTAINER "${CMAKE_SOURCE_DIR}" "${XCODEPROJ_PATH}") + string(RANDOM LENGTH 24 ALPHABET "0123456789ABCDEF" XCSCHEME_BLUEPRINT_ID) + get_target_filename(XCSCHEME_BUILDABLE_NAME "${XCSCHEME_TARGET}") + set(XCSCHEME_BLUEPRINT_NAME "${XCSCHEME_TARGET}") + set(XCSCHEME_WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}") + set(XCSCHEME_NODE_EXECUTABLE "${NodeJS_EXECUTABLE}") + get_filename_component(XCSCHEME_NODE_PATH "${NodeJS_EXECUTABLE}" DIRECTORY) + + set(XCSCHEME_COMMAND_LINE_ARGS "") + foreach(_ARG IN LISTS XCSCHEME_ARGS) + set(XCSCHEME_COMMAND_LINE_ARGS "${XCSCHEME_COMMAND_LINE_ARGS}\n \n ") + endforeach() + foreach(_ARG IN LISTS XCSCHEME_OPTIONAL_ARGS) + set(XCSCHEME_COMMAND_LINE_ARGS "${XCSCHEME_COMMAND_LINE_ARGS}\n \n ") + endforeach() + + configure_file( + "${CMAKE_SOURCE_DIR}/cmake/${XCSCHEME_TYPE}.xcscheme" + "${XCSCHEME_OUTPUT_FILE}") +endfunction() -- cgit v1.2.1