ソースを参照

[ci] build self-contained macOS binaries (#821)

* download libpng instead of using vendored version

* [sdl] consistently include SDL.h

remove custom FindSDL2.cmake, rely on installed configuration files instead.

* [ssl] link with all libs when using downloaded mbedtls

* use FetchContent for OpenAL and SDL

* Enable use of downloaded libraries on all non-Windows platforms.

* [cmake] set GL_SILENCE_DEPRECATION on Apple platforms

* [ci] build self-contained macOS binaries

- switch to macos-latest
- set rpath
- build self-contained hdlls
- add FLAT_INSTALL_TREE cmake option to match make
Zeta 1 週間 前
コミット
cbaaa1b797

+ 45 - 17
.github/workflows/build.yml

@@ -37,11 +37,11 @@ jobs:
 
 
           - target: darwin
           - target: darwin
             architecture: 64
             architecture: 64
-            runner: macos-13
+            runner: macos-latest
 
 
           - target: darwin
           - target: darwin
             architecture: arm64
             architecture: arm64
-            runner: macos-14
+            runner: macos-latest
 
 
           - build_system: cmake
           - build_system: cmake
             cmake_configuration: RelWithDebInfo
             cmake_configuration: RelWithDebInfo
@@ -90,6 +90,10 @@ jobs:
           - target: windows
           - target: windows
             build_system: make
             build_system: make
 
 
+          - target: darwin
+            architecture: 64
+            build_system: make
+
     steps:
     steps:
     - name: "SCM Checkout"
     - name: "SCM Checkout"
       uses: actions/checkout@v5
       uses: actions/checkout@v5
@@ -126,8 +130,10 @@ jobs:
             ;;
             ;;
 
 
           darwin*)
           darwin*)
-            brew update
-            brew bundle
+            if [ "${{matrix.build_system}}" != "cmake" ]; then
+              brew update
+              brew bundle
+            fi
             ;;
             ;;
 
 
           windows*)
           windows*)
@@ -162,16 +168,30 @@ jobs:
           cmake)
           cmake)
             case "${{ matrix.target }}${{ matrix.architecture }}" in
             case "${{ matrix.target }}${{ matrix.architecture }}" in
               windows*)
               windows*)
-                cmake . -DCMAKE_BUILD_TYPE=${{ matrix.cmake_configuration }} \
+                cmake -B build -DCMAKE_BUILD_TYPE=${{ matrix.cmake_configuration }} \
                   -G "${{ matrix.cmake_generator }}" \
                   -G "${{ matrix.cmake_generator }}" \
                   -A ${{ matrix.architecture_string }}
                   -A ${{ matrix.architecture_string }}
                 ;;
                 ;;
+              darwin64)
+                cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.cmake_configuration }} \
+                  -DDOWNLOAD_DEPENDENCIES=ON \
+                  -DCMAKE_OSX_ARCHITECTURES=x86_64 \
+                  -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 \
+                  -DFLAT_INSTALL_TREE=ON
+                ;;
+              darwinarm64)
+                cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=${{ matrix.cmake_configuration }} \
+                  -DDOWNLOAD_DEPENDENCIES=ON \
+                  -DCMAKE_OSX_ARCHITECTURES=arm64 \
+                  -DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 \
+                  -DFLAT_INSTALL_TREE=ON
+                ;;
               *)
               *)
-                cmake . -DCMAKE_BUILD_TYPE=${{ matrix.cmake_configuration }} ;;
+                cmake -B build -DCMAKE_BUILD_TYPE=${{ matrix.cmake_configuration }} ;;
             esac
             esac
 
 
-            cmake --build . --config ${{ matrix.cmake_configuration }}
-            BUILD_FOLDER=bin
+            cmake --build build --config ${{ matrix.cmake_configuration }}
+            BUILD_FOLDER=build/bin
             ;;
             ;;
 
 
           vs2019)
           vs2019)
@@ -205,7 +225,17 @@ jobs:
 
 
         case "${{ matrix.build_system }}" in
         case "${{ matrix.build_system }}" in
           cmake)
           cmake)
-            ctest --verbose --build-config ${{ matrix.cmake_configuration }}
+            case "${{matrix.target}}" in
+              linux)
+                cmake --install build --prefix /tmp/hashlink
+                /tmp/hashlink/bin/hl --version
+                ;;
+              darwin)
+                cmake --install build --prefix /tmp/hashlink
+                if [ -f /tmp/hashlink/hl ]; then /tmp/hashlink/hl --version; fi
+                ;;
+            esac
+            cd build && ctest --verbose --build-config ${{ matrix.cmake_configuration }}
             ;;
             ;;
           vs2019)
           vs2019)
             ${{ env.WINDOWS_BUILD_FOLDER }}/hl.exe --version
             ${{ env.WINDOWS_BUILD_FOLDER }}/hl.exe --version
@@ -258,9 +288,9 @@ jobs:
         case "${{ matrix.build_system }}" in
         case "${{ matrix.build_system }}" in
           cmake)
           cmake)
             dist_folder=hashlink-${short_commit}-${platform_name}-cmake
             dist_folder=hashlink-${short_commit}-${platform_name}-cmake
-            cpack -D CPACK_PACKAGE_FILE_NAME=$dist_folder -C ${{ matrix.cmake_configuration }}
+            cd build && cpack -D CPACK_PACKAGE_FILE_NAME=$dist_folder -C ${{ matrix.cmake_configuration }}
 
 
-            echo "HASHLINK_DISTRIBUTION=bin/$dist_folder.${{ matrix.archive_ext }}" >> $GITHUB_ENV
+            echo "HASHLINK_DISTRIBUTION=build/bin/$dist_folder.${{ matrix.archive_ext }}" >> $GITHUB_ENV
             ;;
             ;;
           *)
           *)
             dist_folder=hashlink-${short_commit}-${platform_name}
             dist_folder=hashlink-${short_commit}-${platform_name}
@@ -301,11 +331,9 @@ jobs:
     - name: "Build: Hashlink"
     - name: "Build: Hashlink"
       run: |
       run: |
         set -ex
         set -ex
-        mkdir build
-        cd build
-        cmake .. -G Ninja --toolchain $ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \
+        cmake -B build -G Ninja --toolchain $ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \
           -DANDROID_PLATFORM=24 -DANDROID_ABI=arm64-v8a -DBUILD_SHARED_LIBS=OFF -DWITH_VM=OFF
           -DANDROID_PLATFORM=24 -DANDROID_ABI=arm64-v8a -DBUILD_SHARED_LIBS=OFF -DWITH_VM=OFF
-        cmake --build .
+        cmake --build build
 
 
   ###########################################################
   ###########################################################
   publish-latest-release:
   publish-latest-release:
@@ -344,8 +372,8 @@ jobs:
         gh release create latest \
         gh release create latest \
           --prerelease \
           --prerelease \
           --title "HashLink Nightly Build" \
           --title "HashLink Nightly Build" \
