Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Windows (MinGW) #2035

Open
wants to merge 25 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .appveyor.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
environment:
MINGW_PATH: C:\mingw-w64\x86_64-7.3.0-posix-seh-rt_v5-rev0\mingw64
CURL_VERSION: curl-7.63.0
ZLIB_VERSION: zlib-1.2.11
install:
- set PATH=C:\cmake-install\bin;C:\cmake-install\lib;%MINGW_PATH%\bin;%PATH%
- appveyor DownloadFile "https://www.zlib.net/%ZLIB_VERSION%.tar.gz"
- 7z x -o. %ZLIB_VERSION%.tar.gz
- 7z x -oC:\cmake-install %ZLIB_VERSION%.tar
- cd C:\cmake-install\%ZLIB_VERSION%
- cmake -H. -Bbuild -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=C:\cmake-install -DCMAKE_SH="CMAKE_SH-NOTFOUND"
- cmake --build build -- -j %NUMBER_OF_PROCESSORS%
- cmake --build build --target install
- appveyor DownloadFile "https://curl.haxx.se/download/%CURL_VERSION%.tar.gz"
- 7z x -o. %CURL_VERSION%.tar.gz
- 7z x -oC:\cmake-install %CURL_VERSION%.tar
- cd C:\cmake-install\%CURL_VERSION%
- cmake -H. -Bbuild -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=C:\cmake-install -DBUILD_CURL_EXE=OFF -DBUILD_TESTING=OFF -DCMAKE_USE_WINSSL=ON -DCMAKE_SH="CMAKE_SH-NOTFOUND"
- cmake --build build -- -j %NUMBER_OF_PROCESSORS%
- cmake --build build --target install
- cd C:\projects\tangram-es
before_build:
- git submodule update --init --recursive
build_script:
- mingw32-make windows -j %NUMBER_OF_PROCESSORS% CMAKE_OPTIONS="-DCURL_LIBRARIES=C:/cmake-install/bin/libcurl.dll -DCURL_INCLUDE_DIRS=C:/cmake-install/include"
23 changes: 22 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ all: android osx ios
.PHONY: clean-ios
.PHONY: clean-rpi
.PHONY: clean-linux
.PHONY: clean-windows
.PHONY: clean-benchmark
.PHONY: clean-shaders
.PHONY: clean-tizen-arm
Expand All @@ -21,13 +22,15 @@ all: android osx ios
.PHONY: ios-docs
.PHONY: rpi
.PHONY: linux
.PHONY: windows
.PHONY: benchmark
.PHONY: tests
.PHONY: cmake-osx
.PHONY: cmake-xcode
.PHONY: cmake-ios
.PHONY: cmake-rpi
.PHONY: cmake-linux
.PHONY: cmake-windows

ANDROID_BUILD_DIR = platforms/android/tangram/build
OSX_BUILD_DIR = build/osx
Expand All @@ -36,6 +39,7 @@ IOS_BUILD_DIR = build/ios
IOS_DOCS_BUILD_DIR = build/ios-docs
RPI_BUILD_DIR = build/rpi
LINUX_BUILD_DIR = build/linux
WINDOWS_BUILD_DIR = build/windows
TESTS_BUILD_DIR = build/tests
BENCH_BUILD_DIR = build/bench
TIZEN_ARM_BUILD_DIR = build/tizen-arm
Expand Down Expand Up @@ -99,6 +103,14 @@ LINUX_CMAKE_PARAMS = \
-DCMAKE_EXPORT_COMPILE_COMMANDS=TRUE \
${CMAKE_OPTIONS}

WINDOWS_CMAKE_PARAMS = \
-G "MinGW Makefiles" \
-DCMAKE_BUILD_TYPE=${BUILD_TYPE} \
-DTANGRAM_PLATFORM=windows \
-DCMAKE_EXPORT_COMPILE_COMMANDS=TRUE \
-DCMAKE_SH="CMAKE_SH-NOTFOUND" \
${CMAKE_OPTIONS}

ifndef TIZEN_PROFILE
TIZEN_PROFILE=mobile
endif
Expand Down Expand Up @@ -128,7 +140,7 @@ TIZEN_X86_CMAKE_PARAMS = \
${CMAKE_OPTIONS}

