fixed MinGW support

This commit is contained in:
Sebastian Krzyszkowiak 2016-07-03 20:34:31 +02:00
parent 90b00710fd
commit f02caf73a2
6 changed files with 56 additions and 35 deletions

View file

@ -0,0 +1,11 @@
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_C_COMPILER /usr/bin/i686-w64-mingw32-gcc)
set(CMAKE_CXX_COMPILER /usr/bin/i686-w64-mingw32-g++)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(MINGDIR /usr/i686-w64-mingw32)

View file

@ -1,3 +1,5 @@
if (NOT LIBSUPERDERPY_CONFIG_INCLUDED)
add_definitions(-D_XOPEN_SOURCE=600) add_definitions(-D_XOPEN_SOURCE=600)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c11") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -std=c11")
@ -10,31 +12,42 @@ endif(APPLE)
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/libsuperderpy/cmake ${PROJECT_SOURCE_DIR}/cmake) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/libsuperderpy/cmake ${PROJECT_SOURCE_DIR}/cmake)
include_directories("." "libsuperderpy/src") include_directories("libsuperderpy/src")
if(MINGW) if(MINGW)
# Guess MINGDIR from the value of CMAKE_C_COMPILER if it's not set. # Guess MINGDIR from the value of CMAKE_C_COMPILER if it's not set.
if("$ENV{MINGDIR}" STREQUAL "") if(NOT MINGDIR)
string(REGEX REPLACE "/bin/[^/]*$" "" MINGDIR "${CMAKE_C_COMPILER}") if("$ENV{MINGDIR}" STREQUAL "")
message(STATUS "Guessed MinGW directory: ${MINGDIR}") string(REGEX REPLACE "/bin/[^/]*$" "" MINGDIR "${CMAKE_C_COMPILER}")
else("$ENV{MINGDIR}" STREQUAL "") message(STATUS "Guessed MinGW directory: ${MINGDIR}")
file(TO_CMAKE_PATH "$ENV{MINGDIR}" MINGDIR) else("$ENV{MINGDIR}" STREQUAL "")
message(STATUS "Using MINGDIR: ${MINGDIR}") file(TO_CMAKE_PATH "$ENV{MINGDIR}" MINGDIR)
endif("$ENV{MINGDIR}" STREQUAL "") message(STATUS "Using MINGDIR: ${MINGDIR}")
endif("$ENV{MINGDIR}" STREQUAL "")
endif(NOT MINGDIR)
# Search in MINGDIR for headers and libraries. # Search in MINGDIR for headers and libraries.
set(CMAKE_PREFIX_PATH "${MINGDIR}") set(CMAKE_PREFIX_PATH "${MINGDIR}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -mwindows")
endif(MINGW) endif(MINGW)
set(CMAKE_INSTALL_RPATH "\$ORIGIN/../lib/${LIBSUPERDERPY_GAMENAME}:\$ORIGIN/gamestates:\$ORIGIN:\$ORIGIN/../lib:\$ORIGIN/lib:\$ORIGIN/bin") set(CMAKE_INSTALL_RPATH "\$ORIGIN/../lib/${LIBSUPERDERPY_GAMENAME}:\$ORIGIN/gamestates:\$ORIGIN:\$ORIGIN/../lib:\$ORIGIN/lib:\$ORIGIN/bin")
find_package(Allegro5 REQUIRED)
find_package(Allegro5Font REQUIRED)
find_package(Allegro5TTF REQUIRED)
find_package(Allegro5Primitives REQUIRED)
find_package(Allegro5Audio REQUIRED)
find_package(Allegro5ACodec REQUIRED)
find_package(Allegro5Image REQUIRED)
find_package(Allegro5Color REQUIRED)
if(APPLE)
find_package(Allegro5Main)
endif(APPLE)
MACRO(register_gamestate name) MACRO(register_gamestate name)
add_library("libsuperderpy-${LIBSUPERDERPY_GAMENAME}-${name}" SHARED "${name}.c") add_library("libsuperderpy-${LIBSUPERDERPY_GAMENAME}-${name}" MODULE "${name}.c")
set_target_properties("libsuperderpy-${LIBSUPERDERPY_GAMENAME}-${name}" PROPERTIES PREFIX "") set_target_properties("libsuperderpy-${LIBSUPERDERPY_GAMENAME}-${name}" PROPERTIES PREFIX "")
@ -50,8 +63,12 @@ ENDMACRO()
MACRO(libsuperderpy_copy EXECUTABLE) MACRO(libsuperderpy_copy EXECUTABLE)
add_custom_command(TARGET "${EXECUTABLE}" PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "../libsuperderpy/src/libsuperderpy.so" $<TARGET_FILE_DIR:${EXECUTABLE}>) add_custom_command(TARGET "${EXECUTABLE}" PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "../libsuperderpy/src/libsuperderpy${CMAKE_SHARED_LIBRARY_SUFFIX}" $<TARGET_FILE_DIR:${EXECUTABLE}>)
ENDMACRO() ENDMACRO()
include(InstallRequiredSystemLibraries) include(InstallRequiredSystemLibraries)
set(LIBSUPERDERPY_CONFIG_INCLUDED 1)
endif (NOT LIBSUPERDERPY_CONFIG_INCLUDED)