-          "darwin-make-64/hashlink-${short_commit}-darwin.tar.gz#hashlink-latest-darwin.tar.gz" \
-          "darwin-make-arm64/hashlink-${short_commit}-darwin-arm64.tar.gz#hashlink-latest-darwin-arm64.tar.gz" \
+          "darwin-cmake-64/hashlink-${short_commit}-darwin.tar.gz#hashlink-latest-darwin.tar.gz" \
+          "darwin-cmake-arm64/hashlink-${short_commit}-darwin-arm64.tar.gz#hashlink-latest-darwin-arm64.tar.gz" \
           "linux-make-64/hashlink-${short_commit}-linux-amd64.tar.gz#hashlink-latest-linux-amd64.tar.gz" \
           "linux-make-64/hashlink-${short_commit}-linux-amd64.tar.gz#hashlink-latest-linux-amd64.tar.gz" \
           "windows-vs2019-32/hashlink-${short_commit}-win32.zip#hashlink-latest-win32.zip" \
           "windows-vs2019-32/hashlink-${short_commit}-win32.zip#hashlink-latest-win32.zip" \
           "windows-vs2019-64/hashlink-${short_commit}-win64.zip#hashlink-latest-win64.zip"
           "windows-vs2019-64/hashlink-${short_commit}-win64.zip#hashlink-latest-win64.zip"

+ 38 - 22
CMakeLists.txt

@@ -9,23 +9,41 @@ cmake_policy(SET CMP0042 NEW)
 
 
 if(WIN32)
 if(WIN32)
     set(CMAKE_SYSTEM_VERSION 10.0)
     set(CMAKE_SYSTEM_VERSION 10.0)
-    project(hashlink C CXX) # C++ required for directx
-else()
-    project(hashlink C)
 endif()
 endif()
+project(hashlink)
 
 
 include(GNUInstallDirs)
 include(GNUInstallDirs)
 include(FindPkgConfig)
 include(FindPkgConfig)
 include(CTest)
 include(CTest)
 
 
 set(WITH_VM_DEFAULT ON)
 set(WITH_VM_DEFAULT ON)
-if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|aarch64")
+if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm|aarch64" AND (NOT CMAKE_OSX_ARCHITECTURES MATCHES "x86_64"))
     set(WITH_VM_DEFAULT OFF)
     set(WITH_VM_DEFAULT OFF)
 endif()
 endif()
 
 
 option(WITH_VM "Whether to build the Hashlink virtual machine" ${WITH_VM_DEFAULT})
 option(WITH_VM "Whether to build the Hashlink virtual machine" ${WITH_VM_DEFAULT})
 option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
 option(BUILD_SHARED_LIBS "Build using shared libraries" ON)
+if(BUILD_SHARED_LIBS)
+    # ensure third-party static libs are built with PIC
+    set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+endif()
+if(ANDROID)
+    set(_DOWNLOAD_DEPENDENCIES ON)
+else()
+    set(_DOWNLOAD_DEPENDENCIES OFF)
+endif()
+option(DOWNLOAD_DEPENDENCIES "Download & build third-party dependencies" ${_DOWNLOAD_DEPENDENCIES})
 
 
+if(MSVC)
+    if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+        set (CMAKE_INSTALL_PREFIX "C:/HaxeToolkit/hashlink" CACHE PATH "default install path" FORCE)
+    endif()
+endif()
+option(FLAT_INSTALL_TREE "Flat install tree" ${MSVC})
+if(FLAT_INSTALL_TREE)
+    set(CMAKE_INSTALL_BINDIR .)
+    set(CMAKE_INSTALL_LIBDIR .)
+endif()
 # force Unicode over Multi-byte
 # force Unicode over Multi-byte
 if(MSVC)
 if(MSVC)
     add_definitions(-DUNICODE -D_UNICODE)
     add_definitions(-DUNICODE -D_UNICODE)
@@ -53,12 +71,6 @@ foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
     set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${OUTPUT_DIR} )
     set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${OUTPUT_DIR} )
 endforeach()
 endforeach()
 
 
