Files
padlab/src/CMakeLists.txt
2024-03-10 20:39:38 +11:00

73 lines
2.8 KiB
CMake

set(SOURCES_COMMON
maths.h
draw.h
draw_common.c
stick.h
stick.c
analogue.c)
set(SOURCES_SDL_RENDERER draw.c)
set(SOURCES_METAL metal/draw_metal.m metal/metal_shader_types.h)
set(SOURCES_OPENGL glcore/draw_opengl_core.c)
set(SOURCES_OPENGL_LEGACY gl/draw_opengl.c)
function (common_setup _TARGET)
set_target_properties(${_TARGET} PROPERTIES
C_STANDARD 99
WIN32_EXECUTABLE ON)
set(GNU $<OR:$<C_COMPILER_ID:GNU>,$<C_COMPILER_ID:Clang>,$<C_COMPILER_ID:AppleClang>>)
target_link_libraries(${_TARGET} SDL3::SDL3 $<${GNU}:m>)
target_compile_options(${_TARGET} PRIVATE
$<${GNU}:-Wall -Wextra -pedantic -Wno-unused-parameter>)
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
get_property(SDL3_IMPORTED_LOCATION TARGET SDL3::SDL3 PROPERTY IMPORTED_LOCATION)
if (SDL3_IMPORTED_LOCATION MATCHES "^/Library/Frameworks/")
target_link_options(${_TARGET} PRIVATE -Wl,-rpath,/Library/Frameworks)
endif()
endif()
endfunction()
add_executable(${TARGET} ${SOURCES_COMMON} ${SOURCES_SDL_RENDERER})
common_setup(${TARGET})
if (BUILD_METAL OR BUILD_OPENGL)
include(BinHelper)
endif()
if (BUILD_METAL)
enable_language(OBJC)
find_library(METAL Metal REQUIRED)
find_library(FOUNDATION Foundation REQUIRED)
find_library(QUARTZCORE QuartzCore REQUIRED)
include(MetalHelper)
metal_compile(OUTPUT shader.metallib SOURCES metal/shader.metal)
bin2h_compile(OUTPUT metalShader.h BIN ${CMAKE_CURRENT_BINARY_DIR}/shader.metallib)
add_executable(${TARGET}_metal ${SOURCES_COMMON} ${SOURCES_METAL} ${CMAKE_CURRENT_BINARY_DIR}/metalShader.h)
target_include_directories(${TARGET}_metal PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
target_link_libraries(${TARGET}_metal ${METAL} ${QUARTZCORE} ${FOUNDATION})
target_compile_definitions(${TARGET}_metal PRIVATE USE_METAL)
common_setup(${TARGET}_metal)
endif()
if (BUILD_OPENGL)
include(GL3WHelper)
add_gl3w(gl3w)
bin2h_compile(OUTPUT glslShaders.h TXT glcore/vert.glsl glcore/geom.glsl glcore/frag.glsl)
add_executable(${TARGET}_glcore ${SOURCES_COMMON} ${SOURCES_OPENGL} ${CMAKE_CURRENT_BINARY_DIR}/glslShaders.h)
target_include_directories(${TARGET}_glcore PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR})
target_link_libraries(${TARGET}_glcore OpenGL::GL gl3w)
target_compile_definitions(${TARGET}_glcore PRIVATE USE_OPENGL)
common_setup(${TARGET}_glcore)
endif()
if (BUILD_OPENGL_LEGACY)
add_executable(${TARGET}_gl ${SOURCES_COMMON} ${SOURCES_OPENGL_LEGACY})
target_include_directories(${TARGET}_gl PRIVATE ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(${TARGET}_gl OpenGL::GL)
target_compile_definitions(${TARGET}_gl PRIVATE USE_OPENGL)
common_setup(${TARGET}_gl)
endif()
if (CMAKE_GENERATOR MATCHES "Visual Studio")
set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT ${TARGET})
endif()