clean: clean-android clean-osx clean-ios clean-rpi clean-tests clean-xcode clean-linux clean-shaders \
clean-tizen-arm clean-tizen-x86
clean-tizen-arm clean-tizen-x86 clean-windows

clean-android:
rm -rf platforms/android/build
Expand All @@ -148,6 +160,9 @@ clean-rpi:
clean-linux:
rm -rf ${LINUX_BUILD_DIR}

clean-windows:
rm -rf ${WINDOWS_BUILD_DIR}

clean-xcode:
rm -rf ${OSX_XCODE_BUILD_DIR}

Expand Down Expand Up @@ -253,9 +268,15 @@ cmake-rpi:
linux: cmake-linux
cmake --build ${LINUX_BUILD_DIR}

windows: cmake-windows
cmake --build ${WINDOWS_BUILD_DIR}

cmake-linux:
cmake -H. -B${LINUX_BUILD_DIR} ${LINUX_CMAKE_PARAMS}

cmake-windows:
cmake -H. -B${WINDOWS_BUILD_DIR} ${WINDOWS_CMAKE_PARAMS}

tizen-arm: cmake-tizen-arm
cmake --build ${TIZEN_ARM_BUILD_DIR}

Expand Down
142 changes: 36 additions & 106 deletions cmake/utils.cmake
Original file line number Diff line number Diff line change
@@ -1,119 +1,49 @@
function(check_unsupported_compiler_version)
set(MIN_GCC 4.9)
set(MIN_CLANG 3.4)
set(MIN_APPLECLANG 6.0)

set(MIN_GCC 4.9)
set(MIN_CLANG 3.4)
set(MIN_APPLECLANG 6.0)

if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${MIN_GCC})
message(FATAL_ERROR "Your GCC version does not support C++14, please install version ${MIN_GCC} or higher")
endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${MIN_CLANG})
message(FATAL_ERROR "Your Clang version does not support C++14, please install version ${MIN_CLANG} or higher")
endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${MIN_APPLECLANG})
message(FATAL_ERROR "Your Xcode version does not support C++14, please install version ${MIN_APPLECLANG} or higher")
endif()
else()
message(WARNING "Compilation has only been tested with Clang, AppleClang, and GCC")
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${MIN_GCC})
message(FATAL_ERROR "Your GCC version does not support C++14, please install version ${MIN_GCC} or higher")
endif()

elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${MIN_CLANG})
message(FATAL_ERROR "Your Clang version does not support C++14, please install version ${MIN_CLANG} or higher")
endif()
elseif(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS ${MIN_APPLECLANG})
message(FATAL_ERROR "Your Xcode version does not support C++14, please install version ${MIN_APPLECLANG} or higher")
endif()
else()
message(WARNING "Compilation has only been tested with Clang, AppleClang, and GCC")
endif()
endfunction(check_unsupported_compiler_version)

function(get_nextzen_api_key KEY_RESULT)

set(${KEY_RESULT} $ENV{NEXTZEN_API_KEY} PARENT_SCOPE)

if(${KEY_RESULT} STREQUAL "")
message(SEND_ERROR
"Make sure to provide an api key to build the demo application, "
"you can create an API key at https://developers.nextzen.org/. "
"Then run 'export NEXTZEN_API_KEY yourKeyHere' or specify `NEXTZEN_API_KEY=yourKeyHere` as an argument to the make command")
return()
endif()

set(${KEY_RESULT} $ENV{NEXTZEN_API_KEY} PARENT_SCOPE)
if(${KEY_RESULT} STREQUAL "")
message(SEND_ERROR
"Make sure to provide an api key to build the demo application, "
"you can create an API key at https://developers.nextzen.org/. "
"Then run 'export NEXTZEN_API_KEY yourKeyHere' or specify `NEXTZEN_API_KEY=yourKeyHere` as an argument to the make command")
return()
endif()
endfunction(get_nextzen_api_key)


function(find_sources_and_include_directories HEADERS_PATH SOURCES_PATH)
include_recursive_dirs(${HEADERS_PATH})
file(GLOB_RECURSE FOUND_SOURCES ${SOURCES_PATH})

