aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b/cmake
diff options
context:
space:
mode:
authorspicyjpeg <88942473+spicyjpeg@users.noreply.github.com>2021-09-27 20:11:10 +0200
committerspicyjpeg <88942473+spicyjpeg@users.noreply.github.com>2021-09-27 20:11:10 +0200
commit0e3278a087daa25cba541d7c1dae19dfd4e2d422 (patch)
treedbd8ea7b2f3398865a396d3f425a6ab4ba4bed94 /libpsn00b/cmake
parent5bc36dfcfc64e48401a9c6472062020681b3511f (diff)
downloadpsn00bsdk-0e3278a087daa25cba541d7c1dae19dfd4e2d422.tar.gz
Misc MSVC/CMake fixes, also fixed childexec example
Diffstat (limited to 'libpsn00b/cmake')
-rw-r--r--libpsn00b/cmake/sdk.cmake41
1 files changed, 26 insertions, 15 deletions
diff --git a/libpsn00b/cmake/sdk.cmake b/libpsn00b/cmake/sdk.cmake
index 82e921c..4c2f330 100644
--- a/libpsn00b/cmake/sdk.cmake
+++ b/libpsn00b/cmake/sdk.cmake
@@ -22,23 +22,29 @@ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
#set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
-# Tell CMake not to run the linker when compiling test programs. This dodges
-# missing C++ standard library errors.
-set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+# Tell CMake not to run the linker when compiling test programs, and to pass
+# toolchain settings to the generated test projects. This dodges missing C++
+# standard library errors.
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES PSN00BSDK_TC PSN00BSDK_TARGET)
## Toolchain path setup
-# Attempt to find GCC. PSN00BSDK_TC can be left unset if the toolchain can be
-# found in the PATH environment variable.
+# Attempt to find GCC using a list of common installation locations.
+# PSN00BSDK_TC can be left unset if the toolchain can be found in any of these
+# or in the PATH environment variable.
find_program(
_gcc ${PSN00BSDK_TARGET}-gcc
HINTS
${PSN00BSDK_TC}/bin
${PSN00BSDK_TC}/../bin
+ # Same as ${CMAKE_INSTALL_PREFIX}/${PSN00BSDK_TARGET}/bin
${CMAKE_CURRENT_LIST_DIR}/../../../${PSN00BSDK_TARGET}/bin
PATHS
"C:/Program Files/${PSN00BSDK_TARGET}/bin"
+ "C:/Program Files (x86)/${PSN00BSDK_TARGET}/bin"
"C:/${PSN00BSDK_TARGET}/bin"
+ /opt/${PSN00BSDK_TARGET}/bin
/usr/local/${PSN00BSDK_TARGET}/bin
/usr/${PSN00BSDK_TARGET}/bin
NO_CACHE REQUIRED
@@ -57,18 +63,23 @@ endif()
## Toolchain executables
+# ${CMAKE_EXECUTABLE_SUFFIX} seems not to work in toolchain scripts, so we
+# can't rely on it to determine the host OS extension for executables. The best
+# workaround I found is to extract the extension from the path returned by
+# find_program() using a regex.
set(_prefix ${_bin}/${PSN00BSDK_TARGET})
+string(REGEX MATCH ".+-gcc(.*)$" _dummy ${_gcc})
-set(CMAKE_ASM_COMPILER ${_prefix}-gcc${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_C_COMPILER ${_prefix}-gcc${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_CXX_COMPILER ${_prefix}-g++${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_AR ${_prefix}-ar${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_LINKER ${_prefix}-ld${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_RANLIB ${_prefix}-ranlib${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_OBJCOPY ${_prefix}-objcopy${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_SIZE ${_prefix}-size${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_STRIP ${_prefix}-strip${CMAKE_EXECUTABLE_SUFFIX})
-set(TOOLCHAIN_NM ${_prefix}-nm${CMAKE_EXECUTABLE_SUFFIX})
+set(CMAKE_ASM_COMPILER ${_prefix}-gcc${CMAKE_MATCH_1})
+set(CMAKE_C_COMPILER ${_prefix}-gcc${CMAKE_MATCH_1})
+set(CMAKE_CXX_COMPILER ${_prefix}-g++${CMAKE_MATCH_1})
+set(CMAKE_AR ${_prefix}-ar${CMAKE_MATCH_1})
+set(CMAKE_LINKER ${_prefix}-ld${CMAKE_MATCH_1})
+set(CMAKE_RANLIB ${_prefix}-ranlib${CMAKE_MATCH_1})
+set(CMAKE_OBJCOPY ${_prefix}-objcopy${CMAKE_MATCH_1})
+set(CMAKE_SIZE ${_prefix}-size${CMAKE_MATCH_1})
+set(CMAKE_STRIP ${_prefix}-strip${CMAKE_MATCH_1})
+set(TOOLCHAIN_NM ${_prefix}-nm${CMAKE_MATCH_1})
## SDK setup