X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=Configurations%2FREADME;h=ecf2b7908b9b58ca2113d9f4969b70aa46c75306;hp=2faf89630b6a0942dd128e2e8dfe3b98e2263664;hb=907e95006820c84d2efe1adb2c8af8340f3ba6cc;hpb=df71f0b8247beb49338c38327079661233e46b97 diff --git a/Configurations/README b/Configurations/README index 2faf89630b..ecf2b7908b 100644 --- a/Configurations/README +++ b/Configurations/README @@ -105,8 +105,11 @@ In each table entry, the following keys are significant: string in the list is the name of the build scheme. Currently recognised build schemes are - "mk1mf" and "unixmake". Others may appear - in the future. + "mk1mf" and "unixmake" and "unified". + For the "unified" build scheme, this item + *must* be an array with the first being the + word "unified" and the second being a word + to identify the platform family. multilib => On systems that support having multiple implementations of a library (typically a @@ -126,52 +129,13 @@ In each table entry, the following keys are significant: source. The valid words are: - DES_PTR use a pointer to DES_SPtrans - rather that DES_SPtrans - directly in D_ENCRYPT. - DES_RISC1 Alternate implementations of - DES_RISC2 D_ENCRYPT for certain RISC - processors. - DES_UNROLL do not loop around calls to - D_ENCRYPT. - DES_INT have unsigned int as the - integer type for DES rather - than unsigned long. BN_LLONG use 'unsigned long long' in some bignum calculations. This has no value when SIXTY_FOUR_BIT or SIXTY_FOUR_BIT_LONG is given. - RC4_CHAR makes the basic RC4 unif of + RC4_CHAR makes the basic RC4 unit of calculation an unsigned char. - RC4_LONG makes the basic RC4 unif of - calculation an unsigned long. - RC4_INDEX go through input and output - data by indexing into them - rather than incrementing the - pointer. - RC4_CHUNK sets the chunk type to - unsigned long. - RC4_CHUNK_LL sets the chunk type to - unsigned long long. - both these chunk sizes are for - handling data in chunks on - processors that do not have - byte load/store instructions. - MD2_CHAR makes the basic MD2 unit of - calculation an unsigned char. - MD2_LONG makes the basic MD2 unit of - calculation an unsigned long. - IDEA_SHORT makes the basic IDEA unit of - calculation an unsigned short. - IDEA_LONG makes the basic IDEA unit of - calculation an unsigned long. - RC2_SHORT makes the basic RC2 unit of - calculation an unsigned short. - RC2_LONG makes the basic RC2 unit of - calculation an unsigned long. - BF_PTR use different pointer based - BF_PTR2 versions of BF_ENC. SIXTY_FOUR_BIT processor registers are 64 bits, long is 32 bits, long long is @@ -185,47 +149,48 @@ In each table entry, the following keys are significant: export vars as accessor functions. - cpuid_obj => assembler implementation of cpuid code as + cpuid_asm_src => assembler implementation of cpuid code as well as OPENSSL_cleanse(). - Default to mem_clr.o - bn_obj => assembler implementation of core bignum + Default to mem_clr.c + bn_asm_src => Assembler implementation of core bignum functions. - Defaults to bn_asm.o - ec_obj => assembler implementation of core EC + Defaults to bn_asm.c + ec_asm_src => Assembler implementation of core EC functions. - des_obj => assembler implementation of core DES + des_asm_src => Assembler implementation of core DES encryption functions. - Defaults to 'des_enc.o fcrypt_b.o' - aes_obj => assembler implementation of core AES + Defaults to 'des_enc.c fcrypt_b.c' + aes_asm_src => Assembler implementation of core AES functions. - Defaults to 'aes_core.o aes_cbc.o' - bf_obj => assembler implementation of core BF + Defaults to 'aes_core.c aes_cbc.c' + bf_asm_src => Assembler implementation of core BlowFish functions. - Defaults to 'bf_enc.o' - md5_obj => assembler implementation of core MD5 + Defaults to 'bf_enc.c' + md5_asm_src => Assembler implementation of core MD5 functions. - sha1_obj => assembler implementation of core SHA1, + sha1_asm_src => Assembler implementation of core SHA1, functions, and also possibly SHA256 and SHA512 ones. - cast_obj => assembler implementation of core BF + cast_asm_src => Assembler implementation of core CAST functions. - Defaults to 'c_enc.o' - rc4_obj => assembler implementation of core BF + Defaults to 'c_enc.c' + rc4_asm_src => Assembler implementation of core RC4 functions. - Defaults to 'rc4_enc.o rc4_skey.o' - rmd160_obj => assembler implementation of core RMD160 + Defaults to 'rc4_enc.c rc4_skey.c' + rmd160_asm_src => Assembler implementation of core RMD160 functions. - rc5_obj => assembler implementation of core RC4 + rc5_asm_src => Assembler implementation of core RC5 functions. - Defaults to 'rc5_enc.o' - wp_obj => assembler implementation of core WHIRLPOOL + Defaults to 'rc5_enc.c' + wp_asm_src => Assembler implementation of core WHIRLPOOL functions. - cmll_obj => assembler implementation of core CAMELLIA + cmll_asm_src => Assembler implementation of core CAMELLIA functions. - Defaults to 'camellia.o cmll_misc.o cmll_cbc.o' - modes_obj => assembler implementation of the - functions gcm_gmult_4bit and gcm_ghash_4bit. - engines_obj => assembler implementation of core parts of + Defaults to 'camellia.c cmll_misc.c cmll_cbc.c' + modes_asm_src => Assembler implementation of cipher modes, + currently the functions gcm_gmult_4bit and + gcm_ghash_4bit. + padlock_asm_src => Assembler implementation of core parts of the padlock engine. This is mandatory on any platform where the padlock engine might actually be built. @@ -293,4 +258,150 @@ Historically, the target configurations came in form of a string with values separated by colons. This use is deprecated. The string form looked like this: - "target" => "{cc}:{cflags}:{unistd}:{thread_cflag}:{sys_id}:{lflags}:{bn_ops}:{cpuid_obj}:{bn_obj}:{ec_obj}:{des_obj}:{aes_obj}:{bf_obj}:{md5_obj}:{sha1_obj}:{cast_obj}:{rc4_obj}:{rmd160_obj}:{rc5_obj}:{wp_obj}:{cmll_obj}:{modes_obj}:{engines_obj}:{perlasm_scheme}:{dso_scheme}:{shared_target}:{shared_cflag}:{shared_ldflag}:{shared_extension}:{ranlib}:{arflags}:{multilib}" + "target" => "{cc}:{cflags}:{unistd}:{thread_cflag}:{sys_id}:{lflags}:{bn_ops}:{cpuid_obj}:{bn_obj}:{ec_obj}:{des_obj}:{aes_obj}:{bf_obj}:{md5_obj}:{sha1_obj}:{cast_obj}:{rc4_obj}:{rmd160_obj}:{rc5_obj}:{wp_obj}:{cmll_obj}:{modes_obj}:{padlock_obj}:{perlasm_scheme}:{dso_scheme}:{shared_target}:{shared_cflag}:{shared_ldflag}:{shared_extension}:{ranlib}:{arflags}:{multilib}" + + +Build info files +================ + +The build.info files that are spread over the source tree contain the +minimum information needed to build and distribute OpenSSL. It uses a +simple and yet fairly powerful language to determine what needs to be +built, from what sources, and other relationships between files. + +For every build.info file, all file references are relative to the +directory of the build.info file for source files, and the +corresponding build directory for built files if the build tree +differs from the source tree. + +When processed, every line is processed with the perl module +Text::Template, using the delimiters "{-" and "-}". The hashes +%config and %target are passed to the perl fragments, along with +$sourcedir and $builddir, which are the locations of the source +directory for the current build.info file and the corresponding build +directory, all relative to the top of the build tree. + +To begin with, things to be built are declared by setting specific +variables: + + PROGRAMS=foo bar + LIBS=libsomething + ENGINES=libeng + SCRIPTS=myhack + EXTRA=file1 file2 + +Note that the files mentioned for PROGRAMS, LIBS and ENGINES *must* be +without extensions. The build file templates will figure them out. + +For each thing to be built, it is then possible to say what sources +they are built from: + + PROGRAMS=foo bar + SOURCE[foo]=foo.c common.c + SOURCE[bar]=bar.c extra.c common.c + +It's also possible to tell some other dependencies: + + DEPEND[foo]=libsomething + DEPEND[libbar]=libsomethingelse + +(it could be argued that 'libsomething' and 'libsomethingelse' are +source as well. However, the files given through SOURCE are expected +to be located in the source tree while files given through DEPEND are +expected to be located in the build tree) + +For some libraries, we maintain files with public symbols and their +slot in a transfer vector (important on some platforms). It can be +declared like this: + + ORDINALS[libcrypto]=crypto + +The value is not the name of the file in question, but rather the +argument to util/mkdef.pl that indicates which file to use. + +One some platforms, shared libraries come with a name that's different +from their static counterpart. That's declared as follows: + + SHARED_NAME[libfoo]=cygfoo-{- $config{shlibver} -} + +The example is from Cygwin, which has a required naming convention. + +Sometimes, it makes sense to rename an output file, for example a +library: + + RENAME[libfoo]=libbar + +That lines has "libfoo" get renamed to "libbar". While it makes no +sense at all to just have a rename like that (why not just use +"libbar" everywhere?), it does make sense when it can be used +conditionally. See a little further below for an example. + +For any file to be built, it's also possible to tell what extra +include paths the build of their source files should use: + + INCLUDE[foo]=include + +It's possible to have raw build file lines, between BEGINRAW and +ENDRAW lines as follows: + + BEGINRAW[Makefile(unix)] + haha.h: {- $builddir -}/Makefile + echo "/* haha */" > haha.h + ENDRAW[Makefile(unix)] + +The word withing square brackets is the build_file configuration item +or the build_file configuration item followed by the second word in the +build_scheme configuration item for the configured target within +parenthesis as shown above. For example, with the following relevant +configuration items: + + build_file => "build.ninja" + build_scheme => [ "unified", "unix" ] + +... these lines will be considered: + + BEGINRAW[build.ninja] + build haha.h: echo "/* haha */" > haha.h + ENDRAW[build.ninja] + + BEGINRAW[build.ninja(unix)] + build hoho.h: echo "/* hoho */" > hoho.h + ENDRAW[build.ninja(unix)] + +See the documentation further up for more information on configuration +items. + +Finally, you can have some simple conditional use of the build.info +information, looking like this: + + IF[1] + something + ELSIF[2] + something other + ELSE + something else + ENDIF + +The expression in square brackets is interpreted as a string in perl, +and will be seen as true if perl thinks it is, otherwise false. For +example, the above would have "something" used, since 1 is true. + +Together with the use of Text::Template, this can be used as +conditions based on something in the passed variables, for example: + + IF[{- $config{no_shared} -}] + LIBS=libcrypto + SOURCE[libcrypto]=... + ELSE + LIBS=libfoo + SOURCE[libfoo]=... + ENDIF + +or: + + # VMS has a cultural standard where all libraries are prefixed. + # For OpenSSL, the choice is 'ossl_' + IF[{- $config{target} =~ /^vms/ -}] + RENAME[libcrypto]=ossl_libcrypto + RENAME[libssl]=ossl_libssl + ENDIF