my %targets = (
    "BC-32" => {
        inherit_from     => [ "BASE_Windows" ],
        sys_id           => "WIN32",
        bn_ops           => "BN_LLONG",
        thread_scheme    => "winthreads",
        cc               => "bcc32c",
        CPP              => "cpp32 -oCON -Sc -Sr",
        defines          => add("WIN32_LEAN_AND_MEAN", "OPENSSL_SYS_WIN32",
                                "L_ENDIAN", "DSO_WIN32", "_stricmp=stricmp",
                                "_strnicmp=strnicmp", "_malloca=malloc",
                                "_freea=free", "_setmode=setmode"),
        cflags           => picker(default => add("-q -c",
                                                  threads("-tM"),
                                                  shared("-tR")),
                                   debug   => "-Od -v -vi- -D_DEBUG",
                                   release => "-O2"),
        bin_cflags       => "-tWC",
        lib_cflags       => shared("-tWD -D_WINDLL -D_DLL"),
        coutflag         => "-o",

        # -Sx isn't documented, but 'cpp32 -H -S' explains it:
        #
        # -Sx     Omit preprocessed text in output
        makedepcmd       => "cpp32 -oCON -Sx -Hp",
        makedep_scheme   => "embarcadero",

        LD               => "ilink32",
        LDFLAGS          => picker(default => "-x -Gn -q -w-dup",
                                   debug   => '-j"$(BDS)\lib\win32c\debug" ' .
                                              '-L"$(BDS)\lib\win32c\debug" -v',
                                   release => '-j"$(BDS)\lib\win32c\release" ' .
                                              '-L"$(BDS)\lib\win32c\release"'),
        bin_lflags       => "-ap -Tpe c0x32.obj wildargs.obj",
        ldoutflag        => ",",
        ldpostoutflag    => ",,",
        ld_resp_delim    => " +\n",
        ex_libs          => add(sub {
            my @ex_libs = ("import32.lib",
                           ($disabled{shared}
                            ? ($disabled{threads} ? "cw32.lib" : "cw32mt.lib")
                            : ($disabled{threads} ? "cw32i.lib" : "cw32mti.lib")));
            push @ex_libs, "ws2_32.lib" unless $disabled{sock};
            return join(" ", @ex_libs);
        }),
        AR               => "tlib",
        ARFLAGS          => "/P256 /N /u",
        ar_resp_delim    => " &\n",
        RC               => "brcc32",
        RCFLAGS          => '-i"$(BDS)\include\windows\sdk"',
        rcoutflag        => "-fo",
        shared_target    => "win-shared",
        shared_ldflag    => "-aa -Tpd c0d32.obj",
        lddefflag        => ",",
        ldresflag        => ",",
        ld_implib_rule   => 'implib -a $< $**',
        dso_scheme       => "win32",
        shared_defflag   => '',
        perl_platform    => 'Windows::cppbuilder',
        uplink_arch      => 'common',
    },
    "BC-64" => {
        inherit_from     => [ "BASE_Windows" ],
        sys_id           => "WIN64",
        bn_ops           => "BN_LLONG",
        thread_scheme    => "winthreads",
        cc               => "bcc64",
        CPP              => "cpp64 -oCON -Sc -Sr",
        defines          => add("WIN32_LEAN_AND_MEAN", "OPENSSL_SYS_WIN64",
                                "L_ENDIAN", "DSO_WIN32", "_stricmp=stricmp",
                                "_strnicmp=strnicmp", "_setmode=setmode"),
        cflags           => picker(default => add("-q -c",
                                                  threads("-tM"),
                                                  shared("-tR")),
                                   debug   => "-Od -v -vi- -D_DEBUG",
                                   release => "-O2"),
        bin_cflags       => "-tWC",
        lib_cflags       => shared("-tWD -D_WINDLL -D_DLL"),
        coutflag         => "-o",

        # -Sx isn't documented, but 'cpp64 -H -S' explains it:
        #
        # -Sx     Omit preprocessed text in output
        makedepcmd       => "cpp64 -oCON -Sx -Hp",
        makedep_scheme   => "embarcadero",

        LD               => "ilink64",
        LDFLAGS          => picker(default => "-x -Gn -q -w-dup",
                                   debug   => '-j"$(BDS)\lib\win64\debug" ' .
                                              '-L"$(BDS)\lib\win64\debug" -v',
                                   release => '-j"$(BDS)\lib\win64\release" ' .
                                              '-L"$(BDS)\lib\win64\release"'),
        bin_lflags       => "-ap -Tpe c0x64.o wildargs.o",
        ldoutflag        => ",",
        ldpostoutflag    => ",,",
        ld_resp_delim    => " +\n",
        ex_libs          => add(sub {
            my @ex_libs = ("import64.a",
                           ($disabled{shared}
                            ? ($disabled{threads} ? "cw64.a" : "cw64mt.a")
                            : ($disabled{threads} ? "cw64i.a" : "cw64mti.a")));
            push @ex_libs, "ws2_32.a" unless $disabled{sock};
            return join(" ", @ex_libs);
        }),
        AR               => "tlib",
        ARFLAGS          => "/P256 /N /u",
        ar_resp_delim    => " &\n",
        RC               => "brcc32",
        RCFLAGS          => '-i"$(BDS)\include\windows\sdk"',
        rcoutflag        => "-fo",
        shared_target    => "win-shared",
        shared_ldflag    => "-aa -Tpd c0d64.o",
        lddefflag        => ",",
        ldresflag        => ",",
        ld_implib_rule   => 'implib -a $< $**',
        dso_scheme       => "win64",
        shared_defflag   => '',
        perl_platform    => 'Windows::cppbuilder',
        uplink_arch      => 'common',
    }
);
