1 # ---------------------------------------------------------------------------
3 # Copyright (C) Stephanie Gawroriski <xer@multiphasicapps.net>
4 # ---------------------------------------------------------------------------
5 # SquirrelJME is under the Mozilla Public License Version 2.0.
6 # See license.mkd for licensing and copyright information.
7 # ---------------------------------------------------------------------------
9 # Which type of build is being used?
10 if(LIBRETRO_REALLY_STATIC)
11 set(libRetroIsStatic ON)
12 set(libRetroBuildType STATIC)
13 set(libRetroCore Core)
14 set(libRetroCoreObjects $<TARGET_OBJECTS:Core>)
16 set(libRetroIsStatic OFF)
17 set(libRetroBuildType SHARED)
18 set(libRetroCore CorePIC)
19 set(libRetroCoreObjects $<TARGET_OBJECTS:CorePIC>)
22 # Include tests with the build as well?
23 if(SQUIRRELJME_IS_DEBUG AND SQUIRRELJME_ENABLE_TESTING)
24 if(LIBRETRO_REALLY_STATIC)
25 set(libRetroTestObjects $<TARGET_OBJECTS:BasicTestLib>)
27 set(libRetroTestObjects $<TARGET_OBJECTS:BasicTestLibPIC>)
30 set(libRetroTestObjects)
34 add_library(squirreljme_libretro ${libRetroBuildType}
35 ${libRetroCoreObjects}
36 ${libRetroTestObjects}
48 # Make this PIC if not static
49 if(NOT libRetroIsStatic)
50 set_property(TARGET squirreljme_libretro
51 PROPERTY POSITION_INDEPENDENT_CODE ON)
54 # The base SquirrelJME core needs to be built
55 add_dependencies(squirreljme_libretro
58 # Name must be specifically set for RetroArch for it to work properly
59 if(ANDROID OR (DEFINED ANDROID_PLATFORM AND ANDROID_PLATFORM))
60 squirreljme_target_binary_name(squirreljme_libretro
61 "squirreljme_libretro_android")
63 squirreljme_target_binary_name(squirreljme_libretro
64 "squirreljme_libretro${LIBRETRO_SUFFIX}")
67 # Library location must be placed in the build output for the RetroArch
68 # build system to pick up the library
69 # Note that RUNTIME_OUTPUT_DIRECTORY is needed for the Windows build to output
70 # directories since .DLL files are output there and not where shared libraries
71 # go??? No idea really.
72 squirreljme_target_binary_output(squirreljme_libretro
73 "${SQUIRRELJME_DYLIB_OUTPUT_DIR}")
75 # RetroArch does not use any prefixes like "lib" for the cores
76 set_target_properties(squirreljme_libretro PROPERTIES
79 # Include main headers
80 target_include_directories(squirreljme_libretro PUBLIC
81 "${CMAKE_SOURCE_DIR}/include")
83 # Allow running the binary, as long as it is not static and we are on the
85 find_program(retroArchExe "retroarch")
86 if(retroArchExe AND NOT libRetroIsStatic AND
88 NOT SQUIRRELJME_CROSS_BUILD)
89 # Add target to run accordingly
90 add_custom_target(LibRetroRun
91 COMMAND "${retroArchExe}"
92 "-L" "$<TARGET_FILE:squirreljme_libretro>"
94 "--appendconfig=${CMAKE_CURRENT_SOURCE_DIR}/test.config"
95 "--log-file=${CMAKE_BINARY_DIR}/libretro.log"
96 DEPENDS squirreljme_libretro
99 # Do not try running this
100 set_target_properties(LibRetroRun PROPERTIES
101 EXCLUDE_FROM_ALL TRUE
102 EXCLUDE_FROM_DEFAULT_BUILD TRUE)
106 if(SQUIRRELJME_ENABLE_PACKING)
107 cpack_add_component(LIBRETRO
108 DISPLAY_NAME "SquirrelJME LibRetro"
109 DESCRIPTION "SquirrelJME running on LibRetro.")
110 install(TARGETS squirreljme_libretro
112 set(CPACK_DEBIAN_LIBRETRO_PACKAGE_DEPENDS
113 "retroarch | libretro-frontend")
114 set(CPACK_DEBIAN_PACKAGE_SUGGESTS