summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt27
-rw-r--r--src/Common/Sizes.hpp11
-rw-r--r--toolchains/MinGW.cmake13
-rw-r--r--vendor/mingw/libglew32.abin0 -> 793580 bytes
-rw-r--r--vendor/mingw/libglfw3.abin0 -> 291560 bytes
5 files changed, 43 insertions, 8 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 5fffbda..d0c036f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -7,12 +7,24 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
 # Enable assertions for RelWithDebInfo builds.
 string(REPLACE "-DNDEBUG" "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")
 
+set(GLEW_USE_STATIC_LIBS ON)
+
 find_package(glfw3 3.3 REQUIRED)
 find_package(GLEW REQUIRED)
+find_package(OpenGL REQUIRED)
+
+# Vendored shared libraries for MinGW-w64
+# for cross-compiling to Windows from macOS
+if (WIN32)
+    set_target_properties(glfw PROPERTIES
+        IMPORTED_IMPLIB_RELEASE "${CMAKE_SOURCE_DIR}/vendor/mingw/libglfw3.a"
+    )
 
-if (LINUX)
-    find_package(OpenGL REQUIRED)
-endif (LINUX)
+    set_target_properties(GLEW::glew_s PROPERTIES
+        IMPORTED_LOCATION_RELEASE "${CMAKE_SOURCE_DIR}/vendor/mingw/libglew32.a"
+        INTERFACE_LINK_LIBRARIES "" # Tries importing OpenGL.framework on macOS otherwise
+    )
+endif (WIN32)
 
 add_executable(meowcraft
     src/main.cpp
@@ -68,11 +80,12 @@ add_executable(meowcraft
     src/Common/Casts.hpp
     src/World/VoxelTraversal.hpp
 )
-target_link_libraries(meowcraft glfw GLEW::GLEW)
 
-if (LINUX)
-    target_link_libraries(meowcraft OpenGL)
-endif (LINUX)
+if (WIN32)
+    set(LINK_FLAGS "-static-libgcc -static-libstdc++ -static -mwindows")
+endif (WIN32)
+
+target_link_libraries(meowcraft PRIVATE glfw GLEW::glew_s OpenGL::GL ${LINK_FLAGS})
 
 function(make_includable input_file output_file)
     file(READ ${input_file} content)
diff --git a/src/Common/Sizes.hpp b/src/Common/Sizes.hpp
index de49d3d..036c98b 100644
--- a/src/Common/Sizes.hpp
+++ b/src/Common/Sizes.hpp
@@ -44,4 +44,13 @@ ASSERT_SIZE(U64, 8);
 ASSERT_SIZE(F32, 4);
 ASSERT_SIZE(F64, 8);
 
-ASSERT_SIZE(Bool, 1);
\ No newline at end of file
+ASSERT_SIZE(Bool, 1);
+
+// MinGW doesn't define uint that I like to use
+// in template definitions, so we need to define it here.
+
+#ifdef __MINGW32__
+
+#define uint uint32_t
+
+#endif
diff --git a/toolchains/MinGW.cmake b/toolchains/MinGW.cmake
new file mode 100644
index 0000000..d75ebcb
--- /dev/null
+++ b/toolchains/MinGW.cmake
@@ -0,0 +1,13 @@
+set(CMAKE_SYSTEM_NAME Windows)
+set(CMAKE_SYSTEM_PROCESSOR x86_64)
+
+SET(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
+SET(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
+
+# MinGW toolchain installed through Homebrew
+set(CMAKE_FIND_ROOT_PATH /usr/local/Cellar/mingw-w64/11.0.1/toolchain-x86_64/x86_64-w64-mingw32)
+
+# Don't search for programs in the host environment, or at least try not to
+set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
\ No newline at end of file
diff --git a/vendor/mingw/libglew32.a b/vendor/mingw/libglew32.a
new file mode 100644
index 0000000..e312f03
--- /dev/null
+++ b/vendor/mingw/libglew32.a
Binary files differdiff --git a/vendor/mingw/libglfw3.a b/vendor/mingw/libglfw3.a
new file mode 100644
index 0000000..d3a2564
--- /dev/null
+++ b/vendor/mingw/libglfw3.a
Binary files differ