quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

INSTALL.md (25943B)


      1 <!--
      2 Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
      3 
      4 SPDX-License-Identifier: curl
      5 -->
      6 
      7 # How to install curl and libcurl
      8 
      9 ## Installing Binary Packages
     10 
     11 Lots of people download binary distributions of curl and libcurl. This
     12 document does not describe how to install curl or libcurl using such a binary
     13 package. This document describes how to compile, build and install curl and
     14 libcurl from [source code](https://curl.se/download.html).
     15 
     16 ## Building using vcpkg
     17 
     18 You can download and install curl and libcurl using the [vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager:
     19 
     20     git clone https://github.com/Microsoft/vcpkg.git
     21     cd vcpkg
     22     ./bootstrap-vcpkg.sh
     23     ./vcpkg integrate install
     24     vcpkg install curl[tool]
     25 
     26 The curl port in vcpkg is kept up to date by Microsoft team members and
     27 community contributors. If the version is out of date, please [create an issue
     28 or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
     29 
     30 ## Building from git
     31 
     32 If you get your code off a git repository instead of a release tarball, see
     33 the [GIT-INFO.md](https://github.com/curl/curl/blob/master/GIT-INFO.md) file in the root directory for specific instructions on how
     34 to proceed.
     35 
     36 # Unix
     37 
     38 A normal Unix installation is made in three or four steps (after you have
     39 unpacked the source archive):
     40 
     41     ./configure --with-openssl [--with-gnutls --with-wolfssl]
     42     make
     43     make test (optional)
     44     make install
     45 
     46 (Adjust the configure line accordingly to use the TLS library you want.)
     47 
     48 You probably need to be root when doing the last command.
     49 
     50 Get a full listing of all available configure options by invoking it like:
     51 
     52     ./configure --help
     53 
     54 If you want to install curl in a different file hierarchy than `/usr/local`,
     55 specify that when running configure:
     56 
     57     ./configure --prefix=/path/to/curl/tree
     58 
     59 If you have write permission in that directory, you can do 'make install'
     60 without being root. An example of this would be to make a local install in
     61 your own home directory:
     62 
     63     ./configure --prefix=$HOME
     64     make
     65     make install
     66 
     67 The configure script always tries to find a working SSL library unless
     68 explicitly told not to. If you have OpenSSL installed in the default search
     69 path for your compiler/linker, you do not need to do anything special. If you
     70 have OpenSSL installed in `/usr/local/ssl`, you can run configure like:
     71 
     72     ./configure --with-openssl
     73 
     74 If you have OpenSSL installed somewhere else (for example, `/opt/OpenSSL`) and
     75 you have pkg-config installed, set the pkg-config path first, like this:
     76 
     77     env PKG_CONFIG_PATH=/opt/OpenSSL/lib/pkgconfig ./configure --with-openssl
     78 
     79 Without pkg-config installed, use this:
     80 
     81     ./configure --with-openssl=/opt/OpenSSL
     82 
     83 If you insist on forcing a build without SSL support, you can run configure
     84 like this:
     85 
     86     ./configure --without-ssl
     87 
     88 If you have OpenSSL installed, but with the libraries in one place and the
     89 header files somewhere else, you have to set the `LDFLAGS` and `CPPFLAGS`
     90 environment variables prior to running configure. Something like this should
     91 work:
     92 
     93     CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" ./configure
     94 
     95 If you have shared SSL libs installed in a directory where your runtime
     96 linker does not find them (which usually causes configure failures), you can
     97 provide this option to gcc to set a hard-coded path to the runtime linker:
     98 
     99     LDFLAGS=-Wl,-R/usr/local/ssl/lib ./configure --with-openssl
    100 
    101 ## Static builds
    102 
    103 To force a static library compile, disable the shared library creation by
    104 running configure like:
    105 
    106     ./configure --disable-shared
    107 
    108 The configure script is primarily done to work with shared/dynamic third party
    109 dependencies. When linking with shared libraries, the dependency "chain" is
    110 handled automatically by the library loader - on all modern systems.
    111 
    112 If you instead link with a static library, you need to provide all the
    113 dependency libraries already at the link command line.
    114 
    115 Figuring out all the dependency libraries for a given library is hard, as it
    116 might involve figuring out the dependencies of the dependencies and they vary
    117 between platforms and change between versions.
    118 
    119 When using static dependencies, the build scripts mostly assume that you, the
    120 user, provide all the necessary additional dependency libraries as additional
    121 arguments in the build. With configure, by setting `LIBS` or `LDFLAGS` on the
    122 command line.
    123 
    124 Building statically is not for the faint of heart.
    125 
    126 ## Debug
    127 
    128 If you are a curl developer and use gcc, you might want to enable more debug
    129 options with the `--enable-debug` option.
    130 
    131 curl can be built to use a whole range of libraries to provide various useful
    132 services, and configure tries to auto-detect a decent default. If you want to
    133 alter it, you can select how to deal with each individual library.
    134 
    135 ## Select TLS backend
    136 
    137 These options are provided to select the TLS backend to use.
    138 
    139  - AmiSSL: `--with-amissl`
    140  - GnuTLS: `--with-gnutls`.
    141  - mbedTLS: `--with-mbedtls`
    142  - OpenSSL: `--with-openssl` (also for BoringSSL, AWS-LC, LibreSSL, and quictls)
    143  - rustls: `--with-rustls`
    144  - Schannel: `--with-schannel`
    145  - wolfSSL: `--with-wolfssl`
    146 
    147 You can build curl with *multiple* TLS backends at your choice, but some TLS
    148 backends cannot be combined: if you build with an OpenSSL fork (or wolfSSL),
    149 you cannot add another OpenSSL fork (or wolfSSL) simply because they have
    150 conflicting identical symbol names.
    151 
    152 When you build with multiple TLS backends, you can select the active one at
    153 runtime when curl starts up.
    154 
    155 ## MultiSSL and HTTP/3
    156 
    157 HTTP/3 needs QUIC and QUIC needs TLS. Building libcurl with HTTP/3 and QUIC
    158 support is not compatible with the MultiSSL feature: they are mutually
    159 exclusive. If you need MultiSSL in your build, you cannot have HTTP/3 support
    160 and vice versa.
    161 
    162 libcurl can only use a single TLS library with QUIC and that *same* TLS
    163 library needs to be used for the other TLS using protocols.
    164 
    165 ## Configure finding libs in wrong directory
    166 
    167 When the configure script checks for third-party libraries, it adds those
    168 directories to the `LDFLAGS` variable and then tries linking to see if it
    169 works. When successful, the found directory is kept in the `LDFLAGS` variable
    170 when the script continues to execute and do more tests and possibly check for
    171 more libraries.
    172 
    173 This can make subsequent checks for libraries wrongly detect another
    174 installation in a directory that was previously added to `LDFLAGS` by another
    175 library check.
    176 
    177 # Windows
    178 
    179 Building for Windows XP is required as a minimum.
    180 
    181 You can build curl with:
    182 
    183 - Microsoft Visual Studio 2008 v9.0 or later (`_MSC_VER >= 1500`)
    184 - MinGW-w64
    185 
    186 ## Building Windows DLLs and C runtime (CRT) linkage issues
    187 
    188  As a general rule, building a DLL with static CRT linkage is highly
    189  discouraged, and intermixing CRTs in the same app is something to avoid at
    190  any cost.
    191 
    192  Reading and comprehending Microsoft Knowledge Base articles KB94248 and
    193  KB140584 is a must for any Windows developer. Especially important is full
    194  understanding if you are not going to follow the advice given above.
    195 
    196  - [How To Use the C Runtime](https://support.microsoft.com/help/94248/how-to-use-the-c-run-time)
    197  - [Runtime Library Compiler Options](https://docs.microsoft.com/cpp/build/reference/md-mt-ld-use-run-time-library)
    198  - [Potential Errors Passing CRT Objects Across DLL Boundaries](https://docs.microsoft.com/cpp/c-runtime-library/potential-errors-passing-crt-objects-across-dll-boundaries)
    199 
    200 If your app is misbehaving in some strange way, or it is suffering from memory
    201 corruption, before asking for further help, please try first to rebuild every
    202 single library your app uses as well as your app using the debug
    203 multi-threaded dynamic C runtime.
    204 
    205  If you get linkage errors read section 5.7 of the FAQ document.
    206 
    207 ## Cygwin
    208 
    209 Almost identical to the Unix installation. Essentially run the configure script in the
    210 curl source tree root with `sh configure`, then run `make`.
    211 
    212 To expand on building with `cygwin` first ensure it is in your path, and there are no
    213 conflicting tools (*i.e. Chocolatey with sed package*). If so move `cygwin` ahead of any items
    214 in your path that would conflict with `cygwin` commands, making sure you have the `sh`
    215 executable in `/bin/` or you see the configure fail toward the end.
    216 
    217 Download the setup installer from
    218 [`cygwin`](https://cygwin.com/) to begin. Additional `cygwin`
    219 packages are needed for the install. For more on installing packages visit
    220 [`cygwin setup`](https://www.cygwin.com/faq/faq.html#faq.setup.cli).
    221 
    222 Either run setup-x86_64.exe, then search and select packages individually, or try:
    223 
    224     setup-x86_64.exe -P binutils -P gcc-core -P libpsl-devel -P libtool -P perl -P make
    225 
    226 If the latter, matching packages should appear in the install rows (*is fickle though*) after selecting
    227 the download site i.e. `https://mirrors.kernel.org`. In either case, follow the GUI prompts
    228 until you reach the "Select Packages" window; then select packages, click next, and finish
    229 the `cygwin` package installation.
    230 
    231 Download the latest version of the `cygwin` packages required (*and suggested*) for a successful install:
    232 
    233 <details>
    234     <summary>Package List</summary>
    235 
    236 ```
    237  binutil - required
    238  gcc-core - required
    239  libpsl-devel - required
    240  libtool - required
    241  perl - required
    242  make - required
    243  - NOTE - if there is an error regarding make, open the cygwin terminal, and run:
    244    ln -s /usr/bin/make /usr/bin/gmake
    245 ```
    246 
    247 </details>
    248 
    249 Once all the packages have been installed, begin the process of installing curl from the source code:
    250 
    251  <details>
    252      <summary>configure_options</summary>
    253 
    254 ```
    255     --with-gnutls
    256     --with-mbedtls
    257     --with-openssl (also works for OpenSSL forks)
    258     --with-rustls
    259     --with-wolfssl
    260     --without-ssl
    261 ```
    262 
    263  </details>
    264 
    265  1. `sh configure <configure_options>`
    266  2. `make`
    267 
    268 If any error occurs during curl installation, try:
    269  - reinstalling the required `cygwin` packages from the list above
    270  - temporarily move `cygwin` to the top of your path
    271  - install all of the suggested `cygwin` packages
    272 
    273 ## MS-DOS
    274 
    275 You can use either autotools or cmake:
    276 
    277     ./configure \
    278       CC=/path/to/djgpp/bin/i586-pc-msdosdjgpp-gcc \
    279       AR=/path/to/djgpp/bin/i586-pc-msdosdjgpp-ar \
    280       RANLIB=/path/to/djgpp/bin/i586-pc-msdosdjgpp-ranlib \
    281       WATT_ROOT=/path/to/djgpp/net/watt \
    282       --host=i586-pc-msdosdjgpp \
    283       --with-openssl=/path/to/djgpp \
    284       --with-zlib=/path/to/djgpp \
    285       --without-libpsl \
    286       --disable-shared
    287 
    288     cmake . \
    289       -DCMAKE_SYSTEM_NAME=DOS \
    290       -DCMAKE_C_COMPILER_TARGET=i586-pc-msdosdjgpp \
    291       -DCMAKE_C_COMPILER=/path/to/djgpp/bin/i586-pc-msdosdjgpp-gcc \
    292       -DWATT_ROOT=/path/to/djgpp/net/watt \
    293       -DOPENSSL_INCLUDE_DIR=/path/to/djgpp/include \
    294       -DOPENSSL_SSL_LIBRARY=/path/to/djgpp/lib/libssl.a \
    295       -DOPENSSL_CRYPTO_LIBRARY=/path/to/djgpp/lib/libcrypto.a \
    296       -DZLIB_INCLUDE_DIR=/path/to/djgpp/include \
    297       -DZLIB_LIBRARY=/path/to/djgpp/lib/libz.a \
    298       -DCURL_USE_LIBPSL=OFF
    299 
    300 Notes:
    301 
    302  - Requires DJGPP 2.04 or upper.
    303 
    304  - Compile Watt-32 (and OpenSSL) with the same version of DJGPP. Otherwise
    305    things go wrong because things like FS-extensions and `errno` values have
    306    been changed between releases.
    307 
    308 ## AmigaOS
    309 
    310 You can use either autotools or cmake:
    311 
    312     ./configure \
    313       CC=/opt/amiga/bin/m68k-amigaos-gcc \
    314       AR=/opt/amiga/bin/m68k-amigaos-ar \
    315       RANLIB=/opt/amiga/bin/m68k-amigaos-ranlib \
    316       --host=m68k-amigaos \
    317       --with-amissl \
    318       CFLAGS='-O0 -msoft-float -mcrt=clib2' \
    319       CPPFLAGS=-I/path/to/AmiSSL/Developer/include \
    320       LDFLAGS=-L/path/to/AmiSSL/Developer/lib/AmigaOS3 \
    321       LIBS='-lnet -lm -latomic' \
    322       --without-libpsl \
    323       --disable-shared
    324 
    325     cmake . \
    326       -DAMIGA=1 \
    327       -DCMAKE_SYSTEM_NAME=Generic \
    328       -DCMAKE_C_COMPILER_TARGET=m68k-unknown-amigaos \
    329       -DCMAKE_C_COMPILER=/opt/amiga/bin/m68k-amigaos-gcc \
    330       -DCMAKE_C_FLAGS='-O0 -msoft-float -mcrt=clib2' \
    331       -DAMISSL_INCLUDE_DIR=/path/to/AmiSSL/Developer/include \
    332       -DAMISSL_STUBS_LIBRARY=/path/to/AmiSSL/Developer/lib/AmigaOS3/libamisslstubs.a \
    333       -DAMISSL_AUTO_LIBRARY=/path/to/AmiSSL/Developer/lib/AmigaOS3/libamisslauto.a \
    334       -DCURL_USE_LIBPSL=OFF
    335 
    336 ## Disabling Specific Protocols in Windows builds
    337 
    338 The configure utility, unfortunately, is not available for the Windows
    339 environment, therefore, you cannot use the various disable-protocol options of
    340 the configure utility on this platform.
    341 
    342 You can use specific defines to disable specific protocols and features. See
    343 [CURL-DISABLE](https://github.com/curl/curl/blob/master/docs/CURL-DISABLE.md)
    344 for the full list.
    345 
    346 If you want to set any of these defines you have the following options:
    347 
    348  - Modify `lib/config-win32.h`
    349  - Modify `lib/curl_setup.h`
    350  - Modify `winbuild/Makefile.vc`
    351  - Modify the "Preprocessor Definitions" in the libcurl project
    352 
    353 Note: The pre-processor settings can be found using the Visual Studio IDE
    354 under "Project -> Properties -> Configuration Properties -> C/C++ ->
    355 Preprocessor".
    356 
    357 ## Using BSD-style lwIP instead of Winsock TCP/IP stack in Windows builds
    358 
    359 In order to compile libcurl and curl using BSD-style lwIP TCP/IP stack it is
    360 necessary to make the definition of the preprocessor symbol `USE_LWIPSOCK`
    361 visible to libcurl and curl compilation processes. To set this definition you
    362 have the following alternatives:
    363 
    364  - Modify `lib/config-win32.h`
    365  - Modify `winbuild/Makefile.vc`
    366  - Modify the "Preprocessor Definitions" in the libcurl project
    367 
    368 Note: The pre-processor settings can be found using the Visual Studio IDE
    369 under "Project -> Properties -> Configuration Properties -> C/C++ ->
    370 Preprocessor".
    371 
    372 Once that libcurl has been built with BSD-style lwIP TCP/IP stack support, in
    373 order to use it with your program it is mandatory that your program includes
    374 lwIP header file `<lwip/opt.h>` (or another lwIP header that includes this)
    375 before including any libcurl header. Your program does not need the
    376 `USE_LWIPSOCK` preprocessor definition which is for libcurl internals only.
    377 
    378 Compilation has been verified with lwIP 1.4.0.
    379 
    380 This BSD-style lwIP TCP/IP stack support must be considered experimental given
    381 that it has been verified that lwIP 1.4.0 still needs some polish, and libcurl
    382 might yet need some additional adjustment.
    383 
    384 ## Important static libcurl usage note
    385 
    386 When building an application that uses the static libcurl library on Windows,
    387 you must add `-DCURL_STATICLIB` to your `CFLAGS`. Otherwise the linker looks
    388 for dynamic import symbols.
    389 
    390 ## Legacy Windows and SSL
    391 
    392 Schannel (from Windows SSPI), is the native SSL library in Windows. However,
    393 Schannel in Windows <= XP is unable to connect to servers that no longer
    394 support the legacy handshakes and algorithms used by those versions. If you
    395 are using curl in one of those earlier versions of Windows you should choose
    396 another SSL backend such as OpenSSL.
    397 
    398 # Android
    399 
    400 When building curl for Android you can you CMake or curl's `configure` script.
    401 
    402 Before you can build curl for Android, you need to install the Android NDK
    403 first. This can be done using the SDK Manager that is part of Android Studio.
    404 Once you have installed the Android NDK, you need to figure out where it has
    405 been installed and then set up some environment variables before launching
    406 the build.
    407 
    408 Examples to compile for `aarch64` and API level 29:
    409 
    410 with CMake, where `ANDROID_NDK_HOME` points into your NDK:
    411 
    412     cmake . \
    413       -DANDROID_ABI=arm64-v8a \
    414       -DANDROID_PLATFORM=android-29 \
    415       -DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake" \
    416       -DCURL_ENABLE_SSL=OFF \
    417       -DCURL_USE_LIBPSL=OFF
    418 
    419 with `configure`, on macOS:
    420 
    421 ```bash
    422 export ANDROID_NDK_HOME=~/Library/Android/sdk/ndk/25.1.8937393 # Point into your NDK.
    423 export HOST_TAG=darwin-x86_64 # Same tag for Apple Silicon. Other OS values here: https://developer.android.com/ndk/guides/other_build_systems#overview
    424 export TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/$HOST_TAG
    425 export AR=$TOOLCHAIN/bin/llvm-ar
    426 export AS=$TOOLCHAIN/bin/llvm-as
    427 export CC=$TOOLCHAIN/bin/aarch64-linux-android29-clang
    428 export CXX=$TOOLCHAIN/bin/aarch64-linux-android29-clang++
    429 export LD=$TOOLCHAIN/bin/ld
    430 export RANLIB=$TOOLCHAIN/bin/llvm-ranlib
    431 export STRIP=$TOOLCHAIN/bin/llvm-strip
    432 ```
    433 
    434 When building on Linux or targeting other API levels or architectures, you need
    435 to adjust those variables accordingly. After that you can build curl like this:
    436 
    437     ./configure --host aarch64-linux-android --with-pic --disable-shared
    438 
    439 Note that this does not give you SSL/TLS support. If you need SSL/TLS, you
    440 have to build curl with an SSL/TLS library, e.g. OpenSSL, because it is
    441 impossible for curl to access Android's native SSL/TLS layer. To build curl
    442 for Android using OpenSSL, follow the OpenSSL build instructions and then
    443 install `libssl.a` and `libcrypto.a` to `$TOOLCHAIN/sysroot/usr/lib` and copy
    444 `include/openssl` to `$TOOLCHAIN/sysroot/usr/include`. Now you can build curl
    445 for Android using OpenSSL like this:
    446 
    447 ```bash
    448 LIBS="-lssl -lcrypto -lc++" # For OpenSSL/BoringSSL. In general, you need to the SSL/TLS layer's transitive dependencies if you are linking statically.
    449 ./configure --host aarch64-linux-android --with-pic --disable-shared --with-openssl="$TOOLCHAIN/sysroot/usr"
    450 ```
    451 
    452 # IBM i
    453 
    454 For IBM i (formerly OS/400), you can use curl in two different ways:
    455 
    456 - Natively, running in the **ILE**. The obvious use is being able to call curl
    457   from ILE C or RPG applications.
    458 - You need to build this from source. See `packages/OS400/README` for the ILE
    459   specific build instructions.
    460 - In the **PASE** environment, which runs AIX programs. curl is built as it
    461   would be on AIX.
    462 - IBM provides builds of curl in their Yum repository for PASE software.
    463 - To build from source, follow the Unix instructions.
    464 
    465 There are some additional limitations and quirks with curl on this platform;
    466 they affect both environments.
    467 
    468 ## Multi-threading notes
    469 
    470 By default, jobs in IBM i does not start with threading enabled. (Exceptions
    471 include interactive PASE sessions started by `QP2TERM` or SSH.) If you use
    472 curl in an environment without threading when options like asynchronous DNS
    473 were enabled, you get messages like:
    474 
    475 ```
    476 getaddrinfo() thread failed to start
    477 ```
    478 
    479 Do not panic. curl and your program are not broken. You can fix this by:
    480 
    481 - Set the environment variable `QIBM_MULTI_THREADED` to `Y` before starting
    482   your program. This can be done at whatever scope you feel is appropriate.
    483 - Alternatively, start the job with the `ALWMLTTHD` parameter set to `*YES`.
    484 
    485 # Cross compile
    486 
    487 Download and unpack the curl package.
    488 
    489 `cd` to the new directory. (e.g. `cd curl-7.12.3`)
    490 
    491 Set environment variables to point to the cross-compile toolchain and call
    492 configure with any options you need. Be sure and specify the `--host` and
    493 `--build` parameters at configuration time. The following script is an example
    494 of cross-compiling for the IBM 405GP PowerPC processor using the toolchain on
    495 Linux.
    496 
    497 ```bash
    498 #! /bin/sh
    499 
    500 export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin
    501 export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include"
    502 export AR=ppc_405-ar
    503 export AS=ppc_405-as
    504 export LD=ppc_405-ld
    505 export RANLIB=ppc_405-ranlib
    506 export CC=ppc_405-gcc
    507 export NM=ppc_405-nm
    508 
    509 ./configure --target=powerpc-hardhat-linux
    510     --host=powerpc-hardhat-linux
    511     --build=i586-pc-linux-gnu
    512     --prefix=/opt/hardhat/devkit/ppc/405/target/usr/local
    513     --exec-prefix=/usr/local
    514 ```
    515 
    516 The `--prefix` parameter specifies where curl gets installed. If `configure`
    517 completes successfully, do `make` and `make install` as usual.
    518 
    519 In some cases, you may be able to simplify the above commands to as little as:
    520 
    521     ./configure --host=ARCH-OS
    522 
    523 # REDUCING SIZE
    524 
    525 There are a number of configure options that can be used to reduce the size of
    526 libcurl for embedded applications where binary size is an important factor.
    527 First, be sure to set the `CFLAGS` variable when configuring with any relevant
    528 compiler optimization flags to reduce the size of the binary. For gcc, this
    529 would mean at minimum the `-Os` option, and others like the following that
    530 may be relevant in some environments: `-march=X`, `-mthumb`, `-m32`,
    531 `-mdynamic-no-pic`, `-flto`, `-fdata-sections`, `-ffunction-sections`,
    532 `-fno-unwind-tables`, `-fno-asynchronous-unwind-tables`,
    533 `-fno-record-gcc-switches`, `-fsection-anchors`, `-fno-plt`,
    534 `-Wl,--gc-sections`, `-Wl,-Bsymbolic`, `-Wl,-s`,
    535 
    536 For example, this is how to combine a few of these options:
    537 
    538     ./configure CC=gcc CFLAGS='-Os -ffunction-sections' LDFLAGS='-Wl,--gc-sections'...
    539 
    540 Note that newer compilers often produce smaller code than older versions
    541 due to improved optimization.
    542 
    543 Be sure to specify as many `--disable-` and `--without-` flags on the
    544 configure command-line as you can to disable all the libcurl features that you
    545 know your application is not going to need. Besides specifying the
    546 `--disable-PROTOCOL` flags for all the types of URLs your application do not
    547 use, here are some other flags that can reduce the size of the library by
    548 disabling support for some features (run `./configure --help` to see them all):
    549 
    550  - `--disable-aws` (cryptographic authentication)
    551  - `--disable-basic-auth` (cryptographic authentication)
    552  - `--disable-bearer-auth` (cryptographic authentication)
    553  - `--disable-digest-auth` (cryptographic authentication)
    554  - `--disable-http-auth` (all HTTP authentication)
    555  - `--disable-kerberos-auth` (cryptographic authentication)
    556  - `--disable-negotiate-auth` (cryptographic authentication)
    557  - `--disable-ntlm` (NTLM authentication)
    558  - `--disable-alt-svc` (HTTP Alt-Svc)
    559  - `--disable-ares` (the C-ARES DNS library)
    560  - `--disable-cookies` (HTTP cookies)
    561  - `--disable-dateparse` (date parsing for time conditionals)
    562  - `--disable-dnsshuffle` (internal server load spreading)
    563  - `--disable-doh` (DNS-over-HTTP)
    564  - `--disable-form-api` (POST form API)
    565  - `--disable-get-easy-options` (lookup easy options at runtime)
    566  - `--disable-headers-api` (API to access headers)
    567  - `--disable-hsts` (HTTP Strict Transport Security)
    568  - `--disable-ipv6` (IPv6)
    569  - `--disable-libcurl-option` (--libcurl C code generation support)
    570  - `--disable-manual` (--manual built-in documentation)
    571  - `--disable-mime` (MIME API)
    572  - `--disable-netrc`  (.netrc file)
    573  - `--disable-progress-meter` (graphical progress meter in library)
    574  - `--disable-proxy` (HTTP and SOCKS proxies)
    575  - `--disable-socketpair` (socketpair for asynchronous name resolving)
    576  - `--disable-threaded-resolver`  (threaded name resolver)
    577  - `--disable-tls-srp` (Secure Remote Password authentication for TLS)
    578  - `--disable-unix-sockets` (Unix sockets)
    579  - `--disable-verbose` (eliminates debugging strings and error code strings)
    580  - `--disable-versioned-symbols` (versioned symbols)
    581  - `--enable-symbol-hiding` (eliminates unneeded symbols in the shared library)
    582  - `--without-brotli` (Brotli on-the-fly decompression)
    583  - `--without-libpsl` (Public Suffix List in cookies)
    584  - `--without-nghttp2` (HTTP/2 using nghttp2)
    585  - `--without-ngtcp2` (HTTP/2 using ngtcp2)
    586  - `--without-zstd` (Zstd on-the-fly decompression)
    587  - `--without-libidn2` (internationalized domain names)
    588  - `--without-librtmp` (RTMP)
    589  - `--without-ssl` (SSL/TLS)
    590  - `--without-zlib` (gzip/deflate on-the-fly decompression)
    591 
    592 Be sure also to strip debugging symbols from your binaries after compiling
    593 using 'strip' or an option like `-s`. If space is really tight, you may be able
    594 to gain a few bytes by removing some unneeded sections of the shared library
    595 using the -R option to objcopy (e.g. the .comment section).
    596 
    597 Using these techniques it is possible to create a basic HTTP-only libcurl
    598 shared library for i386 Linux platforms that is only 137 KiB in size
    599 (as of libcurl version 8.13.0, using gcc 14.2.0).
    600 
    601 You may find that statically linking libcurl to your application results in a
    602 lower total size than dynamically linking.
    603 
    604 The curl test harness can detect the use of some, but not all, of the
    605 `--disable` statements suggested above. Use of these can cause tests relying
    606 on those features to fail. The test harness can be manually forced to skip the
    607 relevant tests by specifying certain key words on the `runtests.pl` command
    608 line. Following is a list of appropriate key words for those configure options
    609 that are not automatically detected:
    610 
    611  - `--disable-cookies`          !cookies
    612  - `--disable-dateparse`        !RETRY-AFTER !`CURLOPT_TIMECONDITION` !`CURLINFO_FILETIME` !`If-Modified-Since` !`curl_getdate` !`-z`
    613  - `--disable-libcurl-option`   !`--libcurl`
    614  - `--disable-verbose`          !verbose\ logs
    615 
    616 # Ports
    617 
    618 This is a probably incomplete list of known CPU architectures and operating
    619 systems that curl has been compiled for. If you know a system curl compiles
    620 and runs on, that is not listed, please let us know.
    621 
    622 ## 104 Operating Systems
    623 
    624     AIX, AmigaOS, Android, ArcoOS, Aros, Atari FreeMiNT, BeOS, Blackberry
    625     10, Blackberry Tablet OS, Cell OS, CheriBSD, Chrome OS, Cisco IOS,
    626     DG/UX, DR DOS, Dragonfly BSD, eCOS, FreeBSD, FreeDOS, FreeRTOS, Fuchsia,
    627     Garmin OS, Genode, Haiku, HardenedBSD, HP-UX, Hurd, IBM I, illumos,
    628     Integrity, iOS, ipadOS, IRIX, Linux, Lua RTOS, Mac OS 9, macOS, Maemo,
    629     Mbed, Meego, Micrium, MINIX, Minoca, Moblin, MorphOS, MPE/iX, MS-DOS,
    630     NCR MP-RAS, NetBSD, Netware, NextStep, Nintendo 3DS Nintendo Switch,
    631     NonStop OS, NuttX, OpenBSD, OpenStep, Orbis OS, OS/2, OS21, Plan 9,
    632     PlayStation Portable, QNX, Qubes OS, ReactOS, Redox, RISC OS, ROS,
    633     RTEMS, Sailfish OS, SCO Unix, Serenity, SINIX-Z, SkyOS, software,
    634     Solaris, Sortix, SunOS, Syllable OS, Symbian, Tizen, TPF, Tru64, tvOS,
    635     ucLinux, Ultrix, UNICOS, UnixWare, VMS, vxWorks, watchOS, Wear OS,
    636     WebOS, Wii system Wii U, Windows CE, Windows, Xbox System, Xenix, z/OS,
    637     z/TPF, z/VM, z/VSE, Zephyr
    638 
    639 ## 28 CPU Architectures
    640 
    641     Alpha, ARC, ARM, AVR32, C-SKY, CompactRISC, Elbrus, ETRAX, HP-PA, Itanium,
    642     LoongArch, m68k, m88k, MicroBlaze, MIPS, Nios, OpenRISC, POWER, PowerPC,
    643     RISC-V, s390, SH4, SPARC, Tilera, VAX, x86, Xtensa, z/arch