[cmake-developers] [PATCH] Re: Create subdirectories in Resource directory for Frameworks and Application bundle.

Bartosz Kosiorek Bartosz.Kosiorek at tomtom.com
Fri Dec 11 22:12:34 EST 2015


Thanks Ruslan.


I will update documentation with information about such option (for Xcode generator)


Is it possible to mix arm and x86 architectures also for Make generator?

I'm very interesting in that bit :-)


Best Regards

Bartosz


________________________________
From: Ruslan Baratov <ruslan_baratov at yahoo.com>
Sent: Saturday, December 12, 2015 2:15 AM
To: Bartosz Kosiorek
Cc: Clinton Stimpson; cmake-developers; Gregor Jasny
Subject: Re: [cmake-developers] [PATCH] Re: Create subdirectories in Resource directory for Frameworks and Application bundle.

On 12-Dec-15 07:26, Bartosz Kosiorek wrote:

Hi
I have updated current documentation with examples, to reflect current status of CMake in OSX/iOS support.

Such information is very useful for novice CMake developers,
and it saves an hours of digging through mailing list and websites.

This is true, totally agree.


+If user would like to build for iPhone device, it could specify::
+
+  set(CMAKE_OSX_ARCHITECTURES "armv7;armv7s;arm64")

Note that:
* you can mix simulator and device architectures here
* if more than one architecture set then `ONLY_ACTIVE_ARCH` will be set to `NO`. it is useful for install/archive stage but will slow down your development process. at least it worth to mention CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH variable usage
* I think newly created IOS_INSTALL_COMBINED should be mentioned too
* also architectures can be set using next Xcode attributes:

  set_target_properties(
      foo
      PROPERTIES
      XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] armv7
      XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] armv7
      XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] x86_64
      XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] x86_64
  )

note that to specify several architectures you need to use space as a separator (unlike CMake list):

  set_target_properties(
      foo
      PROPERTIES
      XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "armv7 arm64"
      XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "armv7 arm64"
  )

Ruslan

Best Regards
Bartosz


________________________________________
From: Clinton Stimpson <clinton at elemtech.com><mailto:clinton at elemtech.com>
Sent: Friday, December 11, 2015 10:16 PM
To: Bartosz Kosiorek
Cc: cmake-developers; Gregor Jasny
Subject: Re: Create subdirectories in Resource directory for Frameworks and Application bundle.

On Friday, December 11, 2015 08:46:56 PM Bartosz Kosiorek wrote:


Hi

To enable iOS build, I'm using following settings in CMakeLists.txt:


