Files
fx/cmake/Templates.cmake
T

101 lines
2.8 KiB
CMake
Raw Normal View History

function(add_fx_assembly)
2024-10-24 19:24:54 +01:00
set(options)
set(one_value_args NAME)
set(multi_value_args
NAMESPACES
DEPENDENCIES
LIBS)
cmake_parse_arguments(PARSE_ARGV 0 arg
"${options}"
"${one_value_args}"
"${multi_value_args}")
2024-10-24 19:24:54 +01:00
set(assembly_name ${arg_NAME})
string(REPLACE "." "/" assembly_path ${assembly_name})
set(assembly_target_name ${assembly_name})
string(REPLACE "." "_" assembly_token ${assembly_name})
string(TOUPPER ${assembly_token} assembly_token)
2024-10-24 19:24:54 +01:00
set(assembly_include_paths "")
set(assembly_sources
${CMAKE_CURRENT_SOURCE_DIR}/assemblies/${assembly_name}.c)
foreach (dir ${arg_NAMESPACES})
add_subdirectory(${dir})
set(assembly_sources ${assembly_sources} ${namespace_sources})
set(assembly_include_paths ${assembly_include_paths} ${namespace_include_paths})
endforeach (dir)
message(STATUS "Building assembly ${assembly_name}")
add_library(${assembly_target_name} SHARED
${assembly_sources})
2024-08-03 07:54:28 +01:00
target_include_directories(${assembly_target_name} PUBLIC ${assembly_include_paths})
2024-08-03 07:54:28 +01:00
target_compile_definitions(${assembly_target_name} PUBLIC
2026-03-16 10:35:43 +00:00
FX_EXPORT=1
FX_ENABLE_FLOATING_POINT=${fx_enable_floating_point})
2024-11-14 21:58:21 +00:00
set_target_properties(${assembly_target_name}
2024-11-14 21:58:21 +00:00
PROPERTIES POSITION_INDEPENDENT_CODE ON)
2024-10-24 19:24:54 +01:00
foreach (dep ${arg_DEPENDENCIES})
target_link_libraries(${assembly_target_name} ${dep})
2024-10-24 19:24:54 +01:00
endforeach (dep)
foreach (lib ${arg_LIBS})
target_link_libraries(${assembly_target_name} ${lib})
endforeach (lib)
foreach (dir ${arg_INCLUDE_DIRS})
target_include_directories(${assembly_target_name} PRIVATE ${dir})
endforeach (dir)
foreach (def ${arg_DEFINES})
target_compile_definitions(${assembly_target_name} PRIVATE ${def})
endforeach (def)
set_target_properties(${assembly_target_name} PROPERTIES
FOLDER "${assembly_name}")
TEST_BIG_ENDIAN(IS_BIG_ENDIAN)
if(IS_BIG_ENDIAN)
target_compile_definitions(${assembly_target_name} PRIVATE
BIG_ENDIAN)
else()
target_compile_definitions(${assembly_target_name} PRIVATE
LITTLE_ENDIAN)
endif()
2024-11-14 16:56:12 +00:00
install(TARGETS ${assembly_target_name})
install(FILES ${headers} DESTINATION include/${assembly_path})
endfunction(add_fx_assembly)
macro(export_fx_namespace_details)
set(options)
set(one_value_args NAME)
set(multi_value_args)
cmake_parse_arguments(PARSE_ARGV 0 arg
"${options}"
"${one_value_args}"
"${multi_value_args}")
set(namespace_name ${arg_NAME})
string(REPLACE "." "/" namespace_path ${namespace_name})
set(namespace_target_name ${namespace_name})
set(namespace_include_paths ${CMAKE_CURRENT_SOURCE_DIR}/include PARENT_SCOPE)
file(GLOB namespace_sources
*.c *.h
${CMAKE_CURRENT_SOURCE_DIR}/include/${namespace_path}/*.h)
file(GLOB sys_sources sys/${fx_system_name}/*.c sys/${fx_system_name}/*.h)
file(GLOB headers include/${namespace_path}/*.h)
set(namespace_sources
${namespace_sources}
${sys_sources}
${headers}
PARENT_SCOPE)
endmacro(export_fx_namespace_details)