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 $,$,$>) 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()