cmake_minimum_required(VERSION 3.10) project(videogame) set(CMAKE_CXX_COMPILER "clang++") set(CMAKE_CXX_STANDARD 17) file(GLOB_RECURSE SRC_FILES ./src/*.cpp ./src/game/*.cpp ./src/util/config/*.cpp) set(CMAKE_EXPORT_COMPILE_COMMANDS ON) if(UNIX) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build) else() set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) endif() add_executable(app ${SRC_FILES}) find_package(PkgConfig REQUIRED) pkg_check_modules(SDL2 REQUIRED sdl2) pkg_check_modules(FREETYPE REQUIRED freetype2) pkg_check_modules(GLEW REQUIRED glew) find_package(OpenGL REQUIRED) # release build settings set(CMAKE_CXX_FLAGS_RELEASE "-O3 -Wno-nontrivial-memcall") # debug build settings set(CMAKE_CXX_FLAGS_DEBUG "-g -DDEBUG=1 -fsanitize=address -Wno-nontrivial-memcall") target_include_directories(app PRIVATE ${SDL2_INCLUDE_DIRS} ${FREETYPE_INCLUDE_DIRS} ${GLEW_INCLUDE_DIRS} ${OPENGL_INCLUDE_DIR} ) # Platform-specific linking if(WIN32) target_link_libraries(app PRIVATE ${SDL2_LIBRARIES} ${FREETYPE_LIBRARIES} ${GLEW_LIBRARIES} ${OPENGL_LIBRARIES} winmm # For timeGetDevCaps, timeBeginPeriod, timeEndPeriod ) set(TOOLCHAIN_BIN_DIR "") if(CMAKE_CXX_COMPILER) get_filename_component(TOOLCHAIN_BIN_DIR "${CMAKE_CXX_COMPILER}" DIRECTORY) endif() if(NOT TOOLCHAIN_BIN_DIR OR TOOLCHAIN_BIN_DIR STREQUAL ".") find_program(CLANGXX_PATH NAMES clang++ clang++.exe) if(CLANGXX_PATH) get_filename_component(TOOLCHAIN_BIN_DIR "${CLANGXX_PATH}" DIRECTORY) endif() endif() add_custom_command( TARGET app POST_BUILD COMMAND "${CMAKE_COMMAND}" -DAPP_EXE=$ -DAPP_OUT_DIR=$ -DTOOLCHAIN_BIN_DIR=${TOOLCHAIN_BIN_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/copy_runtime_deps.cmake VERBATIM ) else() target_link_libraries(app PRIVATE ${SDL2_LIBRARIES} ${FREETYPE_LIBRARIES} ${GLEW_LIBRARIES} ${OPENGL_LIBRARIES} ) endif() target_compile_options(app PRIVATE -Wall) target_compile_options(app PRIVATE -Wno-nontrivial-memcall) add_custom_target(debug COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Debug ${CMAKE_BINARY_DIR} COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Building ~~**DEBUG**~~" ) add_custom_target(release COMMAND ${CMAKE_COMMAND} -DCMAKE_BUILD_TYPE=Release ${CMAKE_BINARY_DIR} COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Building ~~**RELEASE**~~" )