ZoriaRPG icon

WIP Cmake file for ZC+MinGW 2

ZoriaRPG | PRO | 03/31/20 02:36:07 AM UTC | 0 ⭐ | 11752 👁️ | Never ⏰ | []
CMake |

12.32 KB

|

None

|

0 👍

/

0 👎

cmake_minimum_required(VERSION 3.5)
set(CMAKE_CONFIGURATION_TYPES Debug Release CACHE TYPE INTERNAL FORCE)
project (ZeldaClassic)
 
set(USE_PCH FALSE CACHE BOOL "Use precompiled headers")
set(UNITY_BUILD FALSE CACHE BOOL "Unity build")
 
set(CMAKE_CXX_STANDARD 98)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
option(WANT_ZSCRIPT "Enable ZScript Compiler" on)
 
if(UNIX AND NOT APPLE)
    set(LINUX TRUE)
endif()
 
function(enable_unity_build UB_SUFFIX SOURCE_VARIABLE_NAME)
  set(files ${${SOURCE_VARIABLE_NAME}})
  # Generate a unique filename for the unity build translation unit
  set(unit_build_file ${CMAKE_CURRENT_BINARY_DIR}/UB_${UB_SUFFIX}.cpp)
  # Exclude all translation units from compilation
  set_source_files_properties(${files} PROPERTIES HEADER_FILE_ONLY true)
  # Open the ub file
  FILE(WRITE ${unit_build_file} "// Unity Build generated by CMake\n")
  FILE(APPEND ${unit_build_file} "#include \"${CMAKE_SOURCE_DIR}/src/precompiled.h\"\n")
  # Add include statement for each translation unit
  foreach(source_file ${files} )
    FILE( APPEND ${unit_build_file} "#include <${CMAKE_CURRENT_SOURCE_DIR}/${source_file}>\n")
  endforeach(source_file)
  # Complement list of translation units with the name of ub
  set(${SOURCE_VARIABLE_NAME} ${${SOURCE_VARIABLE_NAME}} ${unit_build_file} PARENT_SCOPE)
endfunction(enable_unity_build)
 
#############################################################
# Header and source file lists
#############################################################
 
include_directories(./allegro/include)
include_directories(./include/lpng1212)
include_directories(./include/zlib123)
include_directories(./include/loadpng)
include_directories(./include/jpgalleg-2.5)
include_directories(./include/dumb)
include_directories(./include/alogg)
include_directories(./include/almp3)
include_directories(./include/gme)
 
set(ZCSOUNDSOURCES
    src/zcmusic.cpp
    src/zcmusicd.cpp
    src/alleg_compat.cpp
)
 
set(ROMVIEW_MODULES
    ${CMAKE_SOURCE_DIR}/modules/romview/RomviewCore.txt
    ${CMAKE_SOURCE_DIR}/modules/romview/RomviewGUI.txt
)
 
set(ZELDA_MODULES
    ${CMAKE_SOURCE_DIR}/modules/zelda/ZeldaCore.txt
    ${CMAKE_SOURCE_DIR}/modules/zelda/ZeldaGUI.txt
    ${CMAKE_SOURCE_DIR}/modules/zelda/ZeldaSprite.txt
    ${CMAKE_SOURCE_DIR}/modules/zelda/ZeldaSubscreen.txt
)
 
set(ZQUEST_MODULES
    ${CMAKE_SOURCE_DIR}/modules/zquest/ZQuestCore.txt
    ${CMAKE_SOURCE_DIR}/modules/zquest/ZQuestGUI.txt
    ${CMAKE_SOURCE_DIR}/modules/zquest/ZQuestMisc.txt
    ${CMAKE_SOURCE_DIR}/modules/zquest/ZQuestZScript.txt
    ${CMAKE_SOURCE_DIR}/modules/zquest/ZQuestZScriptNP.txt
)
 
foreach(module ${ROMVIEW_MODULES} ${ZELDA_MODULES} ${ZQUEST_MODULES})
    include(${module})
    set_source_files_properties(${module} PROPERTIES HEADER_FILE_ONLY true)
endforeach()
 
#############################################################
# Build the ZScript parser
#############################################################
 
find_package(BISON QUIET)
find_package(FLEX QUIET)
 
