blah/CMakeLists.txt
Noel Berry dcd3e11b16 Simplify folder sturcture + String refactor
1) Over time the total amount of files has decreased, and so it made sense to just simplify the folder structure and remove all of the subfolders.
2) Refactor the String class to utilize the existing Vector and StackVector classes instead of managing everything itself.
2022-10-01 13:30:15 -07:00

111 lines
2.8 KiB
CMake

cmake_minimum_required(VERSION 3.14)
project(blah)
# C++ version
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_library(blah
src/blah_app.cpp
src/blah_filesystem.cpp
src/blah_common.cpp
src/blah_time.cpp
src/blah_input.cpp
src/blah_stream.cpp
src/blah_graphics.cpp
src/blah_string.cpp
src/blah_batch.cpp
src/blah_spritefont.cpp
src/blah_subtexture.cpp
src/blah_aseprite.cpp
src/blah_font.cpp
src/blah_image.cpp
src/blah_packer.cpp
src/internal/blah_renderer_opengl.cpp
src/internal/blah_renderer_d3d11.cpp
src/internal/blah_platform_sdl2.cpp
src/internal/blah_platform_win32.cpp
)
target_include_directories(blah
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
PRIVATE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
)
# Platform Variables
option(BLAH_PLATFORM_SDL2 "Use SDL2 Platform Backend" ON)
option(BLAH_PLATFORM_WIN32 "Use Win32 Platform Backend" OFF)
option(BLAH_RENDERER_OPENGL "Make OpenGL Renderer available" ON)
if (WIN32)
option(BLAH_RENDERER_D3D11 "Make D3D11 Renderer available" ON)
endif()
option(BLAH_NO_FUNCTIONAL "Don't use std::function" OFF)
option(BLAH_NO_SHARED_PTR "Don't use std::shared_ptr for Resources" OFF)
# tracks which libraries we need to link, depends on Options above
set(LIBS "")
# use the OpenGL Renderer Backend
if (BLAH_RENDERER_OPENGL)
add_compile_definitions(BLAH_RENDERER_OPENGL)
endif()
# use the D3D11 Renderer Backend
if (BLAH_RENDERER_D3D11)
add_compile_definitions(BLAH_RENDERER_D3D11)
set(LIBS ${LIBS} d3d11.lib dxguid.lib D3Dcompiler.lib)
endif()
# use the SDL2 Platform Backend
# Link and create SDL2 Definition
if (BLAH_PLATFORM_SDL2)
add_compile_definitions(BLAH_PLATFORM_SDL2)
# Emscripten can import SDL2 directly
if (EMSCRIPTEN)
set_target_properties(blah PROPERTIES COMPILE_FLAGS "-s USE_SDL=2")
target_link_libraries(blah "-s USE_SDL=2 -s USE_WEBGL2=1")
# Pull SDL2 from its Github repo
else()
if (NOT DEFINED BLAH_SDL2_LIBS)
include(FetchContent)
set(FETCHCONTENT_QUIET FALSE)
FetchContent_Declare(
SDL2
GIT_REPOSITORY https://github.com/libsdl-org/SDL
GIT_TAG release-2.24.0 # grab latest stable release
GIT_PROGRESS TRUE
)
FetchContent_MakeAvailable(SDL2)
set(BLAH_SDL2_LIBS SDL2main SDL2-static)
set(BLAH_SDL2_INCLUDE ${sdl2_SOURCE_DIRS}/include)
endif()
# statically link SDL2 since we're building it ourselves
set(LIBS ${LIBS} ${BLAH_SDL2_LIBS})
target_include_directories(blah PRIVATE ${BLAH_SDL2_INCLUDE})
endif()
# use the Win32 Platform Backend
elseif (BLAH_PLATFORM_WIN32)
add_compile_definitions(BLAH_PLATFORM_WIN32)
endif()
target_link_libraries(blah PRIVATE ${LIBS})
# toggle options
if (BLAH_NO_FUNCTIONAL)
add_compile_definitions(BLAH_NO_FUNCTIONAL)
endif()
if (BLAH_NO_SHARED_PTR)
add_compile_definitions(BLAH_NO_SHARED_PTR)
endif()