Files
palladium/CMakeLists.txt
T

167 lines
4.4 KiB
CMake
Raw Normal View History

2025-06-22 21:05:09 +02:00
cmake_minimum_required(VERSION 3.22)
2025-04-24 16:39:24 +02:00
2026-03-01 21:41:53 +01:00
include(GNUInstallDirs)
2025-04-24 16:39:24 +02:00
# Set Project
2026-03-16 06:37:51 +01:00
project(palladium LANGUAGES C CXX VERSION 0.7.0)
2025-06-22 21:05:09 +02:00
# Required to add this Variable
set(PD_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/include)
include(cmake/palladium.cmake)
2025-04-24 16:39:24 +02:00
option(PD_BUILD_TESTS "Sets if TestApp and TestBench get build" OFF)
option(PD_BUILD_SHARED "Build Shared Library" OFF)
2025-06-22 21:05:09 +02:00
option(PD_BUILD_TOOLS "Build Palladium Tools" OFF)
option(PD_INCLUDE_STB_IMAGE "Inlude stb image symbols in palladium" ON)
2025-04-24 16:39:24 +02:00
2026-03-18 11:34:36 +01:00
if(${CMAKE_SYSTEM_NAME} STREQUAL "Nintendo3DS")
2026-04-03 14:12:42 +02:00
add_compile_options(-Wno-psabi)
2026-03-18 11:34:36 +01:00
endif()
2025-06-22 21:05:09 +02:00
if(${PD_BUILD_TOOLS})
2026-04-03 14:12:42 +02:00
add_subdirectory(tools)
2025-04-24 16:39:24 +02:00
endif()
2026-03-16 15:19:12 +01:00
add_subdirectory(vendor)
# # Include Library Source
set(PD_SOURCES
2026-04-03 14:12:42 +02:00
# Common
source/common.cpp
2026-03-16 15:19:12 +01:00
2026-04-03 14:12:42 +02:00
# Core
source/core/bits.cpp
source/core/color.cpp
source/core/io.cpp
source/core/mat.cpp
source/core/strings.cpp
source/core/timer.cpp
source/core/timetrace.cpp
2025-04-24 16:39:24 +02:00
2026-04-03 14:12:42 +02:00
# Image
source/image/image.cpp
2026-03-16 17:33:46 +01:00
2026-04-03 14:12:42 +02:00
# Drivers
source/drivers/os.cpp
source/drivers/gfx.cpp
source/drivers/hid.cpp
2026-04-03 14:12:42 +02:00
# Lithium
source/lithium/drawlist.cpp
source/lithium/font.cpp
source/lithium/math.cpp
source/lithium/pools.cpp
2026-03-26 21:02:10 +01:00
2026-04-03 14:12:42 +02:00
# Ultra
source/ultra/canvas.cpp
source/ultra/layout.cpp
source/ultra/elems/element.cpp
source/ultra/elems/rect.cpp
source/ultra/elems/text.cpp
source/ultra/elems/image.cpp
source/ultra/elems/button.cpp
2025-04-24 16:39:24 +02:00
)
if(${PD_BUILD_SHARED})
2026-04-03 14:12:42 +02:00
add_library(palladium SHARED ${PD_SOURCES})
target_compile_definitions(palladium PRIVATE PD_BUILD_SHARED)
else()
2026-04-03 14:12:42 +02:00
add_library(palladium STATIC ${PD_SOURCES})
target_compile_definitions(palladium PUBLIC PD_BUILD_STATIC)
endif()
target_link_libraries(palladium
2026-04-03 14:12:42 +02:00
PUBLIC stb
)
target_compile_definitions(palladium
2026-04-03 14:12:42 +02:00
PUBLIC
PD_DEBUG
$<$<OR:$<BOOL:${PD_INCLUDE_STB_IMAGE}>,$<BOOL:${PD_BUILD_SHARED}>>:PD_INCLUDE_STB_IMAGE> # Always on in shared build
)
2026-03-16 17:33:46 +01:00
target_compile_options(palladium
2026-04-03 14:12:42 +02:00
PUBLIC $<$<CXX_COMPILER_ID:GNU,Clang>:
2026-03-17 16:47:19 +01:00
-fmacro-prefix-map=${CMAKE_CURRENT_SOURCE_DIR}/source=source
-fmacro-prefix-map=${CMAKE_CURRENT_SOURCE_DIR}/include=include
>
2026-03-16 17:33:46 +01:00
)
2026-03-01 21:41:53 +01:00
add_library(palladium::palladium ALIAS palladium)
target_include_directories(palladium
2026-04-03 14:12:42 +02:00
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
2026-03-01 21:41:53 +01:00
)
2025-04-24 16:39:24 +02:00
2026-03-16 17:33:46 +01:00
target_compile_options(palladium
2026-04-03 14:12:42 +02:00
PRIVATE
$<$<AND:$<CONFIG:Debug>,$<CXX_COMPILER_ID:GNU,Clang>>:-O0 -g>
$<$<AND:$<CONFIG:Release>,$<CXX_COMPILER_ID:GNU,Clang>>:-O3>
2026-03-17 16:47:19 +01:00
2026-04-03 14:12:42 +02:00
$<$<AND:$<CONFIG:Debug>,$<CXX_COMPILER_ID:MSVC>>:/Od /Zi>
$<$<AND:$<CONFIG:Release>,$<CXX_COMPILER_ID:MSVC>>:/O2>
2026-01-29 20:17:04 +01:00
)
2026-01-28 07:40:34 +01:00
2026-03-16 17:33:46 +01:00
install(
2026-04-03 14:12:42 +02:00
TARGETS palladium
EXPORT palladiumTargets
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
2026-03-01 21:41:53 +01:00
)
2026-03-16 17:33:46 +01:00
install(
2026-04-03 14:12:42 +02:00
DIRECTORY include/
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
2026-03-01 21:41:53 +01:00
)
install(EXPORT palladiumTargets
2026-04-03 14:12:42 +02:00
FILE palladiumTargets.cmake
NAMESPACE palladium::
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/palladium
2026-03-01 21:41:53 +01:00
)
include(CMakePackageConfigHelpers)
configure_package_config_file(
2026-04-03 14:12:42 +02:00
cmake/palladiumConfig.cmake.in
${CMAKE_CURRENT_BINARY_DIR}/palladiumConfig.cmake
INSTALL_DESTINATION
${CMAKE_INSTALL_LIBDIR}/cmake/palladium
2026-03-01 21:41:53 +01:00
)
write_basic_package_version_file(
2026-04-03 14:12:42 +02:00
${CMAKE_CURRENT_BINARY_DIR}/palladiumConfigVersion.cmake
VERSION
${PROJECT_VERSION}
COMPATIBILITY
SameMajorVersion
2026-03-01 21:41:53 +01:00
)
2026-03-16 17:33:46 +01:00
install(
2026-04-03 14:12:42 +02:00
FILES
${CMAKE_CURRENT_BINARY_DIR}/palladiumConfig.cmake
${CMAKE_CURRENT_BINARY_DIR}/palladiumConfigVersion.cmake
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/palladium
2026-03-01 21:41:53 +01:00
)
find_program(CLANG_FORMAT clang-format)
2026-03-16 17:33:46 +01:00
file(GLOB_RECURSE PD_FMTFILES
2026-04-03 14:12:42 +02:00
CONFIGURE_DEPENDS
${CMAKE_CURRENT_SOURCE_DIR}/source/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/include/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/backends/source/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/backends/include/*.hpp
${CMAKE_CURRENT_SOURCE_DIR}/tests/core/source/*.cpp
${CMAKE_CURRENT_SOURCE_DIR}/tests/gfx/source/*.cpp
)
add_custom_target(pd-clang-format
2026-04-03 14:12:42 +02:00
COMMAND ${CLANG_FORMAT} --style=file -i ${PD_FMTFILES}
COMMENT "Formatting Project Sources"
2026-01-29 20:17:04 +01:00
)
2026-03-16 06:37:51 +01:00
2026-03-16 15:19:12 +01:00
add_subdirectory(backends)
2026-07-19 14:27:48 +02:00
if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/tests)
endif()