if(${BISON_FOUND} AND ${FLEX_FOUND} AND WANT_ZSCRIPT)
    if(MSVC)
        set(FLEXFLAGS "--wincompat")
    endif()
    FLEX_TARGET(ZScriptLexer ${CMAKE_SOURCE_DIR}/src/parser/ffscript.lpp ${CMAKE_SOURCE_DIR}/src/parser/lex.yy.cpp COMPILE_FLAGS ${FLEXFLAGS})
    BISON_TARGET(ZScriptParser ${CMAKE_SOURCE_DIR}/src/parser/ffscript.ypp ${CMAKE_SOURCE_DIR}/src/parser/y.tab.cpp COMPILE_FLAGS -v)
    add_flex_bison_dependency(ZScriptLexer ZScriptParser)
else()
    message(WARNING "Flex and Bison not found. ZQuest will be compiled without the ZScript parser.")
    set(ZQUEST_ZSCRIPT_SOURCES ${ZQUEST_ZSCRIPT_SOURCES_NOPARSER})
endif()
 
 
#############################################################
# Global settings for the different platforms
#############################################################
 
 
# Windows
 
if(MSVC)
    set(ALLEGROLIB "$<$<CONFIG:DEBUG>:${CMAKE_SOURCE_DIR}/libs/win32dbg/alleg44-debug.lib>"
                   "$<$<CONFIG:RELEASE>:${CMAKE_SOURCE_DIR}/libs/win32/alleg44.lib>")
                   
 
    add_definitions(-DALLEGRO_MSVC)
 
    set(IMAGELIBS "$<$<CONFIG:DEBUG>:${CMAKE_SOURCE_DIR}/libs/win32dbg/al_gif.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32dbg/libpng.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32dbg/zlibd.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32dbg/loadpng.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32dbg/libjpgal.lib>"
                  "$<$<CONFIG:RELEASE>:${CMAKE_SOURCE_DIR}/libs/win32/al_gif.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32/libpng.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32/zlib.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32/loadpng.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32/libjpgal.lib>")
 
    set(SOUNDLIBS "$<$<CONFIG:DEBUG>:${CMAKE_SOURCE_DIR}/libs/win32dbg/aldmd.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32dbg/almp3.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32dbg/alogg.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32dbg/dumbd.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32dbg/gme.lib>"
                  "$<$<CONFIG:RELEASE>:${CMAKE_SOURCE_DIR}/libs/win32/aldmb.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32/almp3.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32/alogg.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32/dumb.lib$<SEMICOLON>${CMAKE_SOURCE_DIR}/libs/win32/gme.lib>")
 
    if(MSVC_VERSION GREATER 1500)
        add_definitions(-DALLEGRO_HAVE_STDINT_H)
    endif()
 
    add_compile_options("$<$<CONFIG:DEBUG>:/MTd>")
    add_compile_options("$<$<CONFIG:RELEASE>:/MT>")
 
    # REQUIRED or else MSVC throws internal compiler error(!)
    add_compile_options("$<$<CONFIG:RELEASE>:/fp:fast>")
    add_definitions(-D_CRT_SECURE_NO_WARNINGS)
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /NODEFAULTLIB:LIBCD /SUBSYSTEM:WINDOWS /DEBUG")
 
    if(USE_PCH)
        set(ZCPrecompiledBinary "${CMAKE_CURRENT_BINARY_DIR}/zcprecompiled.pch")
        set(ZQPrecompiledBinary "${CMAKE_CURRENT_BINARY_DIR}/zqprecompiled.pch")
        set_source_files_properties(src/precompiledzc.cpp PROPERTIES COMPILE_FLAGS "/Ycprecompiled.h /Fp\"${ZCPrecompiledBinary}\"" OBJECT_OUTPUTS "${ZCPrecompiledBinary}")
        set_source_files_properties(src/precompiledzq.cpp PROPERTIES COMPILE_FLAGS "/Ycprecompiled.h /Fp\"${ZQPrecompiledBinary}\"" OBJECT_OUTPUTS "${ZQPrecompiledBinary}")
        list(APPEND ZELDAEXTRASOURCES src/precompiledzc.cpp)
        list(APPEND ZQUESTEXTRASOURCES src/precompiledzq.cpp)
    endif()
 