-include_directories(
-    src
-    include
-    include/pcre
-)
-
 file(GLOB pcre_srcs
 file(GLOB pcre_srcs
     include/pcre/pcre2_auto_possess.c
     include/pcre/pcre2_auto_possess.c
     include/pcre/pcre2_chartables.c
     include/pcre/pcre2_chartables.c
@@ -140,6 +152,14 @@ add_library(libhl
     ${std_srcs}
     ${std_srcs}
 )
 )
 
 
+target_include_directories(libhl
+    PUBLIC src
+    PRIVATE include include/pcre
+)
+
+# C11 / C++11 are required for features such as unicode strings
+target_compile_features(libhl PUBLIC cxx_std_11 c_std_11)
+
 set(public_headers
 set(public_headers
     src/hl.h
     src/hl.h
     src/hlc.h
     src/hlc.h
@@ -178,9 +198,14 @@ if (WITH_VM)
         src/debugger.c
         src/debugger.c
         src/profile.c
         src/profile.c
     )
     )
-
-    if (UNIX AND NOT APPLE)
-        set_target_properties(hl PROPERTIES INSTALL_RPATH "$ORIGIN;${CMAKE_INSTALL_PREFIX}/lib")
+    if(APPLE)
+        set_target_properties(hl PROPERTIES
+            INSTALL_RPATH "@executable_path;@executable_path/../${CMAKE_INSTALL_LIBDIR}"
+        )
+    elseif (UNIX)
+        set_target_properties(hl PROPERTIES
+            INSTALL_RPATH "$ORIGIN;$ORIGIN/../${CMAKE_INSTALL_LIBDIR}"
+        )
     endif()
     endif()
 
 
     target_link_libraries(hl libhl)
     target_link_libraries(hl libhl)
@@ -390,15 +415,6 @@ endif()
 set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
 set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
 
 
-if(MSVC)
-    if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
-        set (CMAKE_INSTALL_PREFIX "C:/HaxeToolkit/hashlink" CACHE PATH "default install path" FORCE)
-    endif()
-
-    set(CMAKE_INSTALL_BINDIR .)
-    set(CMAKE_INSTALL_LIBDIR .)
-endif()
-
 set(HDLL_DESTINATION
 set(HDLL_DESTINATION
     ${CMAKE_INSTALL_LIBDIR}
     ${CMAKE_INSTALL_LIBDIR}
 )
 )

+ 6 - 3
Makefile

@@ -152,8 +152,9 @@ LIBEXT=dylib
 BREW_PREFIX := $(shell brew --prefix)
 BREW_PREFIX := $(shell brew --prefix)
 # prefixes for keg-only packages
 # prefixes for keg-only packages
 BREW_OPENAL_PREFIX := $(shell brew --prefix openal-soft)
 BREW_OPENAL_PREFIX := $(shell brew --prefix openal-soft)
+BREW_SDL_PREFIX := $(shell brew --prefix sdl2)
 
 
-CFLAGS += -m$(MARCH) -I include -I $(BREW_PREFIX)/include -I $(BREW_OPENAL_PREFIX)/include -Dopenal_soft -DGL_SILENCE_DEPRECATION
+CFLAGS += -m$(MARCH) -I include -I $(BREW_PREFIX)/include -I $(BREW_OPENAL_PREFIX)/include -I $(BREW_SDL_PREFIX)/include/SDL2 -Dopenal_soft -DGL_SILENCE_DEPRECATION
 LFLAGS += -Wl,-export_dynamic
 LFLAGS += -Wl,-export_dynamic
 
 
 ifdef OSX_SDK
 ifdef OSX_SDK
@@ -162,6 +163,7 @@ CFLAGS += -isysroot $(ISYSROOT)
 LFLAGS += -isysroot $(ISYSROOT)
 LFLAGS += -isysroot $(ISYSROOT)
 endif
 endif
 
 
+SDL_LINK_FLAGS = -L$(BREW_SDL_PREFIX)/lib -lSDL2
 LIBFLAGS += -L$(BREW_PREFIX)/lib -L$(BREW_OPENAL_PREFIX)/lib
 LIBFLAGS += -L$(BREW_PREFIX)/lib -L$(BREW_OPENAL_PREFIX)/lib
 LIBOPENGL = -framework OpenGL
 LIBOPENGL = -framework OpenGL
 LIBOPENAL = -lopenal
 LIBOPENAL = -lopenal
@@ -183,7 +185,7 @@ LHL_LINK_FLAGS += -install_name @rpath/libhl.dylib
 else
 else
 
 
 # Linux
 # Linux
-CFLAGS += -m$(MARCH) -fPIC -pthread -fno-omit-frame-pointer
+CFLAGS += -m$(MARCH) -fPIC -pthread -fno-omit-frame-pointer $(shell pkg-config --cflags sdl2)
 LFLAGS += -lm -Wl,-rpath,.:'$$ORIGIN':$(INSTALL_LIB_DIR) -Wl,--export-dynamic -Wl,--no-undefined
 LFLAGS += -lm -Wl,-rpath,.:'$$ORIGIN':$(INSTALL_LIB_DIR) -Wl,--export-dynamic -Wl,--no-undefined
 
 
 ifeq ($(MARCH),32)
 ifeq ($(MARCH),32)
@@ -193,6 +195,7 @@ else
 LIBFLAGS += -L/opt/libjpeg-turbo/lib64
 LIBFLAGS += -L/opt/libjpeg-turbo/lib64
 endif
 endif
 
 
+SDL_LINK_FLAGS = $(shell pkg-config --libs sdl2)
 LIBOPENAL = -lopenal
 LIBOPENAL = -lopenal
 LIBOPENGL = -lGL
 LIBOPENGL = -lGL
 RELEASE_NAME = linux
 RELEASE_NAME = linux
@@ -255,7 +258,7 @@ fmt: ${FMT} libhl
 	${CC} ${CFLAGS} -shared -o fmt.hdll ${FMT} ${LIBFLAGS} -L. -lhl -lpng $(LIBTURBOJPEG) -lz -lvorbisfile
 	${CC} ${CFLAGS} -shared -o fmt.hdll ${FMT} ${LIBFLAGS} -L. -lhl -lpng $(LIBTURBOJPEG) -lz -lvorbisfile
 
 
 sdl: ${SDL} libhl
 sdl: ${SDL} libhl
-	${CC} ${CFLAGS} -shared -o sdl.hdll ${SDL} ${LIBFLAGS} -L. -lhl -lSDL2 $(LIBOPENGL)
+	${CC} ${CFLAGS} -shared -o sdl.hdll ${SDL} ${LIBFLAGS} -L. -lhl $(SDL_LINK_FLAGS) $(LIBOPENGL)
 
 
 openal: ${OPENAL} libhl
 openal: ${OPENAL} libhl
 	${CC} ${CFLAGS} -shared -o openal.hdll ${OPENAL} ${LIBFLAGS} -L. -lhl $(LIBOPENAL)
 	${CC} ${CFLAGS} -shared -o openal.hdll ${OPENAL} ${LIBFLAGS} -L. -lhl $(LIBOPENAL)

+ 13 - 1
libs/CMakeLists.txt

@@ -15,8 +15,20 @@ function(set_as_hdll target)
     )
     )
 endfunction()
 endfunction()
 
 
-if (ANDROID)
+if (DOWNLOAD_DEPENDENCIES)
+    set(CMAKE_COMMON_DEP_ARGS
+        -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
+        -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
+        $<$<BOOL:${ANDROID_PLATFORM}>:-DANDROID_PLATFORM=${ANDROID_PLATFORM}>
+        $<$<BOOL:${ANDROID_ABI}>:-DANDROID_ABI=${CMAKE_ANDROID_ARCH_ABI}>
+        $<$<BOOL:${CMAKE_OSX_ARCHITECTURES}>:-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}>
+        $<$<BOOL:${CMAKE_OSX_DEPLOYMENT_TARGET}>:-DCMAKE_OSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET}>
+        -DCMAKE_POSITION_INDEPENDENT_CODE=ON
+        -DCMAKE_MESSAGE_LOG_LEVEL=ERROR
+        -DCMAKE_INSTALL_MESSAGE=LAZY
+    )
     include(ExternalProject)
     include(ExternalProject)
+    include(FetchContent)
 endif()
 endif()
 
 
 if(WIN32)
 if(WIN32)

+ 87 - 21
libs/fmt/CMakeLists.txt

@@ -9,10 +9,8 @@ add_library(fmt.hdll
     ${MIKKTSPACE_INCLUDE_DIR}/mikktspace.c
     ${MIKKTSPACE_INCLUDE_DIR}/mikktspace.c
 )
 )
 
 
-if (WIN32 OR ANDROID)
+if (WIN32)
     set(PNG_INCLUDE_DIRS ${INCLUDES_BASE_DIR}/png)
     set(PNG_INCLUDE_DIRS ${INCLUDES_BASE_DIR}/png)