set(SOURCES
${SOURCES}
${FOUND_SOURCES}
CACHE INTERNAL "sources" FORCE)
list(REMOVE_DUPLICATES SOURCES)
endfunction(find_sources_and_include_directories)

function(include_recursive_dirs HEADERS_PATH)
file(GLOB_RECURSE FOUND_HEADERS ${HEADERS_PATH})

set(INCLUDE_DIRS "")
foreach(_headerFile ${FOUND_HEADERS})
get_filename_component(_dir ${_headerFile} PATH)
list(APPEND INCLUDE_DIRS ${_dir})
endforeach()
list(REMOVE_DUPLICATES INCLUDE_DIRS)

include_directories(${INCLUDE_DIRS})

set(HEADERS
${HEADERS}
${FOUND_HEADERS}
CACHE INTERNAL "headers" FORCE)
list(REMOVE_DUPLICATES HEADERS)
endfunction(include_recursive_dirs)

function(check_and_link_libraries TARGET)
foreach(_lib ${ARGN})
string(TOUPPER ${_lib} LIB)
find_package (${_lib})
if(${LIB}_FOUND)
include_directories(${${LIB}_INCLUDE_DIR})
target_link_libraries(${TARGET} ${${LIB}_LIBRARIES})
else()
message(SEND_ERROR "You NEED ${_lib} library.")
return()
endif ()
endforeach()
endfunction(check_and_link_libraries)

macro(add_bundle_resources RESOURCE_LIST RESOURCE_DIR RESOURCE_BASE)

file(GLOB_RECURSE FULL_RESOURCE_PATHS "${RESOURCE_DIR}/[^.]**")
foreach(_full_resource_path ${FULL_RESOURCE_PATHS})
file(RELATIVE_PATH REL_RESOURCE_PATH ${RESOURCE_DIR} ${_full_resource_path})
get_filename_component(REL_RESOURCE_DIR ${REL_RESOURCE_PATH} PATH)
set_source_files_properties(${_full_resource_path} PROPERTIES MACOSX_PACKAGE_LOCATION "${RESOURCE_BASE}/${REL_RESOURCE_DIR}")
# message(STATUS "resource at: ${_full_resource_path}\n remapped to: ${RESOURCE_BASE}/${REL_RESOURCE_DIR}")
endforeach()
list(APPEND ${RESOURCE_LIST} ${FULL_RESOURCE_PATHS})

file(GLOB_RECURSE FULL_RESOURCE_PATHS "${RESOURCE_DIR}/[^.]**")
foreach(_full_resource_path ${FULL_RESOURCE_PATHS})
file(RELATIVE_PATH REL_RESOURCE_PATH ${RESOURCE_DIR} ${_full_resource_path})
get_filename_component(REL_RESOURCE_DIR ${REL_RESOURCE_PATH} PATH)
set_source_files_properties(${_full_resource_path} PROPERTIES MACOSX_PACKAGE_LOCATION "${RESOURCE_BASE}/${REL_RESOURCE_DIR}")
# message(STATUS "resource at: ${_full_resource_path}\n remapped to: ${RESOURCE_BASE}/${REL_RESOURCE_DIR}")
endforeach()
list(APPEND ${RESOURCE_LIST} ${FULL_RESOURCE_PATHS})
endmacro(add_bundle_resources)

macro(add_resources TARGET RESOURCE_DIR DEST_DIR)

add_custom_command(TARGET ${TARGET}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${RESOURCE_DIR} ${CMAKE_BINARY_DIR}/${DEST_DIR})

add_custom_command(TARGET ${TARGET}
POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_directory ${RESOURCE_DIR} ${CMAKE_BINARY_DIR}/${DEST_DIR})
endmacro(add_resources)

macro(target_add_framework APPNAME FWNAME)
find_library(${FWNAME}_FRAMEWORK ${FWNAME})
if(${${FWNAME}_FRAMEWORK})
target_link_libraries(${APPNAME} PRIVATE ${FRAMEWORK_${FWNAME}})
message(STATUS "Framework ${FWNAME} found")
else()
message(SEND_ERROR "Framework ${FWNAME} not found")
endif()
endmacro(target_add_framework)

