mirror of
https://github.com/TerryCavanagh/VVVVVV.git
synced 2024-06-25 22:18:30 +02:00
Doing this is not necessary as CMake already looks up the default one correctly and in fact breaks whenever you have multiple Xcode versions installed so Xcode is not called Xcode.app. (And it does not respect the default Xcode set using xcode-select) The behavior now is to respect CMAKE_OSX_SYSROOT if set by the user on the command line. If it's not set, try to use the hardcoded path to the 10.9 SDK if it's present. If not, warn about the fact that a different SDK is used.
160 lines
4.2 KiB
CMake
160 lines
4.2 KiB
CMake
# CMake File for VVVVVV
|
|
# Written by Ethan "flibitijibibo" Lee
|
|
|
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.12)
|
|
|
|
# CMake Options
|
|
OPTION(ENABLE_WARNINGS "Enable compilation warnings" ON)
|
|
OPTION(ENABLE_WERROR "Treat compilation warnings as errors" OFF)
|
|
|
|
# Architecture Flags
|
|
IF(APPLE)
|
|
# Wow, Apple is a huge jerk these days huh?
|
|
SET(OSX_10_9_SDK_PATH /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk)
|
|
IF(NOT CMAKE_OSX_SYSROOT)
|
|
IF(IS_DIRECTORY ${OSX_10_9_SDK_PATH})
|
|
SET(CMAKE_OSX_SYSROOT ${OSX_10_9_SDK_PATH})
|
|
ELSE()
|
|
MESSAGE(WARNING "CMAKE_OSX_SYSROOT not set and macOS 10.9 SDK not found! Using default one.")
|
|
ENDIF()
|
|
ENDIF()
|
|
SET(CMAKE_OSX_DEPLOYMENT_TARGET 10.9)
|
|
LINK_DIRECTORIES(/usr/local/lib)
|
|
ADD_COMPILE_OPTIONS(-Werror=partial-availability)
|
|
ENDIF()
|
|
|
|
PROJECT(VVVVVV)
|
|
|
|
IF(APPLE)
|
|
MESSAGE(STATUS "Using macOS SDK at ${CMAKE_OSX_SYSROOT}")
|
|
ENDIF()
|
|
|
|
# Compiler Flags
|
|
ADD_DEFINITIONS(-DPHYSFS_SUPPORTS_DEFAULT=0 -DPHYSFS_SUPPORTS_ZIP=1)
|
|
|
|
# Executable Suffix
|
|
IF(APPLE)
|
|
SET(CMAKE_EXECUTABLE_SUFFIX ".osx")
|
|
ELSEIF(WIN32)
|
|
# Nothing!
|
|
ELSEIF(CMAKE_SIZEOF_VOID_P MATCHES "8")
|
|
SET(CMAKE_EXECUTABLE_SUFFIX ".x86_64")
|
|
ELSE()
|
|
SET(CMAKE_EXECUTABLE_SUFFIX ".x86")
|
|
ENDIF()
|
|
|
|
# Include Directories
|
|
INCLUDE_DIRECTORIES(src tinyxml physfs lodepng)
|
|
|
|
# Source Lists
|
|
SET(VVV_SRC
|
|
src/BinaryBlob.cpp
|
|
src/BlockV.cpp
|
|
src/editor.cpp
|
|
src/Ent.cpp
|
|
src/Entity.cpp
|
|
src/FileSystemUtils.cpp
|
|
src/Finalclass.cpp
|
|
src/Game.cpp
|
|
src/Graphics.cpp
|
|
src/GraphicsResources.cpp
|
|
src/GraphicsUtil.cpp
|
|
src/Input.cpp
|
|
src/KeyPoll.cpp
|
|
src/Labclass.cpp
|
|
src/Logic.cpp
|
|
src/Map.cpp
|
|
src/Music.cpp
|
|
src/Otherlevel.cpp
|
|
src/preloader.cpp
|
|
src/Screen.cpp
|
|
src/Script.cpp
|
|
src/Scripts.cpp
|
|
src/SoundSystem.cpp
|
|
src/Spacestation2.cpp
|
|
src/TerminalScripts.cpp
|
|
src/Textbox.cpp
|
|
src/titlerender.cpp
|
|
src/Tower.cpp
|
|
src/UtilityClass.cpp
|
|
src/WarpClass.cpp
|
|
src/main.cpp
|
|
src/SteamNetwork.c
|
|
)
|
|
SET(XML_SRC
|
|
tinyxml/tinystr.cpp
|
|
tinyxml/tinyxml.cpp
|
|
tinyxml/tinyxmlerror.cpp
|
|
tinyxml/tinyxmlparser.cpp
|
|
)
|
|
SET(PFS_SRC
|
|
physfs/physfs.c
|
|
physfs/physfs_archiver_dir.c
|
|
physfs/physfs_archiver_unpacked.c
|
|
physfs/physfs_archiver_zip.c
|
|
physfs/physfs_byteorder.c
|
|
physfs/physfs_unicode.c
|
|
physfs/physfs_platform_posix.c
|
|
physfs/physfs_platform_unix.c
|
|
physfs/physfs_platform_windows.c
|
|
)
|
|
IF(APPLE)
|
|
# Are you noticing a pattern with this Apple crap yet?
|
|
SET(PFS_SRC ${PFS_SRC} physfs/physfs_platform_apple.m)
|
|
ENDIF()
|
|
SET(PNG_SRC lodepng/lodepng.c)
|
|
|
|
# Executable information
|
|
IF(WIN32)
|
|
ADD_EXECUTABLE(vvvvvv WIN32 ${VVV_SRC})
|
|
ELSE()
|
|
ADD_EXECUTABLE(vvvvvv ${VVV_SRC})
|
|
ENDIF()
|
|
|
|
# Build options
|
|
IF(ENABLE_WARNINGS)
|
|
# The weird syntax is due to CMake generator expressions.
|
|
# Saves quite a few lines and boilerplate at the price of readability.
|
|
TARGET_COMPILE_OPTIONS(vvvvvv PRIVATE
|
|
$<$<OR:$<CXX_COMPILER_ID:GNU>,$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:
|
|
-Wall $<$<BOOL:ENABLE_WERROR>:-Werror>>
|
|
$<$<CXX_COMPILER_ID:MSVC>:
|
|
/W4 $<$<BOOL:ENABLE_WERROR>:/WX>>)
|
|
ENDIF()
|
|
|
|
# Library information
|
|
ADD_LIBRARY(tinyxml-static STATIC ${XML_SRC})
|
|
ADD_LIBRARY(physfs-static STATIC ${PFS_SRC} ${PFSP_SRC})
|
|
ADD_LIBRARY(lodepng-static STATIC ${PNG_SRC})
|
|
|
|
# Static Dependencies
|
|
TARGET_LINK_LIBRARIES(vvvvvv physfs-static tinyxml-static lodepng-static)
|
|
|
|
# SDL2 Dependency (Detection pulled from FAudio)
|
|
if (DEFINED SDL2_INCLUDE_DIRS AND DEFINED SDL2_LIBRARIES)
|
|
message(STATUS "Using pre-defined SDL2 variables SDL2_INCLUDE_DIRS and SDL2_LIBRARIES")
|
|
target_include_directories(vvvvvv PUBLIC "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
|
|
target_link_libraries(vvvvvv ${SDL2_LIBRARIES})
|
|
else()
|
|
# Only try to autodetect if both SDL2 variables aren't explicitly set
|
|
find_package(SDL2 CONFIG)
|
|
if (TARGET SDL2::SDL2)
|
|
message(STATUS "Using TARGET SDL2::SDL2")
|
|
target_link_libraries(vvvvvv SDL2::SDL2 SDL2_mixer)
|
|
elseif (TARGET SDL2)
|
|
message(STATUS "Using TARGET SDL2")
|
|
target_link_libraries(vvvvvv SDL2 SDL2_mixer)
|
|
else()
|
|
message(STATUS "No TARGET SDL2::SDL2, or SDL2, using variables")
|
|
target_include_directories(vvvvvv PUBLIC "$<BUILD_INTERFACE:${SDL2_INCLUDE_DIRS}>")
|
|
target_link_libraries(vvvvvv ${SDL2_LIBRARIES} SDL2_mixer)
|
|
endif()
|
|
endif()
|
|
|
|
# Yes, more Apple Crap
|
|
IF(APPLE)
|
|
FIND_LIBRARY(FOUNDATION NAMES Foundation)
|
|
FIND_LIBRARY(IOKIT NAMES IOKit)
|
|
TARGET_LINK_LIBRARIES(vvvvvv objc ${IOKIT} ${FOUNDATION})
|
|
ENDIF()
|