-    set(VORBIS_INCLUDE_DIR ${INCLUDES_BASE_DIR}/vorbis)
-
     target_sources(fmt.hdll PRIVATE
     target_sources(fmt.hdll PRIVATE
         ${INCLUDES_BASE_DIR}/png/png.c
         ${INCLUDES_BASE_DIR}/png/png.c
         ${INCLUDES_BASE_DIR}/png/pngerror.c
         ${INCLUDES_BASE_DIR}/png/pngerror.c
@@ -28,7 +26,13 @@ if (WIN32 OR ANDROID)
         ${INCLUDES_BASE_DIR}/png/pngwio.c
         ${INCLUDES_BASE_DIR}/png/pngwio.c
         ${INCLUDES_BASE_DIR}/png/pngwrite.c
         ${INCLUDES_BASE_DIR}/png/pngwrite.c
         ${INCLUDES_BASE_DIR}/png/pngwtran.c
         ${INCLUDES_BASE_DIR}/png/pngwtran.c
-        ${INCLUDES_BASE_DIR}/png/pngwutil.c
+        ${INCLUDES_BASE_DIR}/png/pngwutil.c)
+endif()
+
+if (WIN32)
+    set(VORBIS_INCLUDE_DIR ${INCLUDES_BASE_DIR}/vorbis)
+
+    target_sources(fmt.hdll PRIVATE
         ${INCLUDES_BASE_DIR}/vorbis/bitrate.c
         ${INCLUDES_BASE_DIR}/vorbis/bitrate.c
         ${INCLUDES_BASE_DIR}/vorbis/bitwise.c
         ${INCLUDES_BASE_DIR}/vorbis/bitwise.c
         ${INCLUDES_BASE_DIR}/vorbis/block.c
         ${INCLUDES_BASE_DIR}/vorbis/block.c
@@ -52,11 +56,6 @@ if (WIN32 OR ANDROID)
         ${INCLUDES_BASE_DIR}/vorbis/vorbisfile.c
         ${INCLUDES_BASE_DIR}/vorbis/vorbisfile.c
         ${INCLUDES_BASE_DIR}/vorbis/window.c
         ${INCLUDES_BASE_DIR}/vorbis/window.c
     )
     )
-
-    if (ANDROID)
-        # TODO: enable
-        target_compile_definitions(fmt.hdll PRIVATE PNG_ARM_NEON_OPT=0)
-    endif()
 endif()
 endif()
 
 
 if(WIN32)
 if(WIN32)
@@ -134,32 +133,104 @@ if(WIN32)
         ${INCLUDES_BASE_DIR}/zlib/trees.c
         ${INCLUDES_BASE_DIR}/zlib/trees.c
         ${INCLUDES_BASE_DIR}/zlib/zutil.c
         ${INCLUDES_BASE_DIR}/zlib/zutil.c
     )
     )
-elseif(ANDROID)
+elseif(DOWNLOAD_DEPENDENCIES)
     find_package(ZLIB REQUIRED)
     find_package(ZLIB REQUIRED)
 
 
 	ExternalProject_Add(turbojpeg-project
 	ExternalProject_Add(turbojpeg-project
         URL https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/3.1.1/libjpeg-turbo-3.1.1.tar.gz
         URL https://github.com/libjpeg-turbo/libjpeg-turbo/releases/download/3.1.1/libjpeg-turbo-3.1.1.tar.gz
         URL_HASH SHA256=aadc97ea91f6ef078b0ae3a62bba69e008d9a7db19b34e4ac973b19b71b4217c
         URL_HASH SHA256=aadc97ea91f6ef078b0ae3a62bba69e008d9a7db19b34e4ac973b19b71b4217c
         CMAKE_ARGS
         CMAKE_ARGS
-            -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
-            -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-            -DANDROID_PLATFORM=${ANDROID_PLATFORM}
-            -DANDROID_ABI=${CMAKE_ANDROID_ARCH_ABI}
+            ${CMAKE_COMMON_DEP_ARGS}
             -DBUILD_SHARED_LIBS=OFF
             -DBUILD_SHARED_LIBS=OFF
+            -DCMAKE_INSTALL_LIBDIR=lib
         # INSTALL_BYPRODUCTS in CMake 3.26+
         # INSTALL_BYPRODUCTS in CMake 3.26+
-        BUILD_BYPRODUCTS <INSTALL_DIR>/${CMAKE_INSTALL_LIBDIR}/libturbojpeg.a
+        BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libturbojpeg.a
         DOWNLOAD_EXTRACT_TIMESTAMP true
         DOWNLOAD_EXTRACT_TIMESTAMP true
     )
     )
 
 
     ExternalProject_Get_Property(turbojpeg-project INSTALL_DIR)
     ExternalProject_Get_Property(turbojpeg-project INSTALL_DIR)
 
 
     add_library(turbojpeg STATIC IMPORTED)
     add_library(turbojpeg STATIC IMPORTED)