# 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)

4 changes: 4 additions & 0 deletions core/deps/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,10 @@ if (TANGRAM_MBTILES_DATASOURCE)
if (ANDROID)
target_compile_definitions(sqlite3 PRIVATE _FILE_OFFSET_BITS=32)
endif()
if (WIN32)
target_compile_options(SQLiteCpp PRIVATE -fno-stack-protector)
target_compile_options(sqlite3 PRIVATE -fno-stack-protector)
endif()
endif()

## double-conversion ##
Expand Down
3 changes: 3 additions & 0 deletions core/src/labels/fadeEffect.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
#pragma once

#include <cmath>
#ifndef M_PI // M_PI is non-standard since c++99
#define M_PI (3.14159265358979323846264338327950288)
#endif

namespace Tangram {

Expand Down
3 changes: 3 additions & 0 deletions core/src/util/ease.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
#include "map.h"

#include <cmath>
#ifndef M_PI // M_PI is non-standard since c++99
#define M_PI (3.14159265358979323846264338327950288)
#endif
#include <functional>

namespace Tangram {
Expand Down
3 changes: 3 additions & 0 deletions core/src/util/rasterize.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

#include "glm/vec2.hpp"
#include <cmath>
#ifndef M_PI // M_PI is non-standard since c++99
#define M_PI (3.14159265358979323846264338327950288)
#endif
#include <functional>

namespace Tangram {
Expand Down
3 changes: 3 additions & 0 deletions core/src/view/viewConstraint.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
#pragma once
#include <cmath>
#ifndef M_PI // M_PI is non-standard since c++99
#define M_PI (3.14159265358979323846264338327950288)
#endif

namespace Tangram {

Expand Down
11 changes: 11 additions & 0 deletions platforms/common/glfwApp.cpp
Original file line number Diff line number Diff line change
@@ -1,8 +1,15 @@
#include "glfwApp.h"

#include "imgui.h"
#include "imgui_impl_glfw.h"
#include "imgui_impl_opengl3.h"
#include "imgui_stl.h"

#ifdef TANGRAM_WINDOWS
#define GLFW_INCLUDE_NONE
#include <glad/glad.h>
#endif // TANGRAM_WINDOWS

#define GLFW_INCLUDE_GLEXT
#include <GLFW/glfw3.h>
#include <cstdlib>
Expand Down Expand Up @@ -181,6 +188,10 @@ void create(std::unique_ptr<Platform> p, int w, int h) {
glfwMakeContextCurrent(main_window);
glfwSwapInterval(1); // Enable vsync

#ifdef TANGRAM_WINDOWS
gladLoadGLLoader((GLADloadproc) glfwGetProcAddress);
#endif

// Set input callbacks
glfwSetFramebufferSizeCallback(main_window, framebufferResizeCallback);
glfwSetMouseButtonCallback(main_window, mouseButtonCallback);
Expand Down
11 changes: 9 additions & 2 deletions platforms/common/platform_gl.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,17 @@ extern PFNGLGENVERTEXARRAYSOESPROC glGenVertexArraysOESEXT;
#define glBindVertexArray glBindVertexArrayAPPLE
#endif // TANGRAM_OSX

#ifdef TANGRAM_LINUX
#if defined(TANGRAM_LINUX) || defined(TANGRAM_WINDOWS)
#define GL_GLEXT_PROTOTYPES
#ifdef TANGRAM_WINDOWS
#define GLFW_INCLUDE_NONE
#include <glad/glad.h>
// Add missing stuff
#define glDepthRangef(a, b) glDepthRange((double)(a), (double)(b))
#define glClearDepthf(a) glClearDepth((double)(a))
#endif // TANGRAM_WINDOWS
#include <GLFW/glfw3.h>
#endif // TANGRAM_LINUX
#endif // defined(TANGRAM_LINUX) || defined(TANGRAM_WINDOWS)

#ifdef TANGRAM_RPI
// Broadcom library for direct GPU access
Expand Down
Loading