aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/cmake/flags.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'libpsn00b/cmake/flags.cmake')
-rw-r--r--libpsn00b/cmake/flags.cmake161
1 files changed, 50 insertions, 111 deletions
diff --git a/libpsn00b/cmake/flags.cmake b/libpsn00b/cmake/flags.cmake
index 5d9c751..1ca25c2 100644
--- a/libpsn00b/cmake/flags.cmake
+++ b/libpsn00b/cmake/flags.cmake
@@ -1,151 +1,90 @@
-# libpsn00b interface targets
-# (C) 2021 spicyjpeg - MPL licensed
+# PSn00bSDK interface targets
+# (C) 2021-2022 spicyjpeg - MPL licensed
# This script creates several "virtual" targets (psn00bsdk_*) that set include
-# directories and compiler flags when a target is linked against them. The
-# following targets are currently defined:
-# - psn00bsdk_common
-# - psn00bsdk_static_exe
-# - psn00bsdk_dynamic_exe
-# - psn00bsdk_static_lib
-# - psn00bsdk_object_lib (same as psn00bsdk_static_lib)
-# - psn00bsdk_shared_lib
-# - psn00bsdk_module_lib (same as psn00bsdk_shared_lib)
-#
-# NOTE: building a static library and linking it as part of a DLL is currently
-# *not* supported.
+# directories and compiler flags when a target is linked against them. It is
+# only used when building libpsn00b, as CMake automatically saves these targets
+# into the export script once libpsn00b is installed.
-if(NOT TARGET psn00bsdk_common) # Include guard
+add_library (psn00bsdk INTERFACE)
+link_libraries(psn00bsdk)
-add_library(psn00bsdk_common INTERFACE)
-
-foreach(
- _target IN ITEMS
- static_exe dynamic_exe static_lib object_lib shared_lib module_lib
-)
- add_library (psn00bsdk_${_target} INTERFACE)
- target_link_libraries(psn00bsdk_${_target} INTERFACE psn00bsdk_common)
-endforeach()
-
-# Options common to all target types:
-# - Define PLAYSTATION=1
-# - Optimize for MIPS R3000
-# - Inject zero checks into division operations (will throw breaks)
-# - All standard libraries (including libgcc) disabled
-# - Put all symbols into separate sections when building
-# - C++ features that require runtime support disabled
-# - Unused section stripping enabled
target_compile_options(
- psn00bsdk_common INTERFACE
- # CPU options
- -msoft-float
- -march=r3000
- -mtune=r3000
- -mabi=32
- -mno-mt
- -mno-llsc
- -mdivide-breaks
+ psn00bsdk INTERFACE
+ # Options common to all target types
+ -g
+ -Wa,--strip-local-absolute
-O2
- # Standard library options
-ffreestanding
-fno-builtin
-nostdlib
- # Other options
- -g
-fdata-sections
-ffunction-sections
-fsigned-char
-fno-strict-overflow
-fdiagnostics-color=always
+ -msoft-float
+ -march=r3000
+ -mtune=r3000
+ -mabi=32
+ -mno-mt
+ -mno-llsc
+ -mdivide-breaks
$<$<COMPILE_LANGUAGE:CXX>:
- # C++ options
+ # Options common to all target types (C++)
-fno-exceptions
-fno-rtti
-fno-unwind-tables
-fno-threadsafe-statics
-fno-use-cxa-atexit
>
-)
-target_link_options(
- psn00bsdk_common INTERFACE
- -nostdlib
- -Wl,-gc-sections
-)
-target_compile_definitions(
- psn00bsdk_common INTERFACE
- PLAYSTATION=1
- $<$<CONFIG:DEBUG>:DEBUG=1>
-)
-
-# Options for executables without support for dynamic linking:
-# - Position-independent code disabled
-# - GP-relative addressing enabled only for local symbols
-# - ABI-compatible calls disabled (incompatible with GP-relative addr)
-target_compile_options(
- psn00bsdk_static_exe INTERFACE
+ $<$<STREQUAL:$<UPPER_CASE:$<TARGET_PROPERTY:PSN00BSDK_TARGET_TYPE>>,EXECUTABLE_GPREL>:
+ # Options for executables with $gp-relative addressing
-G8
-fno-pic
-mno-abicalls
-mgpopt
-mno-extern-sdata
-)
-target_link_options(
- psn00bsdk_static_exe INTERFACE
- -G8
- -static
-)
-
-# Options for executables with support for dynamic linking:
-# - Position-independent code disabled
-# - GP-relative addressing disabled
-# - ABI-compatible calls disabled (must be performed manually)
-target_compile_options(
- psn00bsdk_dynamic_exe INTERFACE
- -G0
- -fno-pic
- -mno-abicalls
- -mno-gpopt
-)
-target_link_options(
- psn00bsdk_dynamic_exe INTERFACE
- -G0
- -static
-)
-
-# Options for static libraries:
-# - Position-independent code disabled
-# - GP-relative addressing disabled
-# - ABI-compatible calls disabled
-# - Local stripping enabled
-target_compile_options(
- psn00bsdk_static_lib INTERFACE
+ >
+ $<$<STREQUAL:$<UPPER_CASE:$<TARGET_PROPERTY:PSN00BSDK_TARGET_TYPE>>,EXECUTABLE_NOGPREL>:
+ # Options for executables without $gp-relative addressing
-G0
-fno-pic
-mno-abicalls
-mno-gpopt
- -Wa,--strip-local-absolute
-)
-
-target_link_libraries(psn00bsdk_object_lib INTERFACE psn00bsdk_static_lib)
-
-# Options for dynamically-loaded libraries:
-# - Position-independent code enabled
-# - GP-relative addressing disabled (incompatible with ABI calls)
-# - ABI-compatible calls enabled
-target_compile_options(
- psn00bsdk_shared_lib INTERFACE
+ >
+ $<$<STREQUAL:$<UPPER_CASE:$<TARGET_PROPERTY:PSN00BSDK_TARGET_TYPE>>,SHARED_LIBRARY>:
+ # Options for DLLs
-G0
-fPIC
-mabicalls
-mno-gpopt
-mshared
+ >
)
target_link_options(
- psn00bsdk_shared_lib INTERFACE
+ psn00bsdk INTERFACE
+ # Options common to all target types
+ -nostdlib
+ -Wl,-gc-sections
+ $<$<STREQUAL:$<UPPER_CASE:$<TARGET_PROPERTY:PSN00BSDK_TARGET_TYPE>>,EXECUTABLE_GPREL>:
+ # Options for executables with $gp-relative addressing
+ -G8
+ -static
+ >
+ $<$<STREQUAL:$<UPPER_CASE:$<TARGET_PROPERTY:PSN00BSDK_TARGET_TYPE>>,EXECUTABLE_NOGPREL>:
+ # Options for executables without $gp-relative addressing
+ -G0
+ -static
+ >
+ $<$<STREQUAL:$<UPPER_CASE:$<TARGET_PROPERTY:PSN00BSDK_TARGET_TYPE>>,SHARED_LIBRARY>:
+ # Options for DLLs
-G0
-shared
+ >
+)
+target_compile_definitions(
+ psn00bsdk INTERFACE
+ PSN00BSDK=1
+ $<$<CONFIG:Release>:NDEBUG=1>
)
-
-target_link_libraries(psn00bsdk_module_lib INTERFACE psn00bsdk_shared_lib)
-
-endif()