Skip to content

Commit

Permalink
Merge pull request #12 from kachsheev/dev
Browse files Browse the repository at this point in the history
For v1.2
  • Loading branch information
kachsheev committed Jul 21, 2024
2 parents 4785764 + a7dbe1c commit a3c34c9
Show file tree
Hide file tree
Showing 15 changed files with 492 additions and 61 deletions.
16 changes: 12 additions & 4 deletions cmake/CmakeFlameResolver.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ cmake_minimum_required(VERSION 3.14)
include(Macros)

include(Options)
include(Platform)
include(Properties)
include(Variables)
include(Functions)
include(Properties)
include(Compilers)
include(Platform)

# Public API:

Expand All @@ -33,6 +34,8 @@ endfunction(flame_header_library)
# MAKE_SHARED -
# NOT_MAKE_POSITION_DEPENDENT_OBJECTS -
# NOT_MAKE_POSITION_INDEPENDENT_OBJECTS -
# EXPORT_ALL -
# USE_RESOLVER_DEFINES -
# Values:
# NAME -
# OBJECT_ALIAS_NAME -
Expand All @@ -43,7 +46,10 @@ endfunction(flame_header_library)
# SHARED_INSTALL_PATH -
# Lists:
# INCLUDE_PATHS -
# DEFINES -
# SOURCE_LIST -
# SOURCE_LIST_STATIC -
# SOURCE_LIST_SHARED -
# COMMPILE_FLAGS -
# LINK_FLAGS -
# DEPENDENCY_HEADER_TARGETS -
Expand All @@ -56,15 +62,17 @@ function(flame_compile_library)
endfunction(flame_compile_library)

# Options:
# DEBUG -
# HELP -
# DEBUG -
# HELP -
# USE_RESOLVER_DEFINES -
# Values:
# NAME -
# ALIAS_NAME -
# INSTALL_PATH -
# Lists:
# INCLUDE_PATHS -
# SOURCE_LIST -
# DEFINES -
# COMPILE_FLAGS -
# LINK_FLAGS -
# DEPENDENCY_HEADER_TARGETS -
Expand Down
73 changes: 73 additions & 0 deletions cmake/Compilers.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
if((NOT CMAKE_CXX_COMPILER) AND (NOT CMAKE_C_COMPILER))
message(FATAL_ERROR "Only for C and/or C++")
endif()

include(Compilers/Gcc)
include(Compilers/Clang)
include(Compilers/Msvc)

if(NOT CMAKE_RESOLVER_COMPILER_CURRENT_ID)
message(FATAL_ERROR "Compiler is not supported")
endif()

set(FLAME_DEFINE_COMPILER_CURRENT
CMAKE_RESOLVER_COMPILER_CURRENT=${CMAKE_RESOLVER_COMPILER_CURRENT_ID})

