Commit 9fe2bb77 authored by Richard Levitte's avatar Richard Levitte
Browse files

unified build scheme: a first introduction



The "unified" build scheme revolves around small information files,
build.info, which each describe their own bit of everything that needs
to be built, using a mini-language described in Configurations/README.

The information in build.info file contain references to source files
and final result.  Object files are not mentioned at all, they are
simply from source files.  Because of this, all the *_obj items in
Configurations/*.conf are renamed to *_asm_src and the files listed
in the values are change from object files to their corresponding
source files.  For the sake of the other build schemes, Configure
generates corresponding *_obj entries in %target.

Furthermore, the "unified" build scheme supports having a build
directory tree separate from the source directry tree.

All paths in a build.info file is assumed to be relative to its
location, either within the source tree or within the build tree.

Reviewed-by: default avatarAndy Polyakov <appro@openssl.org>
parent 1d852772
Loading
Loading
Loading
Loading
+102 −101
Original line number Diff line number Diff line
%targets=(
    BASE => {
	template	=> 1,
	cpuid_obj	=> "mem_clr.o",
	bn_obj		=> "bn_asm.o",
	ec_obj		=> "",
	des_obj		=> "des_enc.o fcrypt_b.o",
	aes_obj		=> "aes_core.o aes_cbc.o",
	bf_obj		=> "bf_enc.o",
	md5_obj		=> "",
	cast_obj	=> "c_enc.o",
	rc4_obj		=> "rc4_enc.o rc4_skey.o",
	rmd160_obj	=> "",
	rc5_obj		=> "rc5_enc.o",
	wp_obj		=> "wp_block.o",
	cmll_obj	=> "camellia.o cmll_misc.o cmll_cbc.o",
	modes_obj	=> "",
	padlock_obj	=> "",
	chacha_obj	=> "chacha_enc.o",
	poly1305_obj	=> "",
	cpuid_asm_src	=> "mem_clr.c",
	bn_asm_src	=> "bn_asm.c",
	ec_asm_src	=> "",
	des_asm_src	=> "des_enc.c fcrypt_b.c",
	aes_asm_src	=> "aes_core.c aes_cbc.c",
	bf_asm_src	=> "bf_enc.c",
	md5_asm_src	=> "",
	cast_asm_src	=> "c_enc.c",
	rc4_asm_src	=> "rc4_enc.c rc4_skey.c",
	rmd160_asm_src	=> "",
	rc5_asm_src	=> "rc5_enc.c",
	wp_asm_src	=> "wp_block.c",
	cmll_asm_src	=> "camellia.c cmll_misc.c cmll_cbc.c",
	modes_asm_src	=> "",
	padlock_asm_src	=> "",
	chacha_asm_src	=> "chacha_enc.c",
	poly1305_asm_src	=> "",

	unistd		=> "<unistd.h>",
	shared_target	=> "",
@@ -25,25 +25,27 @@
	shared_ldflag	=> "",
	shared_extension	=> "",
	build_scheme	=> "unixmake",
	build_file      => "Makefile",
    },

    x86_asm => {
	template	=> 1,
	cpuid_obj	=> "x86cpuid.o",
	bn_obj		=> "bn-586.o co-586.o x86-mont.o x86-gf2m.o",
	ec_obj		=> "ecp_nistz256.o ecp_nistz256-x86.o",
	des_obj		=> "des-586.o crypt586.o",
	aes_obj		=> "aes-586.o vpaes-x86.o aesni-x86.o",
	bf_obj		=> "bf-586.o",
	md5_obj		=> "md5-586.o",
	sha1_obj	=> "sha1-586.o sha256-586.o sha512-586.o",
	rc4_obj		=> "rc4-586.o",
	rmd160_obj	=> "rmd-586.o",
	rc5_obj		=> "rc5-586.o",
	wp_obj		=> "wp_block.o wp-mmx.o",
	cmll_obj	=> "cmll-x86.o",
	modes_obj	=> "ghash-x86.o",
	padlock_obj	=> "e_padlock-x86.o"
	cpuid_asm_src	=> "x86cpuid.s",
	bn_asm_src	=> "bn-586.s co-586.s x86-mont.s x86-gf2m.s",
	ec_asm_src	=> "ecp_nistz256.c ecp_nistz256-x86.s",
	des_asm_src	=> "des-586.s crypt586.s",
	aes_asm_src	=> "aes-586.s vpaes-x86.s aesni-x86.s",
	bf_asm_src	=> "bf-586.s",
	md5_asm_src	=> "md5-586.s",
	cast_asm_src	=> "cast-586.s",
	sha1_asm_src	=> "sha1-586.s sha256-586.s sha512-586.s",
	rc4_asm_src	=> "rc4-586.s",
	rmd160_asm_src	=> "rmd-586.s",
	rc5_asm_src	=> "rc5-586.s",
	wp_asm_src	=> "wp_block.c wp-mmx.s",
	cmll_asm_src	=> "cmll-x86.s",
	modes_asm_src	=> "ghash-x86.s",
	padlock_asm_src	=> "e_padlock-x86.s",
    },
    x86_elf_asm => {
	template	=> 1,
@@ -52,120 +54,119 @@
    },
    x86_64_asm => {
	template	=> 1,
	cpuid_obj       => "x86_64cpuid.o",
	bn_obj          => "x86_64-gcc.o x86_64-mont.o x86_64-mont5.o x86_64-gf2m.o rsaz_exp.o rsaz-x86_64.o rsaz-avx2.o",
	ec_obj          => "ecp_nistz256.o ecp_nistz256-x86_64.o",
	aes_obj         => "aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o aesni-sha256-x86_64.o aesni-mb-x86_64.o",
	md5_obj         => "md5-x86_64.o",
	sha1_obj        => "sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o sha1-mb-x86_64.o sha256-mb-x86_64.o",
	rc4_obj         => "rc4-x86_64.o rc4-md5-x86_64.o",
	wp_obj          => "wp-x86_64.o",
	cmll_obj        => "cmll-x86_64.o cmll_misc.o",
	modes_obj       => "ghash-x86_64.o aesni-gcm-x86_64.o",
	padlock_obj     => "e_padlock-x86_64.o"
	cpuid_asm_src   => "x86_64cpuid.s",
	bn_asm_src      => "asm/x86_64-gcc.c x86_64-mont.s x86_64-mont5.s x86_64-gf2m.s rsaz_exp.c rsaz-x86_64.s rsaz-avx2.s",
	ec_asm_src      => "ecp_nistz256.c ecp_nistz256-x86_64.s",
	aes_asm_src     => "aes-x86_64.s vpaes-x86_64.s bsaes-x86_64.s aesni-x86_64.s aesni-sha1-x86_64.s aesni-sha256-x86_64.s aesni-mb-x86_64.s",
	md5_asm_src     => "md5-x86_64.s",
	sha1_asm_src    => "sha1-x86_64.s sha256-x86_64.s sha512-x86_64.s sha1-mb-x86_64.s sha256-mb-x86_64.s",
	rc4_asm_src     => "rc4-x86_64.s rc4-md5-x86_64.s",
	wp_asm_src      => "wp-x86_64.s",
	cmll_asm_src    => "cmll-x86_64.s cmll_misc.c",
	modes_asm_src   => "ghash-x86_64.s aesni-gcm-x86_64.s",
	padlock_asm_src => "e_padlock-x86_64.s",
    },
    ia64_asm => {
	template	=> 1,
	cpuid_obj       => "ia64cpuid.o",
	bn_obj          => "bn-ia64.o ia64-mont.o",
	aes_obj         => "aes_core.o aes_cbc.o aes-ia64.o",
	md5_obj         => "md5-ia64.o",
	sha1_obj        => "sha1-ia64.o sha256-ia64.o sha512-ia64.o",
	rc4_obj         => "rc4-ia64.o rc4_skey.o",
	modes_obj       => "ghash-ia64.o",
	cpuid_asm_src   => "ia64cpuid.s",
	bn_asm_src      => "bn-ia64.s ia64-mont.s",
	aes_asm_src     => "aes_core.c aes_cbc.c aes-ia64.s",
	md5_asm_src     => "md5-ia64.s",
	sha1_asm_src    => "sha1-ia64.s sha256-ia64.s sha512-ia64.s",
	rc4_asm_src     => "rc4-ia64.s rc4_skey.s",
	modes_asm_src   => "ghash-ia64.s",
	perlasm_scheme	=> "void"
    },
    sparcv9_asm => {
	template	=> 1,
	cpuid_obj       => "sparcv9cap.o sparccpuid.o",
	bn_obj          => "bn-sparcv9.o sparcv9-mont.o sparcv9a-mont.o vis3-mont.o sparct4-mont.o sparcv9-gf2m.o",
        ec_obj          => "ecp_nistz256.o ecp_nistz256-sparcv9.o",
	des_obj         => "des_enc-sparc.o fcrypt_b.o dest4-sparcv9.o",
	aes_obj         => "aes_core.o aes_cbc.o aes-sparcv9.o aest4-sparcv9.o",
	md5_obj         => "md5-sparcv9.o",
	sha1_obj        => "sha1-sparcv9.o sha256-sparcv9.o sha512-sparcv9.o",
	cmll_obj        => "camellia.o cmll_misc.o cmll_cbc.o cmllt4-sparcv9.o",
	modes_obj       => "ghash-sparcv9.o",
	poly1305_obj	=> "poly1305-sparcv9.o",
	cpuid_asm_src   => "sparcv9cap.s sparccpuid.s",
	bn_asm_src      => "bn-sparcv9.s sparcv9-mont.s sparcv9a-mont.s vis3-mont.s sparct4-mont.s sparcv9-gf2m.s",
        ec_asm_src      => "ecp_nistz256.c ecp_nistz256-sparcv9.s",
	des_asm_src     => "des_enc-sparc.s fcrypt_b.c dest4-sparcv9.s",
	aes_asm_src     => "aes_core.c aes_cbc.c aes-sparcv9.s aest4-sparcv9.s",
	md5_asm_src     => "md5-sparcv9.s",
	sha1_asm_src    => "sha1-sparcv9.s sha256-sparcv9.s sha512-sparcv9.s",
	cmll_asm_src    => "camellia.c cmll_misc.c cmll_cbc.c cmllt4-sparcv9.s",
	modes_asm_src   => "ghash-sparcv9.s",
	poly1305_obj	=> "poly1305-sparcv9.S",
	perlasm_scheme	=> "void"
    },
    sparcv8_asm => {
	template	=> 1,
	cpuid_obj       => "",
	bn_obj          => "sparcv8.o",
	des_obj         => "des_enc-sparc.o fcrypt_b.o",
	cpuid_asm_src   => "",
	bn_asm_src      => "sparcv8.s",
	des_asm_src     => "des_enc-sparc.s fcrypt_b.c",
	perlasm_scheme	=> "void"
    },
    alpha_asm => {
	template	=> 1,
	cpuid_obj       => "alphacpuid.o",
	bn_obj          => "bn_asm.o alpha-mont.o",
	sha1_obj        => "sha1-alpha.o",
	modes_obj       => "ghash-alpha.o",
	cpuid_asm_src   => "alphacpuid.s",
	bn_asm_src      => "bn_asm.s alpha-mont.s",
	sha1_asm_src    => "sha1-alpha.s",
	modes_asm_src   => "ghash-alpha.s",
	perlasm_scheme	=> "void"
    },
    mips32_asm => {
	template	=> 1,
	bn_obj          => "bn-mips.o mips-mont.o",
	aes_obj         => "aes_cbc.o aes-mips.o",
	sha1_obj        => "sha1-mips.o sha256-mips.o",
	bn_asm_src      => "bn-mips.s mips-mont.s",
	aes_asm_src     => "aes_cbc.c aes-mips.S",
	sha1_asm_src    => "sha1-mips.S sha256-mips.S",
    },
    mips64_asm => {
	inherit_from	=> [ "mips32_asm" ],
	template	=> 1,
	sha1_obj        => add("sha512-mips.o")
	sha1_asm_src    => add("sha512-mips.S")
    },
    s390x_asm => {
	template	=> 1,
	cpuid_obj       => "s390xcap.o s390xcpuid.o",
	bn_obj          => "bn-s390x.o s390x-mont.o s390x-gf2m.o",
	aes_obj         => "aes-s390x.o aes-ctr.o aes-xts.o",
	sha1_obj        => "sha1-s390x.o sha256-s390x.o sha512-s390x.o",
	rc4_obj         => "rc4-s390x.o",
	modes_obj       => "ghash-s390x.o",
	cpuid_asm_src   => "s390xcap.s s390xcpuid.s",
	bn_asm_src      => "bn-s390x.s s390x-mont.s s390x-gf2m.s",
	aes_asm_src     => "aes-s390x.S aes-ctr.fake aes-xts.fake",
	sha1_asm_src    => "sha1-s390x.s sha256-s390x.s sha512-s390x.s",
	rc4_asm_src     => "rc4-s390x.s",
	modes_asm_src   => "ghash-s390x.s",
    },
    armv4_asm => {
	template	=> 1,
	cpuid_obj       => "armcap.o armv4cpuid.o",
	bn_obj          => "bn_asm.o armv4-mont.o armv4-gf2m.o",
	ec_obj          => "ecp_nistz256.o ecp_nistz256-armv4.o",
	aes_obj         => "aes_cbc.o aes-armv4.o bsaes-armv7.o aesv8-armx.o",
	sha1_obj        => "sha1-armv4-large.o sha256-armv4.o sha512-armv4.o",
	modes_obj       => "ghash-armv4.o ghashv8-armx.o",
	cpuid_asm_src   => "armcap.s armv4cpuid.s",
	bn_asm_src      => "bn_asm.s armv4-mont.s armv4-gf2m.s",
	ec_asm_src      => "ecp_nistz256.c ecp_nistz256-armv4.s",
	aes_asm_src     => "aes_cbc.c aes-armv4.S bsaes-armv7.S aesv8-armx.S",
	sha1_asm_src    => "sha1-armv4-large.s sha256-armv4.s sha512-armv4.s",
	modes_asm_src   => "ghash-armv4.s ghashv8-armx.s",
	perlasm_scheme	=> "void"
    },
    aarch64_asm => {
	template	=> 1,
	cpuid_obj       => "armcap.o arm64cpuid.o mem_clr.o",
	ec_obj          => "ecp_nistz256.o ecp_nistz256-armv8.o",
	bn_obj          => "bn_asm.o armv8-mont.o",
	aes_obj         => "aes_core.o aes_cbc.o aesv8-armx.o vpaes-armv8.o",
	sha1_obj        => "sha1-armv8.o sha256-armv8.o sha512-armv8.o",
	modes_obj       => "ghashv8-armx.o",
	cpuid_asm_src   => "armcap.s arm64cpuid.s mem_clr.s",
	ec_asm_src      => "ecp_nistz256.c ecp_nistz256-armv8.s",
	bn_asm_src      => "bn_asm.s armv8-mont.s",
	aes_asm_src     => "aes_core.s aes_cbc.s aesv8-armx.s vpaes-armv8.s",
	sha1_asm_src    => "sha1-armv8.s sha256-armv8.s sha512-armv8.s",
	modes_asm_src   => "ghashv8-armx.s",
    },
    parisc11_asm => {
	template	=> 1,
	cpuid_obj       => "pariscid.o",
	bn_obj          => "bn_asm.o parisc-mont.o",
	aes_obj         => "aes_core.o aes_cbc.o aes-parisc.o",
	sha1_obj        => "sha1-parisc.o sha256-parisc.o sha512-parisc.o",
	rc4_obj         => "rc4-parisc.o",
	modes_obj       => "ghash-parisc.o",
	cpuid_asm_src   => "pariscid.s",
	bn_asm_src      => "bn_asm.s parisc-mont.s",
	aes_asm_src     => "aes_core.c aes_cbc.c aes-parisc.s",
	sha1_asm_src    => "sha1-parisc.s sha256-parisc.s sha512-parisc.s",
	rc4_asm_src     => "rc4-parisc.s",
	modes_asm_src   => "ghash-parisc.s",
	perlasm_scheme	=> "32"
    },
    parisc20_64_asm => {
	template	=> 1,
	inherit_from	=> [ "parisc11_asm" ],
	bn_obj          => sub { my $r=join(" ",@_); $r=~s/bn_asm/pa-risc2W/; $r; },
	perlasm_scheme	=> "64",
    },
    ppc64_asm => {
	template	=> 1,
	cpuid_obj       => "ppccpuid.o ppccap.o",
	bn_obj          => "bn-ppc.o ppc-mont.o ppc64-mont.o",
	aes_obj         => "aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o aesp8-ppc.o",
	sha1_obj        => "sha1-ppc.o sha256-ppc.o sha512-ppc.o sha256p8-ppc.o sha512p8-ppc.o",
	modes_obj       => "ghashp8-ppc.o",
	cpuid_asm_src   => "ppccpuid.s ppccap.s",
	bn_asm_src      => "bn-ppc.s ppc-mont.s ppc64-mont.s",
	aes_asm_src     => "aes_core.c aes_cbc.c aes-ppc.s vpaes-ppc.s aesp8-ppc.s",
	sha1_asm_src    => "sha1-ppc.s sha256-ppc.s sha512-ppc.s sha256p8-ppc.s sha512p8-ppc.s",
	modes_asm_src   => "ghashp8-ppc.s",
    },
    ppc32_asm => {
	inherit_from	=> [ "ppc64_asm" ],
+14 −14
Original line number Diff line number Diff line
@@ -69,20 +69,20 @@
        thread_cflag     => "-D_REENTRANT",
        ex_libs          => "-ldl",
        bn_ops           => "BN_LLONG",
        cpuid_obj        => "x86cpuid.o",
        bn_obj           => "bn-586.o co-586.o x86-mont.o",
        des_obj          => "des-586.o crypt586.o",
        aes_obj          => "aes_x86core.o aes_cbc.o aesni-x86.o",
        bf_obj           => "bf-586.o",
        md5_obj          => "md5-586.o",
        sha1_obj         => "sha1-586.o sha256-586.o sha512-586.o",
        cast_obj         => "cast-586.o",
        rc4_obj          => "rc4-586.o",
        rmd160_obj       => "rmd-586.o",
        rc5_obj          => "rc5-586.o",
        wp_obj           => "wp_block.o wp-mmx.o",
        modes_obj        => "ghash-x86.o",
        padlock_obj      => "e_padlock-x86.o",
        cpuid_asm_src    => "x86cpuid.s",
        bn_asm_src       => "bn-586.s co-586.s x86-mont.s",
        des_asm_src      => "des-586.s crypt586.s",
        aes_asm_src      => "aes_x86core.s aes_cbc.s aesni-x86.s",
        bf_asm_src       => "bf-586.s",
        md5_asm_src      => "md5-586.s",
        sha1_asm_src     => "sha1-586.s sha256-586.s sha512-586.s",
        cast_asm_src     => "cast-586.s",
        rc4_asm_src      => "rc4-586.s",
        rmd160_asm_src   => "rmd-586.s",
        rc5_asm_src      => "rc5-586.s",
        wp_asm_src       => "wp_block.s wp-mmx.s",
        modes_asm_src    => "ghash-x86.s",
        padlock_asm_src  => "e_padlock-x86.s",
        perlasm_scheme   => "elf",
        dso_scheme       => "dlfcn",
        shared_target    => "linux-shared",
+178 −28
Original line number Diff line number Diff line
@@ -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
@@ -146,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.
        padlock_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.
@@ -255,3 +259,149 @@ 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}:{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
+598 −104

File changed.

Preview size limit exceeded, changes collapsed.

+17 −16

File changed.

Preview size limit exceeded, changes collapsed.

Loading