Cherry pick changes from wip-scritchui which should be mainline.
[SquirrelJME.git] / nanocoat / frontend / libretro / CMakeLists.txt
blob06dc579306a029e51d2fc8d6aa235d7cbac7ecd6
1 # ---------------------------------------------------------------------------
2 # SquirrelJME
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>)
15 else()
16         set(libRetroIsStatic OFF)
17         set(libRetroBuildType SHARED)
18         set(libRetroCore CorePIC)
19         set(libRetroCoreObjects $<TARGET_OBJECTS:CorePIC>)
20 endif()
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>)
26         else()
27                 set(libRetroTestObjects $<TARGET_OBJECTS:BasicTestLibPIC>)
28         endif()
29 else()
30         set(libRetroTestObjects)
31 endif()
33 # Declare library
34 add_library(squirreljme_libretro ${libRetroBuildType}
35         ${libRetroCoreObjects}
36         ${libRetroTestObjects}
37         audio.c
38         boot.c
39         env.c
40         ext.c
41         hooks.c
42         input.c
43         loop.c
44         save.c
45         shared.c
46         video.c)
48 # Make this PIC if not static
49 if(NOT libRetroIsStatic)
50         set_property(TARGET squirreljme_libretro
51                 PROPERTY POSITION_INDEPENDENT_CODE ON)
52 endif()
54 # The base SquirrelJME core needs to be built
55 add_dependencies(squirreljme_libretro
56         ${libRetroCore})
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")
62 else()
63         squirreljme_target_binary_name(squirreljme_libretro
64                 "squirreljme_libretro${LIBRETRO_SUFFIX}")
65 endif()
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
77         PREFIX "")
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
84 # same system...
85 find_program(retroArchExe "retroarch")
86 if(retroArchExe AND NOT libRetroIsStatic AND
87         NOT EMSCRIPTEN 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>"
93                         "--no-patch"
94                         "--appendconfig=${CMAKE_CURRENT_SOURCE_DIR}/test.config"
95                         "--log-file=${CMAKE_BINARY_DIR}/libretro.log"
96                 DEPENDS squirreljme_libretro
97                 USES_TERMINAL)
99         # Do not try running this
100         set_target_properties(LibRetroRun PROPERTIES
101                 EXCLUDE_FROM_ALL TRUE
102                 EXCLUDE_FROM_DEFAULT_BUILD TRUE)
103 endif()
105 # CPack
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
111                 LIBRARY)
112         set(CPACK_DEBIAN_LIBRETRO_PACKAGE_DEPENDS
113                 "retroarch | libretro-frontend")
114         set(CPACK_DEBIAN_PACKAGE_SUGGESTS
115                 "retroarch")
116 endif()