distribution/packages/games/libretro/easyrpg/wildmidi/sources/CMakeLists.txt
2022-02-05 09:23:32 -05:00

303 lines
9.7 KiB
CMake

# ########## Project setup ##########
PROJECT(wildmidi C)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.11)
# WildMIDI Version
SET(VERSION_MAJOR 0)
SET(VERSION_MINOR 4)
SET(VERSION_RELEASE 3)
SET(WILDMIDI_VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_RELEASE}")
# Lib Versions
SET(SOVERSION 2)
SET(VERSION 2.1.0)
# Find Macros
SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
INCLUDE(CMakeDependentOption)
INCLUDE(CheckCCompilerFlag)
INCLUDE(CheckCSourceCompiles)
INCLUDE(CheckIncludeFile)
INCLUDE(TestBigEndian)
# Set a default build type if none was specified
IF (NOT DEFINED CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE STREQUAL "")
MESSAGE(STATUS "Setting build type to 'Debug' as none was specified.")
SET(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE)
# Set the possible values of build type for cmake-gui
SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" "MinSizeRel" "RelWithDebInfo")
ENDIF ()
SET(CMAKE_CONFIGURATION_TYPES "${CMAKE_BUILD_TYPE}")
MESSAGE(STATUS "Build Type: ${CMAKE_BUILD_TYPE}")
# Set our options
OPTION(BUILD_SHARED_LIBS "Build a dynamic wildmidi library" ON)
OPTION(WANT_PLAYER "Build WildMIDI player in addition to the libraries" ON)
OPTION(WANT_STATIC "Build static library in addition to dynamic library" OFF)
CMAKE_DEPENDENT_OPTION(WANT_PLAYERSTATIC "Build a statically linked WildMIDI player" ON "WANT_STATIC;WANT_PLAYER" OFF)
OPTION(WANT_ALSA "Include ALSA (Advanced Linux Sound Architecture) support" OFF)
OPTION(WANT_OSS "Include OSS (Open Sound System) support" OFF)
OPTION(WANT_OPENAL "Include OpenAL (Cross Platform) support" OFF)
OPTION(WANT_DEVTEST "Build WildMIDI DevTest file to check files" OFF)
OPTION(WANT_OSX_DEPLOYMENT "OSX Deployment" OFF)
IF (WIN32 AND MSVC)
OPTION(WANT_MP_BUILD "Build with Multiple Processes (/MP)" OFF)
ENDIF ()
IF (UNIX AND NOT APPLE AND NOT RISCOS)
SET(WILDMIDI_CFG "/etc/wildmidi/wildmidi.cfg" CACHE STRING "default config location")
ELSE ()
SET(WILDMIDI_CFG "wildmidi.cfg" CACHE STRING "default config location")
ENDIF ()
IF ((NOT BUILD_SHARED_LIBS) AND (NOT WANT_STATIC))
MESSAGE(FATAL_ERROR "Neither dynamic nor static library build is selected.")
ENDIF ()
# Platform specific defines
IF (UNIX)
# allow 'large' files in 32 bit builds
ADD_DEFINITIONS(
-D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64
-D_LARGE_FILES
)
ENDIF (UNIX)
# Usage of RPATH for macOS is enabled by default; this just suppresses the CMP0042 warning
# when building libwildmidi_dynamic.
IF (POLICY CMP0042)
CMAKE_POLICY(SET CMP0042 NEW)
ENDIF ()
IF (OPENBSD) # Set RPATH for OpenBSD so WildMIDI can find libWildMidi.so
# use, i.e. don't skip the full RPATH for the build tree
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
# when building, don't use the install RPATH already
# (but later on when installing)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
# add the automatically determined parts of the RPATH
# which point to directories outside the build tree to the install RPATH
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
# the RPATH to be used when installing, but only if it's not a system directory
LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
IF ("${isSystemDir}" STREQUAL "-1")
SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
ENDIF ()
ENDIF (OPENBSD)
IF (WIN32)
ADD_DEFINITIONS(
-DNOMINMAX
-DWIN32_LEAN_AND_MEAN
-D_CRT_SECURE_NO_WARNINGS
)
ENDIF (WIN32)
# Compiler specific settings
IF (CMAKE_COMPILER_IS_GNUCC OR (CMAKE_C_COMPILER_ID MATCHES "Clang"))
ADD_DEFINITIONS(
-Wall -W
-fno-common
)
IF (NOT WIN32 AND NOT CYGWIN)
SET(OLD_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS} -Werror")
CHECK_C_SOURCE_COMPILES("int foo(void) __attribute__((visibility(\"default\")));
int main(void) {return 0;}" HAVE_VISIBILITY_DEFAULT)
IF (HAVE_VISIBILITY_DEFAULT)
CHECK_C_COMPILER_FLAG(-fvisibility=hidden HAVE_VISIBILITY_HIDDEN)
ENDIF ()
SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS}")
ENDIF ()
IF (CMAKE_BUILD_TYPE STREQUAL "Debug")
ADD_DEFINITIONS(-ggdb3 -O0)
ELSEIF (CMAKE_BUILD_TYPE STREQUAL "Release")
ADD_DEFINITIONS(-O3)
ENDIF (CMAKE_BUILD_TYPE STREQUAL "Debug")
ENDIF ()
IF (CMAKE_C_COMPILER_ID MATCHES "SunPro")
SET(OLD_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS} -xldscope=hidden")
# __SUNPRO_C >= 0x590
# CHECK_C_SOURCE_COMPILES("int foo(void) __attribute__((visibility(\"default\")));
# int main(void) {return 0;}" HAVE_VISIBILITY_DEFAULT)
# __SUNPRO_C >= 0x550
CHECK_C_SOURCE_COMPILES("__global int foo(void);
int main(void) {return 0;}" HAVE_LDSCOPE_GLOBAL)
IF (HAVE_LDSCOPE_GLOBAL)# OR HAVE_VISIBILITY_DEFAULT
SET(HAVE_LDSCOPE_HIDDEN 1)
ENDIF ()
SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS}")
ENDIF ()
CHECK_C_SOURCE_COMPILES("int main(void) {__builtin_expect(0,0); return 0;}" HAVE___BUILTIN_EXPECT)
CHECK_C_SOURCE_COMPILES("static inline int static_foo() {return 0;}
int main(void) {return 0;}" HAVE_C_INLINE)
CHECK_C_SOURCE_COMPILES("static __inline__ int static_foo() {return 0;}
int main(void) {return 0;}" HAVE_C___INLINE__)
CHECK_C_SOURCE_COMPILES("static __inline int static_foo() {return 0;}
int main(void) {return 0;}" HAVE_C___INLINE)
# we must not have any unresolved symbols:
if (APPLE)
SET(EXTRA_LDFLAGS "-Wl,-undefined,error")
ELSE()
SET(OLD_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}")
SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS} -Wl,--no-undefined")
CHECK_C_COMPILER_FLAG("" HAVE_NO_UNDEFINED)
SET(CMAKE_REQUIRED_FLAGS "${OLD_REQUIRED_FLAGS}")
IF (HAVE_NO_UNDEFINED)
SET(EXTRA_LDFLAGS "-Wl,--no-undefined -lm")
ELSE()
SET(EXTRA_LDFLAGS "")
ENDIF()
ENDIF()
CHECK_INCLUDE_FILE(stdint.h HAVE_STDINT_H)
CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
SET(AUDIODRV_ALSA)
SET(AUDIODRV_OSS)
SET(AUDIODRV_OPENAL)
# UNIX-like environments
IF (UNIX AND NOT APPLE)
# Go looking for available sound packages for WildMIDI player
IF (WANT_PLAYER)
FIND_PACKAGE(ALSA)
FIND_PACKAGE(OpenAL)
FIND_PACKAGE(OSS)
# Set preferred output
IF (WANT_ALSA)
IF (NOT ALSA_FOUND)
MESSAGE(FATAL_ERROR "ALSA required but not found.")
ENDIF ()
SET(AUDIODRV_ALSA 1)
SET(AUDIO_LIBRARY ${ALSA_LIBRARY})
ELSEIF (WANT_OSS)
IF (NOT OSS_FOUND)
MESSAGE(FATAL_ERROR "OSS required but not found.")
ENDIF ()
# no special header paths
SET(AUDIODRV_OSS 1)
SET(AUDIO_LIBRARY ${OSS_LIBRARY})
ELSEIF (WANT_OPENAL)
IF (NOT OPENAL_FOUND)
MESSAGE(FATAL_ERROR "OpenAL required but not found.")
ENDIF ()
SET(AUDIODRV_OPENAL 1)
SET(AUDIO_LIBRARY ${OPENAL_LIBRARY})
ELSE () # Try to auto-detect
IF (ALSA_FOUND)
SET(AUDIO_LIBRARY ${ALSA_LIBRARY})
SET(AUDIODRV_ALSA 1)
ELSEIF (OSS_FOUND)
# no special header paths
SET(AUDIO_LIBRARY ${OSS_LIBRARY})
SET(AUDIODRV_OSS 1)
ELSEIF (OPENAL_FOUND)
SET(AUDIO_LIBRARY ${OPENAL_LIBRARY})
SET(AUDIODRV_OPENAL 1)
ELSE ()
MESSAGE(WARNING "Could not find an audio sub-system!")
SET(AUDIO_LIBRARY "")
ENDIF ()
ENDIF ()
ENDIF ()
# find our math lib
FIND_LIBRARY(M_LIBRARY m)
MESSAGE(STATUS "M_LIBRARY: ${M_LIBRARY}")
IF (NOT M_LIBRARY)
SET(M_LIBRARY "")
ENDIF ()
## Debian and non debian Linux building
IF (DPKG_PROGRAM)
## Debian specific
ELSE ()
## Non debian specific
ENDIF ()
ENDIF (UNIX AND NOT APPLE)
IF (APPLE AND WANT_PLAYER)
FIND_PACKAGE(OpenAL)
IF (WANT_OPENAL)
IF (NOT OPENAL_FOUND)
MESSAGE(FATAL_ERROR "OpenAL required but not found.")
ENDIF ()
SET(AUDIO_LIBRARY ${OPENAL_LIBRARY})
ELSE ()
IF (OPENAL_FOUND)
SET(AUDIO_LIBRARY ${OPENAL_LIBRARY})
SET(AUDIODRV_OPENAL 1)
ELSE ()
MESSAGE(WARNING "Could not find an audio sub-system!")
SET(AUDIO_LIBRARY "")
ENDIF ()
ENDIF ()
ENDIF ()
IF (WIN32)
IF (WANT_PLAYER)
LINK_LIBRARIES(winmm)
ENDIF ()
ENDIF (WIN32)
# ######### General setup ##########
INCLUDE_DIRECTORIES(BEFORE "${CMAKE_SOURCE_DIR}/include")
FILE(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/include")
INCLUDE_DIRECTORIES(BEFORE "${CMAKE_BINARY_DIR}/include")
IF (NOT HAVE_STDINT_H) # AND NOT HAVE_INTTYPES_H
INCLUDE_DIRECTORIES(BEFORE "${CMAKE_SOURCE_DIR}/include/stdint")
ENDIF ()
IF (AMIGA OR AROS)
SET(WILDMIDI_AMIGA 1)
ENDIF ()
IF (APPLE)
SET(APP_BUNDLE_NAME "${CMAKE_PROJECT_NAME}.app")
SET(APP_BUNDLE_DIR "${wildmidi_BINARY_DIR}/${APP_BUNDLE_NAME}")
IF (WANT_OSX_DEPLOYMENT)
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
ENDIF ()
ENDIF (APPLE)
IF (APPLE)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${APP_BUNDLE_DIR}/Contents/MacOS")
ELSE (APPLE)
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${wildmidi_BINARY_DIR}")
ENDIF (APPLE)
# Setup up our config file
CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/include/config.h.cmake" "${CMAKE_BINARY_DIR}/include/config.h")
ADD_SUBDIRECTORY(src)