From 28598fae6b5ac221ac53984651cf919b6105f3bb Mon Sep 17 00:00:00 2001 From: Michael Fabian 'Xaymar' Dirks Date: Fri, 18 Jan 2019 15:56:03 +0100 Subject: [PATCH] cmake: Project upgrade --- CMakeLists.txt | 40 ++++++ cmake/modules/FindFreeImage.cmake | 143 +++++++++++++++++++ cmake/modules/FindSDL2.cmake | 222 ++++++++++++++++++++++++++++++ cmake/modules/Findfmod.cmake | 134 ++++++++++++++++++ 4 files changed, 539 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 cmake/modules/FindFreeImage.cmake create mode 100644 cmake/modules/FindSDL2.cmake create mode 100644 cmake/modules/Findfmod.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..3e6191e --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 2.8.12) +project(BlitzNext) + +# Modules +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake/modules") + +# Detect Architecture +math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}") +if("${BITS}" STREQUAL "32") + set(ARCH "x86") +else() + set(ARCH "x64") +endif() + +# Options +#add_definitions(-DVERSION 1108) +#add_definitions(-DBASE_VER 1108) + +# Dependencies +find_package(SDL2 REQUIRED main) +find_package(FreeImage REQUIRED) +find_package(fmod REQUIRED) + +# Windows +if(WIN32) + add_definitions( + -DNTDDI_VERSION=NTDDI_VISTA + -D_WIN32_WINNT=_WIN32_WINNT_VISTA + -DWINVER=_WIN32_WINNT_VISTA + ) +endif() + +# Projects +add_subdirectory(config) +add_subdirectory(stdutil) +add_subdirectory(gxruntime) +add_subdirectory(runtime) +add_subdirectory(linker) +add_subdirectory(debugger) +add_subdirectory(compiler) diff --git a/cmake/modules/FindFreeImage.cmake b/cmake/modules/FindFreeImage.cmake new file mode 100644 index 0000000..9c2ba6a --- /dev/null +++ b/cmake/modules/FindFreeImage.cmake @@ -0,0 +1,143 @@ +# Find FreeImage (and components) +# +#Variable Type Description +# FreeImage_FOUND BOOL Did we find FreeImage? +# FreeImage_INCLUDE_DIRS LIST/PATH List of paths to all include directories +# FreeImage_LIBRARIES LIST/FILE List of files to link against +# FreeImage_BINARIES LIST/FILE Binary files for FreeImage +# FreeImage_VERSION_STRING STRING FreeImage Version String +# + +# Options +set(FreeImage_DIR "" CACHE PATH "Path to FreeImage Library") + +# Find code +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_lib_arch 64) +else() + set(_lib_arch 86) +endif() +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_lib_suffix 64) +else() + set(_lib_suffix 32) +endif() +if(WIN32) + set(_lib_ext .dll) +else() + set(_lib_ext .so) +endif() + +set(FreeImage_FOUND FALSE) +set(FreeImage_INCLUDE_DIRS) +set(FreeImage_LIBRARIES) +set(FreeImage_BINARIES) +set(FreeImage_VERSION_STRING) + +function(find_freeimage) + set(FreeImage_FOUND FALSE PARENT_SCOPE) + set(FreeImage_INCLUDE_DIRS PARENT_SCOPE) + set(FreeImage_LIBRARIES PARENT_SCOPE) + set(FreeImage_BINARIES PARENT_SCOPE) + set(FreeImage_VERSION_STRING PARENT_SCOPE) + + mark_as_advanced( + FreeImage_FOUND + FreeImage_INCLUDE_DIRS + FreeImage_LIBRARIES + FreeImage_BINARIES + FreeImage_VERSION_STRING + ) + + set(FreeImage_INCLUDE_DIR) + set(FreeImage_LIBRARY) + set(FreeImage_BINARY) + find_path(FreeImage_INCLUDE_DIR + NAMES + "FreeImage.h" + HINTS + ${FreeImagePath${_lib_suffix}} + ${FreeImagePath} + ${FreeImage_DIR} + PATHS + /usr/include /usr/local/include /opt/local/include /sw/include + PATH_SUFFIXES + Dist/x${_lib_arch} + Dist/x${_lib_suffix} + Dist + include + inc + ) + find_file(FreeImage_LIBRARY + "FreeImage.lib" + HINTS + ${FreeImagePath${_lib_suffix}} + ${FreeImagePath} + ${FreeImage_DIR} + PATHS + /usr/lib /usr/local/lib /opt/local/lib /sw/lib + PATH_SUFFIXES + Dist Dist/x${_lib_suffix} + lib/x${_lib_arch} libx${_lib_arch} ../lib/x${_lib_arch} ../libx${_lib_arch} + lib/${_lib_suffix} lib${_lib_suffix} ../lib/${_lib_suffix} ../lib${_lib_suffix} + lib ../lib + libs/x${_lib_arch} libsx${_lib_arch} ../libs/x${_lib_arch} ../libsx${_lib_arch} + libs/${_lib_suffix} libs${_lib_suffix} ../libs/${_lib_suffix} ../libs${_lib_suffix} + libs ../libs + bin/x${_lib_arch} binx${_lib_arch} ../bin/x${_lib_arch} ../binx${_lib_arch} + bin/${_lib_suffix} bin${_lib_suffix} ../bin/${_lib_suffix} ../bin${_lib_suffix} + bin ../bin + ) + find_file(FreeImage_BINARY + "FreeImage${_lib_ext}" + HINTS + ${FreeImagePath${_lib_suffix}} + ${FreeImagePath} + ${FreeImage_DIR} + PATHS + /usr/lib /usr/local/lib /opt/local/lib /sw/lib + PATH_SUFFIXES + Dist Dist/x${_lib_suffix} + lib/x${_lib_arch} libx${_lib_arch} ../lib/x${_lib_arch} ../libx${_lib_arch} + lib/${_lib_suffix} lib${_lib_suffix} ../lib/${_lib_suffix} ../lib${_lib_suffix} + lib ../lib + libs/x${_lib_arch} libsx${_lib_arch} ../libs/x${_lib_arch} ../libsx${_lib_arch} + libs/${_lib_suffix} libs${_lib_suffix} ../libs/${_lib_suffix} ../libs${_lib_suffix} + libs ../libs + bin/x${_lib_arch} binx${_lib_arch} ../bin/x${_lib_arch} ../binx${_lib_arch} + bin/${_lib_suffix} bin${_lib_suffix} ../bin/${_lib_suffix} ../bin${_lib_suffix} + bin ../bin + ) + + if(FreeImage_INCLUDE_DIR AND FreeImage_LIBRARY) + set(FreeImage_FOUND TRUE PARENT_SCOPE) + set(FreeImage_INCLUDE_DIRS ${FreeImage_INCLUDE_DIR} PARENT_SCOPE) + set(FreeImage_LIBRARIES ${FreeImage_LIBRARY} PARENT_SCOPE) + set(FreeImage_BINARIES ${FreeImage_BINARY} PARENT_SCOPE) + + set(_vfile "${FreeImage_INCLUDE_DIR}/FreeImage.h") + if(EXISTS "${_vfile}") + file(STRINGS "${_vfile}" _version_parse REGEX "^.*FREEIMAGE_(MAJOR|MINOR)_VERSION[ \t]+[0-9]+[ \t]*$") + string(REGEX REPLACE ".*FREEIMAGE_MAJOR_VERSION[ \t]+([0-9]+).*" "\\1" _major "${_version_parse}") + string(REGEX REPLACE ".*FREEIMAGE_MINOR_VERSION[ \t]+([0-9]+).*" "\\1" _minor "${_version_parse}") + + set(FreeImage_VERSION_MAJOR "${_major}" PARENT_SCOPE) + set(FreeImage_VERSION_MINOR "${_minor}" PARENT_SCOPE) + + set(FreeImage_VERSION_STRING "${_major}.${_minor}" PARENT_SCOPE) + else() + message(STATUS "Failed parsing FreeImage version") + endif() + endif() +endfunction() + +# Library +find_freeimage() + +# Default +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(FreeImage + FOUND_VAR FreeImage_FOUND + REQUIRED_VARS FreeImage_LIBRARIES FreeImage_INCLUDE_DIRS FreeImage_BINARIES + VERSION_VAR FreeImage_VERSION_STRING +) diff --git a/cmake/modules/FindSDL2.cmake b/cmake/modules/FindSDL2.cmake new file mode 100644 index 0000000..6629c8b --- /dev/null +++ b/cmake/modules/FindSDL2.cmake @@ -0,0 +1,222 @@ +# Find SDL2 (and components) +# +#Variable Type Description +# SDL2_FOUND BOOL Did we find SDL2? +# SDL2_INCLUDE_DIRS LIST/PATH List of paths to all include directories +# SDL2_LIBRARIES LIST/FILE List of files to link against +# SDL2_BINARIES LIST/FILE Binary files for SDL2 +# SDL2_VERSION_STRING STRING SDL2 Version String +# +#Components: +#Variable Type Description +# SDL2_comp_FOUND BOOL Found onent? +# SDL2_comp_LIBRARIES LIST/FILE Path to onent library files + +# Options +set(SDL2_DIR "" CACHE PATH "Path to SDL2 Library") + +# Find code +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_lib_arch 64) +else() + set(_lib_arch 86) +endif() +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_lib_suffix 64) +else() + set(_lib_suffix 32) +endif() +if(WIN32) + set(_lib_ext .dll) +else() + set(_lib_ext .so) +endif() + +set(SDL2_FOUND FALSE) +set(SDL2_INCLUDE_DIRS) +set(SDL2_LIBRARIES) +set(SDL2_BINARIES) +set(SDL2_VERSION_STRING) + +function(find_sdl2) + set(SDL2_FOUND FALSE PARENT_SCOPE) + set(SDL2_INCLUDE_DIRS PARENT_SCOPE) + set(SDL2_LIBRARIES PARENT_SCOPE) + set(SDL2_BINARIES PARENT_SCOPE) + set(SDL2_VERSION_STRING PARENT_SCOPE) + + mark_as_advanced( + SDL2_FOUND + SDL2_INCLUDE_DIRS + SDL2_LIBRARIES + SDL2_BINARIES + SDL2_VERSION_STRING + ) + + set(SDL2_INCLUDE_DIR) + set(SDL2_LIBRARY) + set(SDL2_BINARY) + find_path(SDL2_INCLUDE_DIR + NAMES + "SDL.h" "SDL_version.h" + HINTS + ${SDL2Path${_lib_suffix}} + ${SDL2Path} + ${SDLPath${_lib_suffix}} + ${SDLPath} + ${SDL2_DIR} + ${SDL_DIR} + PATHS + /usr/include /usr/local/include /opt/local/include /sw/include + PATH_SUFFIXES + sdl2/include include sdl/include + ) + find_file(SDL2_LIBRARY + "SDL2.lib" + HINTS + ${SDL2Path${_lib_suffix}} + ${SDL2Path} + ${SDLPath${_lib_suffix}} + ${SDLPath} + ${SDL2_DIR} + ${SDL_DIR} + PATHS + /usr/lib /usr/local/lib /opt/local/lib /sw/lib + PATH_SUFFIXES + lib/x${_lib_arch} libx${_lib_arch} ../lib/x${_lib_arch} ../libx${_lib_arch} + lib/${_lib_suffix} lib${_lib_suffix} ../lib/${_lib_suffix} ../lib${_lib_suffix} + lib ../lib + libs/x${_lib_arch} libsx${_lib_arch} ../libs/x${_lib_arch} ../libsx${_lib_arch} + libs/${_lib_suffix} libs${_lib_suffix} ../libs/${_lib_suffix} ../libs${_lib_suffix} + libs ../libs + bin/x${_lib_arch} binx${_lib_arch} ../bin/x${_lib_arch} ../binx${_lib_arch} + bin/${_lib_suffix} bin${_lib_suffix} ../bin/${_lib_suffix} ../bin${_lib_suffix} + bin ../bin + ) + find_file(SDL2_BINARY + "SDL2${_lib_ext}" + HINTS + ${SDL2Path${_lib_suffix}} + ${SDL2Path} + ${SDLPath${_lib_suffix}} + ${SDLPath} + ${SDL2_DIR} + ${SDL_DIR} + PATHS + /usr/lib /usr/local/lib /opt/local/lib /sw/lib + PATH_SUFFIXES + lib/x${_lib_arch} libx${_lib_arch} ../lib/x${_lib_arch} ../libx${_lib_arch} + lib/${_lib_suffix} lib${_lib_suffix} ../lib/${_lib_suffix} ../lib${_lib_suffix} + lib ../lib + libs/x${_lib_arch} libsx${_lib_arch} ../libs/x${_lib_arch} ../libsx${_lib_arch} + libs/${_lib_suffix} libs${_lib_suffix} ../libs/${_lib_suffix} ../libs${_lib_suffix} + libs ../libs + bin/x${_lib_arch} binx${_lib_arch} ../bin/x${_lib_arch} ../binx${_lib_arch} + bin/${_lib_suffix} bin${_lib_suffix} ../bin/${_lib_suffix} ../bin${_lib_suffix} + bin ../bin + ) + + if(SDL2_INCLUDE_DIR AND SDL2_LIBRARY) + set(SDL2_FOUND TRUE PARENT_SCOPE) + set(SDL2_INCLUDE_DIRS ${SDL2_INCLUDE_DIR} PARENT_SCOPE) + set(SDL2_LIBRARIES ${SDL2_LIBRARY} PARENT_SCOPE) + set(SDL2_BINARIES ${SDL2_BINARY} PARENT_SCOPE) + + set(_vfile "${SDL2_INCLUDE_DIR}/SDL_version.h") + if(EXISTS "${_vfile}") + file(STRINGS "${_vfile}" _version_parse REGEX "^.*SDL_(MAJOR|MINOR)_VERSION[ \t]+[0-9]+[ \t]*$") + string(REGEX REPLACE ".*SDL_MAJOR_VERSION[ \t]+([0-9]+).*" "\\1" _major "${_version_parse}") + string(REGEX REPLACE ".*SDL_MINOR_VERSION[ \t]+([0-9]+).*" "\\1" _minor "${_version_parse}") + + set(SDL2_VERSION_MAJOR "${_major}" PARENT_SCOPE) + set(SDL2_VERSION_MINOR "${_minor}" PARENT_SCOPE) + + set(SDL2_VERSION_STRING "${_major}.${_minor}" PARENT_SCOPE) + else() + message(STATUS "Failed parsing SDL2 version") + endif() + endif() +endfunction() + +function(find_sdl2_component component) + string(TOUPPER "${component}" component_u) + set(SDL2_${component_u}_FOUND FALSE PARENT_SCOPE) + set(SDL2_${component}_FOUND FALSE PARENT_SCOPE) + set(SDL2_${component_u}_LIBRARIES PARENT_SCOPE) + set(SDL2_${component}_LIBRARIES PARENT_SCOPE) + + mark_as_advanced( + SDL2_${component_u}_FOUND + SDL2_${component}_FOUND + SDL2_${component_u}_LIBRARIES + SDL2_${component}_LIBRARIES + SDL2_${component_u}_BINARIES + SDL2_${component}_BINARIES + ) + + if(NOT SDL2_FOUND) + message(STATUS "SDL2 not found, not looking for components.") + return() + endif() + + # Find component + set(SDL2_${component_u}_LIBRARY) + find_file(SDL2_${component_u}_LIBRARY + "SDL2${component}.lib" + HINTS + ${SDL2Path${_lib_suffix}} + ${SDL2Path} + ${SDLPath${_lib_suffix}} + ${SDLPath} + ${SDL2_DIR} + ${SDL_DIR} + PATHS + /usr/lib /usr/local/lib /opt/local/lib /sw/lib + PATH_SUFFIXES + lib/x${_lib_arch} libx${_lib_arch} ../lib/x${_lib_arch} ../libx${_lib_arch} + lib/${_lib_suffix} lib${_lib_suffix} ../lib/${_lib_suffix} ../lib${_lib_suffix} + lib ../lib + libs/x${_lib_arch} libsx${_lib_arch} ../libs/x${_lib_arch} ../libsx${_lib_arch} + libs/${_lib_suffix} libs${_lib_suffix} ../libs/${_lib_suffix} ../libs${_lib_suffix} + libs ../libs + bin/x${_lib_arch} binx${_lib_arch} ../bin/x${_lib_arch} ../binx${_lib_arch} + bin/${_lib_suffix} bin${_lib_suffix} ../bin/${_lib_suffix} ../bin${_lib_suffix} + bin ../bin + ) + + if(SDL2_${component_u}_LIBRARY) + set(SDL2_${component_u}_FOUND TRUE PARENT_SCOPE) + set(SDL2_${component}_FOUND TRUE PARENT_SCOPE) + set(SDL2_${component_u}_LIBRARIES ${SDL2_${component_u}_LIBRARY} PARENT_SCOPE) + set(SDL2_${component}_LIBRARIES ${SDL2_${component_u}_LIBRARY} PARENT_SCOPE) + + list(APPEND SDL2_LIBRARIES ${SDL2_${component_u}_LIBRARIES}) + list(REMOVE_DUPLICATES SDL2_LIBRARIES) + set(SDL2_LIBRARIES "${SDL2_LIBRARIES}" PARENT_SCOPE) + endif() +endfunction() + +# Library +find_sdl2() + +# Components +list(GET SDL2_FIND_COMPONENTS 0 _first_comp) +string(TOUPPER "${_first_comp}" _first_comp) + +foreach(component ${SDL2_FIND_COMPONENTS}) + if(component STREQUAL "main") + find_sdl2_component("${component}") + elseif(component STREQUAL "test") + find_sdl2_component("${component}") + else() + message(FATAL_ERROR "Unknown FFmpeg component requested: ${component}") + endif() +endforeach() + +# Default +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(SDL2 + FOUND_VAR SDL2_FOUND + REQUIRED_VARS SDL2_LIBRARIES SDL2_INCLUDE_DIRS SDL2_BINARIES + VERSION_VAR SDL2_VERSION_STRING +) diff --git a/cmake/modules/Findfmod.cmake b/cmake/modules/Findfmod.cmake new file mode 100644 index 0000000..6219484 --- /dev/null +++ b/cmake/modules/Findfmod.cmake @@ -0,0 +1,134 @@ +# Find fmod (and components) +# +#Variable Type Description +# fmod_FOUND BOOL Did we find fmod? +# fmod_INCLUDE_DIRS LIST/PATH List of paths to all include directories +# fmod_LIBRARIES LIST/FILE List of files to link against +# fmod_BINARIES LIST/FILE Binary files for fmod +# fmod_VERSION_STRING STRING fmod Version String + +# Options +set(fmod_DIR "" CACHE PATH "Path to fmod Library") + +# Find code +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_lib_arch 64) +else() + set(_lib_arch 86) +endif() +if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(_lib_suffix 64) +else() + set(_lib_suffix 32) +endif() +if(WIN32) + set(_lib_ext .dll) +else() + set(_lib_ext .so) +endif() + +set(fmod_FOUND FALSE) +set(fmod_INCLUDE_DIRS) +set(fmod_LIBRARIES) +set(fmod_BINARIES) +set(fmod_VERSION_STRING) + +function(find_fmod) + set(fmod_FOUND FALSE PARENT_SCOPE) + set(fmod_INCLUDE_DIRS PARENT_SCOPE) + set(fmod_LIBRARIES PARENT_SCOPE) + set(fmod_BINARIES PARENT_SCOPE) + set(fmod_VERSION_STRING PARENT_SCOPE) + + mark_as_advanced( + fmod_FOUND + fmod_INCLUDE_DIRS + fmod_LIBRARIES + fmod_BINARIES + fmod_VERSION_STRING + ) + + set(fmod_INCLUDE_DIR) + set(fmod_LIBRARY) + set(fmod_BINARY) + find_path(fmod_INCLUDE_DIR + NAMES + "fmod.h" + HINTS + ${fmodPath${_lib_suffix}} + ${fmodPath} + ${fmod_DIR} + PATHS + /usr/include /usr/local/include /opt/local/include /sw/include + PATH_SUFFIXES + fmod + fmod/inc + inc + fmod/include + include + fmod/api + api + fmod/api/inc + api/inc + ) + find_file(fmod_LIBRARY + "fmod${_lib_suffix}vc.lib" "fmodvc.lib" + HINTS + ${fmodPath${_lib_suffix}} + ${fmodPath} + ${fmod_DIR} + PATHS + /usr/lib /usr/local/lib /opt/local/lib /sw/lib + PATH_SUFFIXES + fmod + fmod/api + api + fmod/api/lib + api/lib + ) + find_file(fmod_BINARY + NAMES "fmod${_lib_suffix}${_lib_ext}" "fmod${_lib_ext}" + HINTS + ${fmodPath${_lib_suffix}} + ${fmodPath} + ${fmod_DIR} + PATHS + /usr/lib /usr/local/lib /opt/local/lib /sw/lib + PATH_SUFFIXES + fmod + fmod/api + api + ) + + if(fmod_INCLUDE_DIR AND fmod_LIBRARY) + set(fmod_FOUND TRUE PARENT_SCOPE) + set(fmod_INCLUDE_DIRS ${fmod_INCLUDE_DIR} PARENT_SCOPE) + set(fmod_LIBRARIES ${fmod_LIBRARY} PARENT_SCOPE) + set(fmod_BINARIES ${fmod_BINARY} PARENT_SCOPE) + + set(_vfile "${fmod_INCLUDE_DIR}/fmod.h") + if(EXISTS "${_vfile}") + file(STRINGS "${_vfile}" _version_parse REGEX "^.*FMOD_VERSION[ \t]+[0-9]+.[0-9]+f[ \t]*$") + string(REGEX REPLACE ".*FMOD_VERSION[ \t]+([0-9]+).*" "\\1" _major "${_version_parse}") + string(REGEX REPLACE ".*FMOD_VERSION[ \t]+[0-9]+.([0-9]+).*" "\\1" _minor "${_version_parse}") + + set(fmod_VERSION_MAJOR "${_major}" PARENT_SCOPE) + set(fmod_VERSION_MINOR "${_minor}" PARENT_SCOPE) + + set(fmod_VERSION_STRING "${_major}.${_minor}" PARENT_SCOPE) + else() + message(STATUS "Failed parsing fmod version") + endif() + endif() +endfunction() + +# Library +find_fmod() + +# Default +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(fmod + FOUND_VAR fmod_FOUND + REQUIRED_VARS fmod_LIBRARIES fmod_INCLUDE_DIRS fmod_BINARIES + VERSION_VAR fmod_VERSION_STRING +)