View file

@ -0,0 +1,11 @@
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_C_COMPILER /usr/bin/x86_64-w64-mingw32-gcc)
set(CMAKE_CXX_COMPILER /usr/bin/x86_64-w64-mingw32-g++)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(MINGDIR /usr/x86_64-w64-mingw32)

View file

@ -10,25 +10,12 @@ add_definitions(-DLIBSUPERDERPY_GAMENAME_PRETTY="${LIBSUPERDERPY_GAMENAME_PRETTY
add_definitions(-DLIBSUPERDERPY_GAMENAME="${LIBSUPERDERPY_GAMENAME}") add_definitions(-DLIBSUPERDERPY_GAMENAME="${LIBSUPERDERPY_GAMENAME}")
add_definitions(-DLIBSUPERDERPY_INITIAL_GAMESTATE="${LIBSUPERDERPY_INITIAL_GAMESTATE}") add_definitions(-DLIBSUPERDERPY_INITIAL_GAMESTATE="${LIBSUPERDERPY_INITIAL_GAMESTATE}")
find_package(Allegro5 REQUIRED)
find_package(Allegro5Font REQUIRED)
find_package(Allegro5TTF REQUIRED)
find_package(Allegro5Primitives REQUIRED)
find_package(Allegro5Audio REQUIRED)
find_package(Allegro5ACodec REQUIRED)
find_package(Allegro5Image REQUIRED)
find_package(Allegro5Color REQUIRED)
if(APPLE)
find_package(Allegro5Main)
endif(APPLE)
add_library("libsuperderpy" SHARED ${SRC_LIST}) add_library("libsuperderpy" SHARED ${SRC_LIST})
SET_TARGET_PROPERTIES("libsuperderpy" PROPERTIES PREFIX "") SET_TARGET_PROPERTIES("libsuperderpy" PROPERTIES PREFIX "")
include_directories(${ALLEGRO5_INCLUDE_DIR} ${ALLEGRO5_FONT_INCLUDE_DIR} ${ALLEGRO5_TTF_INCLUDE_DIR} ${ALLEGRO5_PRIMITIVES_INCLUDE_DIR} ${ALLEGRO5_AUDIO_INCLUDE_DIR} ${ALLEGRO5_ACODEC_INCLUDE_DIR} ${ALLEGRO5_IMAGE_INCLUDE_DIR}) include_directories(${ALLEGRO5_INCLUDE_DIR} ${ALLEGRO5_FONT_INCLUDE_DIR} ${ALLEGRO5_TTF_INCLUDE_DIR} ${ALLEGRO5_PRIMITIVES_INCLUDE_DIR} ${ALLEGRO5_AUDIO_INCLUDE_DIR} ${ALLEGRO5_ACODEC_INCLUDE_DIR} ${ALLEGRO5_IMAGE_INCLUDE_DIR})
target_link_libraries("libsuperderpy" ${ALLEGRO5_LIBRARIES} ${ALLEGRO5_FONT_LIBRARIES} ${ALLEGRO5_TTF_LIBRARIES} ${ALLEGRO5_PRIMITIVES_LIBRARIES} ${ALLEGRO5_AUDIO_LIBRARIES} ${ALLEGRO5_ACODEC_LIBRARIES} ${ALLEGRO5_IMAGE_LIBRARIES} ${ALLEGRO5_MAIN_LIBRARIES} m dl) target_link_libraries("libsuperderpy" ${ALLEGRO5_LIBRARIES} ${ALLEGRO5_FONT_LIBRARIES} ${ALLEGRO5_TTF_LIBRARIES} ${ALLEGRO5_PRIMITIVES_LIBRARIES} ${ALLEGRO5_AUDIO_LIBRARIES} ${ALLEGRO5_ACODEC_LIBRARIES} ${ALLEGRO5_IMAGE_LIBRARIES} m dl)
install(TARGETS "libsuperderpy" DESTINATION ${LIB_INSTALL_DIR}) install(TARGETS "libsuperderpy" DESTINATION ${LIB_INSTALL_DIR})

View file

@ -28,6 +28,7 @@
#include <locale.h> #include <locale.h>
#include <signal.h> #include <signal.h>
#include <dlfcn.h> #include <dlfcn.h>
#include <unistd.h>
#include <allegro5/allegro_primitives.h> #include <allegro5/allegro_primitives.h>
#include <allegro5/allegro_acodec.h> #include <allegro5/allegro_acodec.h>
#include <allegro5/allegro_ttf.h> #include <allegro5/allegro_ttf.h>
@ -39,8 +40,6 @@
#include "config.h" #include "config.h"
#include "libsuperderpy.h" #include "libsuperderpy.h"
extern int main(int, char**);
void DrawGamestates(struct Game *game) { void DrawGamestates(struct Game *game) {
al_set_target_backbuffer(game->display); al_set_target_backbuffer(game->display);
al_clear_to_color(al_map_rgb(0,0,0)); al_clear_to_color(al_map_rgb(0,0,0));
@ -96,7 +95,7 @@ void ResumeGamestates(struct Game *game) {
void derp(int sig) { void derp(int sig) {
int __attribute__((unused)) n = write(STDERR_FILENO, "Segmentation fault\nI just don't know what went wrong!\n", 54); ssize_t __attribute__((unused)) n = write(STDERR_FILENO, "Segmentation fault\nI just don't know what went wrong!\n", 54);
abort(); abort();
} }
@ -528,11 +527,7 @@ int libsuperderpy(int argc, char **argv){
al_shutdown_ttf_addon(); al_shutdown_ttf_addon();
al_shutdown_font_addon(); al_shutdown_font_addon();
if (game.restart) { if (game.restart) {
#ifdef ALLEGRO_MACOSX return execv(argv[0], argv); // FIXME: on OSX there's chdir called which might break it
return _al_mangled_main(argc, argv);
#else
return main(argc, argv);
#endif
} }
return 0; return 0;
} }

View file

@ -28,7 +28,7 @@
#ifdef ALLEGRO_WINDOWS #ifdef ALLEGRO_WINDOWS
#define LIBRARY_EXTENSION ".dll" #define LIBRARY_EXTENSION ".dll"
#elseif ALLEGRO_MACOSX #elif ALLEGRO_MACOSX
#define LIBRARY_EXTENTION ".dylib" #define LIBRARY_EXTENTION ".dylib"
#else #else
#define LIBRARY_EXTENSION ".so" #define LIBRARY_EXTENSION ".so"