diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:45:59 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:45:59 +0000 |
commit | 19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch) | |
tree | 42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/civetweb/docs/Building.md | |
parent | Initial commit. (diff) | |
download | ceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.tar.xz ceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.zip |
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/civetweb/docs/Building.md')
-rw-r--r-- | src/civetweb/docs/Building.md | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/src/civetweb/docs/Building.md b/src/civetweb/docs/Building.md new file mode 100644 index 000000000..9d7b56ff7 --- /dev/null +++ b/src/civetweb/docs/Building.md @@ -0,0 +1,216 @@ +Building CivetWeb +========= + +This guide covers the build instructions for the stand-alone web server. +See [Embedding.md](https://github.com/civetweb/civetweb/blob/master/docs/Embedding.md) for information on extending an existing C or C++ application. A brief overview of the source code files can be found in [Embedding.md](https://github.com/civetweb/civetweb/blob/master/docs/Embedding.md) as well. + +#### Where to get the source code? + +The latest version can be found at +https://github.com/civetweb/civetweb + +Released versions can be found at +https://github.com/civetweb/civetweb/releases + + +Building for Windows +--------- + +#### Using Visual Studio + +Open the *VS/civetweb.sln* in Visual Studio. +To include SSL support, you may have to add an extra library for the cryptography support. You might wish to use yaSSL. However, it is GPL licensed or uses a commercial license. See [yaSSL.md](https://github.com/civetweb/civetweb/blob/master/docs/yaSSL.md) for more information. +Alternatively, you might wish to use OpenSSL. See [OpenSSL.md](https://github.com/civetweb/civetweb/blob/master/docs/OpenSSL.md) for more information. + +#### Using MinGW-w64 or TDM-GCC +In the start menu locate and run the "Run terminal" batch file. For TDM-GCC this is named "MinGW Command Prompt". +Navigate to the civetweb sources directory and run: +``` +mingw32-make CC=gcc +``` + +#### Using Qt Creator +Open the Qt Designer project in the Qt folder + +#### Using CMake +Except for the components in the `third_party` folder (e.g., Lua and Duktape), CivetWeb can also be built with CMake. +CMake can be used for all supported operating systems. + + +Building for Linux, BSD, and OSX +--------- + +## Using Make + +``` +make help +``` +Get a list of all supported make option + +``` +make build +``` +compile the code + +``` +make install +``` +Install on the system, Linux only. + +``` +make lib WITH_CPP=1 WITH_IPV6=1 +make clean slib WITH_CPP=1 WITH_LUA=1 WITH_WEBSOCKET=1 +``` +Build the static and shared libraries. +The *WITH_CPP* make option is to include the CivetServer class. +The additional make options configure the library just as it would the application. + +The *slib* option should be done on a separate clean build as position +independent code (PIC) is required for it. Trying to run it after +building the static library or the server will result in a link error. + +``` +make clean +``` +Clean up files generated during the build + +## Setting build options + +Make options can be set on the command line with the make command like so. +``` +make build WITH_LUA=1 +``` + + +| Make Options | Description | +| ------------------------- | ----------------------------------------- | +| WITH_LUA=1 | build with Lua support | +| WITH_DUKTAPE=1 | build with server-side JavaScript support | +| WITH_DEBUG=1 | build with GDB debug support | +| WITH_IPV6=1 | with IPV6 support | +| WITH_WEBSOCKET=1 | build with web socket support | +| WITH_SERVER_STATS=1 | build with support for server statistics | +| WITH_CPP=1 | build libraries with c++ classes | +| CONFIG_FILE=file | use 'file' as the config file | +| CONFIG_FILE2=file | use 'file' as the backup config file | +| HTMLDIR=/path | place to install initial web pages | +| DOCUMENT_ROOT=/path | HTMLDIR override, config option, install | +| | nothing is installed here. | +| PORTS=8080 | listening ports override when installing | +| SSL_LIB=libssl.so.0 | use versioned SSL library | +| CRYPTO_LIB=libcrypto.so.0 | system versioned CRYPTO library | +| PREFIX=/usr/local | sets the install directory | +| COPT='-DNO_SSL' | method to insert compile flags | + +Note that the WITH_* options used for *make* are not identical to the +preprocessor defines in the source code - usually USE_* is used there. + +## Changing PREFIX + +To change the target destination pass the `PREFIX` option to the command `make install` (not `make build`). Example usage: + +``` +$ make build +$ make -n install PREFIX=/opt/civetweb +``` +Note: The `-n` corresponds to the `--dry-run` option (it does not make any changes): You can see where `make install` would install. Example output of the above command: + +``` +$ make -n install PREFIX=/opt/civetweb +install -d -m 755 "/opt/civetweb/share/doc/civetweb" +install -m 644 resources/itworks.html /opt/civetweb/share/doc/civetweb/index.html +install -m 644 resources/civetweb_64x64.png /opt/civetweb/share/doc/civetweb/ +install -d -m 755 "/opt/civetweb/etc" +install -m 644 resources/civetweb.conf "/opt/civetweb/etc/" +sed -i 's#^document_root.*$#document_root /opt/civetweb/share/doc/civetweb#' "/opt/civetweb/etc/civetweb.conf" +sed -i 's#^listening_ports.*$#listening_ports 8080#' "/opt/civetweb/etc/civetweb.conf" +install -d -m 755 "/opt/civetweb/share/doc/civetweb" +install -m 644 *.md "/opt/civetweb/share/doc/civetweb" +install -d -m 755 "/opt/civetweb/bin" +install -m 755 civetweb "/opt/civetweb/bin/" +``` + +If the output looks good: Just remove the `-n` option to actually install the software on your system. + +## Setting compile flags + +Compile flags can be set using the *COPT* make option like so. +``` +make build COPT="-DNDEBUG -DNO_CGI" +``` + +| Compile Flags | Description | +| ------------------------- | ------------------------------------ | +| NDEBUG | strip off all debug code | +| DEBUG | build debug version (very noisy) | +| NO_CGI | disable CGI support | +| NO_CACHING | disable caching functionality | +| NO_SSL | disable SSL functionality | +| NO_SSL_DL | link against system libssl library | +| NO_FILES | do not serve files from a directory | +| SQLITE_DISABLE_LFS | disables large files (Lua only) | +| SSL_ALREADY_INITIALIZED | do not initialize libcrypto | + +## Cross Compiling + +Take total control with *CC*, *COPT* and *TARGET_OS* as make options. +TARGET_OS is used to determine some compile details as will as code function. +TARGET_OS values should be be one found in *resources/Makefile.in-os*. + +``` +make CC=arm-none-linux-gnueabi-gcc COPT="-march=armv7-a -mfpu=vfp -mfloat-abi=softfp" TARGET_OS=FROG +``` + +## Cocoa DMG Packaging (OSX Only) + +Use the alternate *Makefile.osx* to do the build. The entire build has +to be done using *Makefile.osx* because additional compile and link options +are required. This Makefile has all the same options as the other one plus +one additional *package* rule. + +``` +make -f Makefile.osx package +``` + +Building with Buildroot +--------- + +[Buildroot](http://buildroot.uclibc.org/) is a tool for creating cross compiled file systems. Including Civetweb in buildroot is fairly easy. There is even support for various build options. + +1. First, check if it already there. + - In buildroot, make menuconfig + - Package Selection for the target ---> + - Networking applications ---> + - civetweb +2. If not there, just add it + - copy *Config.in* and *civetweb.mk* from Civetweb's *contrib/buildroot/* to Buildroot's *package/civetweb/* directory. + - In Buildroot's *package/Config.in, insert the following line in were you will know how to find it in the menu. + > ``` source "package/civetweb/Config.in" ``` + + +Building on Android +--------- + +This is a small guide to help you run civetweb on Android, originally +tested on the HTC Wildfire. +Note: You do not need root access to run civetweb on Android. + +- Download the source from the Downloads page. +- Download the Android NDK from [http://developer.android.com/tools/sdk/ndk/index.html](http://developer.android.com/tools/sdk/ndk/index.html) +- Run `/path-to-ndk/ndk-build -C /path-to-civetweb/resources` + That should generate civetweb/lib/armeabi/civetweb +- Using the adb tool (you need to have Android SDK installed for that), + push the generated civetweb binary to `/data/local` folder on device. +- From adb shell, navigate to `/data/local` and execute `./civetweb`. +- To test if the server is running fine, visit your web-browser and + navigate to `http://127.0.0.1:8080` You should see the `Index of /` page. + + +Notes: + +- `jni` stands for Java Native Interface. Read up on Android NDK if you want + to know how to interact with the native C functions of civetweb in Android + Java applications. + + + |