set(FLAME_FLAGS
${FLAME_CXX_FLAG_NO_RTTI}
${FLAME_CXX_FLAG_RTTI}
${FLAME_CXX_FLAG_NO_EXCEPTIONS}
${FLAME_CXX_FLAG_EXCEPTIONS}
)
foreach(flag ${FLAME_FLAGS})
string(REPLACE "${flag}" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
endforeach()

function(flame_shared_set_export_symbols TARGET_NAME)
if(CMAKE_RESOLVER_COMPILER_CURRENT_ID EQUAL CMAKE_RESOLVER_COMPILER_GCC_ID)
flame_shared_set_export_symbols_gcc(${TARGET_NAME})
elseif(CMAKE_RESOLVER_COMPILER_CURRENT_ID EQUAL CMAKE_RESOLVER_COMPILER_CLANG_ID)
flame_shared_set_export_symbols_clang(${TARGET_NAME})
elseif(CMAKE_RESOLVER_COMPILER_CURRENT_ID EQUAL CMAKE_RESOLVER_COMPILER_MSVC_ID)
flame_shared_set_export_symbols_msvc(${TARGET_NAME})
endif()
endfunction()

function(flame_get_platform_defines OUT_LIST)
set(FLAME_PLATFORM_FLAGS
${FLAME_DEFINE_COMPILER_CURRENT}
${FLAME_DEFINE_COMPILER_GCC}
${FLAME_DEFINE_COMPILER_CLANG}
${FLAME_DEFINE_COMPILER_MSVC}
${FLAME_DEFINE_EXPORT}
)
set(${OUT_LIST} ${FLAME_PLATFORM_FLAGS} PARENT_SCOPE)
endfunction()

function(flame_get_rtti_defines RTTI_ON OUT_LIST)
if(RTTI_ON)
set(DEFINE_RTTI
CMAKE_RESOLVER_RTTI_ENABLED=1
CMAKE_RESOLVER_RTTI_DISABLED=0)
else()
set(DEFINE_RTTI
CMAKE_RESOLVER_RTTI_ENABLED=0
CMAKE_RESOLVER_RTTI_DISABLED=1)
endif()

set(${OUT_LIST} ${DEFINE_RTTI} PARENT_SCOPE)
endfunction()

function(flame_get_exception_defines EXCEPTIONS_ON OUT_LIST)
if(EXCEPTIONS_ON)
set(DEFINE_EXCEPTIONS
CMAKE_RESOLVER_EXCEPTIONS_ENABLED=1
CMAKE_RESOLVER_EXCEPTIONS_DISABLED=0)
else()
set(DEFINE_EXCEPTIONS
CMAKE_RESOLVER_EXCEPTIONS_ENABLED=0
CMAKE_RESOLVER_EXCEPTIONS_DISABLED=1)
endif()

set(${OUT_LIST} ${DEFINE_EXCEPTIONS} PARENT_SCOPE)
endfunction()
28 changes: 28 additions & 0 deletions cmake/Compilers/Clang.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
generate_random_id(CMAKE_RESOLVER_COMPILER_CLANG_ID)

set(FLAME_DEFINE_COMPILER_CLANG
CMAKE_RESOLVER_COMPILER_CLANG=${CMAKE_RESOLVER_COMPILER_CLANG_ID})

if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang"))
message(STATUS "Detect clang")

set(FLAME_DEFINE_EXPORT "CMAKE_RESOLVER_EXPORT=__attribute__((visibility(default)))")

set(CMAKE_RESOLVER_COMPILER_CURRENT_ID ${CMAKE_RESOLVER_COMPILER_CLANG_ID})

set(FLAME_FLAG_ALL_EXPORT "-fvisibility=default")
set(FLAME_FLAG_NO_EXPORT "-fvisibility=hidden")

if(CMAKE_CXX_COMPILER)
set(FLAME_CXX_FLAG_NO_RTTI "-fno-rtti")
set(FLAME_CXX_FLAG_RTTI "-frtti")

set(FLAME_CXX_FLAG_NO_EXCEPTIONS "-fno-cxx-exceptions")
set(FLAME_CXX_FLAG_EXCEPTIONS "-fcxx-exceptions")
endif()
endif()

function(flame_shared_set_export_symbols_clang TARGET_NAME)
flame_shared_set_export_symbols_gcc(${TARGET_NAME})
endfunction()
28 changes: 28 additions & 0 deletions cmake/Compilers/Gcc.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
generate_random_id(CMAKE_RESOLVER_COMPILER_GCC_ID)

set(FLAME_DEFINE_COMPILER_GCC
CMAKE_RESOLVER_COMPILER_GCC=${CMAKE_RESOLVER_COMPILER_GCC_ID})

if(("${CMAKE_C_COMPILER_ID}" STREQUAL "GNU")
OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU"))
message(STATUS "Detect GCC")

set(FLAME_DEFINE_EXPORT "CMAKE_RESOLVER_EXPORT=__attribute__((visibility(\"default\")))")

set(CMAKE_RESOLVER_COMPILER_CURRENT_ID ${CMAKE_RESOLVER_COMPILER_GCC_ID})

set(FLAME_FLAG_ALL_EXPORT "-fvisibility=default")
set(FLAME_FLAG_NO_EXPORT "-fvisibility=hidden")

if(CMAKE_CXX_COMPILER)
set(FLAME_CXX_FLAG_NO_RTTI "-fno-rtti")
set(FLAME_CXX_FLAG_RTTI "")

set(FLAME_CXX_FLAG_NO_EXCEPTIONS "-fno-exceptions")
set(FLAME_CXX_FLAG_EXCEPTIONS "-fexceptions")
endif()
endif()

function(flame_shared_set_export_symbols_gcc TARGET_NAME)
target_compile_options(${TARGET_NAME} PRIVATE ${FLAME_FLAG_ALL_EXPORT})
endfunction()
30 changes: 30 additions & 0 deletions cmake/Compilers/Msvc.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
generate_random_id(CMAKE_RESOLVER_COMPILER_MSVC_ID)

set(FLAME_DEFINE_COMPILER_MSVC
CMAKE_RESOLVER_COMPILER_MSVC=${CMAKE_RESOLVER_COMPILER_MSVC_ID})

if(("${CMAKE_C_COMPILER_ID}" STREQUAL "MSVC")
OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC"))
message(STATUS "Detect CL.EXE")

set(FLAME_DEFINE_EXPORT "CMAKE_RESOLVER_EXPORT=__declspec(dllexport)")

set(CMAKE_RESOLVER_COMPILER_CURRENT_ID ${CMAKE_RESOLVER_COMPILER_MSVC_ID})

set(FLAME_FLAG_BIG_OBJECT "/bigobj")

if(CMAKE_CXX_COMPILER)
set(FLAME_CXX_FLAG_NO_RTTI "/GR")
set(FLAME_CXX_FLAG_RTTI "/GR-")

set(FLAME_CXX_FLAG_NO_EXCEPTIONS "/EHsc-")
set(FLAME_CXX_FLAG_EXCEPTIONS "/EHsc")
endif()
endif()

function(flame_shared_set_export_symbols_msvc TARGET_NAME)
target_compile_options(${TARGET_NAME} PRIVATE ${FLAME_FLAG_BIG_OBJECT})
set_target_properties(${TARGET_NAME}
PROPERTIES
WINDOWS_EXPORT_ALL_SYMBOLS ON)
endfunction()
38 changes: 36 additions & 2 deletions cmake/Functions/CommonFunctions.cmake
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#
#
#
function(get_real_target CURRENT_TARGET_NAME REAL_TARGET_NAME)
function(flame_get_real_target CURRENT_TARGET_NAME REAL_TARGET_NAME)
if(TARGET ${CURRENT_TARGET_NAME})
get_target_property(aliased ${CURRENT_TARGET_NAME} ALIASED_TARGET)
if(aliased)
Expand All @@ -12,4 +12,38 @@ function(get_real_target CURRENT_TARGET_NAME REAL_TARGET_NAME)
else()
message_fatal("-- '${CURRENT_TARGET_NAME}' is not a target")
endif()
endfunction(get_real_target)
endfunction(flame_get_real_target)

#
#
#
function(internal_flame_find_lib NAME)
check_internal_use()
find_library(LIBRARY_${CMAKE_FIND_LIBRARY_SUFFIXES} ${NAME})
if (NOT LIBRARY_${CMAKE_FIND_LIBRARY_SUFFIXES})
message("NAME ('${CMAKE_FIND_LIBRARY_SUFFIXES}') not found")
endif()
set(LIBRARY_${CMAKE_FIND_LIBRARY_SUFFIXES}
"${LIBRARY_${CMAKE_FIND_LIBRARY_SUFFIXES}}"
PARENT_SCOPE)
endfunction()

#
#
#
function(flame_find_static_lib NAME LOCATION)
enable_internal_use()
set(CMAKE_FIND_LIBRARY_SUFFIXES "${FLAME_STATIC_LIBRARY_SUFFIX}")
internal_flame_find_lib(${NAME})
set(${LOCATION} ${LIBRARY_${CMAKE_FIND_LIBRARY_SUFFIXES}} PARENT_SCOPE)
endfunction()

#
#
#
function(flame_find_shared_lib NAME LOCATION)
enable_internal_use()
set(CMAKE_FIND_LIBRARY_SUFFIXES "${FLAME_SHARED_LIBRARY_SUFFIX}")
internal_flame_find_lib(${NAME})
set(${LOCATION} ${LIBRARY_${CMAKE_FIND_LIBRARY_SUFFIXES}} PARENT_SCOPE)
endfunction()
Loading

0 comments on commit a3c34c9

Please sign in to comment.