Menu

Building 6.35 with Embarcadero free C++ compiler

2016-09-06
2017-01-04
1 2 > >> (Page 1 of 2)
  • Erwin Lotter

    Erwin Lotter - 2016-09-06

    Hi,

    I tried to build OWLNext 6.35 using the with free Embarcadero C++ compiler 10.1 Berlin.
    In OWLMaker I selected C++Builder 10.1, but this doesn't seem to be the right choice.
    The build fails, probably because of the command C:\BCC101\bin\rsvars.bat: There is no rsvars.bat file.
    Is there a way to build without this file?

    Erwin

     
  • Sebastian Ledesma

    Hi:

    Heres is the content of my 'rsvars.bat', you must adapt it to your installation:

    @SET BDS=C:\Program Files (x86)\Embarcadero\Studio\18.0
    @SET BDSINCLUDE=C:\Program Files (x86)\Embarcadero\Studio\18.0\include
    @SET BDSCOMMONDIR=C:\Users\Public\Documents\Embarcadero\Studio\18.0
    @SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\\v3.5
    @SET FrameworkVersion=v3.5
    @SET FrameworkSDKDir=
    @SET PATH=%FrameworkDir%;%FrameworkSDKDir%;C:\Program Files (x86)\Embarcadero\Studio\18.0\bin;C:\Program Files (x86)\Embarcadero\Studio\18.0\bin64;C:\Users\Public\Documents\Embarcadero\InterBase\redist\InterBaseXE7\redist\InterBaseXE7\IDE_spoof;%PATH%
    @SET LANGDIR=EN
    @SET PLATFORM=
    @SET PlatformSDK=
    
     
  • Vidar Hasfjord

    Vidar Hasfjord - 2016-09-06

    Erwin and Sebastian, I did some work on this a couple of weeks ago. Take a look at [feature-requests:#100].

    Note that the toolset for C++Builder/RAD Studio 10.1 Berlin in OWLMaker makes use of MSBuild and the MSBuild project file "source/owlcore/CBXE3/owl.cbproj". Unfortunately, this cannot be used for the Free C++ Compiler, since it does not come with these build tools. So I started reworking the old "bc.mak", changing it to use BCC32C rather than the old BCC32, etc. See my attachments to the ticket.

    However, work remains to be done. Since the Windows SDK is not part of the Free C++ Compiler setup, this has to be installed separately, but somehow, and preferably seamlessly, picked up by the make file, e.g. via some environment variable. Perhaps the SDK already defines an environment variable that can be assumed to exist after installation and thus used in the "bc.mak" make file to pick up the SDK location.

    Edit: It seems I overlooked the Windows SDK library files, located under "lib/win32c/release/psdk" in the Free C++ Compiler setup. So, the setup on its own may be sufficient to build OWLNext.

     

    Related

    Feature Requests: #100


    Last edit: Vidar Hasfjord 2016-09-06
  • Vidar Hasfjord

    Vidar Hasfjord - 2016-09-06

    I have now added the path to the Windows SDK libraries to my reworked "bc.mak" make file, and it now builds just fine with the Free C++ Compiler setup.

    LIBDIR = $(LIBDIR);"$(BCROOT)\lib\win32c\release\psdk"
    


    See [feature-requests:#100] for the updated patch. Here is the output from a make test, run from a Command Prompt:

    C:\OWLNext\trunk\source\owlcore>make -f bc.mak OWLVER=7.0.0 COMPVER=720 DEBUG=1 MT=1
    MAKE Version 5.41  Copyright (c) 1987, 2014 Embarcadero Technologies, Inc.
    
    SubWCRev: 'C:\OWLNext\trunk'
    Last committed at revision 3485
    Mixed revision range 3420:3485
    Local modifications found
    Unversioned items found
    Version header is up to date.
    
    LIBTARGET = ..\..\lib\owl-7.0.0-c720-x86-dt.lib
    BCCVER = 720
    OWL_VERSION = 7.0.0
    
    Embarcadero C++ 7.20 for Win32 Copyright (c) 2012-2016 Embarcadero Technologies, Inc.
    animctrl.cpp:
    appdict.cpp:
    applicat.cpp:
    [...]
    initdll.cpp:
    winmain.cpp:
    main.cpp:
            "C:\PROGRA~2\EMBARC~1\BCC101\bin\..\bin\tlib" /P2048 "..\..\lib\owl-7.0.0-c720-x86-dt.lib" @MAKE0001.@@@
    TLIB 6.4 Copyright (c) 1987-2014 Embarcadero Technologies, Inc.
    +"..\..\obj\owl-c720-x86-dt\animctrl.obj" [...]
    
     

    Related

    Feature Requests: #100

  • Erwin Lotter

    Erwin Lotter - 2016-09-07

    Hi Sebastian and Vidar,

    thanks for your help.
    What I did so far:
    a) Created 'rsvars.bat' to add bcc101\bin to %PATH%
    b) Applied patch "Support for the Embarcadero Free C++ Compiler.patch"
    This worked for bc.bat, but not for "source/owlcore/VS/OWLNext.vcxproj" since there is no source/VS path in my 6.35 installation.

    I didn't patch and build OWLMaker.

    When running OWLMaker now, I get errors like this:
    "Error bc.mak 1757: Too many rules for target 'Init'"
    for 6 targets before the build stops.

     
  • Vidar Hasfjord

    Vidar Hasfjord - 2016-09-07

    Hi Erwin,

    Yes. All you need with the new "bc.mak" provided by my patch is to have "BCC101\bin" in your path as you issue the make command on a Command Prompt, unless you specify the full path to make of course (which is what OWLMaker does, by the way).

    This worked for bc.bat, but not for "source/owlcore/VS/OWLNext.vcxproj"

    The VS project is set up to use the Microsoft C++ compiler. To make it use the Embarcadero Free C++ Compiler, you would have to do major surgery, and you would gain little.

    However, I guess you are just experimenting with OWLMaker, trying to force it to use the Free C++ Compiler. This will not work. Instead, apply my OWLMaker patch. You will then get the Free C++ Compiler in the list of toolset options, but currently only for OWLNext 7 (trunk).

    To enable the Free C++ Compiler toolset in OWLMaker for OWLNext 6.35/6.43, the OWLMaker patch will have to be updated. See "OWLMaker/Toolset.h", class TToolsetBCC32C101, member function SupportsOWLNextVersion. This function needs to be updated to make it work with 6.35 (and 6.43).

    To add official support for the Free C++ Compiler in OWLNext, someone have to be willing to create similar make files for OCFNext and the other extension libraries as well. Note that, to backport support to 6.35/6.43, the new make files will need a new name, e.g. "fc.mak", since these versions already have "bc.mak" for the classic BCC32 compiler.

     
  • Sebastian Ledesma

    I'm upgrading to C++10.1, and we use OCFNext. So I will have time to review the OCFNext project.
    We are interesed to move to Win64 bits in 2017.

     
    • Marvin

      Marvin - 2016-12-30

      Hi Sebastian,

      I am also upgrading to Berlin 10.1. I noticed in a reply to Vidar that you were able to build a new OWLNext app with it.

      How did you build your app? Following the instructions in the OWL Installation Guide, I created an OWL project and built my app, but when I execute it, I get a console window apperaing along side it. How do I get rid of this console window?

      By the way, I was unable to follow the instructions exactly because it is not possible to uncheck the Console checkbox in 10.1.

      Marvin

       
  • Vidar Hasfjord

    Vidar Hasfjord - 2016-09-07

    Hi Sebastian, note that we already support C++Builder/RAD Studio 10.1 Berlin for OWLNext 6.35, 6.43 and 7, including OCFNext and the other extension libraries. For this product, there is support for the new Clang-based compilers, including 32-bit (BCC32C) and 64-bit (BCC64) support in OWLNext 6.43 and 7. In version 6.35, there is only support for the classic 32-bit compiler (BCC32).

    Although OCFNext compiles in all these versions and for all these compilers, I have not done any further testing. I only do build tests for OCFNext, and regressions in run-time behaviour may have gone undetected. So I welcome review of OCFNext.

    As for the extension libraries, OWLExt and CoolPrj, I use them for OWLMaker, but that is so far my testing goes.

    If you want to add make files for the Embarcadero Free C++ Compiler in OCFNext and the extension libraries, I will review the changes and help with adding support in OWLMaker. If there is demand, I can also backport the changes to 6.35 and 6.43 for inclusion in a maintenance release.

     

    Last edit: Vidar Hasfjord 2016-09-08
  • Erwin Lotter

    Erwin Lotter - 2016-09-12

    Hi Vidar,
    after recalling forgotten knowledge on the make syntax I füond the reason for the make errors I got: The patch didn't replace the contents of bc.mak but added the the patch contents. (Maybe I missed something on my first explicit patch use, I executed "patch -p0 patchfile".)
    After removing the old contents, the compile started, however with new errors:

    e:\OWL635\INCLUDE\owl/control.h:98:3: error: no matching function found in local scope
    DECLARE_STREAMABLE_OWL(TControl, 2);
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    e:\OWL635\INCLUDE\owl/objstrm.h:1525:5: note: expanded from macro
    'DECLARE_STREAMABLE_OWL'
    DECLARE_STREAMABLES( cls, ver )
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    e:\OWL635\INCLUDE\owl/objstrm.h:1483:5: note: expanded from macro
    'DECLARE_STREAMABLES'
    DECLARE_STREAMERS(cls, ver ); \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
    e:\OWL635\INCLUDE\owl/objstrm.h:1289:22: note: expanded from macro
    'DECLARE_STREAMERS'
    friend void ::owl:: READVIRTUALBASE( cls );\ ^~~~~~~~~~~~~~~~~~~~~~
    e:\OWL635\INCLUDE\owl/objstrm.h:1252:31: note: expanded from macro
    'READVIRTUALBASE'
    . #define READVIRTUALBASE(cls) ReadVirtualBase( cls *, ::owl::ipstream& )

    Any idea what is wrong?

     
  • Sebastian Ledesma

    I'm not sure if related. I've installed C++10.1 on my notebook and when trying to build using OWLMaker I've noticed that the installation doesn't install by default Boost. At first time i've copied the version 1.39 from C++Builder XE but it didnt worked. I've used the GetIt Plugin manager and after that I was able to build OWLNext.

     
  • Vidar Hasfjord

    Vidar Hasfjord - 2016-09-12

    Hi Erwin,

    Sorry, I should have stated that the patch is applicable to the trunk (version 7), and is probably easiest to apply using the TortoiseSVN Apply Patch command. To backport the patch to 6.35, more work needs to be done. In particular, the makefile will need a different name, e.g "fc.mak", as I mentioned in one of my earlier replies.

    Also, the 6.35 code has not been ported to compile with the Clang-based compilers. You may need to make further changes to the code. You can search through the log for 6.43 to see what changes have been made in this regard, and you can make diffs between the versions to inspect the effective differences (the TortoiseSVN tools such as the Repository Browser is handy for stuff like this).

    PS. Why do you need support for BCC32C in 6.35? Although I see many are sticking with 6.35, this version is just meant as a stepping stone to 6.43. If there are issues stopping you from moving to 6.43, I suggest putting the effort into removing these instead.

     

    Last edit: Vidar Hasfjord 2016-09-12
  • Vidar Hasfjord

    Vidar Hasfjord - 2016-09-12

    Hi Sebastian,

    I've noticed that the [C++Builder/RAD Studio setup] doesn't install by default Boost

    I've noticed this as well with the trials I've installed. I have now added a note about this in our installation guide and FAQ.

     
  • Erwin Lotter

    Erwin Lotter - 2016-09-12

    Hi Vidar, thanks for the hints.

    ... with 6.35, this version is just meant as a stepping stone to 6.42.

    This is what I planned to do now.
    Actually I'm using 6.21. My idea was to switch to an up-to-date compiler in order to bring my application code to an acceptable state. Since I use BCC5.5 via a makefile, this step was quite easy to achive with BCC101. The plan was also to stay with 6.35 for this step for testing changes so far.
    Then, migration to 6.4x should be much easier, I guessed.

    But as the situation turned out to be, it seems that I have to change my strategy.
    I could either switch to VS (which I have only little experience with) and 6.35, then migrate to 6.4x.
    Or, I try to do both steps (BCC55 --> BCC101 and 6.21 --> 6.4x) together and switch to VS somewhen in future.

    What do you think might be easier?

     
  • Sebastian Ledesma

    Erwin:

    We switched from OWL 5 to OWLNext 6.20 8 years ago using the C++Builder 2007.
    The modifications in our code were minimal and by some time we used dual compile to keep working in BC5 and C++Builder2007. Most of those modifications were for OWL 2.x code and some signatures in members functions like GetClassName();
    By using:

    #if OWLVersion <0x0600
    OWL5 api/code
    # else
    OWL6 api /code
    #endfi
    

    we managed to mantain our code compatible for both compilers.

    After that we moved to OWLNext 6.30 first with C++Builder 2009 and later with C++Builder XE.
    I've just installed C++Builder 10.1 this saturday, builded OWLNext 6.45 and moved a first project to the new version of compiler/library. We even managed to build our first 64bit OWLNext app. The new C++/Clang compiler it's really beatifull and very valuable.

    The typical modifications to move to 6.35/6.4x is to add:

    #if OWLVersion<0x0632
    namespace owl = OWL;
    #endif
    

    in our headers and at the very first of our source code:

    using namespace owl;
    

    I know that some issues will appear, but so far the new C++Builder 10.1 it looks really good.

     

    Last edit: Sebastian Ledesma 2016-09-12
  • Vidar Hasfjord

    Vidar Hasfjord - 2016-09-12

    Hi Erwin,

    First, I think you need to decide on your modern development tools. Depending on your choice, then there are two ways to proceed.

    1. If you select Visual Studio or Embarcadero C++Builder/RAD Studio, the path forward is easy. Since you have updated your code to 6.35 already with BC++ 5.5, you can switch to any of these by just recompiling (barring other unforseen compiler differences). Then move to 6.43.
    2. If you decide to stick with the Embarcadero Free C++ Compiler (BCC32C) for further maintenance of your software, then I guess the direct jump to 6.43 is easier than trying to update 6.35 for BCC32C.

    If you are looking for the free route, note that Visual Studio Community Edition is free for open-source and small business. This is the way I went with my software. I recommend it as a good fit for anyone used to the Borland C++ IDE (integrated editor, debugger and resource editor). Try it out. It is freely available to download.

    You can also freely check out the Embarcadero option by downloading a time-limited trial.

    Hope that helps.

     

    Last edit: Vidar Hasfjord 2016-09-12
  • Vidar Hasfjord

    Vidar Hasfjord - 2016-09-12

    Hi Sebastian,

    I've just installed C++Builder 10.1 this saturday, builded OWLNext 6.45 and moved a first project to the new version of compiler/library. We even managed to build our first 64bit OWLNext app.

    Good to hear!

     
    • Marvin

      Marvin - 2016-12-29

      Hi Vidar,

      How did you build your app? I just installed the Berlin 10.1 compiler and moved my code over. Following the instructions in the OWL Installation Guide, I created an OWL project and built my app, but when I execute it, I get a console window apperaing along side it. How do I get rid of this console window?

      Marvin

       
      • Vidar Hasfjord

        Vidar Hasfjord - 2016-12-29

        Hi Marvin,

        I'm not a C++Builder user. However, in Visual Studio, the setting "Configuration Properties | Linker | System | SubSystem" controls whether or not to build a console application. For a non-console OWLNext GUI application this setting is set to "Windows (/SUBSYSTEM:WINDOWS)".

         

        Last edit: Vidar Hasfjord 2016-12-29
        • Marvin

          Marvin - 2016-12-30

          Thanks Vidar. Unfortunately, I had thought that it was you who built your "first 64-bit OWLNext app" with Berlin 10.1. But it was Sebastian.

          The Berlin 10.1 compiler does not has the same settings as Visual Studio. I will have to re-send my post to Sebastian.

          Thanks for your help anyway,
          Marvin

           
          • Erwin Lotter

            Erwin Lotter - 2017-01-04

            Hi Marvin,

            what's about opening an existing project like aclock.cbproj and then modify it?

            Erwin

             
            • Marvin

              Marvin - 2017-01-04

              Hi Erwin,

              Actually, I discovered an easier, but similar, method. I created a new project as indicated in the OWL Installation instructions. I then openned that .cbproj file and made 2 simple changes:

               <AppType>Console</AppType>   to
               <AppType>Application</AppType>
              

              and

               <ProjectType>CppConsoleApplication</ProjectType>   to
               <ProjectType>CppGuiApplication</ProjectType>
              

              Marvin

               
  • Erwin Lotter

    Erwin Lotter - 2016-09-15

    Hi Vidar, Sebastian,

    thanks again for your advise.
    Looks like I should come back to VS (I already did first steps 2 year ago with several issues left however).

     
  • Erwin Lotter

    Erwin Lotter - 2016-09-16

    Hi Vidar,

    I switched back to BCC5.5 now to complete the migration to 6.35.

    One unsolved issue is my use of TSystem::IsWin95() which I need to continue for some time. In 6.35 it is only available in OWL5 compatibility mode. I don't know what side effects will appear when I use it, so I better would create some workaround for this special case, right?
    Or what would be your suggetion?

     
  • Vidar Hasfjord

    Vidar Hasfjord - 2016-09-16

    Hi Erwin, TSystem::IsWin95 is just a wrapper for Windows API function GetVersionEx which is deprecated and may no longer work as you expect:

    GetVersionEx may be altered or unavailable for releases after Windows 8.1. Instead, use the Version Helper functions.

    Henceforth, OWLNext will no longer use this function, and there will be some changes in TSystem. See [bugs:#323], "TSystem returns incorrect information".

     

    Related

    Bugs: #323

1 2 > >> (Page 1 of 2)

Anonymous
Anonymous

Add attachments
Cancel