16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/******************************************************************************
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *   Copyright (C) 2008-2011, International Business Machines
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *   Corporation and others.  All Rights Reserved.
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *******************************************************************************
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef __PKG_GENC_H__
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define __PKG_GENC_H__
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "toolutil.h"
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/putil.h"
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "putilimp.h"
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*** Platform #defines move here ***/
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_PLATFORM_HAS_WIN32_API
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifdef __GNUC__
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define WINDOWS_WITH_GNUC
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define WINDOWS_WITH_MSVC
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !defined(WINDOWS_WITH_MSVC)
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define BUILD_DATA_WITHOUT_ASSEMBLY
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_DISABLE_OBJ_CODE /* testing */
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if defined(WINDOWS_WITH_MSVC) || U_PLATFORM_IS_LINUX_BASED
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAN_WRITE_OBJ_CODE
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_PLATFORM_HAS_WIN32_API || defined(U_ELF)
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define CAN_GENERATE_OBJECTS
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_PLATFORM == U_PF_CYGWIN || defined(CYGWINMSVC)
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define USING_CYGWIN
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * When building the data library without assembly,
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * some platforms use a single c code file for all of
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the data to generate the final data library. This can
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * increase the performance of the pkdata tool.
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_PLATFORM == U_PF_OS400
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define USE_SINGLE_CCODE_FILE
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Need to fix the file seperator character when using MinGW. */
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if defined(WINDOWS_WITH_GNUC) || defined(USING_CYGWIN)
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define PKGDATA_FILE_SEP_STRING "/"
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define PKGDATA_FILE_SEP_STRING U_FILE_SEP_STRING
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define LARGE_BUFFER_MAX_SIZE 2048
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SMALL_BUFFER_MAX_SIZE 512
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define SMALL_BUFFER_FLAG_NAMES 32
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define BUFFER_PADDING_SIZE 20
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** End platform defines **/
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_INTERNAL void U_EXPORT2
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprintAssemblyHeadersToStdErr(void);
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_INTERNAL UBool U_EXPORT2
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgcheckAssemblyHeaderName(const char* optAssembly);
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_INTERNAL void U_EXPORT2
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgwriteCCode(const char *filename, const char *destdir, const char *optName, const char *optFilename, char *outFilePath);
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_INTERNAL void U_EXPORT2
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgwriteAssemblyCode(const char *filename, const char *destdir, const char *optEntryPoint, const char *optFilename, char *outFilePath);
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_INTERNAL void U_EXPORT2
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgwriteObjectCode(const char *filename, const char *destdir, const char *optEntryPoint, const char *optMatchArch, const char *optFilename, char *outFilePath);
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
85