set(APPLE_PLATFORM "iphonesimulator")
set(CMAKE_OSX_SYSROOT
"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platf
orm/Developer/SDKs/iPhoneSimulator.sdk")


 set(CMAKE_C_FLAGS "-isysroot


${CMAKE_OSX_SYSROOT} -mios-version-min=7.0") set(CMAKE_CXX_FLAGS "-isysroot
${CMAKE_OSX_SYSROOT} -mios-version-min=7.0")
Do you think it should be documented?

Where is the good place to do so?
Maybe somewhere here:
https://cmake.org/cmake/help/v3.4/variable/CMAKE_OSX_SYSROOT.html



What do you think?



I'm thinking it'll be better to integrate that at the Modules/Platform/ level.
For example, there is code in Darwin-Clang.cmake for the -mmacosx-version-min
flag.

Perhaps iOS can be toggled with CMAKE_GENERATOR_PLATFORM.
Brad, what do you think?

Or maybe toggled with CMAKE_OSX_SYSROOT, and if the SDK is pointing to another
platform than OS X, we can switch between
-mios-version-min= and -mmacosx-version-min=

Clint




​


________________________________
From: clinton at elemtech.com<mailto:clinton at elemtech.com> <clinton at elemtech.com><mailto:clinton at elemtech.com>
Sent: Friday, December 11, 2015 8:21 PM
To: Bartosz Kosiorek
Cc: Bartosz Kosiorek; cmake-developers; Gregor Jasny
Subject: Re: [cmake-developers] Create subdirectories in Resource directory
for Frameworks and Application bundle.


----- On Dec 11, 2015, at 11:44 AM, Bartosz Kosiorek <gang65 at poczta.onet.pl><mailto:gang65 at poczta.onet.pl>
wrote:


 Hi


Because there is difference between OS X and iOS Bundles directory structure
(see: Apple specification
https://developer.apple.com/library/mac/documentation/CoreFoundation/Concep
tual/CFBundles/BundleTypes/BundleTypes.html), in trunk (In CMake 3.5)
RESOURCE property create corresponding directory structure. I have already
fix that with:
https://public.kitware.com/Bug/view.php?id=15848
Ok.  I hadn't been following all your work.
Also, I didn't see a toggle in the CMake code you sent to choose an iOS
bundle instead of OS X bundles.  How is that toggled?


So RESOURCE gives you a level of abstraction:
For OSX:
it will create "Resource" directory

For iOS it will create "flat" directory structure.

In your example "Resource" directory will be created in both cases (for OSX
and iOS).


 Which is wrong:


For OSX: it should  create "Resource" directory
For iOS it will create "flat" directory structure.

I could provide patch to fix that issue, if you agree with that.
What do you think about that?
Do you think the same should be applied to "Headers"?

I think the abstraction seems reasonable, as well as what you are proposing.
 However, I'm not an Apple guru.


 I wonder if there are other Apple experts


that can weigh in this if better feedback is needed.
Clint


Best Regards
Bartosz



2015-12-11 19:06 GMT+01:00 Clinton Stimpson
<clinton at elemtech.com<mailto:clinton at elemtech.com><mailto:clinton at elemtech.com><mailto:clinton at elemtech.com>>:


On Friday, December 11, 2015 05:01:41 PM Bartosz Kosiorek wrote:



Thanks Clint



Unfortunately MACOSX_PACKAGE_LOCATION is not working correctly with
RESOURCE


 property. For every resource which is marked as RESOURCE, will


be placed in root "Resources" directory.



The CMake code below create following directory structure for OS X:



── mul.framework

    ├── Headers -> Versions/Current/Headers
    ├── Resources -> Versions/Current/Resources
    ├── Versions
    │   ├── A
    │   │   ├── Headers
    │   │   │   └── mul.h
    │   │   ├── Modules
    │   │   │   └── module.modulemap
    │   │   ├── Resources
    │   │   │   ├── Info.plist
    │   │   │   ├── mulres.txt
    │   │   │   ├── pl.txt
    │   │   │   └── resourcefile.txt
    │   │   ├── lang
    │   │   │   └── en.txt
    │   │   └── mul
    │   └── Current -> A
    └── mul -> Versions/Current/mul




As you can see eveything which is marked as "RESOURCE" will be placed in
Versions/A/ directory My expectation will be that lang/pl.txt and
lang/en.txt should be in Resources/lang/ directory. Here is complete
directory structure:



── mul.framework

    ├── Headers -> Versions/Current/Headers
    ├── Resources -> Versions/Current/Resources
    ├── Versions
    │   ├── A
    │   │   ├── Headers
    │   │   │   └── mul.h
    │   │   ├── Modules
    │   │   │   └── module.modulemap
    │   │   ├── Resources
    │   │   │   ├── Info.plist
    │   │   │   ├── mulres.txt
    │   │   │   ├── lang
    │   │   │   │   └── pl.txt
    │   │   │   │   └── en.txt
    │   │   │   └── resourcefile.txt
    │   │   ├── lang
    │   │   │   └── en.txt
    │   │   └── mul
    │   └── Current -> A
    └── mul -> Versions/Current/mul




What do you think about that?



Here is the source code:



set_property(SOURCE module.modulemap

  PROPERTY MACOSX_PACKAGE_LOCATION "Modules")



set_property(

  SOURCE lang/en.txt lang/pl.txt
  PROPERTY MACOSX_PACKAGE_LOCATION "lang")



set(RESLIST

    mulres.txt
    lang/pl.txt
    resourcefile.txt
    )



add_library(mul SHARED

            mul.c
            mul.h
            module.modulemap
            lang/pl.txt
            lang/en.txt
            resourcefile.txt
            mulres.txt)



# Create an iOS Framework bundle
set_target_properties(mul PROPERTIES

  FRAMEWORK TRUE
  MACOSX_FRAMEWORK_IDENTIFIER org.cmake.mul
  MACOSX_FRAMEWORK_SHORT_VERSION_STRING 42
  MACOSX_FRAMEWORK_BUNDLE_VERSION 3.2.10
  XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
  PUBLIC_HEADER mul.h
  RESOURCE "${RESLIST}"

)



Here is a CMakeLists.txt that will give you the desired layout.
I also see that MACOSX_PACKAGE_LOCATION doesn't work with RESOURCE.


set_property(SOURCE module.modulemap
  PROPERTY MACOSX_PACKAGE_LOCATION "Modules")

set_property(
  SOURCE lang/pl.txt lang/en.txt
  PROPERTY MACOSX_PACKAGE_LOCATION "Resources/lang")

set(RESLIST
    mulres.txt
    resourcefile.txt
    )

add_library(mul SHARED
            mul.c
            mul.h
            module.modulemap
            lang/pl.txt
            lang/en.txt
            resourcefile.txt
            mulres.txt)

# Create an iOS Framework bundle
set_target_properties(mul PROPERTIES
  FRAMEWORK TRUE
  MACOSX_FRAMEWORK_IDENTIFIER org.cmake.mul
  MACOSX_FRAMEWORK_SHORT_VERSION_STRING 42
  MACOSX_FRAMEWORK_BUNDLE_VERSION 3.2.10
  XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer"
  PUBLIC_HEADER mul.h
  RESOURCE "${RESLIST}"
)


Now I'm wondering what does the RESOURCE target property do that
MACOSX_PACKAGE_LOCATION doesn't already support?

Clint
--

Powered by www.kitware.com<http://www.kitware.com><http://www.kitware.com><http://www.kitware.com>

Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ


Kitware offers various services to support the CMake community. For more
information on each offering, please visit:


CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html


Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake-developers





-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake-developers/attachments/20151212/f5396e10/attachment-0001.html>


More information about the cmake-developers mailing list