diff --git a/bin/nxdk-cc b/bin/nxdk-cc index 1ea029a28..ad70418cb 100755 --- a/bin/nxdk-cc +++ b/bin/nxdk-cc @@ -17,6 +17,9 @@ clang \ -I${NXDK_DIR}/lib/pdclib/platform/xbox/include \ -I${NXDK_DIR}/lib/winapi \ -I${NXDK_DIR}/lib/xboxrt/vcruntime \ + -I${NXDK_DIR}/lib/net/lwip/src/include \ + -I${NXDK_DIR}/lib/net/nforceif/include \ + -I${NXDK_DIR}/lib/net/nvnetdrv \ -DNXDK \ -D__STDC__=1 \ -U__STDC_NO_THREADS__ \ diff --git a/bin/nxdk-cxx b/bin/nxdk-cxx index 68b4d846f..428b0bfe3 100755 --- a/bin/nxdk-cxx +++ b/bin/nxdk-cxx @@ -18,6 +18,9 @@ clang \ -I${NXDK_DIR}/lib/pdclib/platform/xbox/include \ -I${NXDK_DIR}/lib/winapi \ -I${NXDK_DIR}/lib/xboxrt/vcruntime \ + -I${NXDK_DIR}/lib/net/lwip/src/include \ + -I${NXDK_DIR}/lib/net/nforceif/include \ + -I${NXDK_DIR}/lib/net/nvnetdrv \ -DNXDK \ -D__STDC__=1 \ -U__STDC_NO_THREADS__ \ diff --git a/lib/pkgconfig/SDL2_image.pc b/lib/pkgconfig/SDL2_image.pc index 7d261abe7..f997e9101 100644 --- a/lib/pkgconfig/SDL2_image.pc +++ b/lib/pkgconfig/SDL2_image.pc @@ -2,5 +2,5 @@ Name: SDL2_image Description: image loading library for Simple DirectMedia Layer Version: 2.0.5 Requires: sdl2 >= 2.0.9 libjpeg libpng -Libs: ${NXDK_DIR}/lib/libSDL2_image.lib +Libs: -l${NXDK_DIR}/lib/libSDL2_image.lib Cflags: -I${NXDK_DIR}/lib/sdl/SDL2_image diff --git a/lib/pkgconfig/SDL2_ttf.pc b/lib/pkgconfig/SDL2_ttf.pc index f0e25ada8..a7043dc55 100644 --- a/lib/pkgconfig/SDL2_ttf.pc +++ b/lib/pkgconfig/SDL2_ttf.pc @@ -2,5 +2,5 @@ Name: SDL2_ttf Description: ttf library for Simple DirectMedia Layer with FreeType 2 support Version: 2.0.14 Requires: sdl2 >= 2.0.9 -Libs: ${NXDK_DIR}/lib/libSDL_ttf.lib ${NXDK_DIR}/lib/libfreetype.lib +Libs: -l${NXDK_DIR}/lib/libSDL_ttf.lib -l${NXDK_DIR}/lib/libfreetype.lib Cflags: -I${NXDK_DIR}/lib/sdl -I${NXDK_DIR}/lib/sdl/SDL_ttf diff --git a/lib/pkgconfig/libjpeg.pc b/lib/pkgconfig/libjpeg.pc index 5f6ffab06..7f51085ea 100644 --- a/lib/pkgconfig/libjpeg.pc +++ b/lib/pkgconfig/libjpeg.pc @@ -1,5 +1,5 @@ Name: libjpeg Description: A SIMD-accelerated JPEG codec that provides the libjpeg API Version: 2.0.4 -Libs: ${NXDK_DIR}/lib/libjpeg.lib -Cflags: -I${NXDK_DIR}/lib/libjpeg/libjpeg-turbo -I$(NXDK_DIR)/lib/libjpeg +Libs: -l${NXDK_DIR}/lib/libjpeg.lib +Cflags: -I${NXDK_DIR}/lib/libjpeg/libjpeg-turbo -I${NXDK_DIR}/lib/libjpeg diff --git a/lib/pkgconfig/libpng.pc b/lib/pkgconfig/libpng.pc index f1998f786..d47053468 100644 --- a/lib/pkgconfig/libpng.pc +++ b/lib/pkgconfig/libpng.pc @@ -2,5 +2,5 @@ Name: libpng Description: Loads and saves PNG files Version: 1.6.37 Requires: zlib -Libs: ${NXDK_DIR}/lib/libpng.lib +Libs: -l${NXDK_DIR}/lib/libpng.lib Cflags: -I${NXDK_DIR}/lib/libpng -I${NXDK_DIR}/lib/libpng/libpng diff --git a/lib/pkgconfig/sdl2.pc b/lib/pkgconfig/sdl2.pc index 211cc5daa..8c6208b1a 100644 --- a/lib/pkgconfig/sdl2.pc +++ b/lib/pkgconfig/sdl2.pc @@ -3,5 +3,5 @@ Description: Simple DirectMedia Layer is a cross-platform multimedia library des Version: 2.0.9 Requires: Conflicts: -Libs: ${NXDK_DIR}/lib/libSDL2.lib +Libs: -l${NXDK_DIR}/lib/libSDL2.lib Cflags: -I${NXDK_DIR}/lib/sdl/SDL2/include -DXBOX diff --git a/lib/pkgconfig/zlib.pc b/lib/pkgconfig/zlib.pc index 62060c9bd..433d30d30 100644 --- a/lib/pkgconfig/zlib.pc +++ b/lib/pkgconfig/zlib.pc @@ -3,5 +3,5 @@ Description: zlib compression library Version: 1.2.11 Requires: -Libs: ${NXDK_DIR}/lib/libzlib.lib +Libs: -l${NXDK_DIR}/lib/libzlib.lib Cflags: -I${NXDK_DIR}/lib/zlib/zlib -DZ_SOLO diff --git a/share/cmake/Modules/FindSDL2.cmake b/share/cmake/Modules/FindSDL2.cmake new file mode 100644 index 000000000..f711e5e00 --- /dev/null +++ b/share/cmake/Modules/FindSDL2.cmake @@ -0,0 +1,18 @@ +# FPHSA_NAME_MISMATCHED is require to suppress warning message +set(FPHSA_NAME_MISMATCHED TRUE) +include(FindPkgConfig) +pkg_check_modules(sdl2 REQUIRED sdl2) +unset(FPHSA_NAME_MISMATCHED) + +add_library(SDL2::SDL2 INTERFACE IMPORTED) +set(SDL2_INCLUDE_DIRS ${sdl2_INCLUDE_DIRS}) +set(SDL2_LIBRARIES ${sdl2_LIBRARIES}) +set(SDL2_LINK_LIBRARIES ${sdl2_LINK_LIBRARIES}) +set_target_properties(SDL2::SDL2 PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIRS}" + INTERFACE_LINK_LIBRARIES "${SDL2_LINK_LIBRARIES}" + # NOTE: pkg_check_modules' Cflags definition for "XBOX" did not get included and was passed to CFLAGS_OTHER for some reason... + INTERFACE_COMPILE_OPTIONS "${sdl2_CFLAGS}" +) +set(SDL2_FOUND 1) +add_library(SDL2 ALIAS SDL2::SDL2) diff --git a/share/cmake/Modules/FindThreads.cmake b/share/cmake/Modules/FindThreads.cmake new file mode 100644 index 000000000..0d6e541f3 --- /dev/null +++ b/share/cmake/Modules/FindThreads.cmake @@ -0,0 +1,6 @@ +# NOTE: custom FindThreads module is a requirement due to CMake's FindThreads module is looking for pThreads. +# nxdk's toolchain is using system named Generic instead of "Windows" which could had work but inaccurate name. +# xboxkrnl and pdclib have C11 thread support out of the box +set(CMAKE_HAVE_THREADS_LIBRARY 1) +set(Threads_FOUND TRUE) +add_library(Threads::Threads INTERFACE IMPORTED) diff --git a/share/toolchain-nxdk.cmake b/share/toolchain-nxdk.cmake index 9fc9f1d29..348a17ab8 100644 --- a/share/toolchain-nxdk.cmake +++ b/share/toolchain-nxdk.cmake @@ -1,3 +1,10 @@ +# NOTE: Require to prevent obtaining pre-existing information +# and calling macro repeatly unintentionally. +if (__TOOLCHAIN_NXDK) + return() +endif() +set(__TOOLCHAIN_NXDK 1) + if(DEFINED ENV{NXDK_DIR}) set(NXDK_DIR $ENV{NXDK_DIR}) else() @@ -19,7 +26,7 @@ set(WIN32 1) set(NXDK 1) set(CMAKE_C_COMPILER "${NXDK_DIR}/bin/${TOOLCHAIN_PREFIX}-cc") -set(CMAKE_C_STANDARD_LIBRARIES "${NXDK_DIR}/lib/libwinapi.lib ${NXDK_DIR}/lib/xboxkrnl/libxboxkrnl.lib ${NXDK_DIR}/lib/libxboxrt.lib ${NXDK_DIR}/lib/libpdclib.lib ${NXDK_DIR}/lib/libnxdk_hal.lib ${NXDK_DIR}/lib/libnxdk.lib ${NXDK_DIR}/lib/nxdk_usb.lib") #"${CMAKE_CXX_STANDARD_LIBRARIES_INIT}" +set(CMAKE_C_STANDARD_LIBRARIES "${NXDK_DIR}/lib/libwinapi.lib ${NXDK_DIR}/lib/xboxkrnl/libxboxkrnl.lib ${NXDK_DIR}/lib/libxboxrt.lib ${NXDK_DIR}/lib/libpdclib.lib ${NXDK_DIR}/lib/libnxdk_hal.lib ${NXDK_DIR}/lib/libnxdk.lib ${NXDK_DIR}/lib/nxdk_usb.lib ${NXDK_DIR}/lib/libnxdk_net.lib") #"${CMAKE_CXX_STANDARD_LIBRARIES_INIT}" set(CMAKE_C_LINK_EXECUTABLE "${NXDK_DIR}/bin/${TOOLCHAIN_PREFIX}-link -out: ") set(CMAKE_CXX_COMPILER "${NXDK_DIR}/bin/${TOOLCHAIN_PREFIX}-cxx") @@ -45,4 +52,34 @@ set(_CMAKE_C_IPO_SUPPORTED_BY_CMAKE YES) set(_CMAKE_C_IPO_MAY_BE_SUPPORTED_BY_COMPILER YES) set(CMAKE_C_COMPILE_OPTIONS_IPO -flto) +# TODO: CMAKE_MODULE_PATH is intended for project level than toolchain, +# find out what's wrong with CMAKE_FIND_ROOT_PATH as it is not working for some reason? +set(CMAKE_MODULE_PATH "${NXDK_DIR}/share/cmake/Modules") set(PKG_CONFIG_EXECUTABLE "${NXDK_DIR}/bin/nxdk-pkg-config" CACHE STRING "Path to pkg-config") + +# Additional toolchain steps required for create xbe and xiso files. +macro(add_executable) + # Perform normal call since there's no modification needed except for additional steps require + _add_executable(${ARGV}) + + # If author request generate iso file, then prepare the command here. + if(GEN_XISO) + set(XISO_OUTPUT "${NXDK_DIR}/tools/extract-xiso/build/extract-xiso" -c "$/bin" "$/${GEN_XISO}") + endif() + + # If custom title is not given, use given executable name. + if(NOT XBE_TITLE) + set(XBE_TITLE ${ARGV0}) + endif() + + # Attach additional toolchain steps to executable project. + add_custom_command(TARGET ${ARGV0} POST_BUILD + COMMAND mkdir -p $/bin + # Generate xbe binary conversion + COMMAND "${NXDK_DIR}/tools/cxbe/cxbe" "-OUT:$/bin/default.xbe" "-TITLE:${XBE_TITLE}" "$/${ARGV0}.exe" + # Optionally generate xiso file if requested + COMMAND "$<$:$>" + COMMAND_EXPAND_LISTS + VERBATIM + ) +endmacro(add_executable)