From f26911c9741478dff13fd9fd2ad2e0149a29803b Mon Sep 17 00:00:00 2001 From: lieff Date: Tue, 10 Apr 2018 13:14:13 +0300 Subject: [PATCH] add windows build --- .gitignore | 2 ++ build.sh | 2 +- build_win.sh | 27 +++++++++++++++++++++++++++ minishadertoy.c | 9 +++++++-- windows/mingw64.cmake | 11 +++++++++++ 5 files changed, 48 insertions(+), 3 deletions(-) create mode 100755 build_win.sh create mode 100644 windows/mingw64.cmake diff --git a/.gitignore b/.gitignore index f4169e0..ad899a5 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ +curl +glfw toy diff --git a/build.sh b/build.sh index 949d177..e0c3243 100755 --- a/build.sh +++ b/build.sh @@ -1 +1 @@ -gcc -O2 -std=c99 -DHAVE_CURL -D_DEBUG *.c jfes/*.c -o toy -lcurl -lglfw -ldl -lm \ No newline at end of file +gcc -O2 -std=c99 -DHAVE_CURL -D_DEBUG -D_POSIX_C_SOURCE=200809 *.c jfes/*.c -o toy -lcurl -lglfw -ldl -lm \ No newline at end of file diff --git a/build_win.sh b/build_win.sh new file mode 100755 index 0000000..e9738f9 --- /dev/null +++ b/build_win.sh @@ -0,0 +1,27 @@ +set -e + +if [ ! -d "glfw" ]; then + git clone --depth=1 https://github.com/glfw/glfw + mkdir glfw/build + cd glfw/build + cmake -DCMAKE_TOOLCHAIN_FILE=../../windows/mingw64.cmake -DGLFW_BUILD_EXAMPLES=0 -DGLFW_BUILD_TESTS=0 -DGLFW_BUILD_DOCS=0 .. + make -j4 + cd ../../ +fi + +if [ ! -d "curl" ]; then + CC=x86_64-w64-mingw32-gcc + export CC + git clone --depth=1 https://github.com/curl/curl + cd curl + ./buildconf + mkdir build + cd build + ../configure --host=x86_64-w64-mingw32 --disable-shared --disable-ldap --with-winssl + make -j4 + cd ../../ +fi + +x86_64-w64-mingw32-gcc -static -O2 -std=gnu99 -DHAVE_CURL -DCURL_STATICLIB -D_DEBUG -D_POSIX_C_SOURCE=200809 *.c jfes/*.c -o toy.exe \ +-Lglfw/build/src -Iglfw/include -Lcurl/build/lib/.libs/ -Icurl/include \ +-lcurl -lglfw3 -lpthread -lm -lgdi32 -lws2_32 -lcrypt32 diff --git a/minishadertoy.c b/minishadertoy.c index 1a05228..837b55a 100644 --- a/minishadertoy.c +++ b/minishadertoy.c @@ -5,7 +5,12 @@ #include #include #include +#ifndef __MINGW32__ #include +#define MKDIRARGS ,0777 +#else +#define MKDIRARGS +#endif #include #include "glad.h" #include "jfes/jfes.h" @@ -111,7 +116,7 @@ static int mkpath(char *path) if (buffer[len - 1] == '/') buffer[len - 1] = '\0'; - if (mkdir(buffer, 0777) == 0) + if (mkdir(buffer MKDIRARGS) == 0) { free(buffer); return 1; @@ -126,7 +131,7 @@ static int mkpath(char *path) break; char sav = *p; *p = 0; - if ((mkdir(buffer, 0777) == -1) && (errno == ENOENT)) + if ((mkdir(buffer MKDIRARGS) == -1) && (errno == ENOENT)) goto fail; *p++ = sav; } diff --git a/windows/mingw64.cmake b/windows/mingw64.cmake new file mode 100644 index 0000000..6b3a088 --- /dev/null +++ b/windows/mingw64.cmake @@ -0,0 +1,11 @@ +set(CMAKE_SYSTEM_NAME Windows) +set(TOOLCHAIN_PREFIX x86_64-w64-mingw32) + +set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}-gcc) +set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}-g++) +set(CMAKE_RC_COMPILER ${TOOLCHAIN_PREFIX}-windres) +set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX}) + +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)