forked from mirrors/principia
179 lines
4.7 KiB
CMake
179 lines
4.7 KiB
CMake
cmake_minimum_required(VERSION 3.9)
|
|
|
|
project(principia)
|
|
|
|
set(CMAKE_C_STANDARD 99)
|
|
set(CMAKE_CXX_STANDARD 14)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
|
|
|
|
message(STATUS "*** Building Principia! ***")
|
|
|
|
if (NOT CMAKE_BUILD_TYPE)
|
|
message(STATUS "No build type selected, default to Release")
|
|
set(CMAKE_BUILD_TYPE "Release")
|
|
endif()
|
|
|
|
find_package(PkgConfig REQUIRED)
|
|
find_package(Freetype REQUIRED)
|
|
find_package(JPEG REQUIRED)
|
|
find_package(PNG REQUIRED)
|
|
find_package(SDL2 REQUIRED)
|
|
find_package(ZLIB REQUIRED)
|
|
|
|
pkg_check_modules(SDL2_image REQUIRED SDL2_image)
|
|
pkg_check_modules(SDL2_mixer REQUIRED SDL2_mixer)
|
|
pkg_check_modules(SDL2_ttf REQUIRED SDL2_ttf)
|
|
|
|
set(OpenGL_GL_PREFERENCE GLVND)
|
|
find_package(OpenGL REQUIRED)
|
|
|
|
option(SCREENSHOT_BUILD "Build screenshotter build (Linux only)" FALSE)
|
|
|
|
if(WIN32)
|
|
set(TMS_BACKEND "windows")
|
|
else()
|
|
if(SCREENSHOT_BUILD)
|
|
set(TMS_BACKEND "screenshot-linux")
|
|
else()
|
|
set(TMS_BACKEND "linux")
|
|
endif()
|
|
endif()
|
|
|
|
include_directories(
|
|
src/
|
|
src/lua/
|
|
src/src/
|
|
${FREETYPE_INCLUDE_DIRS}
|
|
${JPEG_INCLUDE_DIRS}
|
|
${OPENGL_INCLUDE_DIRS}
|
|
${PNG_INCLUDE_DIRS}
|
|
${SDL2_INCLUDE_DIRS}
|
|
${SDL2_image_INCLUDE_DIRS}
|
|
${SDL2_mixer_INCLUDE_DIRS}
|
|
${SDL2_ttf_INCLUDE_DIRS}
|
|
${ZLIB_INCLUDE_DIRS})
|
|
|
|
file(GLOB SRCS
|
|
src/tms/core/*.c
|
|
src/tms/math/*.c
|
|
src/tms/util/*.c
|
|
src/tms/bindings/cpp/cpp.cc
|
|
src/tms/modules/3ds.c
|
|
|
|
src/lua/*.c
|
|
|
|
src/src/*.cc
|
|
src/src/*.c
|
|
|
|
src/src/Box2D/Collision/*.cc
|
|
src/src/Box2D/Collision/Shapes/*.cc
|
|
src/src/Box2D/Common/*.cc
|
|
src/src/Box2D/Dynamics/*.cc
|
|
src/src/Box2D/Dynamics/Contacts/*.cc
|
|
src/src/Box2D/Dynamics/Joints/*.cc
|
|
src/src/Box2D/Particle/*.cc
|
|
)
|
|
|
|
if(NOT SCREENSHOT_BUILD)
|
|
pkg_check_modules(GTK3 REQUIRED gtk+-3.0)
|
|
find_package(CURL REQUIRED)
|
|
find_package(GLEW REQUIRED)
|
|
|
|
# Luasocket
|
|
SET(LUASOCKET_FLAGS "-DBUILD_LUASOCKET -DLUASOCKET_INET_PTON")
|
|
|
|
include_directories(
|
|
src/luasocket/
|
|
${CURL_INCLUDE_DIR}
|
|
${GLEW_INCLUDE_DIRS}
|
|
${GTK3_INCLUDE_DIRS})
|
|
|
|
set(SRCS ${SRCS}
|
|
src/luasocket/auxiliar.c
|
|
src/luasocket/buffer.c
|
|
src/luasocket/except.c
|
|
src/luasocket/inet.c
|
|
src/luasocket/io.c
|
|
src/luasocket/luasocket.c
|
|
src/luasocket/mime.c
|
|
src/luasocket/options.c
|
|
src/luasocket/select.c
|
|
src/luasocket/tcp.c
|
|
src/luasocket/timeout.c
|
|
src/luasocket/udp.c
|
|
src/luasocket/usocket.c
|
|
src/luasocket/unix.c)
|
|
endif()
|
|
|
|
include_directories(src/tms/backends/${TMS_BACKEND}/)
|
|
|
|
set(SRCS ${SRCS}
|
|
src/tms/backends/${TMS_BACKEND}/main.cc)
|
|
|
|
add_executable(${PROJECT_NAME} ${SRCS})
|
|
target_link_libraries(
|
|
${PROJECT_NAME}
|
|
${CURL_LIBRARIES}
|
|
${FREETYPE_LIBRARIES}
|
|
${JPEG_LIBRARIES}
|
|
${OPENGL_LIBRARIES}
|
|
${PNG_LIBRARIES}
|
|
${SDL2_LIBRARIES}
|
|
${SDL2_image_LIBRARIES}
|
|
${SDL2_mixer_LIBRARIES}
|
|
${SDL2_ttf_LIBRARIES}
|
|
${ZLIB_LIBRARIES})
|
|
|
|
if(NOT SCREENSHOT_BUILD)
|
|
target_link_libraries(
|
|
${PROJECT_NAME}
|
|
${GLEW_LIBRARIES}
|
|
${GTK3_LIBRARIES})
|
|
endif()
|
|
|
|
set(COMMON_FLAGS "${LUASOCKET_FLAGS} -DGL_GLEXT_PROTOTYPES -DTMS_BACKEND_PC -DTMS_FAST_MATH -DLUA_COMPAT_MODULE -D__STDC_FORMAT_MACROS=1")
|
|
|
|
if(WIN32)
|
|
set(COMMON_FLAGS "${COMMON_FLAGS} -DTMS_BACKEND_WINDOWS")
|
|
else()
|
|
if(SCREENSHOT_BUILD)
|
|
set(COMMON_FLAGS "${COMMON_FLAGS} -DNO_UI -DTMS_BACKEND_LINUX_SS")
|
|
else()
|
|
set(COMMON_FLAGS "${COMMON_FLAGS} -DTMS_BACKEND_LINUX")
|
|
endif()
|
|
endif()
|
|
|
|
set(COMMON_FLAGS_DEBUG "${COMMON_FLAGS} -O0 -ggdb -ffast-math -Werror=return-type -DDEBUG=1 -rdynamic")
|
|
set(COMMON_FLAGS_RELEASE "${COMMON_FLAGS} -DNDEBUG=1 -s -fomit-frame-pointer -fvisibility=hidden -fdata-sections -ffunction-sections")
|
|
|
|
set(CMAKE_C_FLAGS_RELEASE "${COMMON_FLAGS_RELEASE} -O1")
|
|
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELEASE} -g")
|
|
set(CMAKE_C_FLAGS_DEBUG "${COMMON_FLAGS_DEBUG}")
|
|
|
|
set(CMAKE_CXX_FLAGS_RELEASE "${COMMON_FLAGS_RELEASE} -O2 -fvisibility-inlines-hidden -fno-rtti")
|
|
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELEASE} -g")
|
|
set(CMAKE_CXX_FLAGS_DEBUG "${COMMON_FLAGS_DEBUG} -O0")
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "-Wl,-O,-s,--gc-sections")
|
|
set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "-Wl,-O,--gc-sections")
|
|
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "-rdynamic")
|
|
|
|
# Installation
|
|
|
|
if(UNIX)
|
|
include(GNUInstallDirs)
|
|
set(SHAREDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}")
|
|
set(BINDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}")
|
|
set(APPS_DIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/applications")
|
|
set(ICONDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/icons")
|
|
|
|
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/data-pc" DESTINATION "${SHAREDIR}")
|
|
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/data-shared" DESTINATION "${SHAREDIR}")
|
|
|
|
install(FILES "packaging/principia.desktop" DESTINATION "${APPS_DIR}")
|
|
install(FILES "packaging/principia-url-handler.desktop" DESTINATION "${APPS_DIR}")
|
|
|
|
install(FILES "packaging/principia.png" DESTINATION "${ICONDIR}/hicolor/128x128/apps")
|
|
|
|
install(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
|
|
endif()
|