====== Options ======
The Synchronet builds system supports a vast array of build options most of which are only slightly supported.  This page attempts to document them for advanced users.

===== Supported Options =====
  * ''DEBUG''
    * If defined, or if ''RELEASE'' is not defined, does a debug build.
  * ''FORTIFY''
    * When combined with ''DEBUG'', will build with ''[[https://www.redhat.com/en/blog/enhance-application-security-fortifysource|_FORTIFY_SOURCE]]'' option (and enable basic optimization).
  * ''SANITIZE''
    * When combined with ''DEBUG'', will build with AddressSanitizer (ASan) and Undefined Behavior (UB) Sanitizer (not currently recommended/supported).
  * ''RELEASE''
    * If defined, does a release build (no debug information).

===== SpiderMonkey Options =====
  * ''JS_CFLAGS''
    * Extra CFLAGS for compiling against JS
  * ''JS_LDFLAGS''
    * Extra LDFLAGS for linking agsint JS
  * ''JSINCLUDE''
    * Path to JS headers
  * ''JSLIBDIR''
    * Path to JS library.
  * ''JSLIB''
    * Library name for SpiderMonkey.
  * ''EXTRA_JS_CONFIGURE_ARGS''
    * Pass these arguments IN ADDITION TO THE BUILDIN ONES to the ''configure'' command when building the included SpiderMonkey.
    * Adding ''--disable-tracejit'' is commonly needed to build JS on less common OSs/Architectures.  Please [[https://gitlab.synchro.net/main/sbbs/-/issues/new|file a bug]] if it's required.
  * ''JS_CONFIGURE_ARGS''
    * Pass to the ''configure'' command when building the included SpiderMonkey.

===== Cryptlib Options =====
  * ''CRYPTLIBINCLUDE''
    * Path to Cryptlib header files
  * ''CRYPTLIBDIR''
    * Path to Cyrptlib library
  * ''CRYPT_LIBS''
    * Library link specifier (ie: -lcl or /path/to/libcl.a)

===== SDL Options =====
  * ''USE_SDL_AUDIO''
    * Use SDL for audio only, not graphics.
  * ''WITHOUT_SDL''
    * Do not attempt to use the SDL library for anything.
  * ''SDL_CONFIG''
    * Command-line for the sdl-config utility

===== nspr4 options =====
  * ''NSPRDIR''
    * Path to the nspr4 library
  * ''NSPRINCLUDE''
    * Path to the nspr4 header files
  * ''NSPR_CFLAGS''
    * Extra CFLAGS for compiling against nspr4
  * ''NSPR_LDFLAGS''
    * Extra linker flags for linking against nspr4

===== Other Options =====
  * ''SRC_ROOT''
    * Overrides the path to the src directory.  Normally set in the makefile.
  * ''3RDP_ROOT''
    * Overrides the path to the 3rdp directory.  Normally set in the makefile.
  * ''PROFILE''
    * Generates binaries that create gprof detail files (GCC/DEBUG only)
  * ''UPROFILE''
    * Generates binaries which generate profile-driven optimizartion data (GCC/DEBUG only)
  * ''USE_UPROFILE''
    * Builds ising information generated by a ''UPROFIE'' build (RELEASE builds only)
  * ''GCOV''
    * Generates binaries that produce gcov data
  * ''DONT_CLOBBER_CC'' (Removed Fri Feb 6 23:58:56 2015 UTC - gcc no longer forced)
    * By default, the build system will force CC to be ''gcc''.  To use a different compiler, you will need to set both CC *and* this option.
  * ''OBJPATH_SUFFIX''
    * Adds the specified string to the object path.
  * ''STATIC''
    * Attempts to statically link everything.  Unlikely to work.
  * ''BUILDPATH''
    * Changes the "debug" or "release" suffix on output directories to this value.  Useful when building for multiple systems with the same machine/compiler/release options.
  * ''NO_X''
    * Prevents the use of X11.
  * ''WITHOUT_PORTAUDIO''
    * Do not attempt to support portaudio.
  * ''DONT_BLAME_SYNCHRONET''
    * Reduces the importance of security to allow rebinding of ports.  Please don't use this.

===== See Also =====
  * [[:install:nix:|install:nix index]]
