Compare commits
3 Commits
feb438a3e6
...
6d91291768
| Author | SHA1 | Date | |
|---|---|---|---|
|
6d91291768
|
|||
|
a32cd24417
|
|||
|
2b5c9ac062
|
@@ -6,9 +6,22 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE INTERNAL "")
|
|||||||
|
|
||||||
project(nova VERSION 0.0.1)
|
project(nova VERSION 0.0.1)
|
||||||
enable_language(CXX)
|
enable_language(CXX)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 23)
|
set(CMAKE_CXX_STANDARD 23)
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
|
||||||
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
|
|
||||||
|
if (NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
|
||||||
|
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build (Debug, Release, RelWithDebInfo, MinSizeRel)" FORCE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
|
||||||
|
|
||||||
|
set(NOVA_SANITIZERS "" CACHE STRING "Sanitizers to enable (address, undefined, leak)")
|
||||||
|
set(NOVA_WERROR OFF CACHE BOOL "Treat compiler warnings as errors")
|
||||||
|
set(NOVA_LIBRARY_INSTALL OFF CACHE BOOL "Enable library installation targets")
|
||||||
|
|
||||||
add_compile_definitions(
|
add_compile_definitions(
|
||||||
NOVA_VERSION_MAJOR=${PROJECT_VERSION_MAJOR}
|
NOVA_VERSION_MAJOR=${PROJECT_VERSION_MAJOR}
|
||||||
@@ -21,49 +34,67 @@ if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
|||||||
/W4
|
/W4
|
||||||
/permissive-
|
/permissive-
|
||||||
/EHsc
|
/EHsc
|
||||||
|
$<$<BOOL:${NOVA_WERROR}>:/WX>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (NOVA_SANITIZERS)
|
||||||
|
string(REPLACE "," ";" SANITIZERS ${NOVA_SANITIZERS})
|
||||||
|
foreach(sanitizer IN LISTS SANITIZERS)
|
||||||
|
add_compile_options(/fsanitize=${sanitizer})
|
||||||
|
endforeach()
|
||||||
|
endif()
|
||||||
|
|
||||||
add_compile_definitions(
|
add_compile_definitions(
|
||||||
NOVA_COMPILER_MSVC
|
NOVA_COMPILER_MSVC
|
||||||
|
_CRT_SECURE_NO_WARNINGS
|
||||||
|
_CRT_NONSTDC_NO_WARNINGS
|
||||||
)
|
)
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
elseif (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||||
add_compile_options(
|
add_compile_options(
|
||||||
-Wall
|
-Wall
|
||||||
-Wextra
|
-Wextra
|
||||||
-Wpedantic
|
-Wpedantic
|
||||||
-Wshadow
|
-Wshadow
|
||||||
-Wold-style-cast
|
-Wold-style-cast
|
||||||
|
$<$<BOOL:${NOVA_WERROR}>:-Werror>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (NOVA_SANITIZERS)
|
||||||
|
add_compile_options(-fsanitize=${NOVA_SANITIZERS})
|
||||||
|
add_link_options(-fsanitize=${NOVA_SANITIZERS})
|
||||||
|
endif()
|
||||||
|
|
||||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
add_compile_definitions(
|
add_compile_definitions(NOVA_COMPILER_GCC)
|
||||||
NOVA_COMPILER_GCC
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||||
)
|
add_compile_definitions(NOVA_COMPILER_CLANG)
|
||||||
else()
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
|
||||||
add_compile_definitions(
|
add_compile_definitions(
|
||||||
NOVA_COMPILER_CLANG
|
NOVA_COMPILER_CLANG
|
||||||
|
NOVA_COMPILER_APPLE_CLANG
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
error("Unsupported compiler")
|
message(FATAL_ERROR "Unsupported compiler")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WIN32)
|
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||||
add_compile_definitions(
|
add_compile_definitions(
|
||||||
NOVA_PLATFORM_WINDOWS
|
NOVA_PLATFORM_WINDOWS
|
||||||
NOMINMAX
|
NOMINMAX
|
||||||
WIN32_LEAN_AND_MEAN
|
WIN32_LEAN_AND_MEAN
|
||||||
_CRT_SECURE_NO_WARNINGS
|
|
||||||
_CRT_NONSTDC_NO_WARNINGS
|
|
||||||
)
|
|
||||||
elseif (APPLE)
|
|
||||||
add_compile_definitions(
|
|
||||||
NOVA_PLATFORM_MACOS
|
|
||||||
)
|
|
||||||
elseif (UNIX)
|
|
||||||
add_compile_definitions(
|
|
||||||
NOVA_PLATFORM_LINUX
|
|
||||||
)
|
)
|
||||||
|
elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
|
add_compile_definitions(NOVA_PLATFORM_MACOS)
|
||||||
|
elseif (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
|
add_compile_definitions(NOVA_PLATFORM_LINUX)
|
||||||
else()
|
else()
|
||||||
error("Unsupported platform")
|
message(FATAL_ERROR "Unsupported platform")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (NOVA_LIBRARY_INSTALL)
|
||||||
|
include(CMakePackageConfigHelpers)
|
||||||
|
include(GNUInstallDirs)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_subdirectory(engine)
|
add_subdirectory(engine)
|
||||||
|
|||||||
@@ -15,5 +15,5 @@ target_include_directories(nova-editor
|
|||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(nova-editor
|
target_link_libraries(nova-editor
|
||||||
PUBLIC nova
|
PUBLIC nova::nova
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -7,13 +7,63 @@ set(NOVA_ENGINE_SRC
|
|||||||
|
|
||||||
list(TRANSFORM NOVA_ENGINE_SRC PREPEND ${CMAKE_CURRENT_SOURCE_DIR}/src/)
|
list(TRANSFORM NOVA_ENGINE_SRC PREPEND ${CMAKE_CURRENT_SOURCE_DIR}/src/)
|
||||||
|
|
||||||
add_library(nova SHARED ${NOVA_ENGINE_SRC})
|
add_library(nova ${NOVA_ENGINE_SRC})
|
||||||
|
|
||||||
target_include_directories(nova
|
target_include_directories(nova
|
||||||
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
|
PUBLIC
|
||||||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
|
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||||
|
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
|
||||||
|
PRIVATE
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||||||
)
|
)
|
||||||
|
|
||||||
target_compile_definitions(nova
|
set_target_properties(nova PROPERTIES
|
||||||
PRIVATE NOVA_EXPORT_SYMBOLS
|
DEFINE_SYMBOL NOVA_EXPORT_SYMBOLS
|
||||||
|
VERSION ${PROJECT_VERSION}
|
||||||
|
SOVERSION ${PROJECT_VERSION_MAJOR}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_library(nova::nova ALIAS nova)
|
||||||
|
|
||||||
|
if (NOVA_LIBRARY_INSTALL)
|
||||||
|
configure_package_config_file(
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/cmake/nova-config.cmake.in
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/nova-config.cmake
|
||||||
|
INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/nova
|
||||||
|
)
|
||||||
|
|
||||||
|
write_basic_package_version_file(
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/nova-config-version.cmake
|
||||||
|
VERSION ${PROJECT_VERSION}
|
||||||
|
COMPATIBILITY SameMajorVersion
|
||||||
|
)
|
||||||
|
|
||||||
|
install(
|
||||||
|
TARGETS nova
|
||||||
|
EXPORT nova-targets
|
||||||
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
||||||
|
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
||||||
|
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||||
|
)
|
||||||
|
|
||||||
|
install(
|
||||||
|
DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/nova
|
||||||
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
|
||||||
|
FILES_MATCHING PATTERN "*.hpp"
|
||||||
|
)
|
||||||
|
|
||||||
|
install(
|
||||||
|
EXPORT nova-targets
|
||||||
|
FILE nova-targets.cmake
|
||||||
|
NAMESPACE nova::
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/nova
|
||||||
|
)
|
||||||
|
|
||||||
|
install(
|
||||||
|
FILES
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/nova-config.cmake
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}/nova-config-version.cmake
|
||||||
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/nova
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|||||||
5
engine/cmake/nova-config.cmake.in
Normal file
5
engine/cmake/nova-config.cmake.in
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
@PACKAGE_INIT@
|
||||||
|
|
||||||
|
include("${CMAKE_CURRENT_LIST_DIR}/nova-targets.cmake")
|
||||||
|
|
||||||
|
check_required_components(nova)
|
||||||
35
engine/include/nova/core/types.hpp
Normal file
35
engine/include/nova/core/types.hpp
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cstddef>
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
namespace Nova::Types {
|
||||||
|
|
||||||
|
using u8 = uint8_t;
|
||||||
|
using u16 = uint16_t;
|
||||||
|
using u32 = uint32_t;
|
||||||
|
using u64 = uint64_t;
|
||||||
|
using usize = size_t;
|
||||||
|
using uptr = uintptr_t;
|
||||||
|
using umax = uintmax_t;
|
||||||
|
|
||||||
|
using i8 = int8_t;
|
||||||
|
using i16 = int16_t;
|
||||||
|
using i32 = int32_t;
|
||||||
|
using i64 = int64_t;
|
||||||
|
using isize = ptrdiff_t;
|
||||||
|
using iptr = intptr_t;
|
||||||
|
using imax = intmax_t;
|
||||||
|
|
||||||
|
using f32 = float;
|
||||||
|
using f64 = double;
|
||||||
|
|
||||||
|
} // namespace Nova::Types
|
||||||
|
|
||||||
|
using namespace Nova::Types;
|
||||||
19
engine/include/nova/utils/overloaded.hpp
Normal file
19
engine/include/nova/utils/overloaded.hpp
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2025, Jayden Grubb <contact@jaydengrubb.com>
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace Nova::Utils {
|
||||||
|
|
||||||
|
template<typename... Ts>
|
||||||
|
struct Overloaded : Ts... {
|
||||||
|
using Ts::operator()...;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename... Ts>
|
||||||
|
Overloaded(Ts...) -> Overloaded<Ts...>;
|
||||||
|
|
||||||
|
} // namespace Nova::Utils
|
||||||
Reference in New Issue
Block a user