elseif(MINGW)
 
    set(ALLEGRO_MINGW32 1)
    set(ALLEGRO_WINDOWS 1)
    # Guess MINGDIR from the value of CMAKE_C_COMPILER if it's not set.
    if("$ENV{MINGDIR}" STREQUAL "")
        string(REGEX REPLACE "/bin/[^/]*$" "" MINGDIR "${CMAKE_C_COMPILER}")
        message(STATUS "Guessed MinGW directory: ${MINGDIR}")
    else("$ENV{MINGDIR}" STREQUAL "")
        file(TO_CMAKE_PATH "$ENV{MINGDIR}" MINGDIR)
        message(STATUS "Using MINGDIR: ${MINGDIR}")
    endif("$ENV{MINGDIR}" STREQUAL "")
 
    # Search in MINGDIR for headers and libraries.
    set(CMAKE_PREFIX_PATH "${MINGDIR}")
 
    # Install to MINGDIR
    if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
        set(CMAKE_INSTALL_PREFIX ${MINGDIR})
    endif()
 
    message(STATUS "CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
    
    set(ALLEGROLIB 
        ${CMAKE_SOURCE_DIR}/libs/mingw/liballeg.a
    )
                   
    set(IMAGELIBS 
        ${CMAKE_SOURCE_DIR}/libs/mingw/libpng.a
        ${CMAKE_SOURCE_DIR}/libs/mingw/libz.a
        ${CMAKE_SOURCE_DIR}/libs/mingw/libldpng.a
        $${CMAKE_SOURCE_DIR}/libs/mingw/libjpgal.a
    )
 
    #${CMAKE_SOURCE_DIR}/libs/mingw/al_gif.lib
    #${CMAKE_SOURCE_DIR}/libs/win32/al_gif.lib
    
    set(SOUNDLIBS 
        ${CMAKE_SOURCE_DIR}/libs/mingw/libaldmb.a
        ${CMAKE_SOURCE_DIR}/libs/mingw/libalmp3.a
        ${CMAKE_SOURCE_DIR}/libs/mingw/libalogg.a
        ${CMAKE_SOURCE_DIR}/libs/mingw/libdumb.a
        ${CMAKE_SOURCE_DIR}/libs/mingw/libgme.a
    )
    
    add_definitions(-DALLEGRO_MSVC) # Mistakenly used in the source.
    execute_process(COMMAND "${CMAKE_SOURCE_DIR}/allegro/configure --enable-static=yes --enable-shared=no --enable-ossdigi=no --enable-ossmidi=no --enable-esddigi=no --enable-artsdigi=no --enable-sgialdigi=no --enable-jackdigi=no --enable-xwin-dga2=no --enable-vga=no --enable-svgalib=no" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/allegro")
 
 
    
# Linux
 
elseif(LINUX)
    link_directories(/usr/lib/i386-linux-gnu)
    link_directories(./libs/linux)
    set(ALLEGROLIB alleg)
    add_definitions(-DALLEGRO_UNIX)
    add_definitions(-DALLEGRO_LINUX) # Mistakenly used in the source.
    execute_process(COMMAND "${CMAKE_SOURCE_DIR}/allegro/configure --enable-static=yes --enable-shared=no --enable-ossdigi=no --enable-ossmidi=no --enable-esddigi=no --enable-artsdigi=no --enable-sgialdigi=no --enable-jackdigi=no --enable-xwin-dga2=no --enable-vga=no --enable-svgalib=no" WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/allegro")
 
    set(IMAGELIBS algif ldpng jpgal png z)
    set(SOUNDLIBS aldmb almp3 alogg dumb gme asound)
    set(X11_LIBRARIES X11 Xext Xcursor Xxf86vm pthread Xpm dl)
 
    add_compile_options("-m32")
    SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m32 -static-libgcc -export-dynamic")
    SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m32 -static-libgcc")
endif()
 
 
#############################################################
# Sound Library
#############################################################
 
if(MSVC AND (MSVC_VERSION GREATER 1600))
    set(ZCSOUNDLIBSEXTRA legacy_stdio_definitions)
endif()
add_library(zcsound SHARED ${ZCSOUNDSOURCES})
target_link_libraries(zcsound ${ALLEGROLIB} ${SOUNDLIBS} ${ZCSOUNDLIBSEXTRA})
 
#############################################################
# Romview
#############################################################
 
if(MSVC)
    list(APPEND ROMVIEWEXTRASOURCES rv_icon.rc)
elseif(LINUX)
    list(APPEND ROMVIEWEXTRASOURCES rv_icon.c)
    set(ROMVIEWLIBSEXTRA ${X11_LIBRARIES})
endif()
 
if(UNITY_BUILD)
    enable_unity_build(RomviewCore ROMVIEW_CORE_SOURCES)
    enable_unity_build(RomviewGUI ROMVIEW_GUI_SOURCES)
endif()
 
add_executable(romview ${ROMVIEW_CORE_SOURCES} ${ROMVIEW_GUI_SOURCES} ${ROMVIEWEXTRASOURCES} ${ROMVIEW_MODULES})
 
target_link_libraries(romview ${IMAGELIBS} ${ALLEGROLIB} ${SOUNDLIBS} ${ROMVIEWLIBSEXTRA})
 
#############################################################
# Zelda
#############################################################
 
 
 
 
if(MSVC)
    list(APPEND ZELDAEXTRASOURCES zc_icon.rc)
 
elseif(LINUX)
    list(APPEND ZELDAEXTRASOURCES zc_icon.c src/single_instance_unix.cpp)
    set(ZELDALIBSEXTRA ${X11_LIBRARIES})
endif()
 
if(UNITY_BUILD)
    enable_unity_build(ZeldaCore ZELDA_CORE_SOURCES)
    enable_unity_build(ZeldaGUI ZELDA_GUI_SOURCES)
    enable_unity_build(ZeldaSprite ZELDA_SPRITE_SOURCES)
    enable_unity_build(ZeldaSubscreen ZELDA_SUBSCREEN_SOURCES)
endif()
 
add_executable(zelda ${ZELDA_CORE_SOURCES} ${ZELDA_GUI_SOURCES} ${ZELDA_SPRITE_SOURCES} ${ZELDA_SUBSCREEN_SOURCES} ${ZELDA_SCRIPTING_SOURCES} ${ZELDAEXTRASOURCES} ${ZELDA_MODULES})
 
if(WIN32)
    target_link_libraries(zelda zcsound winmm ${IMAGELIBS} ${ALLEGROLIB} ${ZELDALIBSEXTRA})
elseif(LINUX)
    target_link_libraries(zelda zcsound ${IMAGELIBS} ${ALLEGROLIB} ${ZELDALIBSEXTRA})
endif()
 
 
if(MSVC AND USE_PCH)
    set_target_properties(zelda PROPERTIES COMPILE_FLAGS "/Yuprecompiled.h /FIprecompiled.h /Fp\"${ZCPrecompiledBinary}\"" OBJECT_DEPENDS "${ZCPrecompiledBinary}")
    target_compile_definitions(zelda PRIVATE ZC_PCH)
endif()
 
#############################################################
# ZQuest
#############################################################
 
if(MSVC)
    list(APPEND ZQUESTEXTRASOURCES zq_icon.rc)
elseif(LINUX)
    list(APPEND ZQUESTEXTRASOURCES zq_icon.c src/single_instance_unix.cpp)
    set(ZQUESTLIBSEXTRA ${X11_LIBRARIES})
endif()
 
if(UNITY_BUILD)
    enable_unity_build(ZQuestCore ZQUEST_CORE_SOURCES)
    enable_unity_build(ZQuestGUI ZQUEST_GUI_SOURCES)
    enable_unity_build(ZQuestMisc ZQUEST_MISC_SOURCES)
    enable_unity_build(ZQuestZScript ZQUEST_ZSCRIPT_SOURCES)
endif()
 
add_executable(zquest ${ZQUEST_CORE_SOURCES} ${ZQUEST_GUI_SOURCES} ${ZQUEST_MISC_SOURCES} ${ZQUEST_ZSCRIPT_SOURCES} ${ZQUESTEXTRASOURCES} ${BISON_ZScriptParser_OUTPUTS} ${FLEX_ZScriptLexer_OUTPUTS} ${ZQUEST_MODULES})
 
target_link_libraries(zquest zcsound ${IMAGELIBS} ${ALLEGROLIB} ${ZQUESTLIBSEXTRA})
if(MSVC AND USE_PCH)
    set_target_properties(zquest PROPERTIES COMPILE_FLAGS "/Yuprecompiled.h /FIprecompiled.h /Fp\"${ZQPrecompiledBinary}\"" OBJECT_DEPENDS "${ZQPrecompiledBinary}")
    target_compile_definitions(zquest PRIVATE ZC_PCH)
endif()
 
if(MSVC)
    target_compile_definitions(zcsound PRIVATE ZCM_DLL)
    target_compile_definitions(zelda PRIVATE ZCM_DLL_IMPORT)
    target_compile_definitions(zquest PRIVATE ZCM_DLL_IMPORT)
endif()

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