-    set_target_properties(turbojpeg PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libturbojpeg.a)
+    set_target_properties(turbojpeg PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/libturbojpeg.a)
 
 
     set(TurboJPEG_INCLUDE_DIRS ${INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
     set(TurboJPEG_INCLUDE_DIRS ${INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
     set(TurboJPEG_LIBRARIES turbojpeg)
     set(TurboJPEG_LIBRARIES turbojpeg)
 
 
     add_dependencies(turbojpeg turbojpeg-project)
     add_dependencies(turbojpeg turbojpeg-project)
+
+    ExternalProject_Add(libpng
+        URL https://github.com/pnggroup/libpng/archive/refs/tags/v1.6.50.tar.gz
+        URL_HASH SHA256=71158e53cfdf2877bc99bcab33641d78df3f48e6e0daad030afe9cb8c031aa46
+        CMAKE_ARGS
+            ${CMAKE_COMMON_DEP_ARGS}
+            -DPNG_SHARED=OFF
+            -DPNG_TESTS=OFF
+            -DPNG_TOOLS=OFF
+            -DPNG_FRAMEWORK=OFF
+            -DCMAKE_INSTALL_LIBDIR=lib
+        # INSTALL_BYPRODUCTS in CMake 3.26+
+        BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libpng.a
+        DOWNLOAD_EXTRACT_TIMESTAMP true
+    )
+    ExternalProject_Get_Property(libpng INSTALL_DIR)
+
+    add_library(png STATIC IMPORTED)
+    set_target_properties(png PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/lib/libpng.a)
+
+    set(PNG_INCLUDE_DIRS ${INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
+    set(PNG_LIBRARIES png)
+
+    add_dependencies(png libpng)
+
+    ExternalProject_Add(libogg
+        URL https://github.com/xiph/ogg/releases/download/v1.3.6/libogg-1.3.6.tar.gz
+        URL_HASH SHA256=83e6704730683d004d20e21b8f7f55dcb3383cdf84c0daedf30bde175f774638
+        CMAKE_ARGS
+            ${CMAKE_COMMON_DEP_ARGS}
+            -DCMAKE_INSTALL_LIBDIR=lib
+        # INSTALL_BYPRODUCTS in CMake 3.26+
+        BUILD_BYPRODUCTS <INSTALL_DIR>/lib/libogg.a
+        DOWNLOAD_EXTRACT_TIMESTAMP true
+    )
+    ExternalProject_Get_Property(libogg INSTALL_DIR)
+    set(OGG_INSTALL_DIR ${INSTALL_DIR})
+
+    set(OGG_LIBRARY ${OGG_INSTALL_DIR}/lib/libogg.a)
+    set(OGG_INCLUDE_DIR ${OGG_INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
+
+    ExternalProject_Add(libvorbis
+        URL https://github.com/xiph/vorbis/releases/download/v1.3.7/libvorbis-1.3.7.tar.xz
+        URL_HASH SHA256=b33cc4934322bcbf6efcbacf49e3ca01aadbea4114ec9589d1b1e9d20f72954b
+        CMAKE_ARGS
+            ${CMAKE_COMMON_DEP_ARGS}
+            -DOGG_LIBRARY=${OGG_LIBRARY}
+            -DOGG_INCLUDE_DIR=${OGG_INCLUDE_DIR}
+            -DCMAKE_INSTALL_LIBDIR=lib
+            -DCMAKE_POLICY_VERSION_MINIMUM=3.5 # https://github.com/xiph/vorbis/issues/113
+        # INSTALL_BYPRODUCTS in CMake 3.26+
+        BUILD_BYPRODUCTS
+            <INSTALL_DIR>/lib/libvorbis.a
+            <INSTALL_DIR>/lib/libvorbisfile.a
+        DOWNLOAD_EXTRACT_TIMESTAMP true
+    )
+    add_dependencies(libvorbis libogg)
+    ExternalProject_Get_Property(libvorbis INSTALL_DIR)
+    set(VORBIS_INSTALL_DIR ${INSTALL_DIR})
+
+    add_library(ogg STATIC IMPORTED)
+    set_target_properties(ogg PROPERTIES IMPORTED_LOCATION ${OGG_LIBRARY})
+
+    add_library(vorbis STATIC IMPORTED)
+    set_target_properties(vorbis PROPERTIES IMPORTED_LOCATION ${VORBIS_INSTALL_DIR}/lib/libvorbis.a)
+    add_library(vorbisfile STATIC IMPORTED)
+    set_target_properties(vorbisfile PROPERTIES IMPORTED_LOCATION ${VORBIS_INSTALL_DIR}/lib/libvorbisfile.a)
+
+    set(VORBIS_INCLUDE_DIR ${VORBIS_INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR} ${OGG_INCLUDE_DIR})
+    set(OGGVORBIS_LIBRARIES vorbis ogg vorbisfile)
+
+    add_dependencies(vorbisfile libvorbis)
+    add_dependencies(vorbis libvorbis)
+    add_dependencies(ogg libogg)
 else()
 else()
     find_package(ZLIB REQUIRED)
     find_package(ZLIB REQUIRED)
     find_package(PNG REQUIRED)
     find_package(PNG REQUIRED)
@@ -195,11 +266,6 @@ target_link_libraries(fmt.hdll
     ${OGGVORBIS_LIBRARIES}
     ${OGGVORBIS_LIBRARIES}
 )
 )
 
 
-target_compile_definitions(fmt.hdll
-    PRIVATE
-    ${PNG_DEFINITIONS}
-)
-
 install(
 install(
     TARGETS
     TARGETS
         fmt.hdll
         fmt.hdll

+ 23 - 30
libs/openal/CMakeLists.txt

@@ -14,41 +14,39 @@ if(WIN32)
 
 
     if(CMAKE_SIZEOF_VOID_P EQUAL 8)
     if(CMAKE_SIZEOF_VOID_P EQUAL 8)
         find_library(OPENAL_LIBRARY OpenAL32 PATHS ${INCLUDES_BASE_DIR}/openal/libs/Win64)
         find_library(OPENAL_LIBRARY OpenAL32 PATHS ${INCLUDES_BASE_DIR}/openal/libs/Win64)
+        install(FILES ${INCLUDES_BASE_DIR}/openal/bin/Win64/soft_oal.dll TYPE BIN RENAME OpenAL32.dll)
     else()
     else()
         find_library(OPENAL_LIBRARY OpenAL32 PATHS ${INCLUDES_BASE_DIR}/openal/libs/Win32)
         find_library(OPENAL_LIBRARY OpenAL32 PATHS ${INCLUDES_BASE_DIR}/openal/libs/Win32)
+        install(FILES ${INCLUDES_BASE_DIR}/openal/bin/Win32/soft_oal.dll TYPE BIN RENAME OpenAL32.dll)
     endif()
     endif()
 
 
     set(OPENAL_INCLUDE_DIR ${INCLUDES_BASE_DIR}/openal/include)
     set(OPENAL_INCLUDE_DIR ${INCLUDES_BASE_DIR}/openal/include)
-elseif(ANDROID)
-    if (WITH_STATIC_OPENAL)
-        set(OPENAL_LIBTYPE STATIC)
-        set(OPENAL_LIBSUFFIX ${CMAKE_STATIC_LIBRARY_SUFFIX})
-    else()
-        set(OPENAL_LIBTYPE SHARED)
-        set(OPENAL_LIBSUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
-    endif()
-	ExternalProject_Add(openal-soft
+    add_library(OpenAL::OpenAL SHARED IMPORTED)
+    set_target_properties(OpenAL::OpenAL PROPERTIES
+        IMPORTED_IMPLIB ${OPENAL_LIBRARY}
+        INTERFACE_INCLUDE_DIRECTORIES ${OPENAL_INCLUDE_DIR}
+    )
+elseif(DOWNLOAD_DEPENDENCIES)
+	FetchContent_Declare(openal-soft
         URL https://github.com/kcat/openal-soft/archive/refs/tags/1.24.3.tar.gz
         URL https://github.com/kcat/openal-soft/archive/refs/tags/1.24.3.tar.gz
         URL_HASH SHA256=7e1fecdeb45e7f78722b776c5cf30bd33934b961d7fd2a11e0494e064cc631ce
         URL_HASH SHA256=7e1fecdeb45e7f78722b776c5cf30bd33934b961d7fd2a11e0494e064cc631ce
-        CMAKE_ARGS
-            -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
-            -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-            -DANDROID_PLATFORM=${ANDROID_PLATFORM}
-            -DANDROID_ABI=${CMAKE_ANDROID_ARCH_ABI}
-            -DLIBTYPE=${OPENAL_LIBTYPE}
-        # INSTALL_BYPRODUCTS in CMake 3.26+
-        BUILD_BYPRODUCTS <INSTALL_DIR>/${CMAKE_INSTALL_LIBDIR}/libopenal${OPENAL_LIBSUFFIX}
         DOWNLOAD_EXTRACT_TIMESTAMP true
         DOWNLOAD_EXTRACT_TIMESTAMP true
+        EXCLUDE_FROM_ALL
     )
     )
-    ExternalProject_Get_Property(openal-soft INSTALL_DIR)
-
-    add_library(openal SHARED IMPORTED)
-    set_target_properties(openal PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libopenal${OPENAL_LIBSUFFIX})
 
 
-    set(OPENAL_INCLUDE_DIR ${INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
-    set(OPENAL_LIBRARY openal)
+    set(ALSOFT_EXAMPLES OFF CACHE INTERNAL "")
+    set(ALSOFT_UTILS OFF CACHE INTERNAL "")
+    if (WITH_STATIC_OPENAL)
+        set(LIBTYPE STATIC)
+    endif()
 
 
-    add_dependencies(openal openal-soft)
+    FetchContent_MakeAvailable(openal-soft)
+    install(
+    TARGETS
+        OpenAL
+    LIBRARY
+    RUNTIME
+)
 else()
 else()
     find_package(OpenAL REQUIRED)
     find_package(OpenAL REQUIRED)
 endif()
 endif()
@@ -57,12 +55,7 @@ set_as_hdll(openal)
 
 
 target_link_libraries(openal.hdll
 target_link_libraries(openal.hdll
     libhl
     libhl
-    ${OPENAL_LIBRARY}
-)
-
-target_include_directories(openal.hdll
-    PRIVATE
-    ${OPENAL_INCLUDE_DIR}
+    OpenAL::OpenAL
 )
 )
 
 
 install(
 install(

+ 22 - 22
libs/sdl/CMakeLists.txt

@@ -3,31 +3,29 @@ add_library(sdl.hdll
     gl.c
     gl.c
 )
 )
 
 
-if (ANDROID)
-	ExternalProject_Add(sdl2-project
+if ((NOT WIN32) AND DOWNLOAD_DEPENDENCIES)
+    FetchContent_Declare(
+        SDL2
         URL https://github.com/libsdl-org/SDL/releases/download/release-2.32.8/SDL2-2.32.8.tar.gz
         URL https://github.com/libsdl-org/SDL/releases/download/release-2.32.8/SDL2-2.32.8.tar.gz
         URL_HASH SHA256=0ca83e9c9b31e18288c7ec811108e58bac1f1bb5ec6577ad386830eac51c787e
         URL_HASH SHA256=0ca83e9c9b31e18288c7ec811108e58bac1f1bb5ec6577ad386830eac51c787e
-        CMAKE_ARGS
-            -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
-            -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-            -DANDROID_PLATFORM=${ANDROID_PLATFORM}
-            -DANDROID_ABI=${CMAKE_ANDROID_ARCH_ABI}
-        # INSTALL_BYPRODUCTS in CMake 3.26+
-        BUILD_BYPRODUCTS <INSTALL_DIR>/${CMAKE_INSTALL_LIBDIR}/libSDL2.so
         DOWNLOAD_EXTRACT_TIMESTAMP true
         DOWNLOAD_EXTRACT_TIMESTAMP true
+        EXCLUDE_FROM_ALL
     )
     )
-    ExternalProject_Get_Property(sdl2-project INSTALL_DIR)
-
-    add_library(sdl2 SHARED IMPORTED)
-    set_target_properties(sdl2 PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libSDL2.so)
-
-    set(SDL2_INCLUDE_DIR ${INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR}/SDL2)
-    set(SDL2_LIBRARY sdl2)
-
-    add_dependencies(sdl2 sdl2-project)
+    set(SDL_TEST OFF CACHE INTERNAL "")
+    if (ANDROID)
+        set(SDL_SHARED ON CACHE INTERNAL "")
+        set(SDL_STATIC OFF CACHE INTERNAL "")
+    else()
+        set(SDL_STATIC ON CACHE INTERNAL "")
+        set(SDL_SHARED OFF CACHE INTERNAL "")
+        if (BUILD_SHARED_LIBS)
+            set(SDL_STATIC_PIC ON CACHE INTERNAL "")
+        endif()
+    endif()
+    FetchContent_MakeAvailable(SDL2)
 else()
 else()
     if(WIN32)
     if(WIN32)
-        set(SDL2_PATH ${INCLUDES_BASE_DIR}/sdl)
+        set(SDL2_DIR ${INCLUDES_BASE_DIR}/sdl/cmake)
     endif()
     endif()
 
 
     find_package(SDL2 REQUIRED)
     find_package(SDL2 REQUIRED)
@@ -36,13 +34,15 @@ endif()
 set_as_hdll(sdl)
 set_as_hdll(sdl)
 target_include_directories(sdl.hdll
 target_include_directories(sdl.hdll
     PRIVATE
     PRIVATE
-    ${SDL2_INCLUDE_DIR}
     ${INCLUDES_BASE_DIR}/gl
     ${INCLUDES_BASE_DIR}/gl
 )
 )
 target_link_libraries(sdl.hdll
 target_link_libraries(sdl.hdll
     libhl
     libhl
-    ${SDL2_LIBRARY}
+    SDL2::SDL2
 )
 )
+if(APPLE)
+    target_compile_definitions(sdl.hdll PRIVATE GL_SILENCE_DEPRECATION)
+endif()
 
 
 if(WIN32)
 if(WIN32)
     target_link_libraries(sdl.hdll
     target_link_libraries(sdl.hdll
@@ -52,7 +52,7 @@ if(WIN32)
 endif()
 endif()
 
 
 if(ANDROID)
 if(ANDROID)
-    target_link_libraries(sdl.hdll m OpenSLES dl log android GLESv1_CM GLESv2 EGL GLESv3)
+    target_link_libraries(sdl.hdll GLESv3)
 endif()
 endif()
 
 
 if((APPLE OR UNIX) AND NOT ANDROID)
 if((APPLE OR UNIX) AND NOT ANDROID)

+ 2 - 2
libs/sdl/gl.c

@@ -8,7 +8,7 @@
 #	include <OpenGLES/ES3/gl.h>
 #	include <OpenGLES/ES3/gl.h>
 #	define HL_GLES
 #	define HL_GLES
 #elif defined(HL_MAC)
 #elif defined(HL_MAC)
-#	include <SDL2/SDL.h>
+#	include <SDL.h>
 #	include <OpenGL/gl3.h>
 #	include <OpenGL/gl3.h>
 #	define glBindImageTexture(...) hl_error("Not supported on OSX")
 #	define glBindImageTexture(...) hl_error("Not supported on OSX")
 #	define glDispatchCompute(...) hl_error("Not supported on OSX")
 #	define glDispatchCompute(...) hl_error("Not supported on OSX")
@@ -29,7 +29,7 @@
 #	include <GLES3/gl3ext.h>
 #	include <GLES3/gl3ext.h>
 #	define HL_GLES
 #	define HL_GLES
 #else
 #else
-#	include <SDL2/SDL.h>
+#	include <SDL.h>
 #	include <GL/glcorearb.h>
 #	include <GL/glcorearb.h>
 #endif
 #endif
 
 

+ 2 - 5
libs/sdl/sdl.c

@@ -4,13 +4,10 @@
 #include "hlsystem.h"
 #include "hlsystem.h"
 
 
 #include <locale.h>
 #include <locale.h>
+#include <SDL.h>
 
 
-#if defined(_WIN32) || defined(__ANDROID__) || defined(HL_IOS) || defined(HL_TVOS)
-#	include <SDL.h>
-#	include <SDL_vulkan.h>
+#if defined(HL_WIN) || defined(HL_IOS) || defined(HL_TVOS)
 #	include <SDL_syswm.h>
 #	include <SDL_syswm.h>
-#else
-#	include <SDL2/SDL.h>
 #endif
 #endif
 
 
 #if defined (HL_IOS) || defined(HL_TVOS)
 #if defined (HL_IOS) || defined(HL_TVOS)

+ 10 - 19
libs/ssl/CMakeLists.txt

@@ -121,29 +121,20 @@ if (WIN32)
         PRIVATE
         PRIVATE
         MBEDTLS_USER_CONFIG_FILE="mbedtls_user_config.h"
         MBEDTLS_USER_CONFIG_FILE="mbedtls_user_config.h"
     )
     )
-elseif(ANDROID)
-	ExternalProject_Add(mbedtls-project
+elseif(DOWNLOAD_DEPENDENCIES)
+	FetchContent_Declare(mbedtls-project
         URL https://github.com/Mbed-TLS/mbedtls/releases/download/mbedtls-3.6.4/mbedtls-3.6.4.tar.bz2
         URL https://github.com/Mbed-TLS/mbedtls/releases/download/mbedtls-3.6.4/mbedtls-3.6.4.tar.bz2
         URL_HASH SHA256=ec35b18a6c593cf98c3e30db8b98ff93e8940a8c4e690e66b41dfc011d678110
         URL_HASH SHA256=ec35b18a6c593cf98c3e30db8b98ff93e8940a8c4e690e66b41dfc011d678110
-        CMAKE_ARGS
-            -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
-            -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-            -DANDROID_PLATFORM=${ANDROID_PLATFORM}
-            -DANDROID_ABI=${CMAKE_ANDROID_ARCH_ABI}
-            -DBUILD_SHARED_LIBS=OFF
-        # INSTALL_BYPRODUCTS in CMake 3.26+
-        BUILD_BYPRODUCTS <INSTALL_DIR>/${CMAKE_INSTALL_LIBDIR}/libmbedtls.a
         DOWNLOAD_EXTRACT_TIMESTAMP true
         DOWNLOAD_EXTRACT_TIMESTAMP true
+        EXCLUDE_FROM_ALL
     )
     )
-    ExternalProject_Get_Property(mbedtls-project INSTALL_DIR)
-
-    add_library(mbedtls STATIC IMPORTED)
-    set_target_properties(mbedtls PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libmbedtls.a)
-
-    set(MBEDTLS_INCLUDE_DIRS ${INSTALL_DIR}/include)
-    set(MBEDTLS_LIBRARIES mbedtls)
-
-    add_dependencies(mbedtls mbedtls-project)
+    set(_OLD_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
+    set(BUILD_SHARED_LIBS OFF)
+    set(ENABLE_PROGRAMS OFF CACHE INTERNAL "")
+    set(ENABLE_TESTING OFF CACHE INTERNAL "")
+    FetchContent_MakeAvailable(mbedtls-project)
+    set(BUILD_SHARED_LIBS ${_OLD_BUILD_SHARED_LIBS})
+    set(MBEDTLS_LIBRARIES MbedTLS::mbedtls MbedTLS::mbedx509 MbedTLS::mbedcrypto)
 else()
 else()
     find_package(MbedTLS REQUIRED)
     find_package(MbedTLS REQUIRED)
 endif()
 endif()

+ 11 - 25
libs/uv/CMakeLists.txt

@@ -37,30 +37,20 @@ if(WIN32)
             ${INCLUDES_BASE_DIR}/libuv/src/win/winapi.c
             ${INCLUDES_BASE_DIR}/libuv/src/win/winapi.c
             ${INCLUDES_BASE_DIR}/libuv/src/win/winsock.c
             ${INCLUDES_BASE_DIR}/libuv/src/win/winsock.c
     )
     )
-elseif(ANDROID)
-	ExternalProject_Add(libuv-project
+elseif(DOWNLOAD_DEPENDENCIES)
+	FetchContent_Declare(libuv-project
         URL https://github.com/libuv/libuv/archive/refs/tags/v1.51.0.tar.gz
         URL https://github.com/libuv/libuv/archive/refs/tags/v1.51.0.tar.gz
         URL_HASH SHA256=27e55cf7083913bfb6826ca78cde9de7647cded648d35f24163f2d31bb9f51cd
         URL_HASH SHA256=27e55cf7083913bfb6826ca78cde9de7647cded648d35f24163f2d31bb9f51cd
-        CMAKE_ARGS
-            -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
-            -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
-            -DANDROID_PLATFORM=${ANDROID_PLATFORM}
-            -DANDROID_ABI=${CMAKE_ANDROID_ARCH_ABI}
-            -DLIBUV_BUILD_SHARED=OFF
-            -DLIBUV_BUILD_TESTS=OFF
-        # INSTALL_BYPRODUCTS in CMake 3.26+
-        BUILD_BYPRODUCTS <INSTALL_DIR>/${CMAKE_INSTALL_LIBDIR}/libuv.a
         DOWNLOAD_EXTRACT_TIMESTAMP true
         DOWNLOAD_EXTRACT_TIMESTAMP true
+        EXCLUDE_FROM_ALL
     )
     )
-    ExternalProject_Get_Property(libuv-project INSTALL_DIR)
-
-    add_library(libuv STATIC IMPORTED)
-    set_target_properties(libuv PROPERTIES IMPORTED_LOCATION ${INSTALL_DIR}/${CMAKE_INSTALL_LIBDIR}/libuv.a)
-
-    set(LibUV_INCLUDE_DIRS ${INSTALL_DIR}/${CMAKE_INSTALL_INCLUDEDIR})
-    set(LibUV_LIBRARIES libuv)
-
-    add_dependencies(libuv libuv-project)
+    set(_OLD_BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS})
+    set(BUILD_SHARED_LIBS OFF)
+    set(LIBUV_BUILD_SHARED OFF CACHE INTERNAL "")
+    set(LIBUV_BUILD_TESTS OFF CACHE INTERNAL "")
+    FetchContent_MakeAvailable(libuv-project)
+    set(BUILD_SHARED_LIBS ${_OLD_BUILD_SHARED_LIBS})
+    add_library(LibUV::LibUV ALIAS uv_a)
 else()
 else()
     find_package(LibUV)
     find_package(LibUV)
 endif()
 endif()
@@ -85,12 +75,8 @@ if(WIN32)
         BUILDING_UV_SHARED
         BUILDING_UV_SHARED
     )
     )
 else()
 else()
-    target_include_directories(uv.hdll
-        PRIVATE
-        ${LibUV_INCLUDE_DIRS}
-    )
     target_link_libraries(uv.hdll
     target_link_libraries(uv.hdll
-        ${LibUV_LIBRARIES}
+        LibUV::LibUV
     )
     )
 endif()
 endif()
 
 

+ 0 - 177
other/cmake/FindSDL2.cmake

@@ -1,177 +0,0 @@
-# This module defines
-# SDL2_LIBRARY, the name of the library to link against
-# SDL2_FOUND, if false, do not try to link to SDL2
-# SDL2_INCLUDE_DIR, where to find SDL.h
-#
-# This module responds to the the flag:
-# SDL2_BUILDING_LIBRARY
-# If this is defined, then no SDL2main will be linked in because
-# only applications need main().
-# Otherwise, it is assumed you are building an application and this
-# module will attempt to locate and set the the proper link flags
-# as part of the returned SDL2_LIBRARY variable.
-#
-# Don't forget to include SDLmain.h and SDLmain.m your project for the
-# OS X framework based version. (Other versions link to -lSDL2main which
-# this module will try to find on your behalf.) Also for OS X, this
-# module will automatically add the -framework Cocoa on your behalf.
-#
-#
-# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration
-# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library
-# (SDL2.dll, libsdl2.so, SDL2.framework, etc).
-# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again.
-# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value
-# as appropriate. These values are used to generate the final SDL2_LIBRARY
-# variable, but when these values are unset, SDL2_LIBRARY does not get created.
-#
-#
-# $SDL2DIR is an environment variable that would
-# correspond to the ./configure --prefix=$SDL2DIR
-# used in building SDL2.
-# l.e.galup  9-20-02
-#
-# Modified by Eric Wing.
-# Added code to assist with automated building by using environmental variables
-# and providing a more controlled/consistent search behavior.
-# Added new modifications to recognize OS X frameworks and
-# additional Unix paths (FreeBSD, etc).
-# Also corrected the header search path to follow "proper" SDL guidelines.
-# Added a search for SDL2main which is needed by some platforms.
-# Added a search for threads which is needed by some platforms.
-# Added needed compile switches for MinGW.
-#
-# On OSX, this will prefer the Framework version (if found) over others.
-# People will have to manually change the cache values of
-# SDL2_LIBRARY to override this selection or set the CMake environment
-# CMAKE_INCLUDE_PATH to modify the search paths.
-#
-# Note that the header path has changed from SDL2/SDL.h to just SDL.h
-# This needed to change because "proper" SDL convention
-# is #include "SDL.h", not <SDL2/SDL.h>. This is done for portability
-# reasons because not all systems place things in SDL2/ (see FreeBSD).
-
-#=============================================================================
-# Copyright 2003-2009 Kitware, Inc.
-#
-# Distributed under the OSI-approved BSD License (the "License");
-# see accompanying file Copyright.txt for details.
-#
-# This software is distributed WITHOUT ANY WARRANTY; without even the
-# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the License for more information.
-#=============================================================================
-# (To distribute this file outside of CMake, substitute the full
-#  License text for the above reference.)
-
-SET(SDL2_SEARCH_PATHS
-	~/Library/Frameworks
-	/Library/Frameworks
-	/usr/local
-	/usr
-	/sw # Fink
-	/opt/local # DarwinPorts
-	/opt/csw # Blastwave
-	/opt
-	${SDL2_PATH}
-)
-
-if (APPLE)
-	FIND_PATH(SDL2_INCLUDE_DIR SDL2/SDL.h
-		HINTS
-		$ENV{SDL2DIR}
-		PATH_SUFFIXES include/SDL2 include
-		PATHS ${SDL2_SEARCH_PATHS}
-	)
-else()
-	FIND_PATH(SDL2_INCLUDE_DIR SDL.h
-		HINTS
-		$ENV{SDL2DIR}
-		PATH_SUFFIXES include/SDL2 include
-		PATHS ${SDL2_SEARCH_PATHS}
-	)
-endif()
-
-if(CMAKE_SIZEOF_VOID_P EQUAL 8)
-	set(PATH_SUFFIXES lib64 lib/x64 lib)
-else()
-	set(PATH_SUFFIXES lib/x86 lib)
-endif()
-
-FIND_LIBRARY(SDL2_LIBRARY_TEMP
-	NAMES SDL2
-	HINTS
-	$ENV{SDL2DIR}
-	PATH_SUFFIXES ${PATH_SUFFIXES}
-	PATHS ${SDL2_SEARCH_PATHS}
-)
-
-IF(NOT SDL2_BUILDING_LIBRARY)
-	IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
-		# Non-OS X framework versions expect you to also dynamically link to
-		# SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms
-		# seem to provide SDL2main for compatibility even though they don't
-		# necessarily need it.
-		FIND_LIBRARY(SDL2MAIN_LIBRARY
-			NAMES SDL2main
-			HINTS
-			$ENV{SDL2DIR}
-			PATH_SUFFIXES ${PATH_SUFFIXES}
-			PATHS ${SDL2_SEARCH_PATHS}
-		)
-	ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
-ENDIF(NOT SDL2_BUILDING_LIBRARY)
-
-# SDL2 may require threads on your system.
-# The Apple build may not need an explicit flag because one of the
-# frameworks may already provide it.
-# But for non-OSX systems, I will use the CMake Threads package.
-IF(NOT APPLE)
-	FIND_PACKAGE(Threads)
-ENDIF(NOT APPLE)
-
-# MinGW needs an additional link flag, -mwindows
-# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -mwindows
-IF(MINGW)
-	SET(MINGW32_LIBRARY mingw32 "-mwindows" CACHE STRING "mwindows for MinGW")
-ENDIF(MINGW)
-
-IF(SDL2_LIBRARY_TEMP)
-	# For SDL2main
-	IF(NOT SDL2_BUILDING_LIBRARY)
-		IF(SDL2MAIN_LIBRARY)
-			SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP})
-		ENDIF(SDL2MAIN_LIBRARY)
-	ENDIF(NOT SDL2_BUILDING_LIBRARY)
-
-	# For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa.
-	# CMake doesn't display the -framework Cocoa string in the UI even
-	# though it actually is there if I modify a pre-used variable.
-	# I think it has something to do with the CACHE STRING.
-	# So I use a temporary variable until the end so I can set the
-	# "real" variable in one-shot.
-	IF(APPLE)
-		SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa")
-	ENDIF(APPLE)
-
-	# For threads, as mentioned Apple doesn't need this.
-	# In fact, there seems to be a problem if I used the Threads package
-	# and try using this line, so I'm just skipping it entirely for OS X.
-	IF(NOT APPLE)
-		SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT})
-	ENDIF(NOT APPLE)
-
-	# For MinGW library
-	IF(MINGW)
-		SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP})
-	ENDIF(MINGW)
-
-	# Set the final string here so the GUI reflects the final state.
-	SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found")
-	# Set the temp variable to INTERNAL so it is not seen in the CMake GUI
-	SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "")
-ENDIF(SDL2_LIBRARY_TEMP)
-
-INCLUDE(FindPackageHandleStandardArgs